Это вольный перевод статьи: https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4

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

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

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

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

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

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

В-третьих, мы более детально рассмотрим конкретные примеры решений второго уровня, а именно, централизованные каналы (state channels), Plasma и Truebit.

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

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

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

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

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

Существует два возможных решения данной проблемы:

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

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

К примеру, секция А обрабатывала бы одну часть транзакций, а секция В — другую. Если разделить блокчейн на множество таких секций, то скорость его работы существенно возрастет. Эта идея и положена в основу шардинга, средства масштабируемости, над которым работают Виталик Бутерин, Ethereum Research group и многие другие. Шардинг является решением первого уровня, потому что он внедряется на базовом уровне самого протокола Ethereum. Больше информации по шардингу можно найти в данном FAQ и этом посте.

II. А что если бы мы смогли видоизменить операции при сохранений текущей скорости обработки Ethereum?

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

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

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

2. Решения второго уровня в криптоэкономике

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

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

I. Централизованные каналы

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

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

Рассмотрим принцип работы этих каналов на простом примере. Предположим, Алиса и Боб играют в крестики-нолики, где победитель получает 1 eth. Наивный способ сделать это — создать смарт-контракт на Ethereum, куда вписать все правила игры и ходы противников. Каждый раз, когда кто-то ходит, необходимо отправлять данные контракту. Когда определяется победитель, контракт выплачивает ему 1 eth. Такой способ будет работать, но он медленный и неэффективный, ведь Алиса и Боб задействуют всю сеть Ethereum. Более того, когда один из игроков делает шаг, они должны ждать формирования нового блока перед тем, как сделать следующий шаг. Вместо этого, мы можем разработать систему, в которой Алиса и Боб смогут играть в крестики-нолики с минимальным количеством ончейн операций, применяя централизованный канал.

Для этого, сначала создаем смарт-контракт под названием «Судья» в блокчейне Ethereum. Данный контракт понимает правила игры, знает игроков и имеет положение о призе в 1 eth. Затем, Алиса и Боб начинают играть. Алиса создает и подписывает транзакцию, описывающую ее первый шаг, и отправляет ее Бобу, который тоже ее подписывает и отправляет назад подписанную версию, оставив себе копию. Затем Боб создает и подписывает транзакцию, описывающую его первый шаг, и отправляет ее Алисе, которая тоже подписывает транзакцию и отправляет ее назад, оставив себе копию. Так, шаг за шагом, они обновляют ход игры. Каждая транзакция содержит нонс, так что всегда можно отследить последовательность шагов.

Как мы видим, эти транзакции не записываются в основную цепь Ethereum, но вся эта информация может быть отослана контракту Судья. Когда игра закончена, Алиса и Боб просто закрывают канал подтверждением финального результата, и данные отправляются контракту Судья, при этом оплачивается проведение лишь одной транзакции. Судья проверяет, что финальный результат подписан обеими сторонами, затем делает небольшую паузу и отправляет награду в 1 eth. Данная пауза нужна для проверки отсутствия разногласия между сторонами. При наличии разногласий, используется нонс для вычисления последней версии.

При всей полезности, у централизованных каналов есть определенные ограничения и недостатки.

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

Наша команда L4 занимается разработкой среды для создания универсальных централизованных каналов для Ethereum под названием Counterfactual. Более детальная информация по проекту приведена тутRaiden является еще одним заметным проектом, работающим с централизованными каналами.

II. Plasma

11 августа 2017 Виталик Бутерин и Джозеф Пун опубликовали рабочее описание проекта под названием Plasma: Autonomous Smart Contracts.

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

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

Для понимания принципа работы Plasma, приведем простой пример. Представьте, что вы создаете карточную игру в Ethereum. В качестве карт выступают невзаимозаменяемые ERC 721 токены (как в Cryptokitties), но этими картами игроки могут сражаться друг с другом как в Hearthstone или Magic the Gathering. Выполнение таких операций на блокчейне Ethereum дорого, поэтому на помощь приходит Plasma.

Для начала создаем ряд корневых смарт-контрактов в основной сети, на основании которых мы создадим наш дочерний блокчейн. У этого дочернего блокчейна будет свой алгоритм консенсуса, например, PoA (Proof of Authority, доказательство полномочий), при котором право записи в блоки есть только у валидатора. Блоки формируются механизмом, схожим с майнингом по протоколу PoW. Для простоты примера представим, что только мы создаем новые блоки, скажем, наша компания имеет несколько нод, которые и являются валидаторами в дочернем блокчейне.

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

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

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

Безопасно ли это?

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

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

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

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

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

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

III. Truebit

Truebit — это технология, позволяющая производить сложные вычисления офф-чейн. Truebit не позволит нам совершить больше транзакций, но он позволит приложениям на Ethereum производить более сложные действия, которые будут верифицированы основной сетью. Эта технология подходит для операций, которые слишком дорого совершать на основном блокчейне. Например, при Упрощенной Проверке Платежей (SPV) из других блокчейнов смарт-контракты Ethereum могли бы проверять, что такая транзакция прошла в другой сети (например, в bitcoin или dogecoin).

Давайте рассмотрим данную технологию на примере. Представьте, что вам нужно провести некие вычисления, например, Ethereum приложение должно включать SPV. Вы не можете просто добавить такую проверку в ваш смарт-контракт на основном блокчейне потому что это требует серьезных вычислительных мощностей. Блоки в Ethereum имеют максимальный лимит газа, который устанавливает объем вычислений всех транзакций в одном блоке. Но SPV требует таких вычислительных мощностей, что даже если бы в блоке была всего одна транзакция, максимальный лимит газа оказался бы превышен в несколько раз. Вместо этого, вы просто платите небольшую комиссию солверу («решающему») для выполнения этой операции офф-чейн. Солвер перечисляет некоторые средства в качестве залога по смарт-контракту, производит вычисления и отправляет их результат. Если результат верен, то он получает свой депозит обратно. Если вычисления не были произведены правильно вследствие ошибки или злого умысла, то депозит теряется.

Для проверки правильности вычислений у Truebit предусмотрен механизм верификации (verification game). Для этого создается группа валидаторов (challenger), которые и проверяют работу солверов. Если валидатор смог доказать, что солвер совершил ошибку, то он получает вознаграждение, а солвер теряет свой депозит. Если вы хотите узнать больше о Truebit, то вы можете ознакомиться с этим документом и этой статьей.

Заключение

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

Описанные три технологии — лишь малая часть возможных средств масштабируемости в криптоэкономике. В данной статье не рассматриваются проприетарные протоколы коммуникаций между блокчейнами (inter-blockchain protocols), такие как Cosmos или Polkadot.

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

Резюме

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

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

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