В начале у Ethereum были две стратегии масштабирования в своей дорожной карте. Одна (например, см. этот ранний бумагас 2015 года) было «шардирование»: вместо проверки и хранения всех транзакций в цепочке каждому узлу было бы достаточно проверить и хранить лишь небольшую долю транзакций. Точно так же работает любая другая сеть пирингового взаимодействия (например, BitTorrent), так что, безусловно, мы могли бы добиться того же эффекта в работе блокчейнов. Другим решением были протоколы уровня 2: сети, которые могли бы располагаться поверх Ethereum таким образом, чтобы в полной мере пользоваться его безопасностью, сохраняя при этом основную часть данных и вычислений вне главной цепи. «Протоколы уровня 2» подразумевали каналы состоянияв 2015 году, Плазмав 2017 году, а затемrollupsв 2019 году Rollups более мощные, чем каналы состояния или Plasma, но им требуется большой объем полосы пропускания данных on-chain. К счастью, к 2019 году исследования по шардингу решилипроблема проверки «доступности данных» в масштабе. В результате две дороги сошлись, и мы получили дорожная карта, ориентированная на rollupкоторая остается стратегией масштабирования Ethereum и по сегодняшний день.
Всплеск, редакция дорожной карты 2023 года.
Дорожная карта, ориентированная на роллап, предлагает простое разделение труда: Ethereum L1 сосредотачивается на том, чтобы быть надежным и децентрализованным базовым уровнем, в то время как L2 берут на себя задачу помощи экосистеме в масштабировании. Это шаблон, который повторяется повсюду в обществе: судебная система (L1) не предназначена для того, чтобы быть ультра-быстрой и эффективной, она существует для защиты контрактов и прав собственности, и предпринимателям (L2) приходится строить на этом сверху.надежныйбазаслойи доставить человечество на (метафорическую и буквальную) Марс.
В этом году дорожная карта, ориентированная на роллапы, имела важные успехи: пропускная способность данных Ethereum L1 значительно увеличилась сEIP-4844 блобы, и теперь существуют несколько EVM rollupsна этапе 1. Очень гетерогенная и плюралистическая реализация шардинга, где каждый уровень L2 действует как «щард» со своими собственными внутренними правилами и логикой, теперь является реальностью. Но, как мы видели, пройдя этот путь, у нас возникают собственные уникальные проблемы. Итак, наша задача сейчас - завершить дорожную карту, ориентированную на роллапы, и решить эти проблемы, сохраняя при этом надежность и децентрализацию, делающие Ethereum L1 особенным.
Трилемма масштабируемости была идеейвведен в 2017 году, которое утверждало, что существует напряженность между тремя свойствами блокчейна: децентрализация (точнее: низкая стоимость запуска узла), масштабируемость (точнее: большое количество обрабатываемых транзакций) и безопасность (точнее: злоумышленнику нужно скоромнуть значительную часть узлов во всей сети, чтобы даже одна транзакция завершилась неудачно).
Особенно следует отметить, что трилемма не является теоремой, и в сообщении, вводящем трилемму, не приводится математическое доказательство. Однако в нем представлено эвристическое математическое объяснение: если узел, дружественный к децентрализации (например, потребительский ноутбук), может проверять N транзакций в секунду, и у вас есть цепь, обрабатывающая k*N транзакций в секунду, то либо (i) каждая транзакция видна только 1/k узлам, что подразумевает, что злоумышленнику достаточно скомпрометировать несколько узлов, чтобы провести плохую транзакцию, либо (ii) ваши узлы будут мощными, и ваша цепь не будет децентрализованной. Цель сообщения никогда не была в том, чтобы показать, что нарушить трилемму невозможно; скорее, она была в том, чтобы показать, что нарушить трилемму сложно - для этого нужно как-то думать за пределами рамок, которые подразумевает аргумент.
На протяжении многих лет было обычным делом, что некоторые высокопроизводительные цепочки утверждали, что они решают трилемму, не предпринимая ничего умного на фундаментальном уровне архитектуры, обычно используя хитрости программной инженерии для оптимизации узла. Это всегда вводит в заблуждение, и запуск узла в таких цепочках всегда оказывается намного сложнее, чем в Ethereum. Этот постзатрагивает некоторые из множества тонкостей, почему это так (и, следовательно, почему только разработка клиентского программного обеспечения L1 не может масштабировать сам Ethereum).
Тем не менее, комбинация выборки доступности данных и SNARK решает трилемму: она позволяет клиенту убедиться в том, что некоторое количество данных доступно, и некоторое количество шагов вычислений было выполнено правильно, загружая при этом только небольшую часть этих данных и выполняя гораздо меньший объем вычислений. SNARK не требуют доверия. Выборка доступности данных имеет нюансы модель доверия few-of-N, но он сохраняет основное свойство не масштабируемых цепочек, которое заключается в том, что даже атака на 51% не может принудить сеть к принятию недоброкачественных блоков.
Еще одним способом решения этой трилеммы являются архитектуры Plasma, которые используют умные методы, чтобы переложить ответственность за наблюдение за доступностью данных на пользователя способом, совместимым с стимулами. В 2017-2019 годах, когда все, что нам нужно было для масштабирования вычислений, — это защита от мошенничества, Plasma была очень ограничена в том, что она могла безопасно делать, но внедрение SNARK делает архитектуры Plasma гораздо более жизнеспособныйдля более широкого спектра случаев использования, чем раньше.
Как на 13 марта 2024 года, когдаОбновление Dencunпошел в эфир, у блокчейна Ethereum есть три ~125 кБ «блоба» на каждый 12-секундный слот, или ~375 кБ на слот пропускной способности для доступа к данным. Предполагая, что данные транзакций публикуются onchain непосредственно, передача ERC20 составляет ~180 байт, и поэтому максимальная TPS роллапов на Ethereum:
375000 / 12 / 180 = 173,6 Т/с
Если мы добавим каллдату Ethereum (теоретический максимум: 30 миллионов газа за слот / 16 газа на байт = 1,875,000 байтов за слот), это станет равным 607 TPS. С PeerDAS план заключается в увеличении целевого количества блобов до 8-16, что даст нам 463-926 TPS в каллдате.
Это значительное увеличение по сравнению с Ethereum L1, но этого недостаточно. Мы хотим гораздо большей масштабируемости. Наша цель в среднесрочной перспективе - 16 МБ в слот, что в сочетании с улучшениями в сжатии данных rollup даст нам ~58 000 TPS.
PeerDAS - это относительно простая реализация «1D-выборки». Каждый блоб в Ethereum представляет собой многочлен степени 4096 над простым полем из 253 бит. Мы транслируем «доли» этого многочлена, где каждая доля состоит из 16 оценок в смежных 16 координатах, взятых из общего набора из 8192 координат. Любые 4096 из 8192 оценок (с текущими предложенными параметрами: любые 64 из 128 возможных выборок) могут восстановить блоб.
PeerDAS работает так, что каждый клиент слушает небольшое количество подсетей, где i-я подсеть транслирует i-й образец любого блоба, и дополнительно запрашивает блобы на других подсетях, которые ему нужны, обращаясь к своим сверстникам в глобальной p2p-сети (которые также слушают другие подсети). Более консервативная версия, SubnetDAS, использует только механизм подсети, без дополнительного уровня запроса одноранговых узлов. В настоящее время предлагается использовать SubnetDAS для узлов, участвующих в Proof of Stake, а для других узлов (т.е. "clients") для использования PeerDAS.
Теоретически мы можем масштабировать 1D выборку довольно далеко: если мы увеличим максимальное количество блобов до 256 (таким образом, цель до 128), то мы достигнем нашей цели в 16 МБ, в то время как выборка доступности данных будет стоить каждому узлу всего 16 выборок128 блобов512 байт на образец на блоб = 1 МБ пропускной способности данных на слот. Это едва укладывается в нашу терпимость: это выполнимо, но это означало бы, что клиенты с ограниченной пропускной способностью не смогут отбирать образцы. Мы могли бы оптимизировать это немного, уменьшив количество блобов и увеличив размер блоба, но это сделало бы восстановление более дорогостоящим.
И в конечном итоге мы хотим пойти дальше и сделать2D сэмплирование, который работает по принципу случайной выборки не только в пределах блобов, но и между блобами. Линейные свойства обязательств KZG используются для «расширения» набора блобов в блоке с помощью списка новых «виртуальных блобов», которые избыточно кодируют ту же информацию.
2D сэмплирование. Источник: a16z крипто
Важно, что вычисление расширения обязательств не требует наличия блобов, поэтому схема фундаментально дружественна к распределенной конструкции блоков. Узел, фактически строящий блок, должен иметь только обязательства блоба KZG и может полагаться на DAS для проверки доступности блобов. 1D DAS также по своей сути дружественен к распределенной конструкции блоков.
Ближайшим следующим шагом является завершение внедрения и развертывания PeerDAS. С этого момента постепенно увеличивать количество больших двоичных объектов в PeerDAS, внимательно следя за сетью и улучшая программное обеспечение для обеспечения безопасности. В то же время мы хотим больше академической работы по формализации PeerDAS и других версий DAS и их взаимодействию с такими вопросами, как безопасность правил выбора форка.
Еще дальше в будущем нам нужно провести гораздо больше работы по определению идеальной версии 2D DAS и доказательству ее безопасных свойств. Мы также хотим в конечном итоге отказаться от KZG в пользу квантово-устойчивой альтернативы без доверенной настройки. В настоящее время мы не знаем кандидатов, которые дружелюбны к распределенному построению блоков. Даже дорогостоящая техника "грубой силы" использования рекурсивных STARKs для генерации доказательств достоверности для восстановления строк и столбцов не подходит, потому что, хотя технически STARK имеет размер O(log(n) * log(log(n)) хэшей (сРАЗМЕШИВАТЬ) на практике STARK почти так же большой, как весь блоб.
Реалистичные пути, которые я вижу на долгосрочную перспективу, это:
Мы можем рассматривать их вдоль спектра компромисса:
Обратите внимание, что такой выбор существует даже в случае, если мы решим масштабировать выполнение на L1 напрямую. Это потому, что если L1 должен обрабатывать много TPS, блоки L1 станут очень большими, и клиенты захотят эффективный способ подтвердить их правильность, поэтому нам придется использовать ту же технологию, которая поддерживает rollups (ZK-EVM и DAS) на L1.
Потребность в 2D DAS отчасти уменьшается, или по крайней мере откладывается, если применяется сжатие данных (см. ниже), и это уменьшается еще больше, если широко используется Plasma. DAS также представляет собой вызов для протоколов и механизмов распределенного построения блоков: хотя DAS в теории дружелюбен к распределенной реконструкции, это необходимо сочетать на практике ссписок включенияпредложения и механика выбора вилок, окружающих их.
Каждая транзакция в роллапе занимает значительный объем пространства данных в цепочке: передача ERC20 занимает около 180 байт. Даже при идеальной выборке доступности данных это ограничивает масштабируемость протоколов уровня 2. При 16 МБ на слот мы получаем:
16000000 / 12 / 180 = 7407 TPS
Что, если помимо решения числителя, мы также можем решить знаменатель и сделать так, чтобы каждая транзакция в rollup занимала меньше байтов onchain?
Лучшее объяснение на мой взгляд эта диаграммаиз двух лет назад:
Самые простые выгоды - это просто сжатие нулевого байта: замена каждой длинной последовательности нулевых байтов двумя байтами, представляющими количество нулевых байтов. Чтобы пойти дальше, мы используем специфические свойства транзакций:
Основное, что осталось сделать, это фактически реализовать вышеуказанные схемы. Основные компромиссы:
Принятие ERC-4337 и, в конечном итоге, увековечение частей этого стандарта в L2 EVM может значительно ускорить внедрение техник агрегации. Увековечение частей ERC-4337 на L1 может ускорить его внедрение на L2.
Даже с блоками объемом 16 МБ и сжатием данных 58 000 TPS не обязательно достаточно для полного захвата потребительских платежей, децентрализованных социальных сетей или других секторов с высокой пропускной способностью, и это становится особенно верным, если мы начнем учитывать конфиденциальность, что может снизить масштабируемость на 3-8 раз. Для приложений с высоким объемом и низкой стоимостью один из вариантов сегодня - это validium , который хранит данные вне цепи блоков и имеет интересную модель безопасности, при которой оператор не может украсть средства пользователей, но может исчезнуть и временно или постоянно заморозить все средства пользователей. Но мы можем поступить лучше.
Plasma — это решение для масштабирования, которое включает в себя оператор, публикующий блоки вне блокчейна и помещающий корни Меркла этих блоков в блокчейн (в отличие от роллапов, где весь блок помещается в блокчейн). Для каждого блока оператор отправляет каждому пользователю ветвь Меркла, доказывающую, что произошло или не произошло с активами этого пользователя. Пользователи могут вывести свои активы, предоставив филиал Merkle. Важно отметить, что эта ветка не обязательно должна быть укоренена в последнем состоянии - по этой причине, даже если доступность данных не работает, пользователь все равно может восстановить свои активы, удалив последнее доступное состояние. Если пользователь отправляет недействительную ветку (например, выход из актива, который он уже отправил кому-то другому, или сам оператор создает актив из воздуха), механизм ончейн-оспаривания может вынести решение о том, кому актив принадлежит по праву.
Диаграмма цепи Plasma Cash. Транзакции, расходующие монету i, помещаются в i-ю позицию в дереве. В этом примере, предполагая, что все предыдущие деревья действительны, мы знаем, что сейчас у Ивы есть монета 1, у Дэвида - монета 4, а у Джорджа - монета 6.
Ранние версии Plasma могли обрабатывать только случаи использования платежей и не могли эффективно обобщить их. Однако, если требуется, чтобы каждый корень был подтвержден с помощью SNARK, Plasma становится намного мощнее. Каждая игра-вызов может быть значительно упрощена, потому что мы убираем большинство возможных путей для манипуляции оператора. Также открываются новые пути для расширения техник Plasma на более общий класс активов. Наконец, в случае, если оператор не манипулирует, пользователи могут мгновенно вывести свои средства, не дожидаясь однотедельного периода вызова.
Один из способов (и не единственный способ) создать плазменную цепь EVM: использовать ZK-SNARK для построения параллельного дерева UTXO, отражающего изменения баланса, сделанные EVM, и определяющего уникальное сопоставление того, что является «тем же монета» в разные исторические периоды. Затем на этом можно построить конструкцию Plasma.
Одна из ключевых идей заключается в том, что система Plasma не обязательно должна быть идеальной. Даже если вы можете защитить только часть активов (например, даже только монеты, которые не двигались на прошлой неделе), вы уже значительно улучшили статус-кво ультрамасштабируемого EVM, который является валидиумом.
Другой класс конструкций - гибридные плазменные / роллапы, такие как Интмакс. Эти конструкции помещают очень небольшое количество данных на пользователя onchain (например, 5 байт), и таким образом, получают свойства, которые находятся где-то между plasma и rollups: в случае Intmax вы получаете очень высокий уровень масштабируемости и конфиденциальности, хотя даже в мире 16 МБ ёмкость теоретически ограничена примерно до 16,000,000 / 12 / 5 = 266,667 TPS.
Основная оставшаяся задача - запустить системы Plasma в производство. Как упоминалось ранее, «плазма против валидиума» не является бинарной: любой валидиум может улучшить свои безопасные свойства хотя бы немного, добавив функции Plasma в механизм выхода. Часть исследований заключается в получении оптимальных свойств (с точки зрения требований к доверию, стоимости газа L1 в худшем случае и уязвимости для DoS) для EVM, а также альтернативных прикладных конструкций. Кроме того, необходимо непосредственно решить большую концептуальную сложность Plasma по сравнению с роллапами, как через исследования, так и через создание лучших обобщенных фреймворков.
Основным компромиссом в использовании дизайнов Plasma является то, что они зависят больше от операторов и сложнее создавать.”основанный“, хотя гибридные конструкции плазма/роллап часто могут избежать этого недостатка.
Чем более эффективными могут быть решения Plasma, тем меньше давления на L1 в плане функциональности высокопроизводительной доступности данных. Перенос активности на L2 также снижает давление MEV на L1.
Сегодня большинство роллапов еще не являются действительно безопасными; существует совет по безопасности, который имеет возможность переопределить поведение (оптимистичное или валидное)Система проверки. В некоторых случаях система доказательств вообще не работает, а если и работает, то имеет только «рекомендательную» функцию. Дальше всего впереди находятся (i) несколько специфичных для приложения роллапов, таких как Fuel, которые не требуют доверия, и (ii) на момент написания этой статьи Optimism и Arbitrum, два роллапа с полным EVM, которые достигли вехи частичного отсутствия доверия, известной как «стадия 1». Причина, по которой роллапы не пошли дальше, заключается в опасениях по поводу ошибок в коде. Нам нужны ненадежные роллапы, и поэтому мы должны решить эту проблему в лоб.
Сначала давайте вспомним систему «stage», впервые представленную вЭтот пост. Существуют более подробные требования, но в общем:
Цель - достичь этапа 2. Основной вызов при достижении этапа 2 - получить достаточное доверие к тому, что система доказательств действительно достаточно надежна. Существует два основных способа сделать это:
Стилизованная диаграмма мультидоказательства, сочетающая в себе одну систему оптимистических доказательств, одну систему доказательств валидности и совет безопасности.
Для формальной верификации много. Нам нужно создать формально верифицированную версию полного доказателя SNARK EVM. Это невероятно сложный проект, хотя это один изМы уже начали. Есть одна хитрость, которая значительно упрощает задачу: мы можем сделать формально верифицированный SNARK прувер минимальной виртуальной машины, например. RISC-VилиКаир, а затем написать реализацию EVM на этой минимальной виртуальной машине (и формально доказать ее эквивалентность какой-либо другой спецификации EVM).
Для многообещающих субъектов остались две основные составляющие. Во-первых, нам нужно иметь достаточное доверие как минимум к двум различным системам доказательств, чтобы быть уверенными в их отдельной безопасности и в том, что если они сломаются, то по разным и независимым причинам (таким образом, они не сломаются одновременно). Во-вторых, нам нужно обеспечить очень высокий уровень уверенности в основной логике, объединяющей системы доказательств. Это намного меньший кусок кода. Есть способы сделать его крайне компактным - просто хранить средства в Безопасный мультиподписной контракт Подписантами которых являются контракты, представляющие отдельные системы доказательства, но это имеет компромисс в виде высоких затрат на газ в сети. Необходимо найти баланс между эффективностью и безопасностью.
Перенос активности на L2 снижает давление MEV на L1.
Одна из основных проблем с экосистемой L2 сегодня заключается в том, что пользователям сложно в ней ориентироваться. Более того, самые простые способы сделать это часто повторно вводят доверие: централизованные мосты, RPC-клиенты и так далее. Если мы серьезно относимся к идее, что L2 являются частью Ethereum, нам нужно сделать использование экосистемы L2 похожим на использование унифицированной экосистемы Ethereum.
Пример патологически плохого (и даже опасного: лично я потерял 100 долларов из-за ошибки выбора цепи здесь) пользовательского опыта межуровневого взаимодействия - хотя это не вина Polymarket, взаимодействие между уровнями должно быть ответственностью кошельков и сообщества стандартов Ethereum (ERC). В хорошо функционирующей экосистеме Ethereum отправка монет с L1 на L2 или из одного L2 в другой должна чувствовать себя так же, как отправка монет в пределах того же L1.
Существует множество категорий улучшений взаимодействия между уровнями L2. В общем, чтобы придумать это, нужно заметить, что теоретически Ethereum, ориентированный на роллап, — это то же самое, что и шардинг выполнения L1, а затем спросите, где текущая вторичная эфирная вселенная Ethereum не соответствует этому идеалу на практике. Вот несколько примеров:
Как легкий клиент может обновить свое представление о цепи заголовков Ethereum. Как только у вас есть цепь заголовков, вы можете использовать доказательства Merkle для проверки любого объекта состояния. И как только у вас есть правильные объекты состояния L1, вы можете использовать доказательства Merkle (и, возможно, подписи, если вы хотите проверить предварительные подтверждения) для проверки любого объекта состояния на L2. Helios уже это делает. Расширение до последнего является вызовом стандартизации.
Стилизованная схема работы кошельков keystore.
Многие из приведенных выше примеров сталкиваются с типичными дилеммами того, когда стандартизировать и какие слои стандартизировать. Если вы стандартизируете слишком рано, вы рискуете закрепить худшее решение. Если вы стандартизируете слишком поздно, вы рискуете создать ненужное фрагментирование. В некоторых случаях есть как краткосрочное решение с более слабыми свойствами, но более легкое внедрение, так и долгосрочное решение, которое в конечном итоге правильное, но потребуется несколько лет, чтобы добраться до этого момента.
Одним из способов, которым эта секция уникальна, является то, что эти задачи - это не только технические проблемы: они также (возможно, даже в первую очередь!) социальные проблемы. Они требуют сотрудничества L2 и кошельков и L1. Наша способность успешно решать эту проблему - это тест нашей способности держаться вместе как сообщество.
Большинство этих предложений представляют собой "высокоуровневые" конструкции и поэтому не оказывают значительного влияния на рассмотрение L1. Одним из исключений является общая последовательность, которая сильно влияет на MEV.
Если L2 станут очень масштабируемыми и успешными, но L1 останется способным обрабатывать только очень низкий объем транзакций, у Ethereum могут возникнуть множественные риски.
Поэтим причинам важно продолжать масштабирование L1 сам по себе и убедиться, что он сможет продолжать вмещать растущее количество использований.
Самым простым способом масштабирования является просто увеличение газового лимита. Однако это рискует централизовать L1, и тем самым ослабить другое важное свойство, которое делает Ethereum L1 таким мощным: его достоверность как надежного базового уровня. Существует дебаты о том, насколько устойчиво увеличение простого газового лимита, и это также меняется в зависимости от того, какие другие технологии внедряются для упрощения верификации более крупных блоков (например, истекание истории, безсостоятельность, доказательства валидности L1 EVM). Еще одной важной вещью, которую следует постоянно улучшать, является эффективность программного обеспечения клиента Ethereum, которое сегодня намного более оптимизировано, чем было пять лет назад. Эффективная стратегия увеличения газового лимита L1 включала бы ускорение этих технологий верификации.
Другая стратегия масштабирования включает в себя определение конкретных функций и типов вычислений, которые можно сделать дешевле без ущерба для децентрализации сети или ее свойств безопасности. Примеры:
Эти улучшения будут обсуждаться более подробно в будущем сообщении на Splurge.
Наконец, третья стратегия - это родные роллапы (или "увековеченные роллапы"): в основном, создание множества копий EVM, которые работают параллельно, приводя к модели, эквивалентной тому, что могут предоставить роллапы, но намного более интегрированной в протокол.
Существует три стратегии масштабирования L1, которые могут быть осуществлены индивидуально или параллельно:
Стратегии имеют различные компромиссы, и важно понимать их различия. Например, у нативных роллапов много общих недостатков с обычными роллапами: нельзя отправить одну транзакцию, синхронно выполняющую операции сразу в нескольких из них, как это делается с контрактами на том же L1 (или L2). Увеличение газового лимита отнимает другие преимущества, которые можно получить, сделав L1 более простым для верификации, например, увеличивая долю пользователей, запускающих узлы верификации, и увеличивая количество индивидуальных стейкеров. Сделать определенные операции в EVM более дешевыми может увеличить общую сложность EVM, в зависимости от того, как это будет сделано.
Большой вопрос, который должна ответить любая дорожная карта масштабирования L1, заключается в следующем: какова конечная цель того, что должно находиться на L1, а что - на L2? Очевидно, что абсурдно помещать все на L1: потенциальные случаи использования подразумевают сотни тысяч транзакций в секунду, и это сделало бы L1 полностью невозможным для проверки (если мы не выберем маршрут нативного rollup). Но нам действительно нужен какой-то принцип, чтобы убедиться, что мы не создаем ситуацию, при которой мы увеличиваем газовый лимит в 10 раз, серьезно ущемляем децентрализацию Ethereum L1 и обнаруживаем, что мы лишь перешли к миру, где вместо того, чтобы 99% активности находилось на L2, 90% активности находится на L2, и результат в целом выглядит практически таким же, за исключением необратимой потери большей части того, что делает Ethereum L1 особенным.
Одно из предполагаемых видений "разделения труда" между L1 и L2.источник.
Привлечение большего количества пользователей на L1 подразумевает улучшение не только масштаба, но и других аспектов L1. Это означает, что больше MEV останется на L1 (в отличие от того, чтобы стать проблемой только для L2), и поэтому будет еще более настоятельной необходимостью обращаться к этому явно. Это значительно увеличивает ценность быстрых слотов на L1. И это также в значительной степени зависит от успешной верификации L1 («Verge»).
В начале у Ethereum были две стратегии масштабирования в своей дорожной карте. Одна (например, см. этот ранний бумагас 2015 года) было «шардирование»: вместо проверки и хранения всех транзакций в цепочке каждому узлу было бы достаточно проверить и хранить лишь небольшую долю транзакций. Точно так же работает любая другая сеть пирингового взаимодействия (например, BitTorrent), так что, безусловно, мы могли бы добиться того же эффекта в работе блокчейнов. Другим решением были протоколы уровня 2: сети, которые могли бы располагаться поверх Ethereum таким образом, чтобы в полной мере пользоваться его безопасностью, сохраняя при этом основную часть данных и вычислений вне главной цепи. «Протоколы уровня 2» подразумевали каналы состоянияв 2015 году, Плазмав 2017 году, а затемrollupsв 2019 году Rollups более мощные, чем каналы состояния или Plasma, но им требуется большой объем полосы пропускания данных on-chain. К счастью, к 2019 году исследования по шардингу решилипроблема проверки «доступности данных» в масштабе. В результате две дороги сошлись, и мы получили дорожная карта, ориентированная на rollupкоторая остается стратегией масштабирования Ethereum и по сегодняшний день.
Всплеск, редакция дорожной карты 2023 года.
Дорожная карта, ориентированная на роллап, предлагает простое разделение труда: Ethereum L1 сосредотачивается на том, чтобы быть надежным и децентрализованным базовым уровнем, в то время как L2 берут на себя задачу помощи экосистеме в масштабировании. Это шаблон, который повторяется повсюду в обществе: судебная система (L1) не предназначена для того, чтобы быть ультра-быстрой и эффективной, она существует для защиты контрактов и прав собственности, и предпринимателям (L2) приходится строить на этом сверху.надежныйбазаслойи доставить человечество на (метафорическую и буквальную) Марс.
В этом году дорожная карта, ориентированная на роллапы, имела важные успехи: пропускная способность данных Ethereum L1 значительно увеличилась сEIP-4844 блобы, и теперь существуют несколько EVM rollupsна этапе 1. Очень гетерогенная и плюралистическая реализация шардинга, где каждый уровень L2 действует как «щард» со своими собственными внутренними правилами и логикой, теперь является реальностью. Но, как мы видели, пройдя этот путь, у нас возникают собственные уникальные проблемы. Итак, наша задача сейчас - завершить дорожную карту, ориентированную на роллапы, и решить эти проблемы, сохраняя при этом надежность и децентрализацию, делающие Ethereum L1 особенным.
Трилемма масштабируемости была идеейвведен в 2017 году, которое утверждало, что существует напряженность между тремя свойствами блокчейна: децентрализация (точнее: низкая стоимость запуска узла), масштабируемость (точнее: большое количество обрабатываемых транзакций) и безопасность (точнее: злоумышленнику нужно скоромнуть значительную часть узлов во всей сети, чтобы даже одна транзакция завершилась неудачно).
Особенно следует отметить, что трилемма не является теоремой, и в сообщении, вводящем трилемму, не приводится математическое доказательство. Однако в нем представлено эвристическое математическое объяснение: если узел, дружественный к децентрализации (например, потребительский ноутбук), может проверять N транзакций в секунду, и у вас есть цепь, обрабатывающая k*N транзакций в секунду, то либо (i) каждая транзакция видна только 1/k узлам, что подразумевает, что злоумышленнику достаточно скомпрометировать несколько узлов, чтобы провести плохую транзакцию, либо (ii) ваши узлы будут мощными, и ваша цепь не будет децентрализованной. Цель сообщения никогда не была в том, чтобы показать, что нарушить трилемму невозможно; скорее, она была в том, чтобы показать, что нарушить трилемму сложно - для этого нужно как-то думать за пределами рамок, которые подразумевает аргумент.
На протяжении многих лет было обычным делом, что некоторые высокопроизводительные цепочки утверждали, что они решают трилемму, не предпринимая ничего умного на фундаментальном уровне архитектуры, обычно используя хитрости программной инженерии для оптимизации узла. Это всегда вводит в заблуждение, и запуск узла в таких цепочках всегда оказывается намного сложнее, чем в Ethereum. Этот постзатрагивает некоторые из множества тонкостей, почему это так (и, следовательно, почему только разработка клиентского программного обеспечения L1 не может масштабировать сам Ethereum).
Тем не менее, комбинация выборки доступности данных и SNARK решает трилемму: она позволяет клиенту убедиться в том, что некоторое количество данных доступно, и некоторое количество шагов вычислений было выполнено правильно, загружая при этом только небольшую часть этих данных и выполняя гораздо меньший объем вычислений. SNARK не требуют доверия. Выборка доступности данных имеет нюансы модель доверия few-of-N, но он сохраняет основное свойство не масштабируемых цепочек, которое заключается в том, что даже атака на 51% не может принудить сеть к принятию недоброкачественных блоков.
Еще одним способом решения этой трилеммы являются архитектуры Plasma, которые используют умные методы, чтобы переложить ответственность за наблюдение за доступностью данных на пользователя способом, совместимым с стимулами. В 2017-2019 годах, когда все, что нам нужно было для масштабирования вычислений, — это защита от мошенничества, Plasma была очень ограничена в том, что она могла безопасно делать, но внедрение SNARK делает архитектуры Plasma гораздо более жизнеспособныйдля более широкого спектра случаев использования, чем раньше.
Как на 13 марта 2024 года, когдаОбновление Dencunпошел в эфир, у блокчейна Ethereum есть три ~125 кБ «блоба» на каждый 12-секундный слот, или ~375 кБ на слот пропускной способности для доступа к данным. Предполагая, что данные транзакций публикуются onchain непосредственно, передача ERC20 составляет ~180 байт, и поэтому максимальная TPS роллапов на Ethereum:
375000 / 12 / 180 = 173,6 Т/с
Если мы добавим каллдату Ethereum (теоретический максимум: 30 миллионов газа за слот / 16 газа на байт = 1,875,000 байтов за слот), это станет равным 607 TPS. С PeerDAS план заключается в увеличении целевого количества блобов до 8-16, что даст нам 463-926 TPS в каллдате.
Это значительное увеличение по сравнению с Ethereum L1, но этого недостаточно. Мы хотим гораздо большей масштабируемости. Наша цель в среднесрочной перспективе - 16 МБ в слот, что в сочетании с улучшениями в сжатии данных rollup даст нам ~58 000 TPS.
PeerDAS - это относительно простая реализация «1D-выборки». Каждый блоб в Ethereum представляет собой многочлен степени 4096 над простым полем из 253 бит. Мы транслируем «доли» этого многочлена, где каждая доля состоит из 16 оценок в смежных 16 координатах, взятых из общего набора из 8192 координат. Любые 4096 из 8192 оценок (с текущими предложенными параметрами: любые 64 из 128 возможных выборок) могут восстановить блоб.
PeerDAS работает так, что каждый клиент слушает небольшое количество подсетей, где i-я подсеть транслирует i-й образец любого блоба, и дополнительно запрашивает блобы на других подсетях, которые ему нужны, обращаясь к своим сверстникам в глобальной p2p-сети (которые также слушают другие подсети). Более консервативная версия, SubnetDAS, использует только механизм подсети, без дополнительного уровня запроса одноранговых узлов. В настоящее время предлагается использовать SubnetDAS для узлов, участвующих в Proof of Stake, а для других узлов (т.е. "clients") для использования PeerDAS.
Теоретически мы можем масштабировать 1D выборку довольно далеко: если мы увеличим максимальное количество блобов до 256 (таким образом, цель до 128), то мы достигнем нашей цели в 16 МБ, в то время как выборка доступности данных будет стоить каждому узлу всего 16 выборок128 блобов512 байт на образец на блоб = 1 МБ пропускной способности данных на слот. Это едва укладывается в нашу терпимость: это выполнимо, но это означало бы, что клиенты с ограниченной пропускной способностью не смогут отбирать образцы. Мы могли бы оптимизировать это немного, уменьшив количество блобов и увеличив размер блоба, но это сделало бы восстановление более дорогостоящим.
И в конечном итоге мы хотим пойти дальше и сделать2D сэмплирование, который работает по принципу случайной выборки не только в пределах блобов, но и между блобами. Линейные свойства обязательств KZG используются для «расширения» набора блобов в блоке с помощью списка новых «виртуальных блобов», которые избыточно кодируют ту же информацию.
2D сэмплирование. Источник: a16z крипто
Важно, что вычисление расширения обязательств не требует наличия блобов, поэтому схема фундаментально дружественна к распределенной конструкции блоков. Узел, фактически строящий блок, должен иметь только обязательства блоба KZG и может полагаться на DAS для проверки доступности блобов. 1D DAS также по своей сути дружественен к распределенной конструкции блоков.
Ближайшим следующим шагом является завершение внедрения и развертывания PeerDAS. С этого момента постепенно увеличивать количество больших двоичных объектов в PeerDAS, внимательно следя за сетью и улучшая программное обеспечение для обеспечения безопасности. В то же время мы хотим больше академической работы по формализации PeerDAS и других версий DAS и их взаимодействию с такими вопросами, как безопасность правил выбора форка.
Еще дальше в будущем нам нужно провести гораздо больше работы по определению идеальной версии 2D DAS и доказательству ее безопасных свойств. Мы также хотим в конечном итоге отказаться от KZG в пользу квантово-устойчивой альтернативы без доверенной настройки. В настоящее время мы не знаем кандидатов, которые дружелюбны к распределенному построению блоков. Даже дорогостоящая техника "грубой силы" использования рекурсивных STARKs для генерации доказательств достоверности для восстановления строк и столбцов не подходит, потому что, хотя технически STARK имеет размер O(log(n) * log(log(n)) хэшей (сРАЗМЕШИВАТЬ) на практике STARK почти так же большой, как весь блоб.
Реалистичные пути, которые я вижу на долгосрочную перспективу, это:
Мы можем рассматривать их вдоль спектра компромисса:
Обратите внимание, что такой выбор существует даже в случае, если мы решим масштабировать выполнение на L1 напрямую. Это потому, что если L1 должен обрабатывать много TPS, блоки L1 станут очень большими, и клиенты захотят эффективный способ подтвердить их правильность, поэтому нам придется использовать ту же технологию, которая поддерживает rollups (ZK-EVM и DAS) на L1.
Потребность в 2D DAS отчасти уменьшается, или по крайней мере откладывается, если применяется сжатие данных (см. ниже), и это уменьшается еще больше, если широко используется Plasma. DAS также представляет собой вызов для протоколов и механизмов распределенного построения блоков: хотя DAS в теории дружелюбен к распределенной реконструкции, это необходимо сочетать на практике ссписок включенияпредложения и механика выбора вилок, окружающих их.
Каждая транзакция в роллапе занимает значительный объем пространства данных в цепочке: передача ERC20 занимает около 180 байт. Даже при идеальной выборке доступности данных это ограничивает масштабируемость протоколов уровня 2. При 16 МБ на слот мы получаем:
16000000 / 12 / 180 = 7407 TPS
Что, если помимо решения числителя, мы также можем решить знаменатель и сделать так, чтобы каждая транзакция в rollup занимала меньше байтов onchain?
Лучшее объяснение на мой взгляд эта диаграммаиз двух лет назад:
Самые простые выгоды - это просто сжатие нулевого байта: замена каждой длинной последовательности нулевых байтов двумя байтами, представляющими количество нулевых байтов. Чтобы пойти дальше, мы используем специфические свойства транзакций:
Основное, что осталось сделать, это фактически реализовать вышеуказанные схемы. Основные компромиссы:
Принятие ERC-4337 и, в конечном итоге, увековечение частей этого стандарта в L2 EVM может значительно ускорить внедрение техник агрегации. Увековечение частей ERC-4337 на L1 может ускорить его внедрение на L2.
Даже с блоками объемом 16 МБ и сжатием данных 58 000 TPS не обязательно достаточно для полного захвата потребительских платежей, децентрализованных социальных сетей или других секторов с высокой пропускной способностью, и это становится особенно верным, если мы начнем учитывать конфиденциальность, что может снизить масштабируемость на 3-8 раз. Для приложений с высоким объемом и низкой стоимостью один из вариантов сегодня - это validium , который хранит данные вне цепи блоков и имеет интересную модель безопасности, при которой оператор не может украсть средства пользователей, но может исчезнуть и временно или постоянно заморозить все средства пользователей. Но мы можем поступить лучше.
Plasma — это решение для масштабирования, которое включает в себя оператор, публикующий блоки вне блокчейна и помещающий корни Меркла этих блоков в блокчейн (в отличие от роллапов, где весь блок помещается в блокчейн). Для каждого блока оператор отправляет каждому пользователю ветвь Меркла, доказывающую, что произошло или не произошло с активами этого пользователя. Пользователи могут вывести свои активы, предоставив филиал Merkle. Важно отметить, что эта ветка не обязательно должна быть укоренена в последнем состоянии - по этой причине, даже если доступность данных не работает, пользователь все равно может восстановить свои активы, удалив последнее доступное состояние. Если пользователь отправляет недействительную ветку (например, выход из актива, который он уже отправил кому-то другому, или сам оператор создает актив из воздуха), механизм ончейн-оспаривания может вынести решение о том, кому актив принадлежит по праву.
Диаграмма цепи Plasma Cash. Транзакции, расходующие монету i, помещаются в i-ю позицию в дереве. В этом примере, предполагая, что все предыдущие деревья действительны, мы знаем, что сейчас у Ивы есть монета 1, у Дэвида - монета 4, а у Джорджа - монета 6.
Ранние версии Plasma могли обрабатывать только случаи использования платежей и не могли эффективно обобщить их. Однако, если требуется, чтобы каждый корень был подтвержден с помощью SNARK, Plasma становится намного мощнее. Каждая игра-вызов может быть значительно упрощена, потому что мы убираем большинство возможных путей для манипуляции оператора. Также открываются новые пути для расширения техник Plasma на более общий класс активов. Наконец, в случае, если оператор не манипулирует, пользователи могут мгновенно вывести свои средства, не дожидаясь однотедельного периода вызова.
Один из способов (и не единственный способ) создать плазменную цепь EVM: использовать ZK-SNARK для построения параллельного дерева UTXO, отражающего изменения баланса, сделанные EVM, и определяющего уникальное сопоставление того, что является «тем же монета» в разные исторические периоды. Затем на этом можно построить конструкцию Plasma.
Одна из ключевых идей заключается в том, что система Plasma не обязательно должна быть идеальной. Даже если вы можете защитить только часть активов (например, даже только монеты, которые не двигались на прошлой неделе), вы уже значительно улучшили статус-кво ультрамасштабируемого EVM, который является валидиумом.
Другой класс конструкций - гибридные плазменные / роллапы, такие как Интмакс. Эти конструкции помещают очень небольшое количество данных на пользователя onchain (например, 5 байт), и таким образом, получают свойства, которые находятся где-то между plasma и rollups: в случае Intmax вы получаете очень высокий уровень масштабируемости и конфиденциальности, хотя даже в мире 16 МБ ёмкость теоретически ограничена примерно до 16,000,000 / 12 / 5 = 266,667 TPS.
Основная оставшаяся задача - запустить системы Plasma в производство. Как упоминалось ранее, «плазма против валидиума» не является бинарной: любой валидиум может улучшить свои безопасные свойства хотя бы немного, добавив функции Plasma в механизм выхода. Часть исследований заключается в получении оптимальных свойств (с точки зрения требований к доверию, стоимости газа L1 в худшем случае и уязвимости для DoS) для EVM, а также альтернативных прикладных конструкций. Кроме того, необходимо непосредственно решить большую концептуальную сложность Plasma по сравнению с роллапами, как через исследования, так и через создание лучших обобщенных фреймворков.
Основным компромиссом в использовании дизайнов Plasma является то, что они зависят больше от операторов и сложнее создавать.”основанный“, хотя гибридные конструкции плазма/роллап часто могут избежать этого недостатка.
Чем более эффективными могут быть решения Plasma, тем меньше давления на L1 в плане функциональности высокопроизводительной доступности данных. Перенос активности на L2 также снижает давление MEV на L1.
Сегодня большинство роллапов еще не являются действительно безопасными; существует совет по безопасности, который имеет возможность переопределить поведение (оптимистичное или валидное)Система проверки. В некоторых случаях система доказательств вообще не работает, а если и работает, то имеет только «рекомендательную» функцию. Дальше всего впереди находятся (i) несколько специфичных для приложения роллапов, таких как Fuel, которые не требуют доверия, и (ii) на момент написания этой статьи Optimism и Arbitrum, два роллапа с полным EVM, которые достигли вехи частичного отсутствия доверия, известной как «стадия 1». Причина, по которой роллапы не пошли дальше, заключается в опасениях по поводу ошибок в коде. Нам нужны ненадежные роллапы, и поэтому мы должны решить эту проблему в лоб.
Сначала давайте вспомним систему «stage», впервые представленную вЭтот пост. Существуют более подробные требования, но в общем:
Цель - достичь этапа 2. Основной вызов при достижении этапа 2 - получить достаточное доверие к тому, что система доказательств действительно достаточно надежна. Существует два основных способа сделать это:
Стилизованная диаграмма мультидоказательства, сочетающая в себе одну систему оптимистических доказательств, одну систему доказательств валидности и совет безопасности.
Для формальной верификации много. Нам нужно создать формально верифицированную версию полного доказателя SNARK EVM. Это невероятно сложный проект, хотя это один изМы уже начали. Есть одна хитрость, которая значительно упрощает задачу: мы можем сделать формально верифицированный SNARK прувер минимальной виртуальной машины, например. RISC-VилиКаир, а затем написать реализацию EVM на этой минимальной виртуальной машине (и формально доказать ее эквивалентность какой-либо другой спецификации EVM).
Для многообещающих субъектов остались две основные составляющие. Во-первых, нам нужно иметь достаточное доверие как минимум к двум различным системам доказательств, чтобы быть уверенными в их отдельной безопасности и в том, что если они сломаются, то по разным и независимым причинам (таким образом, они не сломаются одновременно). Во-вторых, нам нужно обеспечить очень высокий уровень уверенности в основной логике, объединяющей системы доказательств. Это намного меньший кусок кода. Есть способы сделать его крайне компактным - просто хранить средства в Безопасный мультиподписной контракт Подписантами которых являются контракты, представляющие отдельные системы доказательства, но это имеет компромисс в виде высоких затрат на газ в сети. Необходимо найти баланс между эффективностью и безопасностью.
Перенос активности на L2 снижает давление MEV на L1.
Одна из основных проблем с экосистемой L2 сегодня заключается в том, что пользователям сложно в ней ориентироваться. Более того, самые простые способы сделать это часто повторно вводят доверие: централизованные мосты, RPC-клиенты и так далее. Если мы серьезно относимся к идее, что L2 являются частью Ethereum, нам нужно сделать использование экосистемы L2 похожим на использование унифицированной экосистемы Ethereum.
Пример патологически плохого (и даже опасного: лично я потерял 100 долларов из-за ошибки выбора цепи здесь) пользовательского опыта межуровневого взаимодействия - хотя это не вина Polymarket, взаимодействие между уровнями должно быть ответственностью кошельков и сообщества стандартов Ethereum (ERC). В хорошо функционирующей экосистеме Ethereum отправка монет с L1 на L2 или из одного L2 в другой должна чувствовать себя так же, как отправка монет в пределах того же L1.
Существует множество категорий улучшений взаимодействия между уровнями L2. В общем, чтобы придумать это, нужно заметить, что теоретически Ethereum, ориентированный на роллап, — это то же самое, что и шардинг выполнения L1, а затем спросите, где текущая вторичная эфирная вселенная Ethereum не соответствует этому идеалу на практике. Вот несколько примеров:
Как легкий клиент может обновить свое представление о цепи заголовков Ethereum. Как только у вас есть цепь заголовков, вы можете использовать доказательства Merkle для проверки любого объекта состояния. И как только у вас есть правильные объекты состояния L1, вы можете использовать доказательства Merkle (и, возможно, подписи, если вы хотите проверить предварительные подтверждения) для проверки любого объекта состояния на L2. Helios уже это делает. Расширение до последнего является вызовом стандартизации.
Стилизованная схема работы кошельков keystore.
Многие из приведенных выше примеров сталкиваются с типичными дилеммами того, когда стандартизировать и какие слои стандартизировать. Если вы стандартизируете слишком рано, вы рискуете закрепить худшее решение. Если вы стандартизируете слишком поздно, вы рискуете создать ненужное фрагментирование. В некоторых случаях есть как краткосрочное решение с более слабыми свойствами, но более легкое внедрение, так и долгосрочное решение, которое в конечном итоге правильное, но потребуется несколько лет, чтобы добраться до этого момента.
Одним из способов, которым эта секция уникальна, является то, что эти задачи - это не только технические проблемы: они также (возможно, даже в первую очередь!) социальные проблемы. Они требуют сотрудничества L2 и кошельков и L1. Наша способность успешно решать эту проблему - это тест нашей способности держаться вместе как сообщество.
Большинство этих предложений представляют собой "высокоуровневые" конструкции и поэтому не оказывают значительного влияния на рассмотрение L1. Одним из исключений является общая последовательность, которая сильно влияет на MEV.
Если L2 станут очень масштабируемыми и успешными, но L1 останется способным обрабатывать только очень низкий объем транзакций, у Ethereum могут возникнуть множественные риски.
Поэтим причинам важно продолжать масштабирование L1 сам по себе и убедиться, что он сможет продолжать вмещать растущее количество использований.
Самым простым способом масштабирования является просто увеличение газового лимита. Однако это рискует централизовать L1, и тем самым ослабить другое важное свойство, которое делает Ethereum L1 таким мощным: его достоверность как надежного базового уровня. Существует дебаты о том, насколько устойчиво увеличение простого газового лимита, и это также меняется в зависимости от того, какие другие технологии внедряются для упрощения верификации более крупных блоков (например, истекание истории, безсостоятельность, доказательства валидности L1 EVM). Еще одной важной вещью, которую следует постоянно улучшать, является эффективность программного обеспечения клиента Ethereum, которое сегодня намного более оптимизировано, чем было пять лет назад. Эффективная стратегия увеличения газового лимита L1 включала бы ускорение этих технологий верификации.
Другая стратегия масштабирования включает в себя определение конкретных функций и типов вычислений, которые можно сделать дешевле без ущерба для децентрализации сети или ее свойств безопасности. Примеры:
Эти улучшения будут обсуждаться более подробно в будущем сообщении на Splurge.
Наконец, третья стратегия - это родные роллапы (или "увековеченные роллапы"): в основном, создание множества копий EVM, которые работают параллельно, приводя к модели, эквивалентной тому, что могут предоставить роллапы, но намного более интегрированной в протокол.
Существует три стратегии масштабирования L1, которые могут быть осуществлены индивидуально или параллельно:
Стратегии имеют различные компромиссы, и важно понимать их различия. Например, у нативных роллапов много общих недостатков с обычными роллапами: нельзя отправить одну транзакцию, синхронно выполняющую операции сразу в нескольких из них, как это делается с контрактами на том же L1 (или L2). Увеличение газового лимита отнимает другие преимущества, которые можно получить, сделав L1 более простым для верификации, например, увеличивая долю пользователей, запускающих узлы верификации, и увеличивая количество индивидуальных стейкеров. Сделать определенные операции в EVM более дешевыми может увеличить общую сложность EVM, в зависимости от того, как это будет сделано.
Большой вопрос, который должна ответить любая дорожная карта масштабирования L1, заключается в следующем: какова конечная цель того, что должно находиться на L1, а что - на L2? Очевидно, что абсурдно помещать все на L1: потенциальные случаи использования подразумевают сотни тысяч транзакций в секунду, и это сделало бы L1 полностью невозможным для проверки (если мы не выберем маршрут нативного rollup). Но нам действительно нужен какой-то принцип, чтобы убедиться, что мы не создаем ситуацию, при которой мы увеличиваем газовый лимит в 10 раз, серьезно ущемляем децентрализацию Ethereum L1 и обнаруживаем, что мы лишь перешли к миру, где вместо того, чтобы 99% активности находилось на L2, 90% активности находится на L2, и результат в целом выглядит практически таким же, за исключением необратимой потери большей части того, что делает Ethereum L1 особенным.
Одно из предполагаемых видений "разделения труда" между L1 и L2.источник.
Привлечение большего количества пользователей на L1 подразумевает улучшение не только масштаба, но и других аспектов L1. Это означает, что больше MEV останется на L1 (в отличие от того, чтобы стать проблемой только для L2), и поэтому будет еще более настоятельной необходимостью обращаться к этому явно. Это значительно увеличивает ценность быстрых слотов на L1. И это также в значительной степени зависит от успешной верификации L1 («Verge»).