Выходные игры для валидных EVM: возвращение Плазмы
Особая благодарность Карлу Флоершу, Георгиосу Константопулосу и Мартину Коппельману за отзывы, рецензии и обсуждения.
Plasma - это ряд решений для масштабирования блокчейна, которые позволяют хранить все данные и вычисления, за исключением депозитов, снятия средств и корней Меркла, вне цепи. Это позволяет добиться очень большого прироста масштабируемости, который не зависит от доступности данных на цепочке. Плазма была впервые изобретена в 2017 году, а в 2018 году появилось множество ее вариаций, в частности, Minimal Viable Plasma, Plasma Cash, Plasma Cashflow и Plasma Prime. К сожалению, с тех пор Plasma в значительной степени вытеснена роллапами по причинам, связанным в первую очередь с (i) большими затратами на хранение данных на стороне клиента и (ii) фундаментальными ограничениями Plasma, которые не позволяют обобщить ее за пределами платежей.
Появление доказательств достоверности (они же ZK-SNARK) дает нам повод переосмыслить это решение. Самая большая проблема, связанная с использованием Plasma для платежей, - хранение данных на стороне клиента - может быть эффективно решена с помощью доказательств достоверности. Кроме того, доказательства достоверности предоставляют широкий набор инструментов, позволяющих создать цепочку, подобную Plasma, которая будет работать с EVM. Гарантии безопасности Plasma не покроют всех пользователей, поскольку фундаментальные причины невозможности распространения игр с выходом в стиле Plasma на многие виды сложных приложений все еще остаются. Тем не менее, на практике очень большой процент активов может быть защищен.
В этой статье рассказывается о том, как можно расширить идеи Plasma, чтобы сделать это.
Обзор: как работает Plasma
Наиболее простым для понимания вариантом Plasma является Plasma Cash. В Plasma Cash каждая отдельная монета рассматривается как отдельный NFT, и для каждой монеты ведется отдельная история. У цепочки Plasma есть оператор, который отвечает за создание и регулярную публикацию блоков. Транзакции в каждом блоке хранятся в виде разреженного дерева Меркла: если транзакция передает право собственности на монету k
, она появляется в позиции k
дерева. Когда оператор цепочки Plasma создает новый блок, он публикует в цепочке корень дерева Меркла и напрямую рассылает каждому пользователю ветви дерева Меркла, соответствующие монетам, которыми владеет данный пользователь.
Предположим, что это три последних дерева транзакций в цепочке Plasma Cash. Тогда, предполагая, что все предыдущие деревья действительны, мы знаем, что Ева в настоящее время владеет монетой 1, Дэвид - монетой 4, а Джордж - монетой 6.
Основным риском в любой системе Plasma является неправильная работа оператора. Это может произойти двумя способами:
- Публикация недействительного блока (например, оператор включает транзакцию, отправляющую монету 1 от Фреда к Гермионе, даже если Фред не владеет этой монетой в данный момент)
- Публикация недоступного блока (например, оператор не отправляет Бобу его ветвь Меркла для одного из блоков, лишая его возможности когда-либо доказать кому-либо еще, что его монета все еще действительна и не потрачена).
Если оператор ведет себя неадекватно по отношению к активам пользователя, он обязан немедленно (в частности, в течение 7 дней) выйти из системы. Когда пользователь выходит из системы, он предоставляет ветвь Меркла, подтверждающую включение транзакции, в результате которой монета перешла от предыдущего владельца к нему. После этого начинается 7-дневный период оспаривания, в течение которого другие пользователи могут оспорить этот выход, предоставив доказательство Меркла, подтверждающее одну из трех вещей:
- Не последний владелец: более поздняя транзакция, подписанная выходящим, в результате которой монета выходящего перешла к кому-то другому
- Двойная трата: транзакция, передающая монету от предыдущего владельца другому лицу, которая была включена до транзакции, передающей монету выходящему.
- Недействительная история: транзакция, в результате которой монеты были переведены ранее (в течение последних 7 дней) и не имеет соответствующей траты. Истец может ответить, предоставив соответствующий расход; если он этого не сделает, выход завершится неудачей.
При таких правилах любой владелец монеты k
должен просмотреть все ветви Меркла позиции k
за последнюю неделю, чтобы убедиться, что он действительно владеет монетой k
и может выйти из нее. Они должны хранить все ветви, содержащие переводы актива, чтобы иметь возможность реагировать на вызовы и безопасно выходить со своей монетой.
Обобщение на взаимозаменяемые токены
Приведенная выше схема работает для NFT. Однако гораздо чаще, чем NFT, встречаются сменные токены, такие как ETH и USDC. Один из способов применить Plasma Cash к сменным токенам - это просто сделать каждый небольшой номинал монеты (например, 0,01 ETH) отдельным NFT. К сожалению, в этом случае газовые затраты на выход будут очень большими.
Одним из решений является оптимизация, при которой множество соседних монет рассматривается как одна единица, которая может быть передана или выведена вся одновременно. Это можно сделать двумя способами:
- Использовать Plasma Cash, но использовать причудливые алгоритмы для быстрого вычисления дерева Меркла для действительно большого числа объектов, если многие соседние объекты одинаковы. Сделать это на удивление несложно; python-реализацию можно посмотреть здесь.
- Используйте Plasma Cashflow, который просто представляет множество соседних монет как один объект.
Однако оба этих подхода сталкиваются с проблемой фрагментации: если вы получаете по 0,001 ETH от сотен людей, которые покупают у вас кофе, то у вас будет 0,001 ETH во многих местах дерева, и поэтому для фактического вывода этих ETH все равно потребуется представить множество отдельных выводов, что сделает плату за газ слишком большой. Протоколы дефрагментации уже существуют, но их сложно реализовать.
В качестве альтернативы можно перепроектировать систему с учетом более традиционной модели "вывода неизрасходованных транзакций" (UTXO). Когда вы выходите из монеты, вам нужно будет предоставить историю этих монет за последнюю неделю, и любой желающий сможет оспорить ваш выход, доказав, что эти монеты уже были выведены.
Вывод 0,2 ETH UTXO в правом нижнем углу можно отменить, показав вывод любого из UTXO в его истории, показанных зеленым цветом. Обратите внимание, что левый и левый средний UTXO являются предками, а левый верхний UTXO - нет. Этот подход похож на идеи раскраски по порядку из протоколов цветных монет примерно 2013 года.
Существует большое разнообразие методик, позволяющих это сделать. Во всех случаях целью является отслеживание некоторого представления о том, что такое "одна и та же монета" в разные моменты истории, чтобы предотвратить изъятие "одной и той же монеты" дважды.
Проблемы, связанные с обобщением на EVM
К сожалению, обобщение на EVM, выходящее за рамки платежей, гораздо сложнее. Одна из ключевых проблем заключается в том, что многие государственные объекты в EVM не имеют конкретного владельца. Безопасность Plasma зависит от того, что у каждого объекта есть владелец, который отвечает за то, чтобы следить за данными цепочки и выходить из нее, если что-то пойдет не так. Однако многие приложения Ethereum работают иначе. Например, пулы ликвидности Uniswap не имеют единого владельца.
Другая проблема заключается в том, что EVM не пытается ограничить зависимости. ETH, находящийся на счете A в блоке N, мог поступить из любого места в блоке N-1. Для того чтобы выйти из непротиворечивого состояния, в плазменной цепи EVM необходимо создать игру выхода, в которой, в крайнем случае, желающему выйти, используя информацию из блока N, придется заплатить за публикацию всего состояния блока N в цепи: стоимость газа может исчисляться миллионами долларов. Плазменные схемы на основе UTXO не имеют такой проблемы: каждый пользователь может вывести свои активы из того блока, данные о котором у него есть.
Третья проблема заключается в том, что неограниченные зависимости в EVM значительно затрудняют согласование стимулов для доказательства достоверности. Достоверность любого состояния зависит от всех остальных, и поэтому для доказательства какого-либо одного состояния требуется доказать все. Сортировка отказов в такой ситуации, как правило, не может быть сделана совместимой со стимулами из-за проблемы доступности данных. Особенно неприятной проблемой является потеря гарантии, присутствующей в системах на основе UTXO, что состояние объекта не может измениться без согласия его владельца. Эта гарантия невероятно полезна, поскольку означает, что владелец всегда знает о последнем доказуемом состоянии своих активов, и упрощает проведение игр на выбывание. Без нее создание игр становится гораздо сложнее.
Как доказательства действительности могут решить многие из этих проблем
Самое основное, что могут сделать доказательства действительности для улучшения системы цепочек Plasma, - это доказать достоверность каждого блока Plasma в цепочке. Это значительно упрощает пространство проектирования: это означает, что единственная атака со стороны оператора, о которой мы должны беспокоиться, - это недоступные блоки, а не недействительные блоки. В Plasma Cash, например, это устраняет необходимость беспокоиться о проблемах с историей. Это позволяет сократить количество состояний, которые необходимо загрузить пользователю, с одной ветки на блок за последнюю неделю до одной ветки на актив.
Кроме того, снятие средств из самого последнего состояния (в обычном случае, когда оператор честен, все снятия будут производиться из самого последнего состояния) не подлежит проверке на отсутствие последнего владельца, и поэтому в цепочке Plasma с подтвержденной достоверностью такие снятия вообще не будут подвергаться проверке. Это означает, что в обычном случае снятие средств может быть мгновенным!
Расширение на EVM: параллельные UTXO-графы
В случае EVM доказательства достоверности также позволяют нам сделать кое-что умное: с их помощью можно реализовать параллельный UTXO-граф для токенов ETH и ERC20 и SNARK-доказать эквивалентность между UTXO-графом и состоянием EVM. Получив это, можно реализовать "обычную" систему Plasma на графе UTXO.
Это позволяет нам избежать многих сложностей, связанных с EVM. Например, тот факт, что в системе, основанной на счетах, кто-то может редактировать ваш счет без вашего согласия (посылая ему монеты и тем самым увеличивая его баланс), не имеет значения, поскольку конструкция Plasma строится не над самим состоянием EVM, а над состоянием UTXO, которое живет параллельно с EVM, где любые получаемые вами монеты будут отдельными объектами.
Расширение на EVM: полный выход из состояния
Предлагались и более простые схемы создания "плазменного EVM", например, Plasma Free, а до этого - вот этот пост от 2019 года. В этих схемах любой желающий может послать сообщение на L1, чтобы заставить оператора либо включить транзакцию, либо сделать доступной определенную ветвь состояния. Если оператор этого не делает, цепочка начинает реверсировать блоки. Цепочка прекращает реверсировать блоки, как только кто-то размещает полную копию либо всего состояния, либо, по крайней мере, всех данных, которые пользователи отметили как потенциально отсутствующие. Для вывода данных может потребоваться объявление вознаграждения, которое будет оплачивать долю пользователя в газовых расходах, связанных с размещением такого большого объема данных.
Недостатком подобных схем является то, что они не позволяют мгновенно снимать деньги в обычном случае, поскольку всегда существует вероятность того, что цепочке потребуется вернуть последнее состояние.
Пределы плазменных схем ЭВМ
Подобные схемы являются мощными, но НЕ могут обеспечить полные гарантии безопасности для всех пользователей. Наиболее ярко они проявляются в ситуациях, когда у конкретного государственного объекта нет четкого экономического "владельца".
Рассмотрим случай CDP - смарт-контракта, в котором пользователь имеет монеты, которые заблокированы и могут быть освобождены только после того, как пользователь выплатит свой долг. Предположим, что пользователь имеет 1 ETH (~2000 долл. на момент написания статьи), заблокированный в CDP с долгом в 1000 DAI. Теперь цепочка Plasma прекращает публикацию блоков, а пользователь отказывается выходить. Пользователь мог просто никогда не выйти. Теперь у пользователя есть свободный выбор: если цена ETH упадет ниже 1000 долларов, он уйдет и забудет о CDP, а если цена ETH останется выше, то в конце концов он потребует его. В среднем такой злоумышленник зарабатывает на этом деньги.
Другой пример - система конфиденциальности, например, Tornado Cash или Privacy Pools. Рассмотрим систему конфиденциальности с пятью вкладчиками:
ZK-SNARK в системе конфиденциальности позволяют скрыть связь между владельцем монеты, входящей в систему, и владельцем монеты, выходящей из нее.
Предположим, что из системы вышел только оранжевый, и в этот момент оператор цепочки Plasma прекращает публикацию данных. Предположим также, что мы используем подход UTXO-графа с правилом "первый пришел - первый ушел", так что каждая монета сопоставляется с монетой, находящейся прямо под ней. Тогда оранжевые могут вывести свою монету до и после смешивания, и система воспримет это как две отдельные монеты. Если синий попытается изъять свою монету до смешивания, то более свежее состояние оранжевого вытеснит ее; в то же время синий не будет иметь информации для изъятия своей монеты после смешивания.
Это можно исправить, если позволить остальным четырем вкладчикам изъять сам договор о конфиденциальности (который заменит вклады), а затем вывести монеты на L1. Однако реальная реализация такого механизма требует дополнительных усилий со стороны разработчиков системы конфиденциальности.
Существуют и другие способы решения проблемы конфиденциальности, например, подход Intmax, который предполагает размещение нескольких байтов на цепочке в стиле rollup вместе с оператором типа Plasma, передающим информацию между отдельными пользователями.
В позициях Uniswap LP существует аналогичная проблема: если вы обменяли USDC на ETH в позиции Uniswap, вы можете попытаться вывести свои USDC до торговли и свои ETH после торговли. Если вступить в сговор с оператором цепочки Plasma, то поставщики ликвидности и другие пользователи не будут иметь доступа к посттрейдовому состоянию, поэтому они не смогут вывести свои посттрейдовые USDC. Для предотвращения подобных ситуаций потребуется специальная логика.
Вывод
В 2023 году Plasma - это недооцененное проектное пространство. Роллапы остаются золотым стандартом и обладают свойствами безопасности, с которыми невозможно сравниться. Это особенно верно с точки зрения удобства для разработчиков: ничто не может сравниться с простотой, когда разработчику приложения не нужно даже думать о графах владения и потоках стимулов в своем приложении.
Однако Plasma позволяет полностью снять вопрос доступности данных, что значительно снижает комиссионные за транзакции. Plasma может существенно повысить безопасность цепочек, которые в противном случае были бы валидными. Тот факт, что ZK-EVM в этом году наконец-то будут реализованы, дает прекрасную возможность заново изучить это пространство дизайна и придумать еще более эффективные конструкции для упрощения работы разработчиков и защиты средств пользователей.