感谢Felix Lange, Martin Swende, Marius van der Wijden 和 Mark Tyneway的反应和校正。

咱们能将区块链的可扩展性进步到多少?是否真的能像 Elon Musk 所说的那样“区块时刻加速十倍,区块巨细添加十倍而且手续费下降一百倍”,而不会导致极度中心化并违背区块链的本质特点?假如答案是否定的,那咱们能到达什么程度?改动公式算法会怎样?更重要的是,假如引入类似 ZK-SNARK 或分片的功用会怎样?一个分片型的区块链在理论上可以不断添加分片,那么是否真的可以这么做呢?

事实证明,不管是否运用分片,都有重要且十分奇妙的技能要素束缚了区块链的可扩展性。许多情况都有处理方案,可是即便有了处理方案,也存在局限性。这篇文章将探讨其间的许多问题。

假如只是简略地拔高参数,问题好像就能得到处理。可是咱们会因而支付什么代价?

Vitalik:区块链可扩展性的限制

普通用户可以运转节点关于区块链的去中心化至关重要

幻想一下清晨两点多,你接到了一个紧迫呼叫,来自国际另一端帮你运转矿池 (质押池) 的人。从大约 14 分钟前开端,你的池子和其他几个人从链中分离了出来,而网络仍然维持着 79% 的算力。依据你的节点,多数链的区块是无效的。这时呈现了余额过错:区块好像过错地将 450 万枚额外代币分配给了一个未知地址。

一小时后,你和其他两个同样遭受意外的小矿池参加者、一些区块浏览器和买卖所方在一个聊天室中,看见有人贴出了一条推特的链接,开头写着“宣告新的链上可继续协议开发基金”。

到了早上,相关评论广泛散布在推特以及一个不审查内容的社区论坛上。但那时 450 万枚代币中的很大一部分现已在链上转换为其他财物,而且进行了数十亿美元的 defi 买卖。79%的一致节点,以及一切首要的区块链浏览器和轻钱包的端点都遵从了这条新链。或许新的开发者基金将为某些开发供给资金,或许或许一切这些都被领先的矿池、买卖所及其裙带所吞并。可是不管结果怎么,该基金实践上都成为了既成事实,普通用户无法抵挡。

或许还有这么一部主题电影。或许会由 MolochDAO 或其他安排进行资助。

这种情形会发生在你的区块链中吗?你所在区块链社区的精英,包括矿池、区块浏览器和保管节点,或许和谐得很好,他们很或许都在同一个 telegram 频道和微信群中。假如他们真的想出于利益忽然对协议规则进行修正,那么他们或许具有这种才能。以太坊区块链在十小时内彻底处理了一致失利,假如是只有一个客户端完结的区块链,而且只需求将代码更改部署到几十个节点,那么可以更快地和谐客户端代码的更改。可以抵挡这种社会性协作进犯的仅有可靠办法是“被迫防护”,而这种力气来自去一个中心化的集体:用户。

幻想一下,假如用户运转区块链的验证节点 (不管是直接验证还是其他直接技能),并主动回绝违反协议规则的区块,即便逾越 90% 的矿工或质押者支撑这些区块,故事会怎么开展。

假如每个用户都运转一个验证节点,那么进犯很快就会失利:有些矿池和买卖所会进行分叉,而且在整个过程中看起来很愚蠢。可是即便只有一些用户运转验证节点,进犯者也无法大获全胜。相反,进犯会导致紊乱,不同用户会看到不同的区块链版本。最坏情况下,随之而来的商场恐慌和或许继续的链分叉将大幅削减进犯者的利润。对如此长年累月的抵触进行应对的主意本身就可以阻止大多数进犯。

Hasu 关于这一点的观点:

“咱们要清晰一件事,咱们之所以可以抵挡歹意的协议更改,是由于具有用户验证区块链的文明,而不是由于 PoW 或 PoS。”

Vitalik:区块链可扩展性的限制

假定你的社区有 37 个节点运转者,以及 80000 名被迫监听者,对签名和区块头进行检查,那么进犯者就获胜了。假如每个人都运转节点的话,进犯者就会失利。咱们不清楚针对协同进犯的发动集体免疫的确切阈值是多少,但有一点是绝对清楚的:好的节点越多,歹意的节点就越少,而且咱们所需的数量肯定不止于几百几千个。

那么全节点作业的上限是什么?

为了使得有尽或许多的用户可以运转全节点,咱们会将注意力集中在普通消费级硬件上。即便可以轻松购买到专用硬件,这可以下降一些全节点的门槛,但事实上对可扩展性的进步并不如咱们幻想的那般。

全节点处理大量买卖的才能首要受限于三个方面:

  • 算力:在保证安全的前提下,咱们能划分多少 CPU 来运转节点?

  • 带宽:基于当时的网络衔接,一个区块能包含多少字节?

  • 存储:咱们能要求用户运用多大的空间来进行存储?此外,其读取速度应该到达多少?(即,HDD 满足吗?还是说咱们需求 SSD?)

许多运用“简略”技能对区块链进行大幅扩容的过错观点都源自于对这些数字过于乐观的估计。咱们可以依次来评论这三个要素:

算力

  • 过错答案:100% 的 CPU 应该用于区块验证

  • 正确答案:约 5-10% 的 CPU 可以用于区块验证

束缚之所以这么低的四个首要原因如下:

  • 咱们需求一个安全边界来掩盖 DoS 进犯的或许性 (进犯者运用代码弱点制造的买卖需求比惯例买卖更长的处理时刻)

  • 节点需求在离线之后可以与区块链同步。假如我掉线一分钟,那我应该要可以在几秒钟之内完结同步

  • 运转节点不应该很快地耗尽电池,也不应该拖慢其他运用的运转速度

  • 节点也有其他非区块出产的作业要进行,大多数是验证以及对 p2p 网络中输入的买卖和恳求做出呼应

请注意,直到最近大多数针对“为什么只需求 5-10%?”这一点的解说都侧重于另一个不同的问题:由于 PoW 出块时刻不定,验证区块需求很长时刻,会添加一起创建多个区块的危险。这个问题有很多修复办法,例如 Bitcoin NG,或运用 PoS 权益证明。但这些并没有处理其他四个问题,因而它们并没有如许多人所料在可扩展性方面取得巨大发展。

并行性也不是灵丹妙药。一般,即便是看似单线程区块链的客户端也现已并行化了:签名可以由一个线程验证,而履行由其他线程完结,而且有一个独自的线程在后台处理买卖池逻辑。而且一切线程的运用率越接近 100%,运转节点的能源消耗就越多,针对 DoS 的安全系数就越低。

带宽

  • 过错答案:假如没 2-3 秒都产生 10 MB 的区块,那么大多数用户的网络都大于 10 MB/秒,他们当然都能处理这些区块

  • 正确答案:或许咱们能在每 12 秒处理 1-5 MB 的区块,但这仍然很难

如今,咱们常常听到关于互联网衔接可以供给多少带宽的广为传播的统计数据:100 Mbps 乃至 1 Gbps 的数字很常见。可是由于以下几个原因,声称的带宽与预期实践带宽之间存在很大差异:

  1. “Mbps”是指“每秒数百万 bits”;一个 bit 是一个字节的 1/8,因而咱们需求将声称的 bit 数除以 8 以取得字节数。

  2. 网络运营商,就像其他公司相同,常常编造谎言。

  3. 总是有多个运用运用同一个网络衔接,所以节点无法独占整个带宽。

  4. P2P 网络不可避免地会引入开销:节点一般最终会屡次下载和从头上传同一个块 (更不用说买卖在被打包进区块之前还要经过 mempool 进行播送)。

当 Starkware 在 2019 年进行一项实验时,他们在买卖数据 gas 本钱下降后初次发布了 500 kB 的区块,一些节点实践上无法处理这种巨细的区块。处理大区块的才能现已并将继续得到改进。可是不管咱们做什么,咱们仍然无法获取以 MB/秒为单位的均匀带宽,说服自己咱们可以接受 1 秒的推迟,而且有才能处理那种巨细的区块。

存储

  • 过错答案:10 TB

  • 正确答案:512 GB

正如咱们或许猜到的,这儿的首要观点与其他地方相同:理论与实践之间的差异。理论上,咱们可以在亚马逊上购买 8 TB 固态驱动 (的确需求 SSD 或 NVME;HDD 关于区块链状况存储来说太慢了)。实践上,我用来写这篇博文的笔记本电脑有 512 GB,假如你让人们去购买硬件,许多人就会变得懒散 (或许他们无法负担 800 美元的 8 TB SSD) 并运用中心化服务。即便可以将区块链装到某个存储设备上,大量活动也可以快速地耗尽磁盘并迫使你购入新磁盘。

一群区块链协议研讨员对每个人的磁盘空间进行了查询。我知道样本量很小,但仍然...

Vitalik:区块链可扩展性的限制

此外,存储巨细决议了新节点可以上线并开端参加网络所需的时刻。现有节点有必要存储的任何数据都是新节点有必要下载的数据。这个初始同步时刻 (和带宽) 也是用户可以运转节点的首要妨碍。在写这篇博文时,同步一个新的 geth 节点花了我大约 15 个小时。假如以太坊的运用量添加 10 倍,那么同步一个新的 geth 节点将至少需求一周时刻,而且更有或许导致节点的互联网衔接遭到束缚。这在进犯期间更为重要,当用户之前未运转节点时对进犯做出成功呼应需求用户启用新节点。

交互效应

此外,这三类本钱之间存在交互效应。由于数据库在内部运用树结构来存储和检索数据,因而从数据库中获取数据的本钱跟着数据库巨细的对数而添加。事实上,由于尖端 (或前几级) 可以缓存在 RAM 中,所以磁盘拜访本钱与数据库巨细成正比,是 RAM 中缓存数据巨细的倍数。

不要从字面上理解这个图,不同的数据库以不同的办法作业,一般内存中的部分只是一个独自 (但很大) 的层 (参见 leveldb 中运用的 LSM 树)。但基本原理是相同的。

Vitalik:区块链可扩展性的限制

例如,假如缓存为 4 GB,而且咱们假定数据库的每一层比上一层大 4 倍,那么以太坊当时的 ~64 GB 状况将需求 ~2 次拜访。可是假如状况巨细添加 4 倍到 ~256 GB,那么这将添加到 ~3 次拜访。因而,gas 上限添加 4 倍实践上可以转化为区块验证时刻添加约 6 倍。这种影响或许会更大:硬盘在已满状况下比空闲时需求花更长时刻来读写。

这对以太坊来说意味着什么?

现在在以太坊区块链中,运转一个节点对许多用户来说现已是一项应战,尽管至少运用惯例硬件仍然是或许的 (我写这篇文章时刚刚在我的笔记本电脑上同步了一个节点!)。因而,咱们即将遭受瓶颈。核心开发者最关心的问题是存储巨细。因而,目前在处理核算和数据瓶颈方面的巨大努力,乃至对一致算法的改动,都不太或许带来 gas limit 的大幅进步。即便处理了以太坊最大的 DoS 弱点,也只能将 gas limit 进步 20%。

关于存储巨细的问题,仅有处理方案是无状况和状况逾期。无状况使得节点群可以在不维护永久存储的情况下进行验证。状况逾期会使最近未拜访过的状况失活,用户需求手动供给证明来更新。这两条途径现已研讨了很长时刻,而且现已开端了关于无状况的概念验证完结。这两项改进相结合可以大大缓解这些忧虑,并为明显进步 gas limit 开辟空间。但即便在实施无状况和状况逾期之后,gas limit 也或许只会安全地进步约 3 倍,直到其他束缚开端发挥作用。

另一个或许的中期处理方案使运用 ZK-SNARKs 来验证买卖。ZK-SNARKs 可以保证普通用户无需个人存储状况或是验证区块,即便他们仍然需求下载区块中的一切数据来抵挡数据不可用进犯。别的,即便进犯者不能强行提交无效区块,可是假如运转一个一致节点的难度过高,仍然会有和谐审查进犯的危险。因而,ZK-SNARKs 不能无限地进步节点才能,可是仍然可以对其进行大幅进步 (或许是 1-2 个数量级)。一些区块链在 layer1 上探索该方式,以太坊则经过 layer2 协议 (也叫 ZK rollups) 来获益,例如 zksync, Loopring 和 Starknet。

分片之后又会怎么?

分片从根本上处理了上述束缚,由于它将区块链上包含的数据与单个节点需求处理和存储的数据解耦了。节点验证区块不是经过亲自下载和履行,而是运用先进的数学和密码学技能来直接验证区块。

因而,分片区块链可以安全地具有非分片区块链无法完结的十分高水平的吞吐量。这的确需求大量的密码学技能来有用替代朴素完好验证,以回绝无效区块,但这是可以做到的:该理论现已具有了根底,而且基于草案标准的概念验证现已在进行中。

Vitalik:区块链可扩展性的限制

以太坊方案选用二次方分片 (quadratic sharding),其间总可扩展性遭到以下事实的束缚:节点有必要可以一起处理单个分片和信标链,而信标链有必要为每个分片履行一些固定的管理作业。假如分片太大,节点就不能再处理单个分片,假如分片太多,节点就不能再处理信标链。这两个束缚的乘积构成了上限。

可以幻想,经过三次方分片乃至指数分片,咱们可以走得更远。在这样的规划中,数据可用性采样肯定会变得愈加杂乱,但这是可以完结的。但以太坊并没有逾越二次方,原因在于,从买卖分片到买卖分片的分片所取得的额外可扩展性收益实践上无法在其他危险程度可接受的前提下完结。

那么这些危险是什么呢?

最低用户数量

可以幻想,只需有一个用户愿意参加,非分片区块链就可以运转。但分片区块链并非如此:单个节点无法处理整条链,因而需求满足的节点以一起处理区块链。假如每个节点可以处理 50 TPS,而链可以处理 10000 TPS,那么链至少需求 200 个节点才能存续。假如链在任何时候都少于 200 个节点,那或许会呈现节点无法再坚持同步,或许节点停止检测无效区块,或许还或许会发生许多其他坏事,具体取决于节点软件的设置。

在实践中,由于需求冗余 (包括数据可用性采样),安全的最低数量比简略的“链 TPS 除以节点 TPS”高几倍,关于上面的例子,咱们将其设置位 1000 个节点。

假如分片区块链的容量添加 10 倍,则最低用户数也添加 10 倍。现在咱们或许会问:为什么咱们不从较低的容量开端,当用户很多时再添加,由于这是咱们的实践需求,用户数量回落再下降容量?

这儿有几个问题:

  1. 区块链本身无法可靠地检测到其上有多少仅有用户,因而需求某种管理来检测和设置分片数量。对容量束缚的管理很简单成为分裂和抵触的本源。

  2. 假如许多用户忽然一起意外掉线怎么办?

  3. 添加发动分叉所需的最低用户数量,使得防护歹意控制愈加艰难。

最低用户数为 1,000,这几乎可以说是没问题的。另一方面,最低用户数设为 100 万,这肯定是不行。即便最低用户数为 10,000 也可以说开端变得有危险。因而,好像很难证明逾越几百个分片的分片区块链是合理的。

历史可检干脆

用户真正珍爱的区块链重要特点是永久性。当公司破产或是维护该生态系统不再产生利益时,存储在服务器上的数字财物将在 10 年内不再存在。而以太坊上的 NFT 是永久的。

是的,到 2372 年人们仍可以下载并查阅你的加密猫。

Vitalik:区块链可扩展性的限制

可是一旦区块链的容量过高,存储一切这些数据就会变得愈加困难,直到某时呈现巨大危险,某些历史数据最终将……没人存储。

要量化这种危险很简单。以区块链的数据容量 (MB/sec) 为单位,乘以 ~30 得到每年存储的数据量 (TB)。当时的分片方案的数据容量约为 1.3 MB/秒,因而约为 40 TB/年。假如添加 10 倍,则为 400 TB/年。假如咱们不仅期望可以拜访数据,而且是以一种快捷的办法,咱们还需求元数据 (例如解压缩汇总买卖),因而每年到达 4 PB,或十年后到达 40 PB。Internet Archive (互联网档案馆) 运用 50 PB。所以这可以说是分片区块链的安全巨细上限。

因而,看起来在这两个维度上,以太坊分片规划实践上现已十分接近合理的最大安全值。常数可以添加一点,但不能添加太多。

结语

测验扩容区块链的办法有两种:根底的技能改进和简略地进步参数。首先,进步参数听起来很有吸引力:假如您是在餐纸上进行数学运算,这就很简单让自己相信消费级笔记本电脑每秒可以处理数千笔买卖,不需求 ZK-SNARK、rollups 或分片。不幸的是,有很多奇妙的理由可以解说为什么这种办法是有根本缺点的。

运转区块链节点的核算机无法运用 100%的 CPU 来验证区块链;他们需求很大的安全边沿来抵抗意外的 DoS 进犯,他们需求备用容量来履行诸如在内存池中处理买卖之类的使命,而且用户不期望在核算机上运转节点的时候无法一起用于任何其他运用。带宽也会受限:10 MB/s 的衔接并不意味着每秒可以处理 10 MB 的区块!或许每 12 秒才能处理 1-5 MB 的块。存储也是相同,进步运转节点的硬件要求而且束缚专门的节点运转者并不是处理方案。关于去中心化的区块链而言,普通用户可以运转节点并构成一种文明,即运转节点是一种遍及行为,这一点至关重要。

然而,根底的技能改进是可行的。当时,以太坊的首要瓶颈是存储巨细,而无状况性和状况逾期可以处理该问题,并使其可以最多添加约 3 倍,但不能再多,由于咱们期望运转节点比当时更简单。选用分片的区块链可以进一步扩展,由于分片区块链中的单个节点不需求处理每笔买卖。但即便是分片区块链,容量也有局限性:跟着容量的添加,最低安全用户数添加,归档区块链的本钱 (以及假如没有人归档链,数据存在丢掉的危险) 就会上升。可是咱们不必过于担心:这些束缚足以咱们在保证区块链彻底安全性的一起每秒处理一百万笔买卖以上。可是要在不损害区块链最宝贵的去中心化特性的前提下完结这一点,咱们需求支付更多努力。

原文链接:https://vitalik.ca/general/2021/05/23/scaling.html

ECN的翻译作业旨在为中国以太坊社区传递优质资讯和学习资源,文章版权归原作者一切,转载须注明原文出处以及ETH中文站。若需长期转载,请联系eth@ecn.co进行授权。

来源 | vitalik.ca

作者 | Vitalik Buterin

视野开拓

既没有证据表明自利最大化是对人类实际行为的最好近似,也没有证据表明自利最大化导致最优的经济条件。-《伦理学与经济学》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注