Протоколdocs/protocol/blocks.md

Блоки и заголовки

При прямом приёме блока используется атомарная пара:

text
{канонические байты блока, соответствующее терминальное доказательство HistoryStep}

Блок содержит фиксированный заголовок и до 256 фиксированных тел транзакций. Терминальное доказательство устанавливает корректность семантического заголовка без nonce и полного перехода State.

Содержимое блока

В позиции транзакции 0 обязательно находится основная награда. Следом идёт запланированная выплата фондам развития, если она требуется. Страницы пользовательских PagedSpend занимают остальные позиции в каноническом порядке групп.

Ограничение Значение
Всего фиксированных тел, включая системные записи 256
Пользовательских страниц без запланированной выплаты 255
Пользовательских страниц с запланированной выплатой 254
Активных пользовательских входов 1 020
Активных пользовательских выходов 510
Активных пользовательских действий 1 530
Затронутых сегментов State 256

Декодер отвергает значения счётчиков, превышающие эти лимиты, до выделения памяти или декодирования полезной нагрузки.

Корень транзакций

Каждое тело занимает один лист универсального дерева из 256 транзакций. Неиспользованные позиции имеют единое каноническое пустое значение. Точный счётчик тел оборачивает дерево под доменом корня транзакций, поэтому добавление или удаление внешне пустых листьев не создаёт эквивалентный блок.

Чеки используют восьмиуровневый путь включения в это дерево. Логический PagedSpend может занимать несколько последовательных листьев; чек связывает его логическую позицию и число страниц.

Канонический заголовок

Заголовок имеет фиксированную 212-байтную кодировку с порядком байтов от младшего к старшему (little-endian):

Поле Размер Значение
prev_block_hash 32 Идентификатор родительского блока с nonce
state_root 32 Точный корень UTXO после перехода
tx_root 32 Корень транзакций, связанный со счётчиком
timestamp 8 Время Unix в секундах
height 8 Высота дочернего блока
miner_address 32 Получатель основной награды
nonce 16 PoW nonce Poseidon2b
difficulty_target 32 Точное целевое значение ASERT в кодировке little-endian
log_slots 4 Степень домена слотов
active_slot_count 8 Число активных UTXO после перехода
alloc_counter 8 Счётчик аллокатора после перехода

Порядок полей зафиксирован консенсусом. Будущие форматы не могут переставлять существующие поля.

Два идентификатора заголовка

Идентификатор блока с nonce хэширует все поля в домене BLOCKHDR. Он используется в связях родителей, якорях эпох транзакций и канонической идентичности блока.

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

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

Основная награда

Существует ровно один активный выход основной награды. Его creation_id использует отдельное пространство имён, помеченное высотой:

text
2^63 | block_height

Обычная аллокация выходов остаётся ниже 2^63, поэтому запись награды не может столкнуться с пользовательским идентификатором аллокации.

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

Представление терминального доказательства

Терминальное доказательство использует каноническое сжатое представление общих Merkle-путей. Узлы аутентификации, общие для нескольких открытий, передаются и хранятся один раз. При декодировании восстанавливаются полные пути для рекурсивного проверяющего. Математическое доказательство, число запросов и аутентифицированные матрицы от этого не меняются.

Консенсус ограничивает сериализованный terminal размером 1 100 000 байт, считая сжатое представление вместе с его метаданными. Распаковка независимо ограничена 1 100 000 байтами. Байты блока имеют отдельный предел 82 905 байт; тела транзакций и обрамление пакета не расходуют лимит terminal. Повреждённые и неканонические кодировки отвергаются до дорогой проверки.

Принимаемый пакет

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

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

Проверка nonce описана в разделе «Доказательство выполнения работы», а долговечное доказательство включения транзакции — в разделе «Чеки».

Техническая документация ParanO(1)dПоведение консенсуса определяется исходным кодом.