理论上,用户可以做到「垃圾不落地」。用户可以仅发布带有 但是在实践中,这样的激励非常少,而适当的状态清理的技术复杂性又太大了。在许多合约中,给任何人赋予这样调用 无状态客户端这个问题的一类解决方案基于「无状态客户端」的观念(此文是论述这个观念的出处 ,此处是演讲视频)。基本原理是,让区块验证不再以持有全局状态为前提。相反,区块会自带证据(或者叫「见证数据(witness)」),证明其所访问状态的值。就跟现在的设计一样,区块内会包含一个「状态根(state root)」,所访问的值可以对应着状态根得到证明(译者注:默克尔证明即是一种常见的证明技术)。以太坊现在的状态树方案(默克尔帕特里夏树)支持这样的证明技术,像二进制树或者 Verkle Trie 这样更高效的方案也可以。见证数据也会证明处理完该块后新状态根的正确性。 无状态性有两种形式:
强无状态性是一个非常「优雅」的解决方案,因为它把责任完全转移给了用户,虽然为了保证实践中的良好用户体验,我们需要创造某些类型的协议来帮助不运行个人节点的用户维护状态、并处理用户需要与意料之外的账户交互的情形。打造这样的协议非常难。 此外,所有类型的无状态性都提高了网络所需的数据带宽;而强无状态性还需要交易声明其所交互的账户及存储项的键(概念上这个叫做「访问列表」)。 一个更温和的解决方案:状态过期 (责任编辑:admin) |