news 2026/8/21 16:30:24

AMA Protocol区块结构拆解:entry header、VR/DR字段与序列化格式全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AMA Protocol区块结构拆解:entry header、VR/DR字段与序列化格式全解析

AMA Protocol区块结构拆解:entry header、VR/DR字段与序列化格式全解析

【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node

AMA Protocol是一个面向AI Agent生态的隐私Layer 1公链,采用500ms超快出块、BLS12-381聚合签名与VecPak序列化方案。本文将区块结构拆解为最易理解的层级:从entry header的每个字段,到VR/DR字段的随机性来源,再到底层序列化格式的字节级规则,帮你彻底看懂AMA Protocol的区块是怎么构造、验证与落盘的。


一、先认识"区块":entry 是什么?

在AMA Protocol中,一个区块被称为entry。它与传统区块链的block等价,但结构更扁平、更紧凑。整体由五部分组成:

组成说明
header区块头,承载共识与随机性信息
hash区块头哈希,32字节,SHA256(VecPak(header))
signature出块者BLS12-381签名,96字节
txs交易列表,最大3MB(3,145,728字节)
mask / mask_size / mask_set_size可选字段,特殊会议块(special meeting)专用

核心结构定义在 entry.ex,Rust侧的编码实现在 entry.rs。


二、entry header 字段逐一拆解

header 是区块的"身份证",共10个字段,各有严格的大小约束:

字段大小含义
slot整数全局槽位号,单调递增
height整数区块高度,从0开始
prev_slot整数上一个槽位号
prev_hash32字节上一个区块的哈希
signer48字节出块者公钥(BLS12-381)
dr32字节确定性随机值,见下文
vr96字节可验证随机值,见下文
root_tx32字节交易哈希树的根
root_validator32字节验证者集合的根
root_chain32字节MMR链根,未来扩展用

其中root_tx由所有交易哈希构造Merkle树得到,root_validator则额外包含验证者数量、验证者公钥哈希和最近变更高度,用于快速校验出块者身份(见 entry.ex 中的 root_tx / root_validator 实现)。


三、DR字段:一条32字节的确定性随机链

DR(Deterministic Randomness)字段只有32字节,但它不是随意生成的——它是一条可复现的哈希链:

  • 当前块的dr = SHA256(上一个块的dr)
  • 任何节点都能独立重算并校验,无法被出块者操纵

创世块的 dr 则来自一段真实世界的熵(如新闻头条),保证起点不可预测(entry_genesis.ex)。

验证逻辑在 entry.ex 的 validate_next 中:只要SHA256(上一个dr) != 当前dr,区块立即被判为无效。


四、VR字段:96字节的可验证随机链

VR(Verifiable Random)字段是一个真正的VRF(可验证随机函数)链:

  • 当前块的vr = BLS12-381签名(上一个vr),使用专门的dst_vrf
  • 96字节的BLS签名本身就是随机数,同时又能被任何人验证签名正确性

VR 在共识中扮演关键角色:节点会把vr及其 Blake3 哈希(entry_vr_b3)传给WASM合约环境,还作为每epoch的segment_vr_hash参与 UPoW(矩阵乘法工作量证明)的难度校验(fabric_gen.ex)。

验证逻辑见 entry.ex 的 validate_next:BLS验证(当前signer, 当前vr, 上一个vr)


五、hash 与 signature:区块怎么签名?

  • hash=SHA256( VecPak(header) ),即先把整个header做VecPak序列化,再取SHA256,32字节
  • signature= 用出块者私钥对上述hash做BLS12-381签名,96字节,使用dst_entry

任何接收节点拿到区块后,第一步就是重新计算hash并与签名比对,防止篡改。

💡 特殊会议块:当出块者掉线、网络被迫出空块时,会启用mask字段,由验证者集合中≥67%的成员做聚合签名,mask_size必须等于验证者总数,防止伪造(fabric_gen.ex)。


六、VecPak 序列化格式:字节级拆解

AMA Protocol 自研的VecPak 序列化格式是理解区块落盘与传输的关键。它只有6种基础类型标签:

标签值类型
0x00NULL
0x01TRUE
0x02FALSE
0x03整数
0x05字节串
0x06列表
0x07Map(键值对)

整数采用自描述Varint编码:首字节的高1位为符号位,低7位为字节长度,随后跟大端序的数值字节。比如整数0只占1个字节。

Map则有一个关键特性——键必须按编码后的字节序排序,保证同一份数据序列化结果唯一,这正是区块哈希可复现的基石。看创世块的原始字节就能发现字段按dr → height → prev_hash → prev_slot → signer → slot → txs_hash → vr的字典序排列(entry_genesis.ex)。

如果你想在WASM合约里读写数据,可以直接复用官方SDK的 sdk_vecpak.ts,它提供了完整的编解码器实现。


七、一次完整的区块验证流程

  1. 解码:用VecPak反序列化entry,检查字段大小(dr=32、vr=96、signer=48、prev_hash=32)
  2. 验签:重算SHA256(VecPak(header)),用BLS公钥验证96字节签名
  3. 链式校验prev_hash必须等于上块hash、slot/height连续、dr与vr链式正确
  4. 根校验root_txroot_validator与本地计算结果一致
  5. 交易校验:逐笔验证交易合法性与唯一性,总大小不超过3MB

全套逻辑在 entry.ex 中集中实现,配合Rust NIF(entry.rs)保证性能。


八、总结

AMA Protocol的区块结构拆解其实并不复杂:10个header字段 + 32字节hash + 96字节签名 + 交易列表,而VR/DR字段通过"哈希链+签名链"的组合,既保证了随机性不可操纵,又让每个节点都能独立验证。底层统一的VecPak序列化格式则让哈希计算、落盘存储和网络传输三处共享同一套字节标准——这正是500ms出块速度背后的工程细节。

对区块链底层结构感兴趣的读者,建议从 entry.ex 开始阅读,配合 entry_genesis.ex 的创世块真实字节,理解速度会快很多。

【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 16:30:20

mcp-servers之GitLab服务器:项目管理的自然语言自动化上手教程

mcp-servers之GitLab服务器:项目管理的自然语言自动化上手教程 【免费下载链接】mcp-servers Model Context Protocol Servers 项目地址: https://gitcode.com/gh_mirrors/mc/mcp-servers 想让 AI 直接帮你管理 GitLab 项目?mcp-servers 项目中的…

作者头像 李华
网站建设 2026/8/21 16:29:23

Greasy Fork 使用指南:三步定制你的网页

Greasy Fork 使用指南:三步定制你的网页 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork Greasy Fork 是一个在线用户脚本仓库,里面放满了别人写好的"网页改造…

作者头像 李华
网站建设 2026/8/21 16:27:30

XCodeScanner实战:3步实现相册本地图片二维码识别功能

XCodeScanner实战:3步实现相册本地图片二维码识别功能 【免费下载链接】XCodeScanner A new frame for decode QR code and bar code on Android. Its faster, simpler and more accurate. 项目地址: https://gitcode.com/gh_mirrors/xc/XCodeScanner 在日常…

作者头像 李华