递归零知识证明的构成有两个主要部分:Tick 和 Tock,这是两条对称的计算曲线。在 Tick 曲线上证明计算的结果可以通过 Tock 曲线进行验证计算。Tock 曲线上的验证计算的证明,又可以通过 Tick 曲线进行验证证明。某种计算从 Tick 曲线证明,并再通过 Tock 曲线验证证明(Wrap)的过程,是递归证明的基本电路框架。 同时,在 Mina 的网络中,所有的账户信息需要先通过 Poseidon Hash 计算,形成 Merkle 树。Merkle 树根代表着当前账户的状态。这个状态被称为 Staged ledger,即已经出块的账户状态。Mina 还需要对当前的所有账户信息进行证明。该证明可让后续节点进行验证。 但对已出块的账户进行证明需要较大计算时间,为了避免证明计算拖慢整个链的性能,Mina 设计了 Snarked ledger,即指已经证明过的所有账户信息。 这样的设置方式,可以在出块时,立即改变状态,即处于 Staged ledger 状态,而对账户信息进行证明,跨步到 Snarked ledger 状态,可以在后续进行。 Snarked ledger 是已经证明的账户状态。也就是说,通过验证 Snarked ledger 即可确定账户的状态,且 Snarked ledger 包含了全部账号的状态。节点只需要通过零知识证明验证 Snarked ledger,即可验证整个区块的合法性,并不需要整个历史记录,只要最后一个区块中的 Snarked ledger 就能验证,这也是 Mina 的区块链精简的原因。 而递归零知识证明(Tick 和 Tock 的交替验证)可以将上一次证明封装到下一次证明中来,这样每个证明都包括了所有的历史验证,并且每次证明都能维持大小不变。 Mina 将所有的证明(交易和区块证明)都架构在递归证明之上。而精简的区块链,在于 Snarked ledger 是可以验证的状态,不需要所有的历史区块信息,只要提供了证明信息就能确定当前的网络状态。 举个比喻,递归零知识证明将整个区块链的状态捕获为一个快照,当网络中的下一个区块形成时,前一个快照将作为下一个快照的背景图。依此类推,即使图像中包含无穷信息量的证据,图像也将始终保持相同大小。 区块链 22 KB 的大小确保了节点从一开始就仅通过存储和依赖此数据就可以向前移动,而不必存储整个庞大的区块记录或历史记录。 网络框架为了实现 zk-SNARK 的递归组合,Mina 网络框架中包含三个节点角色,每个角色负责不同的区块运行机制。具体如下:
区块生产者负责通过提供网络算力,处理交易并在链上生产区块。用户需要支付交易费用,以对区块生产者进行奖励。和一般的 Pow 机制一样,区块生产者会优先打包交易费用高的用户的交易。
SNARK 生产者负责利用 zk-SNARK 对区块进行压缩并生成证明,为区块生产者提供 zk-SNARK 进行交易验证,但这部分的 zk-SNARKS 证明是需要区块生产者对 SNARK 生产者进行付费。 (责任编辑:admin) |