Для всех / Как это работает

Расчёт и запись

Содержимое каждого блока публикуется, по порядку, включая блок 0, и Ethereum всегда держит либо данные, либо фиксацию данных, доступных в другом месте. Именно это делает сеть проверяемой, а не просто заявленной.

Два уровня публикации

УровеньЧто он держит
Слой доступности данныхполный пакет, на каждый блокконтентно-адресуемый, с ключом по хешу; секвенсер проверяет дайджест подтверждения приёма, прежде чем полагаться на него
Инбокс на Ethereumкомпактный конверт, называющий пакетодна фиксация на целевой интервал 60 с, blob или calldata по измеренным ценам
Резервполный пакет как calldata на Ethereumиспользуется всякий раз, когда путь доступности данных отказывает, так что сеть остаётся выводимой во время сбоя

Представьте магазин, который хранит каждый чек в архивной комнате и раз в минуту отправляет банку запечатанную сводку: "вот отпечаток чеков, которые я только что подшил". Банк не может прочитать чеки по отпечатку, но любой, кто попадёт в архивную комнату, может проверить, что ничего не изменено. А если архивная комната когда-нибудь недоступна, магазин отправляет банку сами чеки. Секвенсер Pickle - это магазин, слой доступности данных - архивная комната, а Ethereum - банк.

Каждый запечатанный блок производит пакет деривации, несущий его полный список транзакций. Пакет хранится в контентно-адресуемом слое доступности данных, с ключом по его хешу, и секвенсер проверяет подтверждение приёма, прежде чем полагаться на него. Компактный конверт, называющий этот пакет, затем фиксируется в контракте-инбоксе на Ethereum. Если путь доступности данных отказывает по любой причине, вместо этого полный пакет публикуется на Ethereum как calldata.

Каждый блок публикуется, по порядку, включая блок 0. Инбокс принимает дополнения только от назначенного ключа батчера и выпускает индексированное событие на каждый батч; этот индекс - полный порядок, за которым следит каждый верификатор.

Пакет несёт полный список транзакций блока вместе с диапазоном блоков, хешем родителя, хешем блока и зафиксированной меткой времени; метка времени включена, потому что она часть среды исполнения, а не только заголовка, и реплика должна исполнять против тех же часов, чтобы запечатать тот же хеш. Публикация двухуровневая: пакет в контентно-адресуемое хранилище под его хешем с проверкой дайджеста при подтверждении приёма, и конверт в инбокс L1 на окно агрегации. Инбокс закрыт ключом батчера и выпускает индексированное событие на каждое дополнение. Инструмент фиксации, blob или calldata, выбирается на каждую отправку по измеренным ценам, поскольку при таком размере пакета газ исполнения доминирует при низких ценах на blob, а обычный calldata выигрывает при высоких.

Что несёт пакет

  • Полный список транзакций блока, так что ничему в блоке не нужно доверять.
  • Диапазон блоков, хеш родителя и хеш блока, так что реплика знает, куда он встаёт и что она должна воспроизвести.
  • Зафиксированную метку времени, потому что транзакция, читавшая часы, видела это значение, а реплика, исполняющая против других часов, запечатала бы другой хеш.

Почему одна фиксация на окно

Ethereum не получает одну транзакцию на каждый запечатанный блок. Полные данные уходят в слой доступности данных на каждый блок; одна фиксация уходит на Ethereum на каждое окно агрегации, с целевым интервалом 60 секунд. Агрегация - то, что удерживает смоделированную стоимость расчёта в пределах нескольких миллионов долларов в год, а не десятков или сотен миллионов, которых стоил бы дизайн с публикацией на каждый блок. Страница ограничений даёт смоделированный диапазон и то, на чём он основан.

Независимая проверка

Любой оператор может запустить тот же бинарник как реплику. Она ничего не производит. Она читает инбокс на Ethereum с последнего применённого индекса, получает каждый пакет по его контентному адресу или декодирует встроенный резервный calldata, повторно исполняет каждую транзакцию по порядку против зафиксированной метки времени, запечатывает блок локально и сравнивает хеш с тем, который зафиксировал секвенсер.

При любом несовпадении реплика останавливается навсегда

Расхождение терминально по дизайну: повторная попытка запечатала бы следующие блоки и ушла бы от канонической сети, похоронив причину. Остановившаяся реплика - это сигнал, что опубликованные данные и зафиксированный хеш не согласуются. Ничто в сети не выносит решения по этому разногласию; страница модели доверия говорит, что из этого следует.

Синхронизированная реплика отдаёт стандартный RPC чтения из собственного независимо выведенного состояния. Её балансы, квитанции и заголовки выведены заново локально, а не доверенные копии ответов секвенсера. Отправка транзакций пересылается секвенсеру; реплика не принимает ничего в локальный мемпул.

Откуда читается история

Секвенсер оптимизирован отвечать о настоящем и хранит короткое окно недавних блоков. Полная история индексируется в базу данных обозревателя, которую секвенсер непрерывно наполняет и где отвечают на всё историческое. Оба находятся ниже по потоку от тех же опубликованных пакетов, и реплика может восстановить любой из них только из Ethereum и слоя доступности данных.