这是 Consensys 的一个研究项目,文章作者是研究员 Sandra Johnson,目前无状态以太坊还在建模阶段,我也会持续跟进他们最新的动态。
在回答这个问题之前,我们先了解下什么是”状态“,以及为什么我们要摆脱“状态”。
以太坊世界的状态是指所有的以太坊钱包地址、它们的余额、部署的智能合约和相关的存储。由于新的钱包不断产生,新的智能合约也不断被部署,所以从当前的设计上来看,以太坊的状态数据会越来越多,无限增长。
而无限的状态增长意味着:新增一个新的以太坊全节点需要更长的时间,并且运行全节点需要更多的存储空间。带来的后果就是以太坊矿工运行节点的成本也会不断增加,运行节点挖矿的吸引力也就随之降低,最终以太坊难以规模化,节点越少越不安全。
Vitalik Buterin 早在 2017 年就认识到了这些问题,当时他首次提出了无状态以太坊的概念,主要目的是:通过缓解无限的状态增长,使以太坊规模化。
确切的说,“无状态”并不真正意味着“没有状态”。就像我们说无状态请求或无状态服务的时候,说的“状态”都是指你产生了对别人有影响的东西,也就是说,你把维护和存储以太坊状态的责任转交给了网络中的另一个参与者,以太坊上现在就是这样的。
因此,“无状态”其实上是一个错误的说法,无状态的以太坊客户端并不是完全没有状态的,而是各自选择了自己想要维持的状态,大家相互之间不影响。
一个无状态的以太坊客户端应该能够选择它想维护的信息,并且持续更新它们。反之,它可以完全无视那些自己不感兴趣的状态,并且不会产生任何影响。
实现无状态以太坊的关键机制是区块”见证“(见证是个密码学概念,后面会慢慢解释),在无状态以太坊中,当客户端从矿工那里收到经过验证的区块时,他们也将收到这个区块相应的见证。区块的“见证”由执行该区块所含交易所需的所有数据组成。
但如果是这样,区块的数据量就会很大,将有更多的数据包在网络上传递,这就得评估对网络产生的影响,以确保以太坊生态系统在这种变化的环境中继续安全有效地运行。
这就引出了一个关键问题:无状态以太坊是否可行?
要回答这个问题,我们首先来建个模。
建模是预测未来的常用手段,也可以用来探索,当我们想改变一个稳定运行的环境时,可能出现的无意的连锁反应。
无状态的以太坊就是这么一种场景。目前的以太坊网络已经存在而且运行良好,我们可以不断获得大量靠谱的数据,然后也很了解它的运作方式。如果我们引入无状态以太坊,可能会打破现有的平衡,首先得搞清楚:改变后的系统将如何调整和运作。如果我们开始实施无状态以太坊,很多不确定的事情得提前了解清楚,比如,最坏和最好的情况是什么?
建模可以帮助我们捕捉已知的东西,也有利于我们对未知的探索。基于我们对已知事物的了解,我们可以对我们正在研究的系统中的关键过程(process)和相互作用进行建模。对于未知的东西,我们用概率来表示模型中的不确定性。我们也会咨询那些对当前系统或问题有深入了解的专家,把他们的知识在模型中表达出来,这个很重要,有助于定位哪些过程(process)可能会受到系统变化的影响。
另外,建模也要平衡必要的系统细节和模型的紧凑性。虽然模型里最好包含所有可能影响结果的因素,或包含构成一个复杂过程的每一部分。但有些因素对系统的整体行为的贡献有限,反而还增加了模型的混乱程度。因此,我们要咨询专家,确定最能体现系统行为的“关键因素”,或其中的一部分。然后,其实那些不太相关的细节所表现的行为往往已经包含在关键因素的行为中了。
后面的系列将一步步来解释我们为无状态以太坊建模的方法。
V. Buterin, “The Stateless Ethereum Concept”, 2017.B. Edgington, “What’s New in Eth2 – 10 January 2020”, 2020.G.I. Hotchkiss, “The 1.x Files: The State of Stateless Ethereum”, 2019.