Протокол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 вернуть нельзя.

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

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

Полные пакеты хранятся 18 блоков. Заголовки хранятся постоянно.

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

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