在以太坊的持续进化中,“无状态”(Stateless)是一个常被提及却容易被误解的概念,它并非指以太坊完全没有状态,而是通过技术手段改变节点处理状态的方式,旨在提升网络效率、降低参与门槛,并为以太坊的长期扩容和可持续发展铺路,本文将从“以太坊的状态是什么”“无状态的核心逻辑”“实现路径”以及“意义与挑战”四个维度,为你拆解这一关键概念。

先搞懂:以太坊的“状态”是什么

要理解“无状态”,先得明白“状态”在以太坊中指的是什么,以太坊的“状态”是记录整个网络当前运行情况的动态数据库,它包含了所有账户的实时数据,比如账户余额、合约代码、存储变量等。

以太坊的状态会随着交易和区块的产生不断变化,当你向朋友转账1个ETH时,你的账户余额减少,朋友的账户余额增加,这些变化都会被更新到全局状态中,每个全节点(Full Node)都需要完整存储和同步这个状态,才能验证交易的有效性、执行智能合约,并参与共识。

这种“状态全量存储”的模式,虽然保证了以太坊的安全性和去中心化,但也带来了两个核心问题:

  1. 存储压力:随着以太坊用户和应用的增多,状态数据持续膨胀(目前已超过TB级别),全节点需要消耗大量存储空间和带宽,普通用户运行全节点的门槛越来越高。
  2. 效率瓶颈:节点在处理交易时,需要频繁读取和更新状态数据,这增加了计算和验证的时间,可能影响网络吞吐量。

“无状态”不是“没有状态”,而是“节点不存状态”

以太坊的“无状态”(Stateless)并非要删除状态,而是通过一种巧妙的分工,让单个节点不再需要“全量存储”状态,而是通过临时获取状态数据来完成验证。

在“无状态”模式下:

  • 状态存储与状态验证分离:网络中的节点不再需要完整存储所有状态数据,而是由“状态服务节点”(State Provider)负责存储和提供状态数据,普通验证节点(如轻节点或全节点)在处理交易时,只需从状态服务节点临时获取当前交易所需的状态数据(比如转账发起者的余额),完成验证后即可丢弃,无需长期存储。
  • 基于承诺的状态验证:为了确保临时获取的状态数据是真实有效的,以太坊将引入“状态承诺”(State Commitment)机制,类似于Merkle Patricia Trie(MPT)树,状态数据会被哈希成一个唯一的“承诺值”,并记录在每个区块的header中,验证节点只需检查状态数据的哈希值是否与区块中的承诺值匹配,即可验证其有效性,无需存储原始数据。

如何实现?两大技术基石:区块提议与CUSTODIAN

要实现“无状态”,以太坊计划通过两项核心技术升级:区块提议(Block Proposer)CUSTODIAN协议

区块提议:让区块“携带”状态承诺

在当前的以太坊中,区块只包含交易数据,验证节点需要自行查询状态数据来执行交易,而在“无状态”模式下,区块生产者(验证者)在打包区块时,会额外包含一个“状态证明”(State Proof),即该区块执行所需的状态数据的哈希承诺(通常是MPT树的根哈希)。

当验证节点收到区块后,无需从本地存储中查找状态数据,而是直接根据区块中的状态承诺,从状态服务节点获取对应的状态数据片段,并验证其哈希值是否匹配,如果匹配,说明数据有效,节点即可执行区块中的交易;如果不匹配,则拒绝该区块。

这种模式下,区块生产者相当于“状态的临时搬运工”,将验证所需的状态承诺“嵌入”区块,而验证节点则变成了“状态数据的临时使用者”,用完即弃。

CUSTODIAN协议:状态数据的“共享经济”

CUSTODIAN是以太坊“无状态”的核心协议,它定义了状态服务节点与验证节点之间的数据交互规则,CUSTODIAN就像一个“状态数据共享平台”:

  • 状态服务节点:负责存储完整的状态数据,并根据验证节点的请求,提供状态数据的片段(通常是MPT树的某个子树),同时收取一定的费用(以ETH支付)。
  • 验证节点:在处理区块时,根据区块中的状态承诺,向CUSTODIAN网络请求所需的状态数据,验证后用于交易执行。

为了确保状态服务的可靠性和安全性,CUSTODIAN协议会引入激励机制:诚实提供状态数据的节点可以获得奖励,而提供虚假数据的节点则会受到惩罚(如质押罚没),这种“共享经济”模式,既能降低验证节点的存储压力,又能激励节点参与状态服务,形成良性循环。 随机配图