查看原文
其他

22 kB 的区块链 —— 技术参考



整个 Mina 区块链约为 22kb,相当于几条推文的大小。

为了分析上述声明,首先让我们明确此处“区块链”所代表的含义:
  1. 用户所需的状态清晰可用表示(即不仅仅是哈希),亦即用户的当前账户余额

  2. 节点为了以 trustless 的方式验证状态是否真实所需的数据

  3. 在网络上广播交易以进行转账的功能


通常的区块链都符合上述的 (1),(2) 和 (3)。


在比特币或以太坊等其他网络中,为了完全验证网络当前状态的任意部分,矿工需要下载网络交易的全部历史记录(由区块的链组成)。对于 account-based 或 UTXO-based 的网络都是如此。任何新节点(或长期处于脱机状态的节点)为了以 trustless 的方式同步到网络,都必须下载他们错过的所有区块。


在比特币或以太坊等其他网络中,存在着“轻客户端(light client)”的概念。这些轻客户端适用于低容量环境,帮助用户从区块链的最新状态验证/访问相关信息,无需进行高成本(时间和空间上的同步操作。他们通过从区块中读取区块头并验证他们接收到的区块余额是否正确来做到这一点,因此需要信任向他们发送数据的全节点。这些轻节点不能代表我们上述定义的“区块链”。


Mina 用一个易于验证的恒定大小加密证明代替完整的区块链,从创世区块开始到其他任意区块。验证一个区块相对应的证明相当于验证截止到当前块后几个块的所有交易。验证函数的证明和输入都在最新的 gossiped 区块中。请注意,由于上述“区块链”的定义包括“可用”一词,此定义意味着在像 Mina 这样简洁的协议中,我们需要的不止是一个哈希状态不透明的证明对象。


此验证过程适用于 Mina 网络中的所有节点。网络中的某些角色确实需要额外的信息来履行职责,但这超出了我们上面给出的定义。阅读下方附录中有关“区块生产者”节点了解更多信息。



区块链所需的可用数据展示


我们希望 (1)能够查询特定账户的余额和 (2)能够向网络提交交易。对于这个我们称之为“非共识节点”的节点,它只需要在其内存中存储以下内容:协议状态、账户、该账户的 merkle 路径和验证密钥。重要的是,这些强大的节点不是轻客户端。它们具有与全节点相同的安全性。


这个只充当“非共识节点”的节点的客户端软件尚未实现。它在后主网的路线图上。


协议状态


协议状态是网络当前状态的明确表示。它包括各种数据结构的哈希,包括分类账。区块生产节点围绕包含内部协议状态的区块进行 gossip。


Mina 中的区块也包含其他信息;包括新交易和之前区块中交易的 SNARK 的证明。递归 zk-SNARK、验证函数和验证密钥使我们能够仅通过证明和来自单个新区块的协议状态来验证整个区块序列。


在验证新状态有效后,节点还可以独立检查新区块是否优于现有区块,而无需信任源,方法是将其与上一个已知的最佳协议状态进行比较,然后我们可以选择在不优于现有区块的情况下忘记此信息,或者替换我们存储的信息。换句话说,当我们监听新的状态时,我们只需要保持一个协议状态。


账户


Mina 使用 account-based 模型(与以太坊类似);与公钥对应的余额存储在账户记录中。不存储完整 account-based 账本的节点可以从对其进行存储的节点请求特定的账户记录(如区块生产节点:见下方附录)。


账户的 Merkle 路径


此外,节点还将请求账户的 merkle 路径以验证账户记录是否有效,无需信任任何节点。生成的 merkle 根应与区块链 snark 验证的账本状态相匹配。



计算大小


因此,Mina 中的非共识节点能够以无需信任的方式验证区块链 SNARK 认证账本中的整个区块链和账户,就像其他网络上任何其他更庞大、(同步时间和空间上)成本更高的全节点一样 (如比特币或以太坊)。让我们看看这个数据的大小:


这些数据中的每一个的大小都可以根据实践经验进行测量 —— 我们使用这段代码对其进行了确定(实际存储的二进制数据)。执行时,我们得到以下信息(以字节为单位):Proof size: 7063
Protocol State size: 822
Account size: 181
Path size: 741
Total size (combined): 8807
节点还需要一个密钥来验证区块链 SNARK,其在磁盘上的大小为 2039 B。


结果约为 11 kB。从我们最初计算得出数字达到 22 kB 以来,Mina 的密码学已经有了显著的发展,协议变得更高效。


Snarked 账本


请注意,被区块链 SNARK 验证的账本落后于最新账本几个区块,这是由于交易 SNARK 的处理方式。我们称其为 snarked 账本,由 SNARK worker 节点生产的交易 SNARK 进行验证。一个区块对应的最新账本(staged-ledger)由区块生产者通过将交易应用到账本来明确验证,而不由区块链证明保证。



结论


我们论证了仅需 11 kB 大小的数据就可以表示和验证整个区块链。我们宣称整个 Mina 区块链约为 22 kB。而实际上,它甚至更小。



附录:区块生产节点


区块生产节点执行的任务不仅仅是验证状态。为了有效地生产区块,区块生产者维护最后 k 个区块的链(其中 k 是我们的共识算法,ouroboros samasika 中的常数,目前设置为 290)。k 表示区块的终局性层面;一个其上有 k 个块的区块被逆转的概率可以忽略不计,因此其中的所有交易将永远得到确认。区块生产者维护在最后 k 个块中发生的任何分叉,以确定最佳链并从中产生区块。区块生产者还维护包括完整账本在内的所有数据结构,以便能够生成其他节点随后可以进行验证的协议状态。虽然需要更大的状态,但对于一个新的区块生产节点,同步到最新状态相当于验证 k 个区块链 SNARK,并在这 k 个区块中应用交易。



往期回顾

文字版|什么是zk-SNARK

Kimchi:Mina 最新版本的证明系统

2022 年 2 月|Mina 生态开发进展更新




关于 Mina Protocol


About Mina Protocol



Mina 是全球最轻量级区块链,由参与者参与治理。


凭借其优雅的设计,Mina 是第一个实现零知识智能合约 zkApp 的简易可编程性的一层网络。独特的隐私和安全功能以及通过其零知识智能合约 zkApp 连接到任何网站的能力,使得 Web3 更具安全性和私密性 —— 为我们都应得的民主未来铺平了道路。Mina 由总部位于美国的非营利组织 Mina 基金会管理。



全球最轻量区块链 人人皆可参与

公众号|Mina Protocol Official

微 博|Mina_Protocol









您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存