Scroll — это решение 2 уровня (Layer 2) для масштабирования Ethereum на основе накопительных пакетов с нулевым разглашением (zkRollups) и совместимое с виртуальной машиной Ethereum (EVM). Основной частью Scroll является виртуальная машина zkEVM, которая используется для подтверждения достоверности выполнения операций EVM в сети Scroll.
Технически, Scroll следует классической схеме работы ZK-роллапов, основная идея которой заключается в объединении большого количества транзакций в один пакет и создании краткого доказательства с нулевым разглашением (zk-Proof) вне основной сети.
Основные преимущества
Рассмотрим основные преимущества данного решения:
- Масштабируемость. Scroll обрабатывает транзакции за пределами основной сети и публикует краткие доказательства достоверности в Ethereum. Благодаря этому достигается более высокая пропускная способность и низкие затраты по сравнению с основной сетью Ethereum.
- EVM-совместиомсть. Разработка приложений на Scroll полностью эквивалентна разработке на Ethereum. Любой смарт-контракт, написанный для EVM на Solidity или Vyper, можно с легкостью развернуть в сети Scroll.
- Коллективное видение. С самого начала разработка Scroll полностью открыта для сообщества Ethereum. Это сочетает в себе лучшие идеи и предложения от заинтересованных сторон и в последствии ведет к более безопасной и тщательно спроектированной архитектуре. Дорожную карту развития Scroll также определяет сообщество.
- Безопасность. Платформа использует передовую технологию доказательства с нулевым разглашением (zk-Proof), что обеспечивает безопасность и надежность. К аудиту протокола привлечены несколько независимых аудиторов для обеспечения качественной независимой оценки кода.
Как работает Scroll?
Как и в других решениях масштабирования Ethereum, основанных на накопительных пакетах ZK, в Scroll большое количество транзакций объединяется в пакеты и только затем вместе с доказательством достоверности отправляются в основную сеть.
Архитектура Scroll включает в себя 3 функциональных слоя:
- Слой расчетов (Setlement Layer). Обеспечивает доступность данных и их порядок для канонической сети Scroll, проверяет доказательства достоверности и позволяет пользователям и децентрализованным приложениям (dApps) отправлять сообщения и активы между сетями Ethereum и Scroll. В качестве слоя расчетов выступает Ethereum, в котором развернут мост и контракт накопительного пакета.
- Слой секвенирования (Sequencing Layer). Содержит узел, обеспечивающий выполнение транзакций, отправленных в секвенсор Scroll и в мостовой контракт L1, создает блоки L2, а также узел объединения, который объединяет транзакции, публикует данные транзакций и информацию о блоках в Ethereum, обеспечивая доступность данных, а также отправляет доказательства достоверности в Ethereum для финализации.
- Слой проверки (Proving Layer). Состоит из пула проверяющих узлов, которые обеспечивают создание доказательств достоверности для zkEVM и проверку достоверности транзакций L2, а также координатора, который отправляет задачи проверки для проверяющих узлов и передает доказательства достоверности узлу накопительного пакета для финализации в Ethereum.
Мостовые и накопительные контракты
Scroll соединен с базовым слоем Ethereum через накопительный (Rollup Contract) и мостовой (Bridge Contract) контракты. Вместе они обеспечивают доступность данных для транзакций L2 и позволяют пользователям передавать активы и сообщения между L1 и L2.
- Накопительный контракт (Rollup Contract) получает корни состояния L2 и блоки от Sequencer. Он хранит корни состояния в состоянии Ethereum и данные блока L2 как данные вызовов Ethereum. Это обеспечивает доступность данных для блоков Scroll и использует безопасность Ethereum, чтобы индексаторы, включая Relayer, могли реконструировать блоки L2. Как только доказательство блока, устанавливающее достоверность блока L2, подтверждено накопительным контрактом, соответствующий блок считается завершенным в Scroll.
- Мостовой контракт (Bridge Contract), развернутый в Ethereum и Scroll, позволяет пользователям передавать произвольные сообщения между уровнями L1 и L2. В дополнение к этому протоколу передачи сообщений, создан не требующий доверия протокол моста, позволяющий пользователям передавать токены ERC-20, ERC-677, ERC-721 и ERC-1155 в обоих направлениях. Чтобы отправить сообщение или средства из Ethereum в Scroll, пользователи вызывают транзакцию для передачи сообщения через мостовой контракт. Релеййер проиндексирует эту транзакцию на L1 и отправит ее в секвенсор для включения в блок L2. Для отправки сообщений из Scroll обратно в Ethereum используется аналогичный процесс в мостовом контракте в L2.
Процесс объединения транзакций
Секвенсор L2 состоит из службы синхронизации, мемпула и исполнителя:
- Служба синхронизации. Следит за появлением сообщений из мостового контракта L1 и обнаружив, генерирует новую транзакцию, добавляя ее в локальную очередь транзакций L1.
- Мемпул (Mempool). Собирает транзакции, которые напрямую отправляются в секвенсор L2.
- Исполнитель (Executor). Извлекает транзакции из очереди транзакций в L1 и из мемпула в L2, затем исполняет их для создания нового блока в L2.
Узел объединения состоит из релейера (Relayer), и двух предлагающих (Chunk Proposer и Batch Proposer):
- Релейер (Relayer). Отправляет транзакции финализации и завершения транзакций в контракт накопительного пакета для обеспечения доступности данных и их финализации.
- Предлагающие Chunk Proposer и Batch Proposer предлагают новые фрагменты.
Пакетная обработка транзакций
Целью этой многоуровневой схемы пакетной обработки транзакций является снижение затрат на передачу данных и проверку доказательств. Этот подход увеличивает степень детализации единиц объединения на уровне L1, при этом учитывается фиксированная пропускная способность. В результате пакетная обработка сокращает объем данных, которые должны храниться в контракте, и оптимизирует затраты на проверку доказательств за счет большего количества транзакций в L2.
В сети Scroll транзакции объединяются в пакет по нескольким уровням:
- Группа упорядоченных транзакций упаковывается в блок.
- Серия смежных блоков группируется в общий блок. Чанк — это базовый блок для генерации доказательства zkEVM.
- Серия смежных фрагментов группируется в накопительный пакет. Пакет является базовой единицей для финализации данных и проверки доказательств на уровне L1. Доказательство для накопительного пакета — это совокупное доказательство всех блоков доказательств в этом пакете.
Обмен сообщениями между L1 и L2
Scroll имеет произвольный мост передачи сообщений, который обеспечивает передачу токенов и позволяет децентрализованным приложениям (dApps) взаимодействовать между L1 и L2.
Существует два основных подхода к отправке сообщения с L1 на L2: отправка произвольных сообщений и отправка принудительных транзакций. Оба подхода позволяют пользователям инициировать транзакцию в L2 на L1 и вызывать произвольные контракты на L2. Для произвольных сообщений отправителем транзакций L2 является контракт «L1ScrollMessenger«. Для принудительных транзакций отправителем L2 является внешняя учетная запись (EOA).
Таким образом, Scroll предоставляет пользователям несколько стандартных шлюзов для простого внесения депозитов в виде токенов ERC-20, ERC-677, ERC-721 и ERC-1155. По сути, эти шлюзы кодируют депозиты токенов в сообщение и отправляют его шлюзам в L2 через контракт «L1ScrollMessenger«.
На уровне L2 пользователи могут отправлять произвольные сообщения для вывода токенов на L1 и вызова контрактов в L1. Как и в случае с L1, на L2 есть несколько стандартных шлюзов, чтобы упростить процесс вывода токенов в L1.
Контракт «L2ScrollMessenger» также предоставляет функцию отправки сообщения. Отличие от аналогичного контракта на L1 в том, что игнорируется параметр «gasLimit«, поскольку комиссия за транзакцию выплачивается непосредственно на L1. Функция кодирует информацию о выводе в сообщение и отправляет его в L1 по той же схеме, что и в контракт «L1ScrollMessenger«.