SPV 节点通过成员证明判断交易是否存在,该证明系统包含三个部分:节点手中有一个简短的摘要(树根);证明提供方给出一个 proof;节点计算此 proof,看是否与自己手中的摘要相符合。 到此,我们就完成了「不需要账本就能查账」,它是把查询思路改为了证明思路;接下来我们要实现的是「不需要账本就能记账」。 对于以太坊 2.0 分片上的出块节点而言,它的证明系统同样是由摘要、证明、验证这三部分构成,但它要做到是使用交易发送方(而不是全节点)给出的 proof 来判断一笔新交易是否合法(而不是旧交易是否存在),并以此判断为基础记账。 无状态:从证明账本到证明行为 想象有一个很小的村庄,这个村庄每天只有 3 笔村民间的交易,村长拿着账本负责记账。A 现在要给 B 转 5 块钱,传统的思路很简单:村长看 A 的账户上是否有 5 块钱,如果有,就记下这笔新交易。 现在换一个思路:假设 A 在今天早上要给 B 转 5 块钱,村长知道 A 的账户在昨天早上有 10 块钱,那么如果 A 能够证明昨天的 3 笔交易都和他没有关系,是不是就意味着他的账户在今天早上依然有 10 块钱?这样一来,村长是不是不用查账本就能放心记下这笔新交易?答案是肯定的。 如果 A 昨天有一笔交易怎么办?很简单,A 这时不是证明自己没交易,而是证明自己昨天只有一笔交易,且那笔交易用掉了 3 块钱;村长就知道他还有 7 块钱,可以记下新交易。 这个思路的转变至关重要,你一定要去理解它,这是「无状态」这件事的奥妙所在。不难发现,即使是不拿账本的 SPV 节点,它在查询交易时实际上也是要用到账本,或者说状态的,只不过它不是自己存储状态,而是去找全节点要这个状态的证明;但在这个新思路下,状态的作用可以彻底被「行为证明」取代,那么这条链就能够以无状态的方式去设计。(注:行为证明这个词并无出处,是作者为了易于理解这样描述的) 如何实现无状态?如何借助于行为证明完成记账?依然是成员证明的方法。能够利用 Merkle 树来完成这种成员证明吗?理论上可以,但对于「无状态」这个应用场景来说,用它的开销过大。在本文中,我们将介绍通过「可聚合子向量承诺」来进行成员证明,以实现无账本记账。 可聚合子向量承诺(aSVC)是一个最新的研究成果,来自于论文《无状态密码货币的可聚合子向量承诺》,作者是 Alin Tomescu、Ittai Abraham、Vitalik Buterin (以太坊)、Justin Drake (以太坊)、Dankrad Feist (以太坊)、 Dmitry Khovratovich (以太坊)。其工作过程是这样的: 1. 初始化分片,即在账本建立时确定账户的初始情况。假设某个分片建立时有 100 个账户,这些账户都有初始的余额,我们需要用 v(i) 代表第 i 个账户,它是(地址 i,余额 i)这样的一对值;用 V 代表全部账户,它是(地址 1,余额 1)(地址 2,余额 2)……(地址 100,余额 100)这样的一组值。 (责任编辑:admin) |