Этот репозиторий содержит пример накопительного пакета, который интегрируется с Espresso Sequencer. Пример накопительного пакета представляет собой простое хранилище учетных записей «ключ-значение», которое получает заказанные транзакции от Espresso, выполняет их на виртуальной машине объединения и публикует ложные доказательства состояния в смарт-контракте L1 (Ethereum). Накопительный пакет содержит простой API для отправки транзакций и запроса остатков на счетах.
Espresso построен на основе HotShot, сети, которая достигает консенсуса по пакетам сводных транзакций. На высоком уровне объединение — это решение масштабирования L1, которое выполняет дорогостоящие вычисления вне цепочки. В случае zkRollups проверяющий периодически отправляет контрольные точки состояния свертки вместе с пакетными подтверждениями действительности транзакции на L1. Проиллюстрированный здесь пример представляет собой макет zkRollup. Чтобы узнать больше о пакетах Espresso, прочитайте нашу документацию.
Убедитесь, что в вашей системе установлен docker
.
Для дистрибутивов Linux следуйте официальным инструкциям вашего дистрибутива Linux или ознакомьтесь с официальными инструкциями докера.
Сначала нам нужно запустить локальную сеть Espresso Sequencer.
git clone https://github.com/EspressoSystems/espresso-sequencer
cd espresso-sequencer
docker compose pull
docker compose up -d --wait
После завершения разверните пример накопительного пакета, и его можно будет запустить в исходном режиме.
Для запуска в исходном виде требуется набор инструментов Rust. Мы предоставляем оболочку nix для установки всех зависимостей. Nix можно установить через nix-installer. После установки запустите следующее из корня проекта:
nix develop
just dev-demo
Запустив just dev-demo
, вы сможете увидеть new state event
через несколько минут.
submit
API накопительного пакета. Если Алиса обеспокоена цензурой, она может отправить свою транзакцию непосредственно в секвенсор.Light Client
на уровне L1, который проверяет, достигнут ли консенсус по новому состоянию.Состояние свертки
Состояние примера свертки состоит из:
Исполнитель
Исполнитель — это служба, отвечающая за подписку на новое состояние, опубликованное в контракте легкого клиента L1, применение транзакций к состоянию объединения и отправку ложных доказательств в контракт объединения. В накопительных пакетах роли исполнителя и проверяющего часто разделяются на две отдельные службы, но в этом примере они объединены для простоты.
API накопительного пакета
API объединения — это REST API, который включает в себя конечную точку submit
и query
.
Объединенный контракт
Контракт объединения хранит самое последнее обязательство состояния объединения. Контракт обновляет обязательство состояния, когда он получает действительное доказательство перехода состояния от исполнителя.
В этом примере мы использовали несколько компонентов Espresso, как описано ниже. Более подробную информацию можно найти в документации.
Легкий клиент — это смарт-контракт, который проверяет целостность состояния свертки. Код контракта можно найти здесь
Мы запустили сеть эспрессо, используя образы докеров эспрессо-секвенсора. Сеть использует Hotshot для достижения консенсуса по состоянию объединения. Архитектуру можно найти здесь
Espresso Network использует HotShot для достижения консенсуса относительно состояния объединения.