以太坊可扩展性挑战:状态数据

虽然以太坊的区块 Gas 可用量上限提高了,但是区块(数据量)大小没有多大改变,因为以太坊上交易数量与数据体量之间并不是完全的正相关。
不久前,以太坊达到了满负荷,但是它处理的交易量只有历史最高记录的一半。我们可以从中得到很多启示。
如上图所见,以太坊上的区块数据量大小和区块 Gas 上限之间显然有某种关系。如果是折线图,也会呈现出上升趋势。不过,二者的关系有点复杂。
以太坊的 Gas 是衡量执行一项操作需要消耗多少计算资源的抽象单位。
由于合约是图灵完备的,你可以在交易中包含无数个循环结构。(为免于陷入死循环)以太坊为单个区块可用的 Gas 设置了上限,该上限目前为 1200 万。

尽管区块 Gas 上限提高了 50% ,但是以太坊上的交易量依然低于历史最高纪录。这是因为大部分 Gas 都被用于 token 交易或智能合约交易。
执行一个简单的代币交易需要消耗 80000 gas ,而一个以太币转账交易需要消耗 20000 gas 。执行一个 dapp 交易视情况而定,但是其 gas 消耗量通常高于代币交易(译者注:正是 token 交易的比重变化导致即使提高了区块 Gas 上限,所处理的交易数量也低于历史最高)。
相比之下,比特币则简单得多,一个基本交易只有 250 字节(where a transaction is just 250 bytes or that can be the base and then each transaction is 20 bytes,我们解不懂后半句 —— 译者)。
以太坊上没有这种协议级交易压缩,因为它采用的是账户系统。
为便于管理账户,以太坊网络每新增一个区块,就会更新一次状态。以太坊基金会的 Griffin Ichiba Hotchkiss 称:
“完整的以太坊 ‘状态’ 指的是所有账户和余额的当前状态,以及在 EVM (以太坊虚拟机)中部署并运行的所有智能合约的 ‘内存’。在以太坊区块链上,每个得到最终确定的区块都有且只有一个全网达成共识的状态。每当有新的区块添加到链上,状态就会更改和更新。”
举一个最简单的对照:比特币状态指的是 UTXO(未花费的有效交易输出)。无论是以太坊状态,还是比特币状态,都是较难理解的概念。简单来说,就是网络的内存(ram)或快照。因此,账户余额和合约中包含的代码函数都是公开可见的。
如果从创世块开始同步以太坊,你需要遍历 4 亿个“节点”(译者注:此处应指状态树上的节点,用于存储状态;状态树本身是默克尔树形式的),需要 1 周左右的时间。
每生成一个区块,以太坊整个网络 10000 多个全节点(运行以太坊客户端、保存所有以太坊区块链区块的计算机)都要在本地同步更新,更新大约 3000 个状态树 “节点”。
这就意味着,你的计算机内存每隔 15 秒,就要同步一个区块,同时磁盘也要一直读写每个区块中对以太坊网络的更改。
因此,更改之处越多,计算机的内存和磁盘就越忙碌,等资源达到上限之后,就无法同步上整个网络的进度了。
无法保持同步指的不是不能下载历史记录,而是不能跟整个网络同时完成交易处理。
此外,去年还有一篇论文指出,对编程人员来说,要构造一个数学模型把 “执行成本(Gas)和所用资源数量(比如 CPU 和内存)” 精确地关联起来,并不是个简单的问题。
这篇论文还提到:“我们在计量模型中发现了一些差异,例如,指令定价方面的显著不一致。我们设计了一个遗传算法(genetic algorithm),可以生成比普通合约处理起来慢 200 倍的合约。之后,我们证明了,所有主要的以太坊客户端实现都很脆弱,如果它们在消费级硬件上运行,一旦遭受攻击,它们将无法与网络保持同步。”
同样地,在比特币系统中,如果攻击者生成了一个很难验证的区块,甚至有可能导致你的计算机挖矿系统宕机。然而,如果有人这么做了,很可能会失去 6.25 BTC 的区块奖励;如果是矿池这么做了,很有可能会失去所有矿工。
但是在以太坊系统中,攻击者损失的只是发布合约的成本,据研究人员发现,这点损失与攻击所产生的影响根本不成正比。
如果又要在当前形式的以太坊网络基础上实现扩容,又让大家还能继续运行以太坊节点(比如我们 Trustnode 想继续我们的区块链分析),那就是非常复杂而且非常耗时的任务了。
当然了,我们可以通过云服务提供商 Infura 来运行节点。对以太坊网络的绝大多数操作都是由 Infura 上的节点完成的。
据以太坊孵化机构 ConsenSys 的创始人 Joseph Lubin 所言,ConsenSys 最近已经与 AMD 合资创办了 W3BCLOUD ,旨在打造 “下一代去中心化计算、存储和带宽”。
然而,目前真正的解决方案是区块链合约级分片(译者注:按下文,即 Layer-2 扩展方案)。

右侧三个扩容方案都有独立的网络环境和区块链,并与以太坊建立了通信。但是,就目前而言,这些网络之间互不通信。
如果历史重演,那么第一步可能是将许多独立的世界计算机相互连接起来,让大家都能互通。
最开始的时候,如果你有一台手提电脑,你就只能访问这台手提电脑里的数据。后来,随着技术上的突破,不同的手提电脑之间建立起了连接(最初是通过电缆),你可以访问邻居的手提电脑里的数据了。
由于这些计算机之间可以建立通信,我们可以允许所有人访问我们的数据,不过不需要每个人都存储我们的数据,除非他们想这么做。
只有那些负责分享数据的人才需要存储数据。我们只需要与其他人的计算机建立联系,这样我们就能看到彼此的数据了。
也就是说,我们需要在 OMG 和 ZK 之间实现通信。我们之所以无法在比特币和以太坊之间建立通信,是因为它们是不同的协议。但还是有项目在尝试连接两者。
如果我们让这些数据集群相互通信,那么只要它们都在同一个协议上运行,可扩展性就不再有任何限制。
这是需要花费很多时间来实现的。如果从这个角度来看,我们就会发现中本聪和 Gregory Maxwell 都是对的,因为他们是从不同的时间层面来考虑的。
中本聪考虑的可能是比特币技术的总体发展。在他的声明中,他显然认为比特币技术会像(作为一个全球分布式系统的)互联网那样发展。
然而,Maxwell 考虑的是当下。他有一句话说得非常对:如果你没有为此付出足够努力,就不可能实现飞跃。
也就是说,我们正在发展中,或许最艰巨的任务已经完成了。在当前阶段,我们不妨耐心享受这段升级的过程。这是需要时间来酝酿的。