Primer

Introduction

Flow, блокчейн для открытых миров

Flow – высокоскоростной, децентрализованный и «дружественный» к разработчикам блокчейн, созданный в качестве основы для нового поколения игр и приложений, а также цифровых активов, обеспечивающих их работу. Flow работает на базе уникальной многоролевой архитектуры и обеспечивает масштабирование без применения шардинга, что позволяет значительно увеличить скорость и пропускную способность, сохраняя при этом «дружественную» к разработчикам среду, отвечающую требованиям ACID.

Flow позволяет разработчикам создавать успешные криптовалютные бизнесы, а с помощью приложений на Flow пользователи могут контролировать свои собственные данные, разрабатывать новые виды цифровых активов, которыми можно торговать на открытых рынках из любой точки мира, а также создавать открытые экономики, принадлежащие и развивающиеся за счет самих пользователей.

Смарт-контракты Flow собираются как кубики Lego, обеспечивая работу приложений и обслуживая миллиарды людей, начиная от баскетбольных фанатов и заканчивая компаниями, выполняющими критически важные задачи.

Ниже приведены четыре основополагающих фактора, которые отличают Flow от существующих блокчейнов:

  • Многоролевая архитектура: Уникальный дизайн Flow позволяет масштабировать сеть и обслуживать миллиарды пользователей без применения шардинга или уменьшения децентрализации консенсуса.
  • Ресурсно-ориентированное программирование:смарт-контракты Flow написаны на Cadence – простом и безопасном языке программирования для разработки крипто-активов и приложений.
  • Эргономика для разработчика: начиная от обновляемых смарт-контрактов и встроенной функции ведения журналов и заканчивая эмулятором Flow Emulator, наша сеть создана для достижения результатов.
  • Доступность для потребителя: Flow ориентирован на массового потребителя и предлагает платежные инструменты, обеспечивающие простой и безопасный переход от фиатных денег к криптовалюте.

Хотя изначально мы разрабатывали Flow под свои собственные сценарии использования, очень скоро наше детище переросло нас. Сотни разработчиков на нашем канале discord, а также тысячи разработчиков по всему миру утверждают, что мы создали нечто особенное. Давайте строить будущее вместе!

Multi-Node Architecture

В традиционном блокчейне каждая нода хранит все состояние (баланс счета, код смарт-контракта и т.д.) и выполняет всю работу, связанную с обработкой каждой транзакции внутри цепочки. Это аналогично тому, как если бы один рабочий отвечал за строительство целого автомобиля.

Конвейерный принцип – это широко известный способ повышения производительности, который применяется в самых разных областях, начиная от промышленного производства и заканчивая архитектурой процессоров. Flow использует конвейерный принцип в блокчейне и разделяет задачи полной ноды на четыре отдельные функции: Сбор, Консенсус, Исполнение и Верификация. Такое распределение задач между нодами является вертикальным (на разных этапах валидации для каждой транзакции), а не горизонтальным (между разными транзакциями как в случае с шардингом).

Иными словами, все полные ноды по-прежнему участвуют в валидации каждой транзакции, однако это происходит только на одном из этапов валидации. Таким образом, ноды могут специализироваться в выполнении своих конкретных задач, что значительно повышает их эффективность.

Это позволяет Flow достигать тысячекратного повышения пропускной способности, снижая при этом затраты и поддерживая общую среду для всех операций внутри сети. С точки зрения баз данных, смарт-контракты и пользовательские аккаунты Flow могут непрерывно взаимодействовать между собой в рамках единой транзакционной системы, отвечающей требованиям атомарности, согласованности, изолированности и стойкости (ACID). Это обеспечивает удобство использования и полную компонуемость, позволяя разработчикам легко дополнять работу друг друга.

Проблема шардинга

Большинство предложений ориентировано на повышение масштабируемости блокчейнов путем их фрагментации на взаимосвязанные сети. Как правило, это шарды, хотя для боковых цепей характерны те же проблемы. Такой подход приводит к потере гарантий сериализуемости («ACID»), распространённых в системах баз данных.

В результате потери гарантий ACID процесс создания приложений, для работы которых необходим доступ к данным в разных фрагментах, значительно усложняется и может приводить к сбоям. Взаимодействие между смарт-контрактами также очень сильно усложняется, и даже отдельным крупномасштабным приложениям в этом случае приходится прибегать к сложным механизмам масштабирования посредством шардинга в связи с проблемами задержки и более высокой частотой сбоев в выполнении транзакций. Это накладывает сильные ограничения на то, какие виды приложений могут использоваться внутри сети, а также на их сетевые эффекты. По сути, шардинг перекладывает наиболее сложную часть процесса масштабирования блокчейна на плечи разработчиков приложений вместо того, чтобы решать эту задачу на уровне протокола.

В сегментированном блокчейне для осуществления простой операции (например, покупка пользователем шляпы для CryptoKitty с использованием стейблкойнов, таких как TUSD) может потребоваться двенадцать транзакций и семь блоков. В несегментированной среде, отвечающей требованиям ACID, такой как Flow, подобная транзакия, а также многие другие более сложные операции могут обрабатываться в рамках одной атомарной транзакции в одном блоке.

Помимо дополнительных временных и финансовых затрат, это также приводит к увеличению поверхности атаки и повышению уровня сложности, так как в сегментированном блокчейне гораздо сложнее спроектировать, протестировать и усилить код смарт-контракта.

Разделение консенсуса и вычислений

Ключевая идея, которая легла в основу архитектуры Flow, заключается в том, что мы можем отделить недетерминированные процессы от детерминированных и присвоить каждый из них разным типам нод в зависимости от их технических возможностей, что позволяет значительно увеличить пропускную способность блокчейна и одновременно с этим решить ряд проблем, с которыми обычно сталкиваются пользователи и разработчики в существующих сетях. Мы пришли к выводу, что задачи в блокчейне можно разделить на две категории: 

  • Недетерминированные (или «субъективные») задачи, такие как определение наличия и порядка выполнения транзакций в блокчейне
  • Детерминированные (или «объективные») задачи, такие как вычисление результата этих упорядоченных транзакций после того, как он был определен

Для выполнения недетерминированных задач необходим согласованный консенсусный механизм (например, Proof of Work или Proof of Stake). С другой стороны, детерминированные задачи имеют только один объективно верный результат. В основе архитектуры Flow лежит важная идея, суть которой заключается в том, что самым узким местом с точки зрения производительности блокчейна являются детерминированные задачи, связанные с выполнением транзакций после того, как эти транзакции были включены в блок, в отличие от субъективного процесса, где необходим консенсус (то есть, формирование самого блока). Эта идея изложена в нашем первом техническом документе: Разделение консенсуса и вычислений.

Многоролевая архитектура Flow

В сети Flow работа майнера или валидатора блокчейна разделена на четыре отдельные функции, каждая из которых требует стейкинга – разделения ответственности, позволяющего добиться существенной оптимизации:

  • Ноды консенсуса определяют наличие и порядок проведения транзакций в блокчейне
  • Ноды верификации отвечают за проверку нод исполнения
  • Ноды исполнения выполняют вычисления по каждой транзакции
  • Ноды сбора отвечают за улучшение сетевого подключения и доступность данных для децентрализованных приложений

Flow спроектирован таким образом, что даже одна честная нода, выполняющая любую из функций, может наказывать и запускать процесс восстановления на основе недействительных данных, внесенных недобросовестными Нодами сбора или исполнения.

Ноды консенсуса и верификации отвечают за безопасность сети Flow и с помощью криптоэкономических стимулов контролируют выполнение остальной частью сети своих обязательств. Эти валидаторы могут оптимизироваться с целью обеспечения безопасности и децентрализации сети: функции консенсуса и верификации выстроены таким образом, чтобы обеспечить высокий уровень участия, в том числе и со стороны лиц, использующих оборудование потребительского уровня и домашнее подключение к Интернету. Ноды консенсуса используют вариант протокола HotStuff, одного из самых надежных алгоритмов Proof-of-stake.


Ноды сбора и исполнения, с другой стороны, выполняют полностью детерминированные задачи, что делает их менее уязвимыми для атак. Работа этих нод также проверяется, и при этом они подотчетны нодам других типов. Таким образом, функции этих нод могут оптимизироваться, обеспечивая тем самым безопасность и масштабируемость сети. Для работы этих нод требуется выделенное серверное оборудование в профессиональном дата-центре.

Специализированные доказательства конфиденциальных сведений (SPoCK)

Специализированные доказательства конфиденциальных сведений (SPoCK) – это новый криптографический метод, разработанный командой Flow и описанный в нашей Технической документации. SPoCK позволяют любому числу пруверов продемонстрировать стороннему наблюдателю то, что каждый из них имеет доступ к одной и той же конфиденциальной информации. При этом такие доказательства не являются интерактивными и не раскрывают самих конфиденциальных сведений. SPoCK каждого прувера уникален и не может быть скопирован или подделан другим прувером.

Удобство для разработчиков

Опираясь на прошлый опыт разработки блокчейн-приложений, включая CryptoKitties и кошелек Dapper Smart Contract, мы внедрили целый ряд улучшений с точки зрения эргономики для разработчиков непосредственно на уровне протокола Flow. Некоторые из таких нововведений описаны ниже.

Cadence

Cadence – первый эргономичный, ресурсо-ориентированный язык программирования смарт-контрактов.

В то время, как существующие среды программирования могут быть использованы для отслеживания права собственности на активы, обычно такие среды программирования используются в сценариях, где они всего лишьотражают право собственности, а не определяют его напрямую. Публичные блокчейны уникальны тем, что они предназначены для управления правом собственности на цифровые активы с учетом их дефицита и полного контроля доступа. Цифровые активы в публичных блокчейнах обладают теми же характеристиками, что и физические активы: их нельзя cкопировать или подделать; их можно только перемещать.

В прошлом году команда Flow изучила способы применения линейных типов в контексте блокчейнов после проведения научногоисследования,задача которого состояла в том, чтобы найти более совершенные языки для программирования смарт-контрактов. Примерно в это же время команда Libra определила новую модель программирования для Move, в основе которой лежит новая модель владения в духе линейных типов, – ресурсы. Ресурсы – это новый способ репрезентации права собственности на активы, а также свойств цифровых активов с поддержкой криптовалют непосредственно в языке программирования. Из введения к документу Move:
«Ключевой особенностью Move является возможность определения пользовательских типов ресурсов. Типы ресурсов используются для шифрования безопасных цифровых активов с широкими возможностями программирования».

Мы были очень сильно впечатлены возможностями ресурсо-ориентированного программирования, и это стало одной из определяющих характеристик Cadence, языка программирования, специально разработанного для новой парадигмы приложений с поддержкой криптовалют.

Ресурсно-ориентированное программирование – это новая парадигма, призванная обеспечить безопасность и простоту использования. Разработчики отныне смогут создавать уникальные и надежные цифровые артефакты, право собственности на которые будет отслеживаться самим языком программирования. Это позволит использовать новую категорию мощных приложений.

Cadence – первый высокоуровневый ресурсо-ориентированный язык программирования с удобным и эргономичным синтаксисом, что делает его очень легким для чтения. Он использует эффективную систему статических типов для минимизации ошибок, связанных с временем выполнения, и позволяет всем методам, интерфейсам и транзакциям включать предварительные и последующие условия для обеспечения ожидаемого поведения. Это привело к созданию языка, который является более простым с точки зрения изучении и аудита, а также гораздо более продуктивным по сравнению с любыми существующими альтернативами. Вы можете начать изучение Cadence в разделе Flow Playground: play.onflow.org

Инструменты с открытым исходным кодом

Команда Flow открыла исходный код серии инструментов, которые помогут разработчикам приступить к работе:

Flow Go SDK: Go SDK – это отличный инструмент для разработчиков, предоставляющий возможность бэкенд-интеграции с учетом масштабируемости. Go – один из самых популярных языков для бэкенд программирования для тех случаев, когда главным критерием выбора является высокая производительность. Go – излюбленный язык Dapper Labs.

Flow JavaScript SDK: язык программирования для фронтенд-разработчиков, который позволит вам легко интегрироваться и взаимодействовать с Flow. Разрабатывайте без использования ABI, выстраивайте компонуемые интеракции и создавайте децентрализованные приложения, удовлетворяющие потребности ваших пользователей. Надеемся, вам понравится работать на нашем JavaScript SDK.

Расширение Visual Studio Code : взаимодействуйте с Flow и используйте язык Cadence нативно в Visual Studio Code. Выполняйте статический анализ кода Cadence на предмет ошибок, и тестируйте смарт-контракты внутри нашей интегрированной среды разработки, отвечающей наивысшим отраслевыми стандартам.

Flow Playground GUI: среда разработки в браузере, где пользователи могут протестировать возможности и начать изучение языка смарт-контрактов Cadence без какой-либо предварительной настройки. Любой новый разработчик сможет легко начать работу с Cadence, новым мощным языком для разработки смарт-контрактов.

Предлагаемые стандарты: FT (взаимозаменяемые токены Flow) и NFT (невзаимозаменяемые токены Flow) являются эквивалентом токенов Ethereum ERC-20 и ERC-721 соответственно.

Обновляемые смарт-контракты

Одно из главных обещаний платформ для работы со смарт-контрактами состоит в том, что пользователи могут доверять коду смарт-контракта вместо того, чтобы доверять авторам смарт-контрактов. Этот аспект блокчейнов открывает новые сценария использования, которые мы только начинаем изучать. Пожалуй, самым интересным из них является концепция открытых сервисов и компонуемости.

В своем первом воплощении платформы для работы со смарт-контрактами были спроектированы таким образом, чтобы код контракта нельзя было изменить после того, как он выпущен. Это самый простой способ решения задачи. Если код не может быть изменен даже его первоначальными авторами, это означает, что вам не следует доверять этим авторам после запуска кода.

К сожалению, обеспечить правильность работы ПО с первого раза довольно-таки сложно. Существует немало примеров смарт-контрактов, которые, несмотря на участие в их создании высококвалифицированных команд и мотивированных сообществ, содержали труднонаходимые ошибки, вылившиеся в огромные потери средств.

У многих разработчиков возникло желание исправить или доработать свои смарт-контракты после их развертывания, а некоторым из них пришлось потратить немало времени и усилий, чтобы встроить в свои смарт-контракты механизм, обеспечивающий возможность обновления или миграции. Но когда каждый разработчик использует свой собственный механизм обновления, это усложняет задачу и подрывает доверие к таким смарт-контрактам.

В блокчейне Flow мы разрешаем смарт-контрактам развертываться в основной сети в «бета-версии», где первоначальные авторы могут по ходу дела обновлять свой код. Пользователи будут предупреждены о незавершенности кода и смогут дождаться его доработки, прежде чем начать доверять ему. После того, как авторы уверены в безопасности своего кода, они могут выпустить контракт, который будет неизменным в течение всего оставшегося времени.

Данная система информирует пользователей о том, с каким кодом они имеют дело, независимо от степени надежности приложения или смарт-контракта. Разработчики при этом могут дорабатывать свой код в течение ограниченного период после его поставки.

Быстрая, детерминированная финализация

С точки зрения конечных пользователей, скорость работы блокчейна измеряется временем, которое должно пройти, прежде чем они (или их клиентское программное обеспечение) могут быть уверены, что их транзакция была навсегда записана в цепочку. Обычно этот процесс называют «финализацией» или «окончательностью». В блокчейне Bitcoin большинство пользователей под окончательностью подразумевают шесть подтверждений блоков – процесс, который может занимать более одного часа. В Ethereum этот показатель был улучшен. Вероятностная окончательность достигается здесь примерно за 6 минут.

В блокчейне Flow детерминированная окончательность достигается в считанные секунды: как только Ноды консенсуса определяют, к какому блоку относится транзакция, пользовательские агенты в большинстве случаев выполняют транзакцию локально и практически мгновенно дают пользователю обратную связь. В тех случаях, когда на результаты могут влиять другие транзакции внутри сети, пользователь может либо довериться Ноде исполнения, используя современные API, обеспечивающие получение обратной связи в считанные секунды, либо дождаться, пока результаты транзакции не будут запечатаны в блокчейне, включая любые соответствующие документы, подтверждающие исполнение и верификацию. Для выполнения процесса запечатывания блоков и формального наблюдения требуется примерно 10 блоков, что составляет около десяти секунд при запуске.

Встроенная функция ведения журнала

Иногда единственный способ убедиться в том, что сложная программа работает должным образом, заключается в детальном протоколировании ее работы в течение продолжительного периода времени. Существующие платформы для работы со смарт-контрактами не предлагают инструменты для ведения журнала по той простой причине, что хранение полного журнала для всего блокчейна является непреодолимой задачей. Слишком много данных!

Flow признает тот факт, что, поскольку все транзакции смарт-контрактов полностью детерминированы, нет необходимости хранить фактические журналы для каждой отдельной транзакции внутри сети. Вместо этого Flow просто отмечает, какие транзакции могут сгенерировать запись в журнале и по каким темам. Если пользователь захочет «изучить» журналы, он сможет запросить в блокчейне данные по подмножеству транзакций с пометкой определенной темы, а затем повторно запустить эти транзакции на локальном уровне, чтобы сгенерировать эти журналы для анализа. Данный метод также позволяет значительно повысить эффективность регистрации событий.

Удобство использования

Помимо готовых к массовому использованию платежных инструментов, поддерживающих другие крипто-токены и фиатные валюты, сеть Flow позволяет легко создавать приложения, которыми люди хотят пользоваться:

Человекочитаемая система безопасности

В современных сетях приложение или программное обеспечение кошелька практически неспособно сгенерировать удобочитаемое сообщение, в котором было бы четко указано, какие разрешения предоставляются на этапе авторизации транзакции. Формат транзакций Flow обеспечивает очень надежные гарантии относительно того, какие изменения могут или не могут быть внесены транзакцией. Таким образом, кошелек может легко позаботиться о том, чтобы пользователи принимали информированные решения по тем транзакциям, которые они одобряют.

Программное обеспечение кошелька будет отображать эту информацию для пользователей, однако мы создаем возможность для более прозрачного процесса одобрения транзакций за счет упрощения статического анализа формата транзакций Flow.

Пользовательские смарт-аккаунты: seed-фразы и потерянные ключи останутся в прошлом

Блокчейн Flow спроектирован таким образом, чтобы обеспечить гибкость. За последний год Dapper Labs внедрила ряд улучшений в модель аккаунта Ethereum в рамках смарт-контрактного кошелька Dapper. Эти улучшения являются частью нативной модели аккаунта Flow:

  • Все кошельки Flow оснащены дополнительным модульным функционалом смарт-контракта
  • Данная функция обеспечивает поддержку автоматизированных процессов или более сложных элементов контроля авторизации, что, в свою очередь, обеспечивает удобство использования. Например, с помощью безопасных процессов восстановления аккаунтов децентрализованные приложения могут гарантировать, что пользователь никогда не потеряет свои активы или доступ к своему аккаунту
  • Более высокий уровень безопасности за счет дополнительной функции поддержки нескольких подписей с возможностью регулярного удаления старых ключей во избежание утечки информации

Community

Flow поддерживает идею мира открытых экосистем, мира, в котором разработчики программного обеспечения, создатели контента и потребители получают стимулы и вознаграждение в соответствии с той ценностью, которую они привносят в сеть.

Техническая архитектура Flow – это лишь один из способов обеспечения инклюзивности и участия на уровне протокола. Не менее важным фактором является евангелизация нашего сообщества и усилия по управлению сетью.

Комиссия и вознаграждение операторов нод

В блокчейне Flow операторы полных нод, поддерживающие работу сети, получают часть транзакционных сборов, которые проходят через систему, пропорционально их доле участия и объему выполненной ими работы. В отличие от майнеров или валидаторов в других блокчейнах, в сети Flow валидатор может начать работу в качестве Ноды консенсуса или верификации, используя при этом относительно недорогое оборудования и обеспечивая возможность широкого, равноправного участия и децентрализации.

В первые годы существования сети, когда размер комиссионных будет небольшим, сеть планирует выплачивать операторам нод дополнительное вознаграждение пропорционально их доле участия и объему выполненной ими работы.

Экосистема для разработчиков

Здоровая и динамичная экосистема – главный фактор долгосрочного успеха блокчейна. Одна из ключевых задач заключается в том, чтобы привлечь в Flow широкий круг заинтересованных сторон, включая не только инвесторов, но также и разработчиков и партнеров экосистемы, желающих использовать сеть для создания своих продуктов.

Помимо технического дизайна, оптимизированного для удобства и эффективности разработчиков, команда Flow предпринимает дополнительные шаги по обеспечению здоровой экосистемы:

  • Альфа-версия для разработчиков: в ближайшие месяцы заинтересованные блокчейн-разработчики смогут протестировать возможности сети Flow и дать свою обратную связь. Независимо от того, являетесь ли вы независимым энтузиастом или крупной компанией с венчурным капиталом, команда Flow будет рада узнать ваше мнение.

  • Развитие экосистемы: часть токенов Flow будет направлена на развитие экосистемы, а также на ускорение процесса принятия и вознаграждение ранних пользователей сети. Вознаграждение будет распределяться среди участников посредством различных программ, включая конкурсы, хакатоны и участие в разработке открытого исходного кода. Помимо ускорения принятия, резервирование части токенов для долгосрочного развития экосистемы также обеспечивает возможность диверсификации и децентрализации процесса участия и управления сетью, тем самым открывая глобальный доступ для широкого круга участников.

Контент-партнеры

Блокчейн предоставляет брендам и инфлюенсерам новые возможности для прямого общения со своими поклонниками. Ограниченный объем цифровых активов и истинное владение активами позволяют создать пространство для геймифицированного социального опыта, который выходит за рамки отдельных приложений и позволяет создавать экономики коллекционеров вокруг любой уникальной интеллектуальной собственности. Мы тесно сотрудничаем с независимыми специалистами-новаторами, ведущими мировыми энтертейнмент-студиями, владельцами интеллектуальной собственности и издателями, обеспечивая удовлетворение их потребностей с помощью нашей платформы.

Flow выступит в роли спонсора совета энтертейнмент-индустрии, в состав которого войдут руководители высшего звена мировых компаний-владельцев интеллектуальной собственности, создатели игр, энтертейнмент-студии и инфлюенсеры в мире культуры. Задача совета будет заключаться в том, чтобы помогать выявлять риски и новые возможности, устранять препятствия, связанные с привлечением новых потребителей, а также способствовать созданию здоровой глобальной энтертейнмент-экосистемы.

Присоединяйтесь к нашему сообществу

При поддержке нашего сообщества Flow может стать фундаментом для открытой и надежной сети Интернет для миллиардов пользователей. Мы привлекаем разработчиков, компании и амбассадоров , которые помогут нам сделать этот новый цифровой мир реальностью. Эти команды и отдельные специалисты будут работать в тесном сотрудничестве с нашей командой, получая от нас менторскую поддержку в создании устойчивых продуктов, услуг, бизнесов и сообществ на базе Flow. Если вы хотите принять участие в построении будущего в сети Flow, расскажите нам о себе.