区块与区块头
被接受的区块包是一个原子对:
{规范区块字节, 匹配的 HistoryStep 终端证明}
区块包含固定区块头和最多 256 个固定交易物理页。终端证明绑定不含 nonce 的语义区块头及完整 State 转换。
区块内容
交易位置 0 必须是主要奖励。若计划中的开发付款到期,则紧随其后。用户 PagedSpend 页按规范交易组顺序占据剩余位置。
| 限制 | 数值 |
|---|---|
| 固定物理页总数,含系统记录 | 256 |
| 无计划付款时的用户页位置 | 255 |
| 有计划付款时的用户页位置 | 254 |
| 有效用户输入 | 1,020 |
| 有效用户输出 | 510 |
| 有效用户操作 | 1,530 |
| 触及的不同 State 分段 | 256 |
解码器会在分配内存或解码载荷前拒绝超限计数。
交易根
每个物理页占据通用 256 叶交易树中的一个叶子。未使用位置具有唯一规范空值。交易根的域分离上下文还绑定精确物理页数量,因此添加或删除外观为空的叶子不能产生等价区块。
收据使用该树中的八层包含路径。一个逻辑 PagedSpend 可以占据多个连续叶子;收据绑定其逻辑位置与页面数量。
规范区块头
区块头采用固定 212 字节小端序编码:
| 字段 | 大小 | 含义 |
|---|---|---|
prev_block_hash |
32 | 父区块含 nonce 的区块 ID |
state_root |
32 | 精确的转换后 UTXO State 根 |
tx_root |
32 | 绑定数量的交易根 |
timestamp |
8 | Unix 秒时间 |
height |
8 | 子区块高度 |
miner_address |
32 | 主要奖励接收者 |
nonce |
16 | Poseidon2b PoW nonce |
difficulty_target |
32 | 精确的小端序 ASERT 目标值 |
log_slots |
4 | 槽位域指数 |
active_slot_count |
8 | 转换后未花费 UTXO 数量 |
alloc_counter |
8 | 转换后分配计数器 |
字段顺序由共识锁定,未来格式不能重排现有字段。
两种区块头标识
含 nonce 的区块 ID 在 BLOCKHDR 域分离上下文下哈希全部字段。它用于父链接、交易周期锚点和规范区块身份。
语义区块头 ID 以相同顺序哈希同一组字段,但跳过 nonce,并使用 SEMHDR__ 域分离上下文。HistoryStep 绑定该投影,使矿工可以改变 nonce,而无需重建转换证明。
接受节点要求终端与原生含 nonce 区块头引用完全相同的非 nonce 字段。
主要奖励
区块中恰好有一个有效的主要奖励输出,其 creation_id 使用与普通分配分离、带高度标签的命名空间:
2^63 | block_height
普通输出分配始终低于 2^63,因此奖励记录不会与用户分配标识冲突。
主要奖励只能领取当前矿工补贴以及矿工可领取手续费,不能取回已销毁的 State 增长费。
接受包
终端含有绑定版本、高度、语义区块头哈希和证明类别的元数据。包解码在分配内存前检查长度,并拒绝尾随字节、元数据不匹配或属于其他区块头的终端。
完整区块包保留 18 个区块,区块头永久保存。