LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > V神:区块链可扩展性的限制

V神:区块链可扩展性的限制

2021-06-04 灰狼 来源:区块链网络

区块链可扩展性的限制

特别感谢Felix Lange,Martin Swende,Marius van der Wijden和Mark Tyneway的反馈和评论。

你能将区块链的可扩展性推进多远?正如伊隆马斯克希望的那样,你真的可以在不导致极端中心化和损害构成区块链的基本属性的前提下,将区块时间缩短10倍,将区块大小增加10倍,将手续费降低100倍吗?如果没有,你能走多远?如果你更改共识算法怎么办?更重要的是,如果你更改技术以引入诸如ZK-SNARK或分片之类的功能,该怎么办?从理论上讲,分片的区块链可以继续添加更多的分片。有没有加太多这样的事?

事实证明,无论分片与否,都有重要且相当微妙的技术因素限制了区块链的扩展性。在许多情况下,都有解决方案,但是即使有了解决方案,也存在局限性。这篇文章将探讨这些问题中的许多问题。


只需增加参数,即可解决所有问题。但是代价是什么呢?

普通用户能够运行节点对于区块链去中心化至关重要

在凌晨2:35,你会收到来自世界另一端的搭档的紧急电话,该搭档帮助你管理矿池(或者可能是质押池)。从大约14分钟前开始,你的搭档就告诉你,你的池和其他几个人从仍然承载着79%网络份额的链中分离出来。根据你的节点,多数链的块是无效的。出现余额错误:密钥块似乎错误地将450万枚额外代币分配给了一个未知地址。

一个小时后,你正在与其他两个像你一样蒙住眼睛的小池以及一些区块探险者和交流者进行电报聊天。你最终会看到某人将指向发布的消息的链接粘贴到推文上。这条推文开始了:“宣布新的链上可持续协议发展基金”。

到了早上,在推特上以及在没有审查讨论内容的一个社区论坛上的争论,讨论无处不在。但是到那时,这450万枚代币中的很大一部分已经在链上转换为其他资产,并且进行了数十亿美元的defi交易。79%的共识节点,以及所有主要的区块链探索者和轻钱包的端点都遵循了这一新链。也许新的发展基金会为一些发展提供资金,或者可能全部被领先的基金、交易所及其亲信侵吞。但是,不管结果如何,该基金在所有意图和目的上都是既成事实,而普通用户没有办法反击。


电影即将上映。也许可以由MolochDAO或其他资助。

这会在你的区块链上发生吗?你的区块链社区的精英,包括池、区块浏览器和托管节点,可能协调得很好。他们很可能都在同一个电报频道和微信群组中。如果他们真的想对协议规则进行突然更改以促进自己的利益,那么他们也许可以。以太坊区块链在十小时内完全解决共识失败;如果你的区块链只有一个客户端实现,并且你只需要将代码更改部署到几十个节点,那么协调更改客户端代码的速度就可以更快。使这种协调的社会攻击无效的唯一可靠方法是从一个实际上是分散的群体(用户)进行被动防御。

想象一下,如果用户正在运行验证链的节点(无论是直接还是通过更高级的间接技术),并自动拒绝破坏协议规则的块,即使超过90%的矿工或权益持有人支持该协议,故事会是怎样的结局。如果每个用户都运行一个验证节点,则攻击将很快失败:一些矿池和交易所将分叉出去,并且在此过程中看起来非常愚蠢。但是,即使某些用户运行了验证节点,该攻击也不会为攻击者带来胜利。相反,这将导致混乱,因为不同的用户会看到链的不同视图。至少,随之而来的市场恐慌和可能持续的链断裂将大大降低攻击者的利润。一想到要驾驭这样一场旷日持久的冲突,本身就能阻止大多数袭击。


在这点上听哈苏说

如果您有一个由37个节点运行程序和8万个被动侦听器组成的社区,用于检查签名和区块头,则攻击者将获胜。如果你有一个每个人都在运行节点的社区,那么攻击者将会失败。我们不知道对抗协同攻击的群体免疫的确切阈值是多少,但是有一件事情是绝对清楚的:更多的节点好,更少的节点坏,我们肯定需要几十个或几百个以上。

那么,我们需要全节点来完成多少工作的限制是什么?

为了最大限度地增加可以运行节点的用户数量,我们将专注于常规消费级硬件。通过要求购买一些易于获得的专用硬件(例如从亚马逊)可以实现容量的一些增加,但它们实际上并没有增加那么多的可扩展性。

全节点处理大量交易的能力存在三个关键限制:

?计算能力:我们可以安全地要求多少百分比的CPU来运行一个节点?

?带宽:鉴于当前互联网连接的现实,一个块可以包含多少字节?

?存储:我们可以要求用户存储多少GB的磁盘空间?另外,它必须多快才能被读取?(即HDD好还是我们需要SSD)

许多关于区块链使用“简单”技术可以扩展多远的错误观点都源于对这些数字的过度乐观估计。我们可以把这三个因素逐一分析:

计算能力

?错误答案:100%的CPU功率可用于区块验证

?正确答案:大约5-10%的CPU功率可用于区块验证

限制如此之低有四个主要原因:

?我们需要一个安全边际来覆盖DoS攻击的可能性(攻击者利用代码中的弱点精心设计的交易比常规交易需要更长的时间来处理)

?节点离线后需要能够同步链。如果我掉网一分钟,我应该能在几秒钟内赶上

?运行节点不应很快耗尽电池电量,也不会使所有其他应用运行缓慢

?节点还需要执行其他非区块生产任务,主要围绕验证和响应p2p网络上传入的交易和请求

请注意,直到最近,“为什么只有5-10%?” 的大多数解释都集中在一个不同的问题上:因为 PoW 区块随机出现,验证区块需要很长时间会增加同时创建多个区块的风险。这个问题有很多修复方法(例如比特币NG,或仅使用权益证明)。但是这些修复并没有解决其他四个问题,因此它们并没有像许多人最初认为的那样在可扩展性方面获得巨大收益。

并行性也不是灵丹妙药。通常,即使是看似单线程区块链的客户端也已经并行化了:签名可以由一个线程验证,而执行由其他线程完成,并且有一个独立的线程在后台处理事务池逻辑。所有线程的使用率越接近100%,运行一个节点消耗的能量就越多,针对DoS的安全边际就越低。

带宽

?错误答案:如果我们每2-3秒有10MB的块,那么大多数用户的网速大于10MB/秒,所以他们当然可以处理

?正确答案:也许我们可以每12秒处理1-5MB的块。但这很难。

如今,我们经常听到关于互联网连接可以提供多少带宽的广告统计数据:100 MB甚至1GB的数字很常见。但是,由于以下几个原因,广告带宽与连接的预期实际带宽之间存在很大差异:

1. “Mbps”是指“每秒百万比特”;一个位是一个字节的1/8,因此您需要将广告位号除以8以获得广告字节数。

2.互联网提供商,就像所有公司一样,经常撒谎。

3.总是有多个应用使用同一个互联网连接,所以一个节点不能占用整个带宽。

4. p2p网络不可避免地引入了它们自己的开销:节点通常最终会多次下载和重新上传同一个区块(更不用说交易在被包含在一个区块之前通过内存池进行广播)。

当Starkware在2019年进行一项实验时,他们在交易数据gas成本首次降低后,发布了500kB的块,一些节点实际上无法处理这种大小的块。处理大块的能力已经得到改进,并将继续得到改进。但无论我们做什么,我们仍然远远不能天真地以MB/秒为单位计算平均带宽,说服自己1秒延迟是可以接受的,并且能够拥有如此大小的块。

存储

?错误答案:10TB

?正确答案:512GB

正如你可能猜到的,这里的主要论点与其他地方相同:理论与实践之间的差异。理论上,你可以在亚马逊上购买8TB固态硬盘(你确实需要SSD或NVME;硬盘对于存储区块链状态来说太慢了)。实际上,用来写这篇博文的笔记本电脑有512GB,如果你让人们去购买他们自己的硬件,他们中的许多人就会变得懒惰(或者他们买不起800美元的8TB SSD)和使用中心化提供商。即使你可以将区块链安装到某个存储设备上,高水平的活动也可以轻松快速地烧毁磁盘并迫使你继续获取新的磁盘。


一组区块链协议研究人员对每个人拥有多少磁盘空间的民意调查。我知道样本量很小,但仍然......

此外,存储大小决定了新节点能够上线并开始参与网络所需的时间。现有节点必须存储的任何数据都是新节点必须下载的数据。这个初始同步时间(和带宽)也是用户能够运行节点的主要障碍。在写这篇博文时,同步一个新的 geth节点花了我大约15个小时。如果以太坊的使用量增加10倍,那么同步一个新的geth节点至少需要一周时间,而且更有可能导致你的互联网连接受到限制。这在攻击期间更为重要,当对攻击的成功响应可能涉及许多用户之前未运行节点时启动新节点。

交互效应

此外,这三类成本之间存在交互作用。由于数据库在内部使用树结构来存储和检索数据,因此从数据库中获取数据的成本随着数据库大小的对数增加。实际上,因为顶层(或前几层)可以缓存在RAM中,所以磁盘访问成本与数据库大小成正比,即RAM中缓存数据大小的倍数。


不要从字面上看这张图。不同的数据库以不同的方式工作,通常内存中的部分只是一个(但很大)的层(参见leveldb中使用的LSM树)。但是基本原理是相同的。

例如,如果缓存为4GB,并且我们假设数据库的每一层比前一层大4倍,那么以太坊当前的~** GB状态将需要~2次访问。但是如果状态大小增加4倍到~256GB,那么这将增加到~3次访问(因此每次读取的访问次数增加 1.5 倍)。因此,gas限制增加4倍,这将增加状态大小和读取次数,实际上可能转化为块验证时间增加约6倍。这种影响可能会更大:硬盘满时读取和写入的时间通常比接近空时要长。

那么这对以太坊意味着什么呢?

当前在以太坊区块链中,运行一个节点对许多用户来说已经是一个挑战,尽管它至少在常规硬件上仍然是可能的(我在写这篇文章时只是在我的笔记本电脑上同步了一个节点!)。因此,我们即将遇到瓶颈。核心开发人员最关心的问题是存储大小。因此,目前,在解决计算和数据瓶颈方面的大胆努力,甚至对共识算法的改变,都不太可能导致大的gas极限增加被接受。即使解决了以太坊最大突出的DoS漏洞,也只导致gas限制增加了20%。

存储大小问题的唯一解决方案是无状态和状态过期无状态允许一类节点在不维护永久存储的情况下验证链。状态过期将最近未访问过的状态推出,迫使用户手动提供证明来更新它。这两种路径都已经使用了很长时间,并且关于无状态性的概念验证实现也已经开始。这两项改进相结合,可以极大地缓解这些担忧,并为大幅提高gas限制开辟空间。但即使在实施无状态和状态过期之后,gas限制也可能只会安全地增加大约3倍,直到其他限制开始占主导地位

另一种可能的中期解决方案是使用ZK-SNARK来验证交易。ZK-SNARKs将确保普通用户不必亲自存储状态或验证块,尽管他们仍然需要下载块中的所有数据以防止数据不可用攻击。此外,即使攻击者无法强制无效区块通过,如果容量增加到运行共识节点太困难的层度,仍然存在协同审查攻击的风险。因此,ZK-SNARK不能无限地增加容量,但是它们仍然可以大幅增加容量(可能为1-2个数量级)。一些链正在第1层探索这种方法;以太坊正在通过第2层协议(称为ZK rollups)(例如zksyncLoopringStarknet)获得这种方法的好处。

分片后会发生什么?

分片从根本上解决了上述限制,因为它将区块链上包含的数据与单个节点需要处理和存储的数据分离。节点不是通过亲自下载和执行区块来验证区块,而是使用先进的数学和加密技术来间接验证区块。

因此,分片区块链可以安全地拥有非分片区块链无法实现的非常高水平的交易吞吐量。 这确实需要很多密码学上的聪明才智来创建有效的替代品来成功拒绝无效块的朴素完整验证,但它可以做到:该理论已经建立,并且基于草案规范的概念验证已经在进行中


以太坊计划使用二次分片,其中总可扩展性受到以下事实的限制:节点必须能够处理单个分片和信标链,信标链必须为每个分片执行一些固定数量的管理工作。如果分片太大,节点就不能再处理单个分片,如果分片太多,节点就不能再处理信标链。这两个约束的乘积形成了上限。

可以想象,通过三次分片,甚至指数分片,可以走得更远。在这样的设计中,数据可用性采样肯定会变得更加复杂,但它是可以做到的。但以太坊并没有超越二次方。原因是从交易分片到交易分片所获得的额外可扩展性收益实际上无法在其他风险变得不可接受的情况下实现。

那么这些风险是什么呢?

最小用户数

可以想象,只要有一个用户愿意参与,非分片区块链就可以运行。分片区块链不是这样的:没有一个节点可以处理整个链,因此你需要足够的节点,以便它们至少可以一起处理链。如果每个节点可以处理50TPS,而链可以处理 1万TPS,那么链至少需要200个节点才能生存。如果链在任何时候少于200个节点,那么要么节点无法跟上链,要么节点无法检测到无效块,或者可能会发生许多其他不好的事情,具体取决于节点软件的设置方式。

在实践中,由于需要冗余(包括数据可用性采样),安全最小计数比简单的“链TPS除以节点TPS”启发式算法高出数倍;对于上面的示例,我们将其称为1000个节点。

如果分片区块链的容量增加10倍,则最小用户数也将增加10倍。现在,你可能会问:为什么我们不先增加一点容量,只有当我们看到大量用户时才增加容量,这样我们才真正需要它,如果用户数量减少,就减少它?

这有几个问题:

1.区块链本身无法可靠地检测其上有多少唯一用户,因此这需要某种治理来检测和设置分片计数。对容量限制的治理很容易成为分裂和冲突的根源。

2.如果有很多用户突然意外退出怎么办?

3.增加启动分叉所需的最小用户数量,使其更难防御恶意收购。

最低用户数低于1000几乎可以肯定。另一方面,100万的最低用户数肯定不是。即使最低用户数为1万也可以说开始变得有风险。因此,似乎很难证明具有超过几百个分片的分片区块链是合理的

历史可检索性

用户真正重视的区块链的一个重要属性是持久性。当公司破产或对维护该生态系统失去兴趣时,存储在服务器上的数字资产将在10年内停止存在。另一方面,以太坊上的NFT是永恒的。


是的,在2371年人们仍然会下载和检查你的加密猫。处理它。

但是一旦区块链的容量变得太高,存储所有数据就会变得更加困难,直到在某个时刻存在很大的风险:即历史的某些部分最终会......没有人存储。

量化这种风险很容易。以区块链的数据容量(MB/sec) 为单位,乘以~30得到每年存储的数据量(TB)。当前的分片计划的数据容量约为1.3MB/秒,因此约为40TB/年。如果增加10倍,则变为400TB/年。如果我们希望数据不仅可以访问,而且可以方便地访问,我们还需要元数据(例如,解压缩rollup交易),因此每年达到4PB,或十年后达到40PB。互联网归档使用50PB。所以这是分片区块链可以安全获得的合理上限。

因此,看起来在这两个维度上,以太坊分片设计实际上已经大致瞄准了相当接近合理的最大安全值。常数可以增加一点,但不能增加太多。

总结

尝试扩展区块链的方法有两种:基本的技术改进简单地增加参数。首先,增加参数听起来很有吸引力:如果您在餐巾纸上进行数学运算,就很容易说服自己,家用笔记本电脑每秒可以处理数千笔交易,不需要ZK-SNARK、rollups或分片。不幸的是,这种方法从根本上有缺陷的原因有很多微妙的原因。

运行区块链节点的计算机无法花费100%的CPU能力来验证链;他们需要很大的安全裕度来抵抗意外的DoS攻击,他们需要备用容量来执行诸如在内存池中处理事务之类的任务,并且你不希望在计算机上运行节点以使该计算机无法同时用于任何其他应用。带宽同样也有开销:10MB/s的连接并不意味着你每秒可以拥有10MB的块!也许每12秒就有1-5MB的块。存储也是如此。增加对运行节点的硬件要求以及将节点的运行限制在专门的参与者上并不是一种解决方案。对于一个要去中心化的区块链来说,对于普通用户来说,能够运行一个节点,并且拥有一种运行节点是一种常见活动的文化是至关重要的

另一方面,根本的技术改进是可行的。当前,以太坊的主要瓶颈是存储大小,无状态性和状态过期可以解决此问题,并允许最多增加3倍,但不能超过3倍,因为我们希望运行节点变得比现在更容易。分片的区块链可以进一步扩展,因为分片区块链中没有单个节点需要处理每个交易。但即便如此,容量也有局限性:随着容量的增加,最小安全用户数增加,归档链的成本(如果没有人费心归档链,数据丢失的风险)就会上升。但是我们不必太担心:这些限制足够高,以使我们可以在区块链完全安全的情况下每秒处理100多万笔交易。但是在不牺牲使区块链如此有价值的去中心化的前提下,将需要做一些工作。

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:\"\"; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:\"Times New Roman\",\"serif\"; mso-font-kerning:1.0pt;}

—-

编译者/作者:灰狼

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...