Масштабирование Ethereum: каналы состояния, Plasma и Truebit (часть 1)

layer2_0

Строительство Тунханнокского железнодорожного виадука в Пенсильвании. Древнеримские принципы строительства применяются для новых целей.

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

Ethereum всё ещё очень незрелая технология. На сегодняшний день платформа небезопасна и слабо масштабируема. Это ясно всем, кто близко знаком с её технологиями. Однако за последний год ажиотаж вокруг ICO привёл к чрезмерной загрузке сети. Ethereum и web3 – безопасный, удобный децентрализованный интернет на основе общих экономических протоколов с миллиардами пользователей — по-прежнему не более чем обещания светлого будущего, и их не исполнить, пока не будет выстроена критическая инфраструктура.

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

В этом материале речь пойдёт об одной категории таких проектов: офчейн-решениях, или решениях второго уровня.

  • Сначала мы обсудим трудности масштабирования Ethereum и других публичных блокчейнов в целом.
  • Затем мы расскажем о разных подходах к масштабированию и рассмотрим различия между решениями на уровне базового протокола и решениями второго уровня.
  • После этого мы подробно изучим решения второго уровня, объясним, как они работают, и, в частности, расскажем о каналах состояния, Plasma и Truebit.

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

1. Проблемы масштабирования публичных блокчейнов

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

Наиболее обсуждаемый из этих вопросов — это пропускная способность сети. На данный момент Ethereum может обрабатывать до 15 транзакций в секунду, в то время как Visa обрабатывает около 45 000 транзакций в секунду. В прошлом году популярность таких приложений, как Cryptokitties, или некоторых ICO становилась причиной замедления работы всей сети и роста стоимости газа.

Главное ограничение публичных блокчейнов заключается в том, что каждая транзакция должна быть обработана каждым узлом сети. Любая операция в блокчейне Ethereum — платёж, рождение криптокошечки, запуск нового контракта ERC20 — должна быть проведена параллельно каждым узлом сети. Это заложено в системе, и отчасти благодаря этому публичные блокчейны так надёжны. Узлам не приходится полагаться на кого бы то ни было, чтобы определить текущее состояние блокчейна — они вычисляют его самостоятельно.

Это накладывает фундаментальное ограничение на пропускную способность сети Ethereum: она не может быть выше пропускной способности отдельного узла.

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

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

На концептуальном уровне существует два пути решения этой проблемы:

I. Что, если узлам не нужно будет обрабатывать каждую транзакцию параллельно?

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

Фрагмент сети А может обрабатывать один ряд транзакций, а фрагмент Б — другой. Это фактически удвоит пропускную способность блокчейна. Если мы сможем разделить сеть на большое количество фрагментов, то её пропускная способность возрастёт многократно.

Именно на такой идее строится шардинг – решение проблемы масштабирования, над которым работает исследовательская группа Ethereum Виталика Бутерина. Блокчейн разделяется на фрагменты (шарды), в каждом из которых транзакции могут обрабатываться независимо от остальных фрагментов. Шардинг часто называют решением проблемы масштабирования первого уровня, так как оно должно быть внедрено на базовом уровне протокола Ethereum.

layer2scaling_1

II. Что, если сеть Ethereum способна обрабатывать большее число полезных операций при нынешней мощности?

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

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

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

layer2scaling_2

2. Криптоэкономическая природа решений второго уровня

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

Главная сила любого публичного блокчейна — это криптоэкономический консенсус. С помощью тщательно выверенных стимулов, защищённых программно и с помощью криптографии, мы можем создавать сети компьютеров, которые с высокой надёжностью приходят к соглашению о внутреннем состоянии системы. Это ключевая идея из статьи создателя Bitcoin Сатоши Накамото, и сегодня она воплощена во многих публичных блокчейнах, в том числе в Bitcoin и Ethereum.

Криптоэкономический консенсус обеспечивает твёрдую определённость того, что, если не случится ничего экстраординарного – вроде атаки 51%, – то платежи, смарт-контракты и другие операции в главном блокчейне будут выполнены как положено.

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

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

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

I. Каналы состояния

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

Большинство читателей наверняка слышали о платёжных каналах — технологии, известной вот уже несколько лет и лежащей в основе Lightning Network, недавно запущенной поверх сети Bitcoin. Каналы состояния — это более общая форма платёжных каналов: они могут использоваться не только для платежей, но и для любого произвольного обновления состояния системы — например, для внесения изменений в смарт-контракты. Каналы состояния были впервые детально описаны Джеффом Колманом в 2015 году.

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

Представьте, что Элис и Боб собираются поиграть в крестики-нолики с условием, что победитель получает 1 ETH. Самый простой способ сделать это — создать смарт-контракт Ethereum, который реализует правила игры и записывает ходы каждого игрока. Чтобы сделать ход, игрок должен отправить транзакцию в контракт. Как только один из игроков выигрывает, контракт выплачивает победителю 1 ETH.

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

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

Для начала мы создаём в основном блокчейне Ethereum смарт-контракт «Судья», который понимает правила игры и может идентифицировать Элис и Боба как двух игроков. В этом контракте хранится приз в размере 1 ETH.

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

Обратите внимание, что ни один из ходов пока ещё не был записан в блокчейн. Элис и Боб отправляли транзакции друг другу через интернет. Однако, любая из этих транзакций может быть отправлена «Судье» и это служит гарантией её действительности. Это можно представить как ситуацию, когда два человека отправляют друг другу чеки, подписанные в блокчейне. Несмотря на то что они ещё не попали в банк и состояние счетов не изменилось, на руках у обоих остаются чеки, которые они могут обналичить в любой момент.

Когда Элис и Боб закончат игру – например, потому что Элис выиграла – они смогут закрыть канал, отправив «Судье» окончательное состояние игры и заплатив комиссию только за одну транзакцию. «Судья» убедится, что окончательное состояние подписано обеими сторонами, подождёт определённое время, давая сторонам возможность оспорить результат, а затем выплатит Элис награду в 1 ETH.

Зачем в контракте «Судьи» предусмотрен период ожидания?

Представьте, что вместо того, чтобы отправить реальное окончательное состояние «Судье», Боб отправит старую версию состояния — ту, где он выигрывает у Элис. «Судья» – это просто смарт-контракт, который не может знать, прислали ли ему самое последнее состояние или нет. Период ожидания даёт Элис возможность доказать «Судье», что Боб прислал некорректное последнее состояние игры. Если существует более новое состояние, то у Элис будут копии подписанных транзакций, и она сможет предоставить их «Судье». «Судья» сможет проверить «нонс», чтобы убедиться, что версия Элис новее, и пресечь попытку Боба получить призовые путём обмана.

Особенности и ограничения

Каналы состояния могут использоваться во множестве ситуаций, когда они оказываются выгоднее ончейн-операций. Однако следует помнить, что использование каналов состояния подразумевает некоторые компромиссы.

  • Каналы состояния полагаются на постоянный контакт сторон. Если Элис потеряет интернет-соединение в период ожидания например, стараниями Боба, пытающегося заполучить награду любыми способами – она может не успеть оспорить результат до окончания игры. Однако Элис может заплатить третьей стороне за поддержание связи и состояния игры от её имени.
  • Каналы состояния особенно удобны, если участники собираются обмениваться большим количеством обновлений на протяжении длительного периода времени. Дело в том, что открытие канала состояния и создание контракта «Судьи» требуют изначальной оплаты. Однако как только они запущены, стоимость каждого обновления состояния становится очень низкой.
  • Каналы состояния лучше всего использовать в приложениях с определённым количеством участников. Это связано с тем, что «Судья» всегда должен знать, кто является участником конкретного канала. Мы можем добавлять и удалять людей, но для этого нужно вносить изменения в смарт-контракт.
  • Каналы состояния обеспечивают высокую приватность, так как взаимодействие между участниками происходит внутри канала, не транслируется публично и не записывается в блокчейн. Только открывающая и закрывающая транзакции должны быть публичными.
  • Каналы состояния гарантируют мгновенную окончательность. Это означает, что если обе стороны подписали обновление состояния, оно может считаться окончательным. Обе стороны получают гарантию того, что при необходимости они смогут подтвердить последнее состояние в блокчейне.

В компании L4, мы работаем над Counterfactual – фреймворком для внедрения каналов состояния в децентрализованных приложениях на базе Ethereum. Наше модульное решение широкого применения позволит разработчикам использовать в своих приложениях каналы состояния, не углубляясь в детали их работы. Мы собираемся выпустить подробное описание нашей техники в начале 2018 года.

Другой известный проект, использующий каналы состояния, — это Raiden. На данном этапе он сосредоточен на создании сети платёжных каналов по модели, подобной Lightning Network. Это означает, что пользователи будут открывать не множество платёжных каналов с конкретными людьми, а единственный канал со стороной, у которой есть доступ к более широкой сети каналов, что позволит проводить платёжные операции со всеми пользователями в рамках этой сети и экономить на комиссиях.

Помимо Counterfactual и Raiden, существует несколько более узконаправленных реализаций каналов состояния Ethereum. Например, Funfair разработала каналы состояния для своей децентрализованной платформы азартных игр. Spankchain применила односторонние платёжные каналы для оплаты услуг актёров в фильмах для взрослых, а также использовала каналы состояния при проведении ICO. Horizon Games использует каналы состояния в своей первой игре на базе Ethereum.

Во второй части статьи мы поговорим о ещё двух решениях проблемы масштабируемости Ethereum: Plasma и Truebit.

Продолжение следует…

Источник: Making Sense of Ethereum’s Layer 2 Scaling Solutions: State Channels, Plasma, and Truebit
По материалам: Raiden, Plasma и Truebit. Как научить Ethereum работать с миллиардами пользователей



Рубрики:Новичкам, Теория, Ethereum, эфир

Метки: , , , ,

3 replies

Trackbacks

  1. Виталик Бутерин о Биткойн-пузыре и управлении блокчейном стоимостью 125 млрд долларов — EthereumClassic
  2. Размер блокчейна Эфириума превысил 1ТБ, и да, это проблема (Часть 1) — EthereumClassic
  3. Децентрализованная финансовая система в деталях (часть 2) — EthereumClassic

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s