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

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

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

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

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

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

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

Предел Small / Large / Native
Эффективные страницы без основного coinbase 63 / 206 / 63
Пользовательские страницы при дополнительной системной записи 62 / 205 / 62
Живые пользовательские входы 504 / 504 / 504
Вызовы контрактов до 63 в пределах доступных страниц
Различные сегменты State 256

Физический декодер сохраняет общий предел 256 тел / 82 905 байт. При принятии дополнительно проверяются бюджеты активного класса. Обычная логическая транзакция может занимать несколько страниц.

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

Универсальное дерево из 256 листьев фиксирует ID логических транзакций. Системная запись и пользовательская группа дают по одному листу. Многостраничный PagedSpend даёт один лист с полным логическим ID. Неиспользованные позиции имеют каноническое пустое значение; корень также связывает точное число групп.

Квитанция использует путь глубины восемь на позиции логической транзакции. Её данные восстанавливают ID всей группы, включая число и порядок страниц. Позиция физической страницы отличается от позиции логического листа.

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

Заголовок имеет фиксированную 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 описана в разделе «Доказательство выполнения работы», а долговечное доказательство включения транзакции — в разделе «Чеки».

Полное тело native-блока

При нативном исполнении Native-блок передаёт канонические типизированные открытия и выбранные торговые заявки вместе с фиксированными страницами. Предел полного payload составляет 713 689 байт. Декодер потока страниц сохраняет предел 82 905 байт. Доказательство имеет отдельный предел 1 100 000 байт.

Идентификаторы native-аллокаций используют бит 62 и последовательность ниже 2^62. Корень State связывает стоимость NOID и обязательства типизированных объектов. Корень транзакций фиксирует логические группы, включая обязательство выбранных торговых заявок. Квитанция определяет исполненную заявку внутри группы. См. форматы native.

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