观点

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

曾汨   |     |   701 次阅读

Default featured image huge

1

虽然以太坊的区块 Gas 可用量上限提高了,但是区块(数据量)大小没有多大改变,因为以太坊上交易数量与数据体量之间并不是完全的正相关。

不久前,以太坊达到了满负荷,但是它处理的交易量只有历史最高记录的一半。我们可以从中得到很多启示。

如上图所见,以太坊上的区块数据量大小和区块 Gas 上限之间显然有某种关系。如果是折线图,也会呈现出上升趋势。不过,二者的关系有点复杂。

以太坊的 Gas 是衡量执行一项操作需要消耗多少计算资源的抽象单位。

由于合约是图灵完备的,你可以在交易中包含无数个循环结构。(为免于陷入死循环)以太坊为单个区块可用的 Gas 设置了上限,该上限目前为 1200 万。

2

-2020 年 6 月的以太坊交易量-

尽管区块 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 扩展方案)。

3

-以太坊扩容方案(2020 年 6 月)-

右侧三个扩容方案都有独立的网络环境和区块链,并与以太坊建立了通信。但是,就目前而言,这些网络之间互不通信。

如果历史重演,那么第一步可能是将许多独立的世界计算机相互连接起来,让大家都能互通。

最开始的时候,如果你有一台手提电脑,你就只能访问这台手提电脑里的数据。后来,随着技术上的突破,不同的手提电脑之间建立起了连接(最初是通过电缆),你可以访问邻居的手提电脑里的数据了。

由于这些计算机之间可以建立通信,我们可以允许所有人访问我们的数据,不过不需要每个人都存储我们的数据,除非他们想这么做。

只有那些负责分享数据的人才需要存储数据。我们只需要与其他人的计算机建立联系,这样我们就能看到彼此的数据了。

也就是说,我们需要在 OMG 和 ZK 之间实现通信。我们之所以无法在比特币和以太坊之间建立通信,是因为它们是不同的协议。但还是有项目在尝试连接两者。

如果我们让这些数据集群相互通信,那么只要它们都在同一个协议上运行,可扩展性就不再有任何限制。

这是需要花费很多时间来实现的。如果从这个角度来看,我们就会发现中本聪和 Gregory Maxwell 都是对的,因为他们是从不同的时间层面来考虑的。

中本聪考虑的可能是比特币技术的总体发展。在他的声明中,他显然认为比特币技术会像(作为一个全球分布式系统的)互联网那样发展。

然而,Maxwell 考虑的是当下。他有一句话说得非常对:如果你没有为此付出足够努力,就不可能实现飞跃。

也就是说,我们正在发展中,或许最艰巨的任务已经完成了。在当前阶段,我们不妨耐心享受这段升级的过程。这是需要时间来酝酿的。

(完)


原文链接: https://www.trustnodes.com/2020/06/27/dosing-the-state-the-ethereum-scalability-challenge
作者: Trustnodes
翻译&校对: 闵敏 & 阿剑


你可能还会喜欢:

深入探索以太坊世界状态,Part-1

各以太坊 Layer 2 扩容方案的评估对比

解读以太坊黄皮书(3/7):Gas、gasPrice 和 gasLimit

 
0 人喜欢