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

我的网站

当前位置: 主页 > 竞争币

Vitalik Buterin:以太坊无状态客户端方案能如何改进?

时间:2021-07-13 10:34来源:未知 作者:admin 点击:
为了防止以太坊的状态容量无止境地膨胀,我们需要用一些方法使旧状态「失活」, 这样加入网络的节点就不再需要存储旧状态了。即使大多数的客户端都变成无状态,似乎也可以合理

为了防止以太坊的状态容量无止境地膨胀,我们需要用一些方法使旧状态「失活」, 这样加入网络的节点就不再需要存储旧状态了。即使大多数的客户端都变成无状态,似乎也可以合理预见,最终这个系统会扩容到网络无法一直保证所有状态都可用的地步。有两个方法可以使旧状态失活:

直接删掉,然后可以把它移到另外的默克尔树,这样关心该状态对象的人可以获取相应的默克尔分支,在未来某个时候用它来激活该状态。

不把对象移出树结构;相反,只在树的该位置标记「失活」,这样节点就不会存储它 (且协议也不会要求它们这样做)。通过发送一个提供默克尔证明 (即见证数据) 的事务来访问该状态,失活的对象就可以重新被访问了。

方法 (1) 对应于「经典的存储租金方案」,方法 (2) 对应于传统「无状态客户端」的最简单延伸——旧状态可以被遗忘的模型。这两种方法都允许关心特定状态对象的个人追踪默克尔分支,这样随后如果那些状态对象失活了它们可以用来激活这些对象。然而,这两种方法都是有明显问题的。

当要在某个已失效合约的同一个地址上再创建合约时,方法 (1) 会出现一些极端情况。那就是,如果一个合约在地址 A 上创建了,然后已经失效了,那么在地址 A 上创建这个合约的事务会被重新执行,这样会在地址 A 上创建一个新对象,这会影响原始对象的激活。另一种情况是当在地址 A 上创建了一个对象,然后经历失活、被激活、被修改 (例如,发送合约上的资金到另一个账户)、再失活、再用第一次失活所在的默克尔分支激活。这违背了保留规则,且可能被用于铸币;需要增加额外的默克尔证明来证明一个合约还没有被另一个特定状态激活,而该状态也尝试被激活。

方法 (2) 遇到的是不同的问题。假设两个相邻的地址 (也就是两者间没有对象) A1 和 A2 都已失活。这样,不仅 A1 和 A2 都不再可以访问 (除非有人存储了默克尔分支),而且 A1 和 A2 之间的所有地址都不可以访问了。也就是说,如果总共有 N 个地址,那么大约 1/N 的可用地址空间都不再可访问了。当一半的地址都失活了,大约 1/4 的地址空间不再可访问。随着时间推移,会越来越难找到空间生成新的地址。而且由于新地址越来越集中在剩下的「可访问」空间上,每 N 年可访问空间减半的这种影响会呈指数增长。

提议
我提议对方法 (2) 进行修改,可以解决以上的问题。正如很多方法 (2) 的提议实现方案所呈现的,账户有「活跃」与「失活」两种状态,失活账户是那些超过一年未被访问过的账户。要访问失活账户,你需要提供见证数据;当失活账户被访问了,该账户会自动解除失活状态 (触及任何账户都会重置它的一年失活期计算)。修改内容如下: (责任编辑:admin)

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