Raiden, Plasma и Truebit. Как научить Ethereum работать с миллиардами пользователей

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

Источник: Trillion.media

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

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

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

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

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

В-третьих, мы углубимся в «решения второго слоя», объясним, как они работают и поговорим, в частности, о каналах состояния, Plasma и Truebit.

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

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

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

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

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

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

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

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

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

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

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

Что если сеть может быть разделена на части, которые могут работать автономно друг от друга?

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

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

Внедрение зачастую предусматривает хардфорк.

II. Что если нам удастся выжать больше полезных операций из нынешней сети Ethereum?

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

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

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

2. Оффчейн-решения — это криптоэкономические решения

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

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

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

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

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

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

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

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

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

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

Лучший способ понять, как работает канал состояния — это посмотреть на пример. Не забывайте, что это концептуальное объяснение.

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

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

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

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

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

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

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

Зачем нам нужен период ожидания?

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

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

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

Каналы состояния полагаются на доступность. Если Элис потеряет интернет-соединение в период ожидания (например, стараниями Боба, пытающегося украсть награду) она может не успеть оспорить результат и не получит 1 ETH.

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

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

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

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

В компании L4 мы работаем над Counterfactual – фреймворком для внедрения каналов состояния в децентрализованных приложениях на базе Ethereum.

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

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

II. Plasma

11 августа 2017-го года Виталик Бутерин и Джозеф Пун опубликовали статью под заголовком «Плазма: Автономные смарт-контракты». В статье рассказывалось о новой технологии, которая способна во много раз увеличить пропускную способность сети Ethereum.

Как и каналы состояния, Plasma — это офф-чейн решение, которое полагается на блокчейн Ethereum для обеспечения безопасности работы. Однако Plasma подходит к идее с другой стороны, позволяя создание «дочерних» блокчейнов, присоединенных к «материнскому» блокчейну.

Эти дочерние блокчейны, в свою очередь, могут иметь свои дочерние блокчейны и т. д.

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

Чтобы понять, как работает Plasma, давайте пробежимся по примеру применения.

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

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

Затем мы создаем наш дочерний блокчейн, который может иметь собственный алгоритм консенсуса. В этом примере представим, что он использует доказательство власти — простой консенсус-механизм, который полагается на валидаторов – производителей блоков, которым доверяют. Они фактически являются аналогами майнеров. Чтобы упростить ситуацию, представим, что вы (компания, создавшая игру) – единственное лицо, которое может создавать блоки. Таким образом, ваша компания владеет несколькими узлами, которые производят блоки дочернего блокчейна.

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

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

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

Но как это может быть безопасным?

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

Короткий ответ: даже в этом случае, когда одна организация контролирует на 100% производство блоков в дочернем блокчейне, Plasma дает гарантию, что вы всегда можете вывести свои фонды и активы назад в главный блокчейн. Если производитель блоков начнет действовать со злым умыслом, максимум, что они смогут сделать — это заставить вас покинуть дочерний блокчейн.

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

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

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

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

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

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

Также стоит отметить, что совсем необязательно, чтобы одно лицо контролировало все узлы дочернего блокчейна. Это просто крайний случай. Дочерний блокчейн можно сделать децентрализованным, как и основной блокчейн.

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

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

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

Наконец, надо добавить, что это частичное описание, не учитывающее много деталей. Кроме того, Plasma сама по себе на очень раннем этапе развития. Если вам интересно, вы можете изучить вопрос, загуглив Minimal Viable plasma, а также обратив внимание на внедрение работу OmiseGo, которые хотят использовать Plasma для своей децентрализованной биржи.

III. Truebit

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

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

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

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

Во-первых, решатель вносит депозит, который хранится в смарт-контракте. Затем вы даете решателю описание вычисления, которое вам нужно выполнить. Решатель производит вычисления и возвращает результат. Если все сделано верно, он получает депозит назад. Если он попытался обмануть систему — он теряет депозит.

Но как мы можем узнать, верен ли результат? Truebit использует экономический механизм, который называется «подтверждающей игрой». Фактически, мы создаем стимул для других сторон, которые называются «претендентами», проверять работу «решателя». Если «претенденту» удастся доказать в рамках «подтверждающей игры», что «решатель» ошибся, он получает награду, а «решатель» теряет депозит.

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

Выводы

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

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

В каналах состояния это то, как мы подтверждаем окончательное состояние канала — давая сторонам возможность опровергнуть друг друга. В Plasma это доказательства обмана и вывод активов. В Truebit — это наличие стимула для проверяющей стороны доказать, что «решатель» ошибся.

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

Это всего-навсего три примера. Мы даже не упомянули такие протоколы как Cosmos и Polkadot. Мы также должны ожидать изобретения новых и неожиданных офф-чейн систем. Эти решения — сильный аргумент в пользу долгосрочной ценности программируемых блокчейнов вроде Ethereum, так как создавать экономические механизмы, лежащие в основе офф-чейн решений возможно только тогда, когда есть возможность написать код, который будет приводить в действие интерактивные игры. Это намного сложнее в таких блокчейнах как Bitcoin.

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

По материалам: Making Sense of Ethereum’s Layer 2 Scaling Solutions: State Channels, Plasma, and Truebit

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *