Groth16 是一种基于双线性对的 zk-SNARK,是目前生产环境中证明最短、验证最快的方案:每个证明仅由三个椭圆曲线元素(约 192 字节)组成,在 Solana 上验证大约消耗 150 万 compute units。SolMask 的取款电路被编译为 BN254 曲线上的 Groth16,与 EVM rollup 所用曲线相同,因此链上验证器代码已经过充分实战检验。
每一次 SolMask 取款都会附带一份 Groth16 证明。该证明同时验证四件事:证明者掌握一个 nullifier_secret,它的 Poseidon 哈希等于被公开的 nullifier;对应的 commitment 是某个 Merkle 树的叶子节点,而该树的根与最近发布的某个 root 一致;当前 Solana slot 已经晚于该 commitment 的 unlock_slot;交易里的收款地址、金额和 relayer 手续费与证明者所授权的完全相同。
Groth16 要求每个电路都做一次可信启动(trusted setup)。SolMask 的启动以多方仪式的形式进行,并保留了公开 transcript,确保任何单一参与者都无法独自伪造证明。