原作者:StopAndDecrypt
(太长不看版:这跟存储空间限制没有关系)
不到一年前,以太坊钱包Parity的一位开发者Afri Schoedon写了一篇文章,现在这篇文章是对他的文章的一个间接回应:
https://dev.to/5chdn/the-ethereum-blockchain-size-will-not-exceed-1tb-anytime-soon-58a
我想要声明的是我对在这个领域中几乎所有的开发者都心怀尊敬,这篇文章并不是要攻击什么人。我写这篇文章的目的是解释目前真正的问题是什么,以及解释为什么Afri Schoedon的文章并没有讨论到这些真正的问题。我很希望有人能够写篇文章来解释这些问题,这样我们就可以把它也应用到比特币上。确实有个别开发者故意通过协议误解来进行误导、混淆、无视,就和2X以及replay保护措施那场闹剧一样,不过大多数开发者并不是那样的人。你不能因为出了这样或那样的事就讨厌这些开发者。他们和我们一样都是为了同一个目标而奋斗的,并且我相信Afri是属于第二类开发者,而非前者。
@ravensorb 本issue已被分类识别,并入子任务,你可以在这个链接里查阅到概况:https://wiki.parity.io/Known-Issues-Priorities
@codewiz Warp-sync本身没毛病,在以太坊之外的任何链上都正常运行。目前以太坊的体积大小是一个很严峻的问题,而且这也不属于Parity的问题。
如果你之前读过我的文章,那你就会发现这篇文章里有一些片段是从之前的文章中搬过来的。到目前为止,我的文章主要都是以一个“极大主义者”的角度来写关于比特币的问题以及在比特币社区内的一些争论。如果你只从你个人的角度来看的话,这些争论的原因其实都是一样的。我甚至会用权益证明来为我的意见进行辩护,以至于不去批评权益证明这个东西。
修正:看起来有些人并没有好好阅读我的副标题所以误解我的意思了。这里讨论的不是档案节点,而是完全验证了的节点。不管你是为了赶上进度而漏读了哪些东西我都不在乎。这是关乎同步的问题。轻节点并不能算作节点。
目录
· 我的论点:以太坊的失控数据(runaway data)目录只是冰山一角。
· 我的预测:一切都岁月静好,直到大厦崩塌。
· 我的建议:进行转置。
我的论点:更大的区块会使得验证者中心化
就是这么简单,这就是扩容之争中整个数字货币社区争论的中心,熟悉区块链协议的人一般都不会否认这个事实。以下这段节选我认为很好地解释了各种“第二层”扩容方案(在这些方案中唯一可行的一个已经实施到比特币中了)。
1. 公共区块链扩容所面临的挑战
首先要弄清楚的是,“扩容”并不是一个单独的问题,而是一系列挑战,要克服这些挑战,才能让全球数以百万计的用户用上以太坊。
讨论最多的一个扩容问题就是交易吞吐量。目前以太坊每秒能够处理大约15笔交易,而Visa的交易处理速度则为45,000/tps。去年一些应用如Cryptokitties或者有时候甚至一些ICO都会因为太受欢迎而拖慢整个网络速度并导致gas费上涨。
核心限制在于,像以太坊这种公链中,每一笔交易都需要被全网每一个节点处理。在以太坊区块链上进行的每个操作,比如说一笔交易,创建一个Cryptokitty,或者进行一个新的ERC20合同,都需要全网的每个节点同时进行处理。这个机制就是故意这样设计的,以保证公共区块链的权威性。节点不需要其他人来告知现在区块链上发生了什么,它们得自己去弄清楚。
这就给以太坊的交易吞吐量设置了一个根本性的限制:不能高于我们愿意向一个单一节点索取的量。
该文章的作者是Josh Stark,他能够弄明白这一点。他的公司甚至宣布进行一个项目,要在以太坊上弄一个和闪电网络一样的东西。(巧的是Elizabeth Stark的公司也在参与建设闪电网络。)
那么问题是什么呢?先把权益证明的东西放在一边,底层的激励机制完全不对,因为以太坊的区块大小没有限制,就算要设置一个限制也得是一个合理的数字,而且这些去中心化的应用(Dapps)也不可能正常运转,因为现在没有限制的情况下他们也才勉强能够运转。甚至这个限制的数值到底是多少也不必讨论了,因为现在根本就没有限制。
有点跑题了。我现在要简单地定义一个区块链,有些人可能会被惹毛。
以下是一个区块链所能提供的:
· 一个不可更改的、去中心化的账簿。
· 就这样没别的了。
以下是一个区块链所需要的东西以保持他的本质:
一个去中心化的网络并且拥有以下能力:
· 分散我的账簿——验证
· 添加我的账簿——工作
· 为我的需求提供激励——代币
以下是让区块链失败的因素:
· 在区块链上添加让它偏离网络的目标的功能。
区块链只是网络的一个工具,并且是只能用在特定网络中的一种特定工具,这个特定工具和特定的网络是相互依存的,其中一个没有了另一个也无法存活。你可以在这个网络的基础之上建设其他东西,但是坦白说如果在这个网络的底层(L1)上添加了使得网络无法正常运作的东西的话,这个网络迟早玩完。
下面我举个例子,这是一个L1层面上的功能,它并不会影响网络的正常运转,它就是多重签名。
多重签名确实需要节点多做一点工作,但这点工作算是“微不足道”的。需要注意的是,对于这些设计良好的网络来说,硬件并不是它的瓶颈,网络延迟才是。向一个多重签名地址支付款项,并不比向一个普通地址支付款项所需要的网络费用高,因为对于每笔交易来说是按字节收费的。这项区块链功能并不会妨碍网络的正常运转,因为在网络上进行传输的数据是(1)按字节收费的,并且(2)受到区块大小限制的管理。这里说管理而不是“限制”。区块大小并不限制交易流程,而是管理向所有节点广播的数据量,那么问题就出在这里。
当我们说“数据目录”大小时,指的是从创世区块起一整条链的大小,但如果只从字面意思理解的话就会有人来抬杠:
· 光盘空间很便宜,而且摩尔定律认为当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。
· 如果需要的话可以修剪区块链。
· 不需要一直追溯到创世区块,只需要最后X个区块就可以确定目前整个网络的状态了。
这些言论完全无视了一个节点每秒必须处理的数据。
如果愿意的话你可以阅读我写的关于摩尔定律的文章,我在这里只节选其中重要的几点。在Oz那里他们试图辩称“你不需要运行一个节点,只有矿工才有资格决定采用什么代码”。这种说法很荒唐,但在这里我不打算进行反驳,因为权益证明把矿工完全移除,把所有东西都放到节点里了。(其实他们一直都在节点里,只不过这次没有矿工来转移话题了。)
1. 摩尔定律讨论的是集成电路的增长速度,每年大约能够增长60%。这个定律讨论的并不是可用的带宽(而带宽才是更重要的)。
2. 带宽的增长速度要慢得多。我们来看看尼尔森定律。从1:1比例开始(在硬件和带宽上没有瓶颈),每年增长50%,10年复合增长得到大约~1:2的比例,这就意味着每十年带宽增长速度要慢两倍,每20年就慢四倍,每40年慢八倍,如此反复。(实际的情况要糟糕得多,但是我这里只做简单的假设,因为仅仅是这样就已经相当糟糕了。)
3. 网络延迟比带宽增长要慢,这就意味着随着网络上节点的平均带宽速度提高,区块和数据传输速度并不以同样的速率提高。
4. 更大的区块需要更好的数据传输(更低的网络延迟)来抵抗节点中心化。
严格地从以太坊的角度来看,转换成权益证明之后只剩下节点了,那么你肯定想要确保不会发生节点中心化。比特币网络所遇到的瓶颈是它的区块大小(这是理所当然的),因为这保证了网络的需求增长速度永远不会超过外部(有时候不一定)限制(如计算性能或网络性能)的增长速度。由于以太坊不断增长的区块大小,它的瓶颈不再受到这些外部因素的控制,网络需求不断超过平均用户的硬件和带宽水平,导致网络愈加缩小和中心化。
StopAndDecrypt: 两天内就达到了10 GB。作为一个比特币爱好者,我有个严肃的问题:对于这个增长趋势你们有什么应对方案吗?你们将在不到一个月的时间内增长33%。请文明发言。
Vitalik: 那个图表具有非常大的误导性。300GB是一个档案全节点的大小,这种节点存储着历史数据,包含目前和过去的所有状态。状态本身仅有~1-2 GB,历史数据大约有~10 GB。修剪了的节点仍然存储着所有的状态和历史,如果你真的需要的话它可以调出任何历史状态,但这个节点只有大约20 GB。如果只需要现时状态的话,这个数字还可以更小。
Senzheng:不要认为大家像关心带宽一样关心空间大小。
对于全节点最低上传速度,在保证网络安全的情况下,实时带宽需要多大?
就和这里的分析相似:https://iancoleman.github.io/blocksize/#_ & https://twitter.com/SDWouters/status/862426991370358784 (我才意识到以太坊不一样)
(没有回应)
Privpub: 有人认为修剪过的节点就像比特币里的SPV节点一样,而且无法实现“真正的”去中心化,这个观点你怎么看?
Vitalik: 你说的其实是一个轻量客户端,即使是以太坊轻量客户端也比比特币SPV节点要强大得多:比特币SPV节点能够验证交易,而以太坊轻量客户端能够验证现时状态。
比特币SPV并不是节点,他们并不在网络上传播区块或交易。他们像水蛭一样吸附在区块头上。
下面提到的概念对于理解本文接下来要讲的内容非常重要,请注意阅读:
· 你可以将无效的交易放进区块中,并且仍能创建一个有效的区块头。
· 如果网络是由10个全节点控制的,只要区块头是有效的,则只需要其中一半即可忽略/准许无效交易通过。
这就是为什么从网络的角度来看验证交易非常重要,以及为什么需要一个大的去中心化网络。对于我外婆来说这是并不重要,但我们现在讨论的不是我的外婆。我们现在讨论的是如何保证正常工作的节点能够不断增长而不是减少。
这个节点一直在参与工作,直到因为网络需求增加而被砍掉:
cryptoogre: 我不知道发生了什么,是不是Geth现在对系统有要求了。
之前我一直在i3内核和8GB内存上运行Geth,在cache=1024的情况下,能够在两小时内进行快速同步。
受到攻击之后我就无法再同步或运行Geth了。
分叉之后,Geth每次同步到99%的时候就停止同步了(大约需要6小时),然后就开始进行正常区块输入,没办法跟上,我一直都比链落后5到7个小时。
我准备在固态硬盘上用cloud vm进行测试,不过我唯一能够想到的可能性就是Geth对硬件的要求已经超过我的机器的性能了。
iamsunbird: 我也遇到同样的问题,客户端已经连续同步一天半了,但还是跟不上。
这并非不常见,并且还在继续发生:
sonulrk: 我从这个Geth快速模式问题中得到的经验是:
1. 你一定要用Quad内核处理器和4GB以上的内存
2. 你一定要用固态硬盘而不是机械硬盘
3. 你的网络一定要稳定,速度要达到2mbps及以上
如果你能实现以上3个条件的话那你可以试试Geth,打开完全模式的话基本上一个星期、最多两个星期就能完全同步。如果使用的是快速模式的话就看运气了,要么两三天内能够完成同步,要么永远也完不成。
winsvega: Geth 1.8版本仍然有这个问题,重启Geth后出现这个错误
快速同步模式会掉节点而且无法同步,还有不到100个区块就完成了,但是一直没法同步。
ceciliato310: 这就是P2P网络的本质,你会受到节点和网络情况的限制。一般来说只要耐心等待最终还是会成功的。按ctrl-c重启也可以(但愿重启之后你能得到一个好一点的节点)。另一个解决办法是找一个好的节点然后手动添加它。
注意到了没有,解决办法是“寻找一个好一点的节点”或者“升级你的硬件”。不管是节点还是硬件,都不应该成为瓶颈。当你所有的节点都被那群吸血的水蛭给占满了(因为只有好的节点真正在干活),这个网络就会变成一群主人领导一群奴隶,最终变成一个主人剩下的都是奴隶。(如果你不同意这个说法的话,请证明为什么将来不会出现这个趋势,因为现在的趋势就是这样,如果不加以限制的话就不会停止。如果你的答案是数据分片的话,我在文章末尾会讲到这个。)这就是教科书式的中心化,不受管制区块会将网络变得中心化。大区块(但是有限制)会使情况变得好那么一点点,但是会为不断增大的区块大小开了先例,这就使得情况变得同样糟糕,因为这就开了先例,只要“形势需要”,就可以扩大区块大小,这也就相当于区块大小不受管制了。这就是我们为什么在比特币区块大小问题上坚决不让步的原因。
我在推特上谈过几次这个问题,但是效果并不显著,因为我的推特关注者中并没有很多以太坊圈子里的人。
还需要进一步解释吗?
假设要保持同步的话,你的Geth节点需要处理100个“单位”的数据。
你的硬件能够处理150个单位。第二天网络要求你处理101个单位,下个月要求你处理125个单位。
总有一天你会跟不上的。
上面那个图标只是为了解释而画的,并不涉及实际的数据。绿色的曲线代表以太坊网络的各种需求的总和。总有一天要么是你的节点会跟不上同步,要么会设置一个区块大小限制。可能是现在,也可能是十年后或五十年后,但是在这个速度下总有一天你的节点会跟不上同步的速度。但这并不会发生在比特币身上。现在你可以尽情地否认,但总有一天会发生的。当它发生的时候,像CryptoKitties, Shrimp Farm, Pepe Farm之类的去中心化应用将会停止运行。这就和Ryan Charles的网站Yours.org的结局一样,当时它原本是建在比特币上的。唯一的区别是比特币已经有区块大小的限制了,Ryan要么没弄明白情况所以没预料到会这样,要么就是他认为区块大小会不断增加。Ryan并没有吸取教训,反而在BCash上下了更大的血本,而Yalls.org则将他的创意移植到了比特币的闪电网络上。
我的预测:以太坊将会设置一个区块大小限制,把BCash和它自己逼上绝路。
上面的图表甚至不是预测了,在这张最后存留的图表比较了两条链的数据目录,我用这些数据进行了推测(黄色部分)。以下是我们目前已知的:
· 比特币的未来是可预测的,区块链增长和网络需求将永远是线性的。(这是我们想要的。)
· 以太坊节点每秒所需要处理的数据量已经非常大了而且还在不断增长。(这不是我们想要的情况。)
· 如果以太坊链上需求停在它现在的这个点,区块链增长将继续保持这个线性增长趋势,如图中虚线所示。(这个情况很糟糕。)
· 如果以太坊链上需求继续爆炸性增长,那么抱怨他们的节点跟不上同步节奏的人会越来越多,总有一天会爆发。(如果到了这一步就只有一个选择了。)
上面那张图发生什么了?这个节点的主人不再维护这个节点了。其他物理限制也是个问题,比如说你有限的生命里的时间也是有限的。进行维护的要求应当比较低,而不是高得不可理喻。
你知道我是如何维护我的比特币/闪电网络节点的吗?只要让笔记本电脑一直开机就行了。如果需要重启,那我就关机然后重新开机就好了。我每天还会用我的笔记本电脑做很多其他的事情,这并不影响我运行节点软件。如果发生了什么改变导致我的节点不再和网络兼容并且无法同步,如果我是受了错误信息引导的话,我会大声痛骂那个让这一切发生的大傻瓜。但幸运的是我并没有受到错误信息引导,我很有预见性地选择了比特币。
那么问题是什么呢?我认为大多数运行以太坊节点的人并不知道他们掉进了一个怎样的坑里。我认为他们并不了解这其中的基本激励模型,他们也不知道为什么没有区块大小限制这件小事会让他们阴沟翻船。希望这篇文章能让他们明白这些道理。
那么当那个心理预期的爆发点达到时会发生什么呢?人们会放弃吗?要失去多少个节点才会发生?探索者网站甚至已经不再追踪这些数据了。Etherscan.io已经不再追踪全部或者快速同步目录了,Etherchain.org上则直接出现找不到页面的错误提示。
Etherscan同样也不会让你放大内存池,即等待被放进区块的交易。费用上涨的原因就是等待被放进区块的交易越来越多。随着时间的推移你将能够看得出来。下面的图标比较了比特币的内存池和Etherscan.io的内存池:
这两张图表都在监测这些网络上在排队的交易数量,比例也大致一样,大约4/5天。区别是什么呢?我可以缩小比特币的这张图表,然后查看整个历史。这一点为什么重要?当你的网络没有受管制的上限时,心理学就很重要了。以下是我们的图表缩小了看的样子:
明白我的意思了吗?明白为什么比例很重要了吗?如果我把以太坊的内存池也缩小了看,发现这部分其实是处在一个不断上涨的曲线的巅峰?我并不是说这就是它今天的情况,而是说这个信息不应当这么隐晦。如果有那一天这个不再隐晦了,那就已经太晚了,来不及拯救了。现在也已经太晚了。
现在让我们来看一下比特币网络上的区块和交易延迟。下面有两个图表,第一个是一个区块要传播到整个网络需要多久,第二个是一个交易要传播到全网需要多久。交易由节点来处理(一共有115,000个节点),然后由节点暂时保存,直到矿工创造出一个有效的区块并向全网公布。
· 区块传播所需时间大幅度减少,因为软件性能有了很大的提升。交易进来内存池之后会被验证。当得到一个新的区块时,迅速与已经存储的交易进行交叉对比,并且很少会收录还未收到的交易。这就使得你的节点能够以非常快的速度验证区块,并把它发送给其他节点。
· 交易时间则缓慢上升,但目前似乎有稳定下来的趋势。由于软件的隐私性能加强,交易时间的增长是被允许的,但权衡之下还是利大于弊,因为平均出块时间至少要10分钟,所以交易时间上涨16秒也是可以接受的。当大多数区块都已经满了的时候,这种上涨的趋势也会停止,因为区块大小限制带来的交易费会自我调节交易进来的速度,如果比特币协议没有什么其他的改变的话。
请注意,这些信息当中没有一项是以太坊能够提供的:
比特币就是按照这个理念来设计的。排队等待的交易数量逐渐增加,但是区块是受到管制的,人们逐渐学会使用区块链这个工具,然后交易流会逐渐稳定下来。如果这个工具不受管制,那么就会有一大帮人来抢着用这个工具,添加像CryptoKitties这样随意的功能,让整个网络无法运行,直到所有积累的交易处理完为止。所有以太坊的全节点都要处理每一个这样的合约。你可能不需要处理,他们可能也告诉你说不需要处理,但确实有人需要来处理。那么有多少个这样的人呢?更高的费用怎么办?他们在底层就把像CryptoKitties这种愚蠢的去中心化应用扼杀在摇篮里了。这些应用完全没有存在的必要,而其他的“可行的想法”也会得到同样的下场,并且只会更加糟糕,因为区块链不会扩容。
这些去中心化应用会把你的区块链搞垮因为他们不受管制:
但那不就是最初的承诺和梦想吗?那就是以太坊区块链全部的前提:和比特币一样,但是比比特币更好。实际上不是的。
很显然不受管制的区块并不会导致无限的交易,到此处得到的教训是这个网络甚至在物理上就无法处理目前的数量了,确实没有足够的节点能够处理这些信息并及时地进行中继。你知道到底有多少以太坊节点吗?你真的知道吗?比特币网络大约有115,000个节点,其中约有12,000个听节点,几乎所有的节点都是参与工作的,因为这是受到管制的。具体什么是听节点在这里并不重要,因为不管是听节点还是非听节点,他们都参与了将区块接收和发送给其他相连接的节点的工作。默认是8,那么客户端就不会让你超过8,除非你手动添加。这个限制是估计设置的,你最好不要添加太多,不然对网络不好:
比特币默认是不会允许超过8个外向连接的,-maxconnections只控制你允许多少内向连接。你可以把这个数值调高一点,但等其他大多数人连接上你要花一些时间。
请不要修改这个,因为根本没必要。在网络上可连接的节点是一个稀缺资源,而且对于去中心化来说是必不可少的。如果人们都像个别站点那样试图连接所有节点,那么我们很快就会用完这些节点。
如果你是一个商人或者矿工,你可能想和几个你信任的节点建立固定的连接(请查看-addnode 命令行/配置选项),但是有更多的连接并不意味着有更强的验证能力(参考客户端永远验证所有的东西),也不意味着中继更快(因为你需要将新的区块和交易分发给你所有的节点,反而更慢了)。这主要就是为网络提供服务。
还记得前文提到过的这个吗?
这并不是解决的办法。这只是一个例子,说明为什么一个允许参与者作出自私的选择而不进行监管的链是很糟糕的。这只有一个结局:主人和奴隶节点,少数的主人领导所有的奴隶节点。听起来很去中心化对吗?尤其是当成为主人节点对财力的要求越来越高的时候…
为了公平起见,我们在这里说点离题的话:这也正是闪电网络所受到的批评,但闪电网络是另一种完全不同的网络。区块链网络是点对点广播网络。像闪电网络这样的状态通道则是点对点任播网络。这两种网络中信息传递的方式是完全不同的。即使是你家里的冰箱也有足够的硬件来成为一个闪电网络节点。闪电网络 “辐射状通道模式”相关的批评是关于通道平衡容量的。辐射状通道模式和主人与奴隶的问题一样,但有了通道平衡之后数据就不会遇到瓶颈。你只需要把闪电网络客户端标准化,打开X个通道,每个通道含有X资金,然后网络就会按照这个标准形成,完全避开了辐射状通道模式,就像比特币客户端标准化地只允许8个节点。闪电网络是一个很新的东西,所以我们还不知道应该有什么样的标准,因为我们现在可以测量的数据量几乎为零。/结束为闪电网络辩护
谈到我们可以测量的数据几乎为零,为什么以太坊节点数量只有这几个图表?历史在哪里?这些节点中有多少个使用了fast/warp同步而且从未完全验证?你不需要全部储存,因为你还可以修剪,但是再问一次,有多少个是完全验证过的?有多少个仅是轻量客户端,只同步区块头的?
可笑的是,像Trustnodes这种鼓吹BCash阴谋的宣传网站会发布像以下这样睁着眼睛说瞎话的文章,这些文章被大量转发,不知情的人也不会去质疑它:
目前有115,000个比特币节点,并且全部都已验证:
那么现在你该怎么办呢?你作为一个独立的人,逐渐意识到了这个问题,你会怎么做呢?如果你完全不知道发生了什么,你会怎么做呢?这个网络中充满了这样的人,他们逐渐地离开了(不一定是离开,而是参与工作的节点逐渐降级为轻量节点),那这个网络会怎么样呢?还剩下多少个参加工作的节点?还有多少个节点拥有创世区块的完整副本?如果只有5个数据中心在为整个奴隶网络(轻量节点)链服务会怎么样呢?如果每个人都只同步区块头的话,谁来验证交易呢?你可以干坐在那里不断告诉自己:“网络只需要最近的状态历史就能保持安全”,但是当你的网络从底层开始全军覆没,大多数节点甚至跟不上最后的1,000个区块时,这个网络又怎么会是安全的?
经验教训:
1. 以太坊区块大小增长是一件不好的事,这是因为节点处理所需,而不是因为他们要在硬盘上存储的量。
2. 为了防止网络全盘崩溃,以太坊需要设置一个合理的区块大小限制。
3. 设置区块大小限制会导致费用上涨,这就使得许多去中心化应用无法运转或者速度大幅减缓。在未来这些去中心化应用将无法使用。
4. 如果去中心化应用无法使用,那么以太坊整个存在的意义就没有了。
BCash在这里是什么角色?
1. BCash刚刚将他们的区块大小从8MB提高到了32MB,并且很快会添加新的OP_CODES来使得像ICO和BCash Birdies™之类的功能得以实现。
2. BCash“还有增长的空间”,因为他这个区块链上的压力还不是很大,而以太坊区块链身上则背负着巨大的压力。
以太坊正在走向灭亡,而BCash正在走上它的老路,无视各种警告。他们想要更大的区块和ICO,于是他们做到了。这两个区块链都会成为同样的东西:逐步迈向死亡的、被中心化统治的区块链,但是通过逐步的区块大小增加来继续支持具有欺诈性质的实用代币,使其继续苟延残喘,直到整个系统崩溃,没有人能够再运行节点。
我的建议:停止使用中心化的区块链
唯一一个运行完全验证的节点的人就是那个支撑起整个以太坊网络的人。整篇文章到此为止我都很努力地不去提Vitalik的名字,这样我才能专注于讨论技术问题但如果这张照片(或者原来那张)无法代表以太坊空间的精髓的话,那我就不知道还有什么能代表了。我为Vitalik指出像Fake Satoshi之类的大骗子而鼓掌,但同时他也错误地代表了以太坊所宣称的功能。
啊对了,还有那个被称为杀手锏的数据分片?那完全就是骗人的把戏,还是同样的节点中心化问题,只不过往上披了一层面纱而已。这完全就是将我刚才警告过的主人和奴隶网络强塞给你,只不过打着“新的扩容技术”的名号而已。
忘了Vitalik放出来的图表吧,因为那根本就没意义。现在让我们来将以太坊目前的网络简化一下。下面的图表中将所有的轻量客户端用绿色标出来,而“好的”全节点用红色标出。你的fast/warp同步节点可能现在还是红色的,直到它无法再继续保持,或者你不再继续升级或维护,改为使用轻量客户端,变成了绿色的点。
随着时间的推移,绿色的点越来越多而红色的越来越少,这个情况是无法避免的,因为所有人都在这么干。你运行的是一个全节点还是一个轻量客户端?甚至你有在运行节点吗?“如果同步失败”,那么很多人都会建议你转而使用轻量客户端,但这并不能解决问题。
这张图甚至已经把情况轻描淡写了。实际上许多全节点(红色)的网络连接很差,根本没有图上画的连接得这么好:
不过不要担心,Vitalik来拯救世界了。他要把“节点”变成SPV客户端,只同步区块头。
限制就是每一个节点都要验证所有数据分片的区块头,而节点对区块头的验证能力受到其计算能力的限制,因此要进行“二次方数据分片”:如果一个节点能够处理C件事情,那么就有C个数据分片的区块头来让该节点处理;或者说,如果一个节点在验证一个单一的区块,那么它就能验证C个交易,所以他的总处理容量就(大约)是C的二次方。
这是什么意思呢?我花了很多时间来画了个图好让大家有个直观的感受,但是首先我们先用文字来解释一下:
在比特币中,你要么完全验证,要么不验证。你可以是以下两种情况之一:
· 一个全节点,所有的活都能干,完全验证所有的交易/区块。
· 一个SPV客户端,什么都不干,挂在一个全节点上,只同步区块头,不分享任何东西。这些客户端不是网络的一份子,根本就不配被提起,不过为了避免困惑我在这里还是说一下。
再强调一次,比特币里一共有115,000个全节点,他们什么活都能干。
在以太坊里有:
· 什么活都能干的全节点,完全验证所有的交易/区块。
· 试图干活的节点但是由于节点问题而无法同步,所以跳过并使用warp/fast同步,“完全”验证新的交易/区块。
· 轻量“节点”,永远只同步区块头,我猜他们也会和其他相似的节点分享区块头,所以我们可以把他们称为“SPV节点”。在比特币里她们并不存在。再说一次,比特币里的SPV客户端并不传递信息,他们不属于节点。
你所看到的以太坊节点数量?我敢说那大多数都是轻量节点,根本不进行验证工作(检验区块头不能算是验证)。不同意的话就来证明我是错的吧,拿出数据来。这就相当于运行了一个次级网络,相互分享区块头,但是计算网络节点的时候却被用来滥竽充数。他们对网络完全没有贡献,只是吸血的水蛭而已。
有了数据分片的新的以太坊有点不一样,这里有:
· 什么活都能干的全节点,完全验证所有的交易/区块。
· 含有全节点的数据分片网络,能够在该数据分片内干所有的活,并且验证其他数据分片的区块头。
· 只同步、验证、传播其他数据分片的区块头的“节点”。(检验区块头不能算是验证,这就相当于还是一个次级网络,假装里面是真正的以太坊节点,当他们统计节点的时候会把这些假的节点也算进去,让人们继续相信这还是一个运营正常的去中心化网络,但实际上它已经不是了。)
猜猜你会运行哪种节点?大胆猜一下吧。对于完全验证的节点来说什么都没有改变。
我为了省时间所以画连接线的时候都是复制粘贴的,因为没必要那么精确。蓝色的点是数据分片网络。红色的是以前的以太坊网络,他们需要处理所有的东西。绿色的“节点”则只是将区块头进行同步和传播而已:
这并不是扩容。如果你的节点无法同步,那它就会降级为一个轻量客户端。现在有了数据分片,你的节点降级为一个“数据分片节点”。不论如何,每次有一个节点降级,你就失去了一个全节点。更糟糕的是,他们把这些绿色的点也称为节点,但他们只是同步区块头而已,把所有的验证工作留给红色的节点。
在这种情况下,你究竟如何才能知道有多少完全验证节点?你现在完全无法得知了,因为唯一一个追踪这个数据的网站把轻量客户端也算进去了。假如这些全节点中心化到了10个数据中心里,那你怎么知道呢?你永远不会知道。
更正:有人“纠正”了我关于数据分片的说法,但我很清楚我知道它应该怎样工作。我想让这篇文章简单一点,因为这篇文章不是关于数据分片的。我会另外写一篇文章来讨论这个问题,主要是关于校勘者(Collater)和执行者(Executor)的,他们只是改头换面的全节点,但你无法运行。在我写出这篇文章之前,你可以先看下面这张新的图表,它更精确地反映了含有数据分片的以太坊网络。
0全节点:
另一方面,比特币从一开始就被设计成防止出现这种状况:
那么你会怎么做?
你应该怎么做?
你是一个开发者吗?用上你所学到的一切知识,找一个好的、没坏的区块链进行应用开发吧。
你是一名商人吗?集中精力让你的服务能够接受支付网络吧,要确保这个支付网络基于一个好的区块链上。
你是一名投资者吗?现在开始投资一个好的区块链吧,要确保这个区块链不会在未来的几年内就走向衰亡。
你是一个赌徒吗?购买EOS吧,这是个新玩意,但同样糟糕,理由和我前文所述一样,只不过还没人知道而已。
你是一个理想主义者吗?那这个绝对不是你想要的区块链,你应该去寻找你真正想要的区块链。
如果你有兴趣运行一个永远不会同步不上、也不会要求你升级硬件的比特币节点,可以查看以下这些教程: