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

我的网站

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

以太坊状态规模日益恶化,Vitalik 系统性梳理了可能的解决方案(2)

时间:2021-02-18 08:49来源:未知 作者:admin 点击:
理论上,用户可以做到「垃圾不落地」。用户可以仅发布带有 SELFDESTRUCT 条件的合约,等他们再也用不上这个合约的时候,就调用这个操作码移除这个合约

理论上,用户可以做到「垃圾不落地」。用户可以仅发布带有 SELFDESTRUCT 条件的合约,等他们再也用不上这个合约的时候,就调用这个操作码移除这个合约、清空其 token 余额;他们还可以使用智能合约钱包,通过一个已有的外部持有账户(EOA)来发送交易,而无需生成一个新的 EOA (EOA 状态是没法删除的)。

但是在实践中,这样的激励非常少,而适当的状态清理的技术复杂性又太大了。在许多合约中,给任何人赋予这样调用 SELFDESTRUCT 的权限都是不合适的(人们想要的就是「无法终止」的应用!),而且,也会给用户体验和代码上也会增加很多复杂性。实际上,由于 SELFDESTRUCT 用处极其有限而副作用极大,我更倾向于永远移除这个操作码。如果我们真想控制状态数据的规模,我们需要的是一个网络中的节点可以 默认 丢弃不再被使用的「垃圾状态」的方法。

无状态客户端

这个问题的一类解决方案基于「无状态客户端」的观念(此文是论述这个观念的出处 ,此处是演讲视频)。基本原理是,让区块验证不再以持有全局状态为前提。相反,区块会自带证据(或者叫「见证数据(witness)」),证明其所访问状态的值。就跟现在的设计一样,区块内会包含一个「状态根(state root)」,所访问的值可以对应着状态根得到证明(译者注:默克尔证明即是一种常见的证明技术)。以太坊现在的状态树方案(默克尔帕特里夏树)支持这样的证明技术,像二进制树或者 Verkle Trie 这样更高效的方案也可以。见证数据也会证明处理完该块后新状态根的正确性。

无状态性有两种形式:

  • 弱无状态性:出块者仍然需要完整的状态,以为(自己制造的)区块生成见证数据;但验证区块的阶段可以是无状态的;

  • 强无状态性:没有任何节点需要完整的转台。反过来,是交易发送者需要提供见证数据,而出块者可以聚合这些数据。交易发送者自己负责存储为所关切的账户生成见证数据所需的部分状态树。

强无状态性是一个非常「优雅」的解决方案,因为它把责任完全转移给了用户,虽然为了保证实践中的良好用户体验,我们需要创造某些类型的协议来帮助不运行个人节点的用户维护状态、并处理用户需要与意料之外的账户交互的情形。打造这样的协议非常难。

此外,所有类型的无状态性都提高了网络所需的数据带宽;而强无状态性还需要交易声明其所交互的账户及存储项的键(概念上这个叫做「访问列表」)。

一个更温和的解决方案:状态过期 (责任编辑:admin)

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