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

我的网站

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

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

时间:2020-06-16 08:47来源:未知 作者:admin 点击:
1. 初始化分片,即在账本建立时确定账户的初始情况。假设某个分片建立时有 100 个账户,这些账户都有初始的余额,我们需要用 v(i) 代表第 i 个账户,它

1. 初始化分片,即在账本建立时确定账户的初始情况。假设某个分片建立时有 100 个账户,这些账户都有初始的余额,我们需要用 v(i) 代表第 i 个账户,它是(地址 i,余额 i)这样的一对值;用 V 代表全部账户,它是(地址 1,余额 1)(地址 2,余额 2)……(地址 100,余额 100)这样的一组值。

同时需要生成两个值,第一个叫 c,它是对 V 的承诺,代表的是此时该分片所有账户和账户里的余额。出块节点手中都握有 c,(可以对比 Merkle 树根来便于理解),它是将来用于验证的摘要。

第二个叫π(i),它是对 v(i) 是 V 的成员的证明,代表第 i 个账户及该账户的余额是在总账本 V 中。每个账户都握有且只握有自己的π(i),它是将来发送交易时提交给出块节点的 proof。

在初始化阶段,承诺和证明的生成是需要初始「状态」的。

2. 第一笔交易。账户 i 发起整个分片的第一笔交易,此时它需要把π(i) 和交易一起提交给出块节点,出块节点对π(i) 进行计算,看结果是否与自己手中的 c 相符合,如果一致就可以相信发送方账户确实有多少余额,并以此判断它提交的交易是否合法。

3. 接下来是关键之处:对 c 和π(i) 进行更新。

c (对整个账本的承诺)不再是根据状态生成,它是用第一笔交易发生之前的 c,以及第一笔交易引起的余额变动生成的;π(i)(账户对自己的证明)也不是根据状态生成,它是用第一笔交易发生之前的π(i),以及第一笔交易对该账户的改变生成的。

在完成 c 和π(i) 的更新之后,出块节点手中便有了可以承诺所有用户新余额的新承诺(新 c),账户手中也有了可以证明自己新余额的新 proof (新π(i))。

以此类推,每笔交易都会改变一次 c,改变一次全部π(i),但这种改变不再依赖于状态数据,它取决于旧的 c 和π(i),以及上一笔交易;当需要验证一笔新交易时,出块节点手中总有最新的 c,它通过 c 和账户提供的π(i) 就能判断某笔交易是否合法,是否可被打包进区块。

那么到这一步,就终于实现了「不需要账本就能记账」,不管对于出块节点,还是对于账户,它们手中握着的都是某种密码学的证明,而不是账本的状态。另需一提的是,无状态与分片似乎是绝配,但无状态并不是针对分片的一种设计,它是针对公链的一种设计。

aSVC 的设计目标是要成为一个高效的成员证明,降低上述过程中的通信开销和计算开销,使得这种方案可用于无状态区块链的实现。从论文来看,使用 aSVC 方案,c 和π(i) 的大小仅为几十个字节,π(i) 的更新时间为 O(1),验证时间也为 O(1),该方案还支持把多个 proof 聚合为一个 O(1) 大小的 proof,这种低开销的实现正是 aSVC 的意义所在。不过就像 Vitalik 在以太坊研究者论坛中展开的相关讨论,aSVC 还需要做进一步的优化。 (责任编辑:admin)

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