20 января 2023

Обзор архитектуры Scroll

Перевод

Это вольный перевод статьи: https://scroll.mirror.xyz/nDAbJbSIJdQIWqp9kn8J0MVS4s6pYBwHmK7keidQs-k 

Введение

Scroll — EVM zk-Rollup для масштабирования Ethereum. С технической точки зрения Scroll состоит из двух частей. Основной частью является zkEVM, который используется для доказательства корректности выполнения EVM на втором уровне. Мы создавали его в открытом режиме совместно с группой Privacy and Scaling Explorations в Ethereum Foundation более года. Но чтобы превратить zkEVM в полноценный zk-Rollup на Ethereum, нам также необходимо построить вокруг него полноценную архитектуру L2.

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

Архитектура Scroll

Текущая архитектура состоит из трех инфраструктурных компонентов (см. рис. 1):

  • Узел (нода)Scroll: Создаёт блоки L2 из пользовательских транзакций, фиксирует их на базовом уровне Ethereum и передаёт сообщения между L1 и L2.
  • Roller net (Сеть свитчей/роллеров): Генерирует доказательства валидности zkEVM для подтверждения правильности выполнения транзакций.

Контракты Rollup и Bridge: Обеспечивают доступность данных для транзакций Scroll, проверяют доказательства достоверности zkEVM и позволяют пользователям перемещать активы между Ethereum и Scroll.

Далее — подробно описываем роль каждого из этих компонентов.

Scroll. Menaskop. 01

Нода (узел) Scroll

Нода Scroll — основной способ взаимодействия приложений и пользователей со Scroll. Он состоит из трёх модулей: Sequencer, Coordinator и Relayer.

Sequencer предоставляет интерфейс JSON-RPC и принимает транзакции L2

Каждые несколько секунд он извлекает партию транзакций из L2 mempool и выполняет их для создания нового L2 блока и (вычисления) нового корня состояния. Наша реализация секвенсора основана на Go-Ethereum (Geth), одной из самых популярных реализаций ноды Ethereum. Благодаря форку Geth можем добиться наилучшей совместимости и унаследовать безопасность, прошедшую проверку временем.

Как только генерируется новый блок, Координатор (Coordinator) получает уведомление и трассировку выполнения этого блока от Секвенсора. Затем он отправляет трассировку выполнения случайным образом выбранному роллеру из пула роллеров для генерации доказательства.

Relayer следит за мостовыми и роллерными контрактами, развёрнутыми как на Ethereum, так и на Scroll. У него есть две основные обязанности. Во-первых, он следит за контрактом rollup, чтобы отслеживать состояние блоков L2, включая наличие данных и доказательство их достоверности. Во-вторых, он отслеживает события ввода и вывода средств из мостовых контрактов, развернутых на Ethereum и Scroll, и передаёт сообщения от одной стороны к другой.

Roller сеть

Роллеры выполняют в сети функцию доказательств, которые отвечают за генерацию доказательств достоверности для zk-Rollup. Ожидается, что роллеры будут использовать ускорители, такие как GPU, FPGA и ASIC, чтобы сократить время доказательства и стоимость доказательства. На рис. 2 (см. ниже) показано, как роллер генерирует доказательство достоверности для каждого блока. Процесс состоит из следующих шагов:

  1. Сначала роллер преобразует трассировку выполнения, полученную от координатора — в очевидцев (witnesses).
  2. Он генерирует доказательства для каждой из схем zkEVM.
  3. Наконец, он использует агрегирование доказательств для объединения доказательств от нескольких схем zkEVM в одно доказательство блока.

Scroll. Menaskop. 2

Контракты Rollup и Bridge

Scroll подключается к базовому уровню Ethereum через смарт-контракты Rollup и Bridge. Вместе они обеспечивают доступность данных для транзакций L2 и позволяют пользователям передавать активы и сообщения между L1 и L2.

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

Контракты Bridge, развёрнутые на Ethereum и Scroll, позволяют пользователям передавать произвольные сообщения между L1 и L2

В дополнение к этому протоколу передачи сообщений мы также создали протокол бездоверительного моста, позволяющий пользователям осуществлять мосты между активами ERC-20 в обоих направлениях. Чтобы отправить сообщение или средства из Ethereum в Scroll, пользователи вызывают транзакцию sendMessage на контракте Bridge. Relayer проиндексирует эту транзакцию на L1 и отправит её в Sequencer для включения в блок L2. Отправка сообщений из Scroll обратно в Ethereum использует аналогичный процесс на мостовом контракте L2.

Как работает zkRollup в Scroll?

Сложив эти три архитектурные части вместе, можем теперь объяснить рабочий процесс zkRollup в Scroll, кратко описанный на рис. 3 ниже.

Scroll. Menaskop. 3Блоки L2 в Scroll генерируются, фиксируются на базовом уровне Ethereum и завершаются в следующей последовательности шагов:

Sequencer генерирует последовательность блоков. Для i-го блока Sequencer генерирует трассировку выполнения T и отправляет ее координатору. Тем временем он также отправляет данные транзакции D в качестве calldata контракту Rollup на Ethereum для проверки доступности данных и результирующих корней состояний и обязательств по данным транзакции контракту Rollup в качестве состояния.

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

После генерации блочного доказательства P для i-го блока, роллер отправляет его обратно Координатору. Каждые k блоков Координатор отправляет задание на агрегирование другому Роллеру для агрегирования доказательств k блоков в одно агрегированное доказательство A.

Наконец, координатор отправляет агрегированное доказательство A контракту Rollup для завершения L2 блоков от i+1 до i+k путем проверки агрегированного доказательства на основе корней состояний и обязательств данных транзакций, ранее отправленных контракту Rollup.

Рисунок 3 иллюстрирует, что блоки роллапа будут завершены на L1 в многоэтапном процессе. Каждый блок L2 будет проходить следующие три стадии, пока не будет завершён.

Precommitted означает, что блок был предложен Sequencer’ом и отправлен Rollers

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

Committed указывает на то, что данные транзакции этого блока были размещены в контракте rollup на Ethereum. Это гарантирует, что данные блока доступны, но не доказывает, что он был выполнен надлежащим образом.

Finalized означает, что правильность выполнения транзакций в этом блоке была доказана путем проверки доказательства достоверности на цепочке Ethereum. 

Финализированные блоки считаются каноническими частями цепочки Scroll L2.

Если сложить все это вместе, то Scroll сможет выполнять родной байткод EVM на L2, наследуя при этом сильные гарантии безопасности от базового уровня Ethereum. В следующем посте этой серии мы расскажем о том, как разработчики могут развернуть dapps на Scroll и как пользователи могут взаимодействовать с ними.

Подробнее

Мы разработали архитектуру Scroll в соответствии с нашим видением и ценностями, а также нашими техническими принципами. В следующих статьях мы расскажем, как Scroll будет использовать эту архитектуру для обеспечения более масштабируемого опыта пользователей и разработчиков на Ethereum. Оставайтесь с нами, чтобы узнать больше, и регистрируйтесь, чтобы попробовать нашу тестовую сеть пре-альфа на сайте signup.scroll.io!

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

Если вы являетесь исследователем ZK, разработчиком ZKP, Go или Solidity, или инженером GPU, мы работаем над многими интересными техническими задачами на грани возможного. Приходите, чтобы вместе с нами создавать передовые решения этих проблем в открытом доступе!

Примечание menaskop

Мой личный топ ZKP-проектов включает и этот:

  1. ZkSyck
  2. Starkware
  3. Scroll

Но есть и другие и о них поговорим ещё не раз, а пока всё и 

До!

Обсудить в Discord!