织梦CMS - 轻松建站从此开始!

我的网站

当前位置: 主页 > 竞争币 > 以太坊

硬核讲解以太坊 2.0 如何结合分布式系统与密码学提升性能 (2)

时间:2020-06-16 08:47来源:未知 作者:admin 点击:
这会带来两大好处,一是不管节点被分配到哪个分片,它都可以立刻开始记账(出块)工作,几乎不用花费时间来获得以及同步该分片的账本,节点也因此

这会带来两大好处,一是不管节点被分配到哪个分片,它都可以立刻开始记账(出块)工作,几乎不用花费时间来获得以及同步该分片的账本,节点也因此可以在不同分片间轻松跳转;二是出块节点不需要存储账本,也就不需要高硬件配置,任何人抵押 32ETH 就能成为一个验证者,这非常有助于以太坊 PoS 的去中心化以及整个公链的安全。

但新问题跃然纸上:如果出块节点手中没有账本,它怎么知道交易发送方的钱够不够?密码学就在这时候登场了。

向量承诺:从查询到证明

不需要账本就能记账听上去不可思议,但其思路是简单的:在以前,节点有账本,一笔交易来后它翻看账本,查询交易是否合法;在以后,节点没有账本,交易发送方在提交交易的同时需要提交一个密码学证明(为了区分,后文特指密码学证明时都用 proof 表示),自己证明自己的这笔交易是合法的。

可出块节点为什么能够通过一个 proof 来判断某笔交易是否合法?这里涉及到两个密码学的重要概念,第一个叫「成员证明」。它指的是通过某种方法,证明个体是群体的一部分。如果能够证明某个账户状态是整个账本状态的一部分,出块节点当然就能相信这个账户状态,并以此为根据进行交易合法性的判断。

第二个叫「向量承诺」,它可以将群体,不管这个群体有多庞大,压缩成仅仅一个数,然后给出成员证明,该成员证明表明的是某个个体是属于这个数背后所关联的群体的,且能证明个体在群体中的位置,以及进行证明的更新。

Merkle 树是可被用于向量承诺的方法之一,我们以它为例来看如何实现成员证明。

下图是一棵 Merkle 树,最下一层的叶子节点存储的是应用数据,其他非叶节点存储的是其子节点的哈希值。如果知道绿色节点和所有黄色节点的值,就可以从下至上进行三次哈希运算,得到该 Merkle 树根的值,也就是 6c0a。

硬核讲解以太坊 2.0 如何结合分布式系统与密码学提升性能

那么,如果验证方手中有树根的值(6c0a),证明提供方把绿色节点的值和所有黄色节点的值作为一个 proof 给验证方,验证方是不是就能通过计算三次哈希的值是否等于 6c0a 来判断绿色节点的值是否在这棵 Merkle 树中?答案是可以。这就是对绿色节点属于 Merkle 树的成员证明,它是以向量承诺的方式完成的,而这也几乎就是比特币 SPV 节点(简单支付验证)的工作方式。

如下图所示,SPV 节点不存储完整的区块 / 账本,但存储了每个区块中 Merkle 树的树根(此 Merkle 树的叶子节点存储的是该区块所有交易),当它需要查询一笔交易是否存在时,会找全节点要一个该交易的 proof,该 proof 类似于上文中绿色节点和黄色节点值的一个打包(Merkle 路径),然后 SPV 节点会计算这些值的总的哈希值是否等于自己手中 Merkle 树根的值,如果相等,则说明这笔交易是该 Merkle 树的一个成员,即这笔交易是存在的。 (责任编辑:admin)

织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容