Merkle 树

一棵二叉哈希树,其根值承诺了 SolMask 池中每一笔存款。

SolMask 将每一笔存款作为叶子节点写入一棵深度为 24 的 Poseidon、append-only Merkle 树,可容纳多达 16,777,216 笔存款后才需要轮换新的池。树的根是一个 32 字节的值,从密码学上承诺了整个存款历史——任何叶子节点变化,根值都会随之改变。

取款时,你的零知识证明会断言你的 commitment 出现在树中的某个位置,但并不暴露具体是哪一处。证明会携带一条 Merkle 路径(在 24 层每层各带一个兄弟节点哈希),电路据此自下而上重新计算,验证根值是否吻合。

链上有一个 root_history PDA,保存着最近 64 个 root,每当新存款落账就刷新一次。取款只要能匹配其中任何一个最近的 root 就算有效,因此短暂的根更新不会让几秒前生成的证明立刻失效。存款指令真正修改的只是 frontier(树最右侧的那条路径),这保证了每笔存款的成本对树深度而言保持恒定。

相关术语

Merkle 树 · Glossary · SolMask