Vitalik:Eth2 会越来越依赖于轻客户端
编者注 :7 月 28 日,Dean Eigenmann 在推特上询问 Eth2.0 为何使用 “执行环境方案”,是否真的能解决 “状态增长” 问题,引发了激烈的辩论。
所谓 “状态增长” 问题,指的是随着用户规模的不断扩大和合约数量的不断增加,以太坊全节点需要存储的状态数据在不断上升,对全节点的存储读写性能提出了越来越高的要求。
针对这一问题,人们提出过很多解决方案,比如所谓的 “状态租金”,以及 “无状态客户端”。状态租金即要求用户为自己所存储的状态支付价格,“无状态客户端” 则是通过改造区块结构来降低全节点对整个状态数据的访问需求。
实质上,这就是问的 Eth2.0 会如何设计状态存储方案并保证状态数据可用性的问题。
在下文中,Vitalik 简单解释了他对这一问题的看法。令人疑惑的是,Vitalik 将无状态客户端归为市场化存储方案的一种。但在我看来,无状态客户端是一种彻底的技术解决方案,就是为了避免使用在经济上非常复杂的、需要收费的方案。
Dean Eigenmann:
对我来说,无状态执行环境怎么看都不是一个解决状态增长问题的好办法(虽然好像也没有人想好好解决这个问题)。我不认为这一方案是可行的,而且其激励机制可能过于复杂、会破坏 Eth2.0 的简洁性。@wjvill @VitalikButerin 你们的设计理念是什么呢?
Vitalik:
我来从我的视角分析一下这场辩论吧。
一贯以来,区块链协议都将存储空间作为一项公共资源:所有的全节点都存储所有的内容;任何人只要使用了存储空间,就会把成本施加给所有其他用户。
这样的使用,应该也要付钱才对。
但若要付费,就不得不面对如下难题:很难确定到底怎么给存储空间定价、怎么确定目标存储空间大小、存储空间应是暂时性使用的还是永久可用、租金如何缴纳,等等。
另一方面,还有一种更加市场化的方案来安排存储资源:对于任意状态数据来说,都必有某些用户可以从状态数据可用性中获益,而且其他用户也会愿意存储这些数据。因此,我们可以让用户与存储方直接缔约来保证状态数据可用性。
基于市场的方案当然承认这样的可能性:如果用户疏忽大意,一些状态数据会 “消失”(即不可用)。所有基于市场的技术都会遇上这个问题。
因此,就有一种思想认为:没错,我们当然应该让私人缔约成为主导,但事关用户体验的便利性,协议确实应该保证状态可用性和存储空间供应。
“无状态客户端方案” 完全属于 “市场化存储空间” 学派。Vlad Zamfir 则完全属于另一个阵营。
市场化存储空间的一个好处是,你可以根据状态可用性保证服务的不同质量支付不同的价格。当然,另一个学派会说,要是让用户知道他们的状态数据可能有一天会用不了,dApp 开发者面临的复杂性要上升好几倍。
话虽如此,还是有一些折衷之道。举个例子,在 “执行环境方案” 中,可以建立一个执行环境、要求区块生产者必须在区块中包含使用时间不到一年的随机存储秘钥。这样就给了状态存储空间一年的保证。
不过,还是有一些开放性问题要留给实验性的解决方案。富状态性(Statefulness)是有不同层级的,例如:如果你只想保存一个 “静态见证(static witness)” 属性,你可以仅保存已用过的收据(receipts)的 ID 字段;比起全状态来说,这是非常轻量的状态了。
也就是说,情形正变得越来越明朗:Eth2 将越来越依赖于 轻客户端 <-> 服务器市场,哪怕只是出于让用户可以从自己没有同步的 1000 多个分片中获得数据的目的。状态供应是另一项义务,也可以放进来。
而且,在协议层还有一些别的方法可以用来强化状态存储保证,比如给主要类型的收据加入为期一年的托管证明(proof of custody)(如此执行环境可以恢复出整棵状态树)。
(完)
原文链接:
https://twitter.com/VitalikButerin/status/1155566281229254657
作者: Vitalik
翻译: 阿剑