Блоки и заголовки
Принятый блок — атомарная пара:
{канонические байты блока, соответствующее терминальное доказательство 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
использует отдельное пространство имён, помеченное высотой:
2^63 | block_height
Обычная аллокация выходов остаётся ниже 2^63, поэтому запись награды не может
столкнуться с пользовательским идентификатором аллокации.
Основная награда может включать только текущую долю субсидии майнера и доступные
ему комиссии. Сожжённый компонент роста State вернуть нельзя.
Принимаемый пакет
Терминальное доказательство содержит метаданные, связывающие его версию, высоту, хеш семантического заголовка и класс доказательства. Декодирование пакета проверяет длины до выделения памяти и отвергает лишние байты, несогласованные метаданные или терминальное доказательство другого заголовка.
Полные пакеты хранятся 18 блоков. Заголовки хранятся постоянно.
Проверка nonce описана в разделе «Доказательство выполнения работы», а долговечное доказательство включения транзакции — в разделе «Чеки».