AMA Protocol Proof API解析:如何验证MMR与HBSMT包含性证明

📅 2026/8/21 13:28:58
AMA Protocol Proof API解析:如何验证MMR与HBSMT包含性证明
AMA Protocol Proof API解析如何验证MMR与HBSMT包含性证明【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/nodeAMA ProtocolAmadeus 公链的Proof API是一组面向轻客户端与第三方验证者的核心接口专门用于生成和验证两种密码学包含性证明MMR包含性证明证明某区块确实已提交进主链账本与HBSMT包含性证明证明某合约状态或验证者集合确实存在于最新状态树中。本文从零开始一步步带你读懂 Proof API 的请求方式、返回结构以及验证流程让你在集成节点或开发轻钱包时少走弯路。为什么需要包含性证明传统全节点验证需要同步整条链成本极高。而MMRMerkle Mountain Range默克尔山脉和HBSMT高扇出稀疏默克尔树允许验证者只携带一条极短的哈希路径Proof即可确认某条数据曾经/当前确实存在无需下载全部历史。MMR一种只增不改的哈希累加器用来提交区块哈希序列支持 O(log N) 级别的证明体积。HBSMT基于 RocksDB 持久化的稀疏默克尔树用来提交合约状态 KV键值对支持按命名空间分域证明。两者的证明生成与验证逻辑分别在 mmr.ex 与 hbsmt_rdb.rs 中实现而对外统一出口就是 api_proof.ex。Proof API 三大核心能力速览能力函数/端点作用输出核心字段区块 MMR 证明API.Proof.block/2证明区块已提交进 MMRroot_chain、siblings、other_peaks区块证明校验API.Proof.verify_block/2用可信根验证 MMR 证明true / false合约状态证明GET /api/proof/contractstate/{key}证明状态键存在于 HBSMTroot、siblings、terminus验证者集合证明GET /api/proof/validators/{entry_hash}证明某高度验证者集合可信key、value、proof其中contractstate与validators已直接暴露为 HTTP 接口路由定义在 multiserver.ex任何客户端都能调用block/2则作为节点内部模块函数如 RPC 与轻节点同步使用。如何验证 MMR 包含性证明区块确实已上链第一步生成证明API.Proof.block/2接收两个参数目标区块高度整数或 32 字节哈希/Base58 编码以及可选的历史状态选项:at_height— 在该高度区块应用前的 MMR 状态上证明:at_hash— 在该哈希区块应用前的 MMR 状态上证明都不传 — 默认对当前 MMR 顶端tip证明。返回的证明包含block_hash、height、at_heightMMR 叶子数、chain_id、root_chain提交到区块头的链根、peak_pos、siblings与other_peaks。核心逻辑见 api_proof.ex。第二步用可信根验证验证必须遵守信任契约Trust Contract这也是最容易被忽视的要点可信根必须来自 BLS 签名过的区块头而不是证明自带的root_chain字段——该字段仅作提示若与可信根不一致会直接拒绝调用方要自行核对block_hash与height是否是自己真正想问的那个区块跨网络验证时需直接调用MMR.verify_proof/4并传入自己的chain_id。verify_block(proof_map, trusted_root_chain) ├─ 解码并比对 root_chain 与 trusted root ├─ 重组证明size / leaf_idx / peak_pos / siblings / other_peaks └─ MMR.verify_proof从区块哈希逐层哈希到峰根 → 重组全部峰 → 重算 root_chain验证器会对证明的每个结构字段做严格检查尺寸、索引范围、兄弟节点数量与长度任何伪造或畸形证明都会返回false而不会抛异常可以放心暴露在公开 RPC 边界。细节见 mmr.ex。如何验证 HBSMT 包含性证明合约状态与验证者合约状态证明一键 GETGET /api/proof/contractstate/{Base58(key)}例如查询某个账户或币种的状态GET /api/proof/contractstate/B58fJkQ2...返回namespace自动识别account:、coin:、bic:等命名空间、key、以及完整的 HBSMT 证明root、siblings、terminus。如果带上期望的value一起请求节点会直接返回result: true/false一步完成证明验证。验证者集合证明轻节点同步刚需GET /api/proof/validators/{entry_hash}轻客户端在恢复状态时需要确认某个高度上到底是谁在验证。该接口返回key与value验证者集合 SHA-256 哈希validators该高度的验证者公钥列表proofHBSMT 包含性证明用于把value锚定到验证者状态根。其构造逻辑位于 entry.ex把验证者公钥、数量、变更高度组织成 KV 后调用RDB.hbsmt_root_prove生成证明。HBSMT 证明结构深度解读所有 HBSMT 证明都通过统一的encode_hbsmt_proof/1编码输出见 api_proof.ex字段含义root当前 HBSMT 状态根32 字节Base58siblings从叶子到根的哈希兄弟路径terminus.path终点节点的路径编码terminus.identity_hash终点节点身份哈希terminus.value_hash终点节点值哈希terminus为:empty表示该键当前不存在——这本身就是一种有效的不存在证明可用于区分状态为空与状态被删除。常见错误与排查清单返回字段含义与对策error: :pruned_history该高度历史已被裁剪需向存档节点请求error: :target_not_rooted目标高度尚未达到已定根高度等待同步error: :commitment_not_rooted:at_height指定的快照状态未定根error: :snapshot_unavailable该区块的 MMR 快照未保存error: :out_of_range目标高度超出所选 MMR 状态范围写在最后AMA Protocol Proof API把复杂的密码学封装成了几个简单可靠的接口MMR 证明回答这个区块在不在主链上HBSMT 证明回答这个状态在不在最新状态树里。对于开发轻钱包、浏览器或第三方审计工具的你来说只需掌握可信根来源与证明结构校验这两条原则就能安全地构建自己的验证逻辑。想深入源码推荐按这个顺序阅读先看 api_proof.ex 了解接口全貌再读 mmr.ex 理解 MMR 数学细节最后结合 hbsmt_rdb.rs 与 entry.ex 掌握状态证明的落地实现。祝你验证顺利【免费下载链接】node项目地址: https://gitcode.com/GitHub_Trending/node95/node创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考