轻量客户端及完全验证节点之间的区别
你是不是在想这个标题究竟是什么意思?别着急,往下读就会明白了。最好先去给自己倒杯咖啡,因为这篇文章也很长。如果你还没读过以下这篇文章的话,可以先读这篇:
以太坊区块链大小已经超过1TB了,这是个严重的问题
在发表了上面这篇文章之后,我和Vitalik进行了以下对话。尽管一开始是他对我的文章的回应,但对我来说,这段对话的目的是指出为什么Vitalik及许多以太坊粉丝无法理解数据分片为什么降低网络的完整度。幸运的是,对于我所提出的问题,Vitalik都很配合地回答了,这些问题逐渐分解了这背后的逻辑,所以他的回答也属意料之中:
我本来要说的是“节点”,打错打成“区块”了,但是他知道我是什么意思并且就此进行了回应。@StopAndDecrypt: 好像非权益节点的角色都在逐渐弱化,就像现在的比特币SPV节点一样,只不过“拥有选择”而已。
Vitalik: 在“任何”系统中,一个非权益节点所能做的就只是验证而已。在一个非数据分片的系统中,你可以主动验证所有东西。而在一个数据分片的系统中,更多是被动的:只验证你在乎的东西,此外如果其他节点对某些数据提出疑问的话你也可以去验证。
@StopAndDecrypt: 不对,如果发来的是无效的区块的话我的节点会拒绝,这是遵守共识的行为。只有遵守共识的节点才有意义,并且幸运地所有比特币节点都能够做到这点。你的意思是只有有权益的节点才会遵守共识。
我把这一段标出来因为这一段很好地总结了这篇文章的中心思想。
Vitalik: “以太坊现在就是这个样子,我们转换到数据分片之后也将会一样,只不过一些功能会对某些人来说更好用一些。”
我:“我完全不同意你的看法。以下是完整的反驳。”
这篇文章的目的是以易于理解的方式详细解释以下信息(排名不分先后):
· 比特币、旧的以太坊、新的以太坊的网络架构之间的差别,只涉及到非常简单的数学,没有复杂的方程,只是需要一点逻辑。
· 基于区块链的网络最终随着时间的推移最终都会变成中心化或者去中心化,究竟会变成哪个取决于其网络架构。这就排除了bootstrap和技术成熟周期(不管这个周期有多长),并且假设不对协议进行任何改动。我们可以把这称为该网络的“本质方向”。
· 对协议进行改动可能会对网络的中心化或去中心化过程产生即时或间接的影响,但长期来看不一定会改变该网络的“本质方向”。
· 目前来看以太坊的固有方向是中心化的,将它改为权益证明也不会改变这个方向,而数据分片则是一个有瑕疵的扩容方案,只是缓兵之计。
这篇文章很长,但不难懂。如果你想弄懂这个问题的话就好好读一下。
目录
概念解释
· 扩容的种类,以及这些不同的扩容方案是如何应用于去中心化的区块链网络上的。
· 去中心化的网络中,完全验证的节点的重要性。
· 本质的中心化vs. 本质的去中心化
网络区别
· 比特币的网络拓扑学,以及为什么比特币本质上是去中心化的。
· 以太坊工作证明的拓扑学,以及为什么它本质上是中心化的。
· 以太坊权益证明拓扑学,以及为什么它与前者并无差别。
数据分片
· 以太坊的权益证明拓扑学和数据分片,以及为什么这更加糟糕。
反驳
· 对Vitalik的回应的反驳。
· 对这篇文章的反驳:
https://medium.com/@gustav.simonsson/keeping-up-with-the-etherians-a-response-to-blockchain-size-concerns-a4858c2701d9
扩容什么?扩谁的容?在哪里扩容?
什么时候……扩容?
论点:更大的区块会使得验证者中心化
就是这么简单,这就是扩容之争中整个数字货币社区争论的中心,熟悉区块链协议的人一般都不会否认这个事实。以下这段节选我认为很好地解释了各种“第二层”扩容方案(在这些方案中唯一可行的一个已经实施到比特币中了)。
以下视频是Vitalik解释为什么数据分片是一种第一层(L1)扩容方案:
https://www.youtube.com/watch?time_continue=40&v=SAiuWwzcp6g
Vitalik:分片技术是一种第一层(L1)扩容方案,就是说它可以让区块链更好地工作,基本上会有更高的可延展性,这就是分片技术主要要做到的。
请注意,在这里说的“扩容”并没有给出语境,那么我们就来提供一点语境。我们不能一直乱用“可扩容性”这个词,尤其是我们甚至还没有对这个词达成一个意见一致的定义。哪怕每个人对这个概念的定义都不同,在此进行辩论的人应当至少对这个词提供他们自己的定义。
我在本篇文章中讨论扩容的时候,我所讨论的只有一件事,那就是在不牺牲去中心化的前提下提高性能,而网络的去中心化程度最直接的代表指征之一就是验证节点的总数。讨论区块链网络扩容的时候聚焦在除此之外的任何事情,要么是没有正确地理解,要么就是出于某种原因而故意误导。
把这一点说清楚很重要,因为这是一个基础,能够帮助你接下来理解以下几种扩容方式以及如何应用到去中心化网络上。
· 向外扩容:增加基层(L1)上的完全验证节点的数量,或者在不影响网络“本质方向”的基础上提高基层性能。提高性能就会增加使用网络的动力,从而增加验证节点的数量。所以在以上两种情况下,验证节点都会在一定程度上增加。
· 向上扩容:即在基层上再添加层。向上扩容可以正确地进行,也有可能出错。正确的方式会对基层有很小的影响或者根本没有影响。像闪电网络之类的支付通道网络就是正确的向上扩容的一个很好的例子。侧链可以说是不正确向上扩容的例子之一,因为有可能会破坏挖矿的安全模型,但这不是本文要讨论的问题。
反过来则有:
· 向内扩容:减少完全验证节点的数量。向内扩容就是通过提高基层的性能来减少完全验证节点的数量。数据分片做的就是这个,这也是为什么我要写这篇文章的原因。
· 向下扩容:降低层的复杂性。这在一个去中心化的网络中是不必要的。这个方法往往应用于中心化的系统中,比如公司裁员或者内部结构重组。
我们经常提到“节点”这个词,但往往不给出定义,让初来乍到的人很难懂。我有一个朋友跟我讲Nano可以让所有人都运行节点并且拥有自己的区块链。人们往往不知道他们自己在讲什么,因为他们接触不到正确的信息。如果不是正确的节点的话,盲目增加节点数量毫无意义。所以我说他们一直在向大家鼓吹的是一个向内扩容的方案,因为这个方案的结果会使得正确的重要的节点数量下降。不一定马上就会下降,但是随着时间的推移一定会下降。我接下来也会讲讲为什么这很重要。
完全验证节点的重要性
https://twitter.com/lopp/status/1001903809004736513/// 如果你想知道为什么@Bitcoin的推特账号拉黑了我,可以阅读我的BCash文章。Jameson Lopp: 这是我的节点。还有很多像这样的节点,但这一个是我的。我的区块链由我来验证,这是我的财政生命,我必须要对它拥有完全的掌控,就如同我完全掌控我自己的生命。没有我的话,我的节点毫无用处。没有我的节点,我则感到不安。为了保持区块链的真实性,我必须运行我的节点。
Bitcoin: #不是邪教
Miles Suter: 给一群拥有共同价值观、准则和展望的人贴上邪教的标签,这是把问题简单化的做法,这种论点也非常软弱无力。当一个人无法提出真正有力的论据时才会才用这种下三滥的手法。
*译者注:@Bitcoin是一个宣传BCash的推特账号
你已被@Bitcoin加入黑名单,无法查看该用户的推特。
我要做的第一件事情是举例解释为什么这些很重要,然后再向大家展示常见的反对意见,我将简要地对这些反对意见作出回应,然后在本文稍后部分解释比特币网络究竟是如何工作的。到时候读者将能够从我的解释中理解为什么这些反对节点的论点并不成立了。
先给大家提个醒:如果你打开这篇文章的目的是要阅读有关以太坊的内容,而你对比特币网络的工作原理并不感兴趣的话,那你以后活该输掉投进以太坊里的钱或者开发的精力和时间。
我的例子很简单:
在比特币中,所有的节点都完全验证。如果有人想要上传无效的东西,则将不会被网络传播。每一个节点都想人体免疫系统里的白细胞一样能够识别外来者的入侵。对于区块链网络来说没有比这更优秀的安全系统了。
以下是一些常见的反对节点的论点:
· 除非你是“挖矿节点”,否则都无法确保执行共识,而那些不是挖矿的节点会妨碍“挖矿节点”。
· 对于去中心化来说,边缘(edge)比节点更重要。所以增加节点数量并不一定能提高去中心化程度。
· 需要多少个节点才能保证安全?肯定有一个“足够好”的节点数量,达到这个数字就能保证安全了吧?
1: “除非你是“挖矿节点”,否则都无法确保执行共识。”
为了回应这个问题,我将直接开始解释比特币网络的工作原理。你将在“比特币网络拓扑学”这个章节里找到答案,我也将这一章节的内容写成了一篇独立文章,因为单单是这一问题就有很多错误信息在网上大肆流传。(这最终都会回到数据分片和以太坊身上,相信我。)
2: “边缘(edge)比节点更重要。”
为了接下来的文章更好读懂,我在这里要澄清一点,当我说“去中心化”的时候,我指的是下图里(C)的情况(但是是四维而不是平面的二维)。这张图是我从Vitalik那里偷来的,他曾经写文章解释为什么这张图很糟糕:
Fig.1-(a) 中心化 (b) 去中心化 (c) 分布式网络 (这还有待明鉴)
边缘(edge)只是节点之间的连接,以下的两张图表中每张图表都有16个节点,节点数量相同,但其中一个的边缘却比另一个要少得多,边缘多的图表中,每个节点都和所有其他节点相连接。
这两者之间的区别是什么?
第一张图有足够的边缘来将信息传播(我们待会会详细讲这个)至网络中的每一个节点,只需要进行足够次数的“跳跃”即可完成,并且这些节点无法被审查屏蔽,因为他们之间的连接(即边缘)分散得很好。
另一个网络呢?
· 每个人都知道你是谁。
· 每个人都知道你发送的这笔交易是不是由你创建的。
· 每个人都知道通过一个节点中继的区块是由该节点创建的还是仅由该节点中继,这个区块可能是来自一个他们不喜欢的矿工。
· 现在他们知道IP地址包含一个拥有大量比特币的地址。
· 他们知道那是一个矿工,或者他们知道是哪一个IP地址允许他们不喜欢的矿工中继那些区块。
· 如果有人能控制无限量的验证者的话,那他们就能审查并屏蔽你,或者屏蔽任何包含你的交易的区块。
这简直是隐私和安全的反面教科书。
关于边缘,肯定有一个“足够”的数量可以达到,你待会就会明白了。在我的上一篇文章中,我同时也谈到了传播的问题,尽管边缘数量“有限”,传播速度还是在不断加快。骗子往往尤其爱用这个论断(甚至是连Vitalik都时常揭穿的骗子),他们骗人的时候就爱用这个招数来显得自己很聪明:
他还像个白痴一样把第一层(L1)网络和第二层(L2)网络拿来相提并论。Dr Craig S Wright: 好好笑哦
这种理论就是节点(顶点)才重要,而不是边缘。这种论断毫无真实性,只能用来骗骗不懂的人。
闪电网络有2000个节点,而永久性的边缘只有8000个
比特币现金有800个节点,却有24万个边缘
因此比特币现金更加去中心化
这是微软公司四处散播的谣言
3: “到底需要多少个节点?”
我认为,会提出“到底要多少个节点才能保证安全”这种问题,说明有人还是看不到大局。提出这个问题就说明他们认为一定要有一些节点才是安全的,所以现在的问题就是要弄清楚究竟要多少个。问这些问题的人有时候是真心提问,有时候则是在试图转移话题。
以下是一些简单的问题,读者不一定对这些问题都有答案。假设能够保证安全的节点数量是2万个全节点。
· 如何通过编写代码来保证节点数量一直保持在2万个以上?
· 即使可以通过代码实现了,网络如何才能知道到底有几个节点,而不需要一个预言机(oracle)来告诉它呢?
· 我们假设需要2万个节点,但是我们为什么要假设2万个呢?我们在现实生活中做过测试,发现要阻止政府被推翻需要2万个“人”?这个例子很蠢,但如果人口增长了10倍的话,2万这个数字还准确吗?
· 如果我们现在就确定下来一个数值,将来发现这个数值不对,我们还要冒着风险再走一遍流程来更改协议,换成一个新的数值,这值得费这么大劲吗?
我想说的是,根本没有办法这样做。你没法写代码让网络保持在一个特定的节点数量上。我倾向于以下结论,并且目前我还没有看到有什么好的论据来反对它:任何区块链网络,如果不改变协议,并且需求持续增长,那么这个网络将会随着时间的推移变得中心化或去中心化,究竟往哪个方向发展取决于网络架构。如果你想要去中心化的话,那么你所写的协议就必须本质上是去中心化的。这就意味着协议的设计必须保证验证节点的数量会随着时间增长,而不是减少,这一点就引出了下一章节。
本质中心化/去中心化
在本章节的开头,我想要澄清一些关于这两条链的比较的问题。我和其他人以前曾经用过的比较方法确实有一些问题,所以在这里我改用更加公平的方法来进行比较,这个方法反而让一切看起来都更糟糕了。
· 比特币区块“大小”呈线性增长是因为节点在最大区块能力下进行处理所需要的数据量随着时间的推移是不变的。所以下面左边这张图表和右边这张图表其实是一样的。
左图:随着时间的推移,链的增长呈线性
右图:随着时间的推移,处理所需数据量保持不变
· 单纯的区块大小增长会导致随着时间的推移节点需要处理更多的数据(但保持不变),链的增长也会更快(但依然是线性的)。不断增加区块大小则会使得这两者都不断增长。
但愿以下能够解释清楚,但是我会更进一步地阐释:
本质的去中心化:验证者增加
· 区块大小限制=链呈线性增长
· 链呈线性增长=节点需求保持不变
· 节点需求保持不变=随着时间的推移节点数量上升
本质的中心化:验证者数量减少
· 没有区块大小限制=链呈指数增长
· 链呈指数增长=节点需求增高
· 节点需求增高=随着时间的推移节点数量下降
https://twitter.com/StopAndDecrypt/status/1000874907448827904https://twitter.com/StopAndDecrypt/status/1003807436967481344区块链网络构架对全部验证的节点数量增长或者减少有直接影响吗?
也就是说:我认为,一个区块链网络的节点,如果不去干扰它并且需求保持不变,那么这个节点将有以下两种结果:
1] 增长
2] 缩减
它将不会在某个点“来回徘徊”。
你同意吗?
85% 是
15% 否
@StopAndDecrypt:应该把那16%的人从每一个@bitcoin发起的投票中去除。
@pierre_rochard:选一个
16% 低廉的交易费用
54% 2100万比特币
如果设定一个区块大小不再增长,那么随着科技的发展,运行节点将变得越来越容易,于是节点总数量将会上升。当我说“本质去中心化”的时候说的就是这个意思。当比特币升级到隔离见证之后,运行完全验证节点的要求确实提高了,但只提高了一点点。这并没有导致任何人被迫退出网络或者让依然运行隔离见证之前的节点的人遇到困难,最重要的是,这个网络依然保持着本质去中心化:
当区块大小因为隔离见证而改变的时候,这并不是单单为了“增加空间”,还因为许多其他原因。现在比特币区块大小受到管制,设定了一个限制,并且不会被改变。如果一个区块太大的话,那它将会被认定为无效区块。这是我们想要的结果,因为这保证了数据量不会随着时间的推移而改变。没有人投票来决定这个事情,这并不是一个51% vs. 49%的情况。只要区块太大就一定是无效的,一直都是这样的。
网络无法得知你的节点挖出了一个区块,协议通过这种方式来保证所有人隐私平等,而区块大小限制则保证物理平等,即无法区分一个验证者挖矿或者不挖矿(后面会展开讲这个)。不应当因为对每个人的节点都更容易,就将节点按照处理交易的能力分成三六九等。如果去掉了区块大小限制,那么这些节点就会被分成三六九等,一群节点有能力通过创建区块来关闭另一半网络,从而逼走其他节点,长此以往将会毁灭整个网络。
信息安全行业中有一个概念叫做“攻击面”:你所暴露的面越多,就越容易受到攻击。同样地,我们可以说机构管理行业也有它的“争论面”:所需要争论的决策越多,该机构的效率就越低下。
改变比特币的设计,使得区块大小可变,会导致:
· 我们不想要的大小现在也被认可为有效的了。
· 矿工们会开始随心所欲创建区块,不管这些区块会对其他参与挖矿或不参与挖矿的验证者有什么影响。
· 运行节点的要求越来越高,导致节点数量越来越少。
更多的变量则意味着有更多的方法来区分和隔离不同的节点。
我还想指出的一点是,不管区块大小限制是2MB还是8MB都没有关系。总有一天科技发展会使得区块大小限制能够达到你想要的那个数字,不过那又是另外一个话题了,因为我们可以现在就把区块限制设定为50TB,然后“坐等科技进步”,但是等那一天到了比特币也被中心化毁掉了。区块大小限制究竟应该多大是另一个话题,我现在唯一要讨论的是必须要设置一个限制,不会随着时间的推移而改变,如果区块大小超过了这个限制,就会被判为无效。
这就引出了下一个例子:以太坊及其随意限定的“gas限制”:
如果没有合理限制的话,就像在上图中或者在以太坊中,区块大小不断增长,而科技发展的速度不够快,无法跟上,于是你就无法再继续运行节点了。当我说“本质中心化”的时候就是这个意思。由一帮中心化的演员来决定的不受限制的增长要求是非常糟糕的。即使有了数据分片,这个限制还是会随着时间的推移而增长。数据分片也许能够通过分担工作而短暂地有效,但以太坊终究还是会朝着本质中心化的方向走去:
以太坊的区块大小由矿工决定,矿工设置区块的gas限制。如果你不能理解以太坊的gas限制的话,以下是一个非常简单的解释,这个解释可能会引起某些技术人员的不满:
在以太坊中,区块大小限制不是字节,而是这个区块能够拥有多少单位量的gas。为了方便讨论,我们假设这个限制是1000单位的gas。
如果你想要创建一个交易或者说一个“合同”,要进行处理就需要花费gas。假设你的交易需要2个gas,我的交易需要5个gas。我们的交易都能塞进一个区块中,这个区块中还有其他价值993个gas的交易。
当矿工挖出一个区块的时候,他只能往里放价值1000个gas的交易,如果超过了的话网络就会将这个区块判为无效区块。
只不过他们并不受限于1000这个数值…
他们可以往区块里放进1200个。接着他们可以往里面放1500个。共识规则允许他们逐渐提高这个限制而不会被判为无效。其他矿工可以制作小一点的区块,这样可以把平均值降下来(进而让限制值降下来),但这些只是其他矿工而已。如果你在这种共识规则下运行一个完全验证的节点的话,你无权决定这个度量。在这个网络上,旷工高于一切,并且Vitalik本人甚至并不否认这一点。
Vitalik: 其拒绝对网络有直接影响的节点只有矿工或者验证者。这个系统能够安全应对33-50%针对验证层的攻击。
@StopAndDecrypt: 如果这是真的,我们现在早就有应急共识或者Segwit2X了。旷工的“支持”率当时已经接近100%了,还说什么他们懒得创建区块。
提交一个区块和提交一个交易是一样的,要么有效要么无效。
所有节点拒绝。
以太坊网络代码对节点进行了区分,因此以太坊本质上是中心化的。这是目前比特币和以太坊网络特质的本质区别。以太坊上的完全验证节点并不拥有平等的投票权,因为他们的外部能力允许他们改变协议,进而影响其他节点。在比特币中,并不存在能够影响别人运行节点的投票权。
· 如果你不去干扰比特币(我们确实不打算去干扰它),那么它的完全验证节点将会随着时间的推移而增加。
· 如果你不去干扰以太坊,那么它的完全验证节点将会随着时间的推移而减少。
我认为在这里有必要指出,如果没有像闪电网络这样的状态通道网络技术,我关于比特币的说法也不能成立。像这种本质的特征不仅限于节点增长或减少。此外我还认为,尽管以太坊也有可能会有状态通道网络,但以太坊目前面临的麻烦要大得多。
下面两个章节将通过详细阐述比特币的网络拓扑学来展开解释这个概念,然后会讲到由于投票权问题而导致的以太坊网络的差别。
比特币网络拓扑学
比特币不仅仅是区块组成的一条链。我首先想帮助读者理解比特币的区块链网络是如何设计的,因为这个问题是最简单的,而且你首先要理解其基础的特性才能理解后面的内容。我在这里说“区块链网络”,是因为比特币还有一个支付通道网络(闪电网络),建立在其之上,并不影响区块链网络的结构。不过我并不打算在这篇文章中讨论比特币的闪电网络,因为这和本文主旨无关。
以下是一个把比特币网络简化的例子,假设比特币网络中只有1000个完全验证节点(实际上目前有115,000个)。每个节点连接着8个其他节点,因为这是客户端的默认设置,如果不改变客户端的设置的话那就是默认8个连接。我的节点就是其中一个,如果你也在运行节点的话,你的节点也在其中。Coinbase的节点也在其中,Bitmain的节点也在,如果中本聪还在世的话,他的节点也在其中。
请注意这只是一个示意图,真正的网络拓扑学可能会有所不同(很大概率确实不同)。一些节点的连接数比默认的8个要多,另一些节点可能少一点或者只有一个连接。我们无法得知这个网络到底是什么样子的,因为当初设计这个网络的时候就故意设计成这样以保护隐私(不过一些监控网络情况的公司会尽力给出最近似的估计),节点可以定期改变他们连接的其他节点。
我以这张图表开篇是因为我想让读者明白这些节点之间没有区别,因为他们都是完全验证的节点。在里面的节点和在外面的节点没有差别,他们都有同等数量的连接。当你开始运行一个全新的节点时,这个节点会找到别的节点进行连接,成为整个网络的一部分。在这张图表中,一个节点到另一个任意节点的最长距离是6.在现实生活中,这个最长距离可能会有点偏差,因为寻找别的同伴节点并不是一个完美地自动化的过程,并不能把每个节点都均匀地分散,但通常来说,添加新的节点到网络上并不会改变这一点。有个游戏叫做6 degrees of Kevin Bacon,这个游戏基于六度分隔理论,即世界上任何互不相识的两人,平均只需要6步就可以将他们联系起来。如果我的交易是有效的,那么只需要6步就能传送到(几乎)每一个节点上。
我将从这群节点中选出“我的”节点并将它单独拎出来,这样我就能演示当我创建一个交易并向网络宣布时会发生什么。在下面的图表中,我的节点是最右边的这个,有8个节点(同伴)和我的节点相连接。
当我创建一个交易,并“向整个世界发送”时,这个交易实际上只是发送给了这8个节点。因为比特币最基本的设计理念就是要求所有的几点都是完全验证的节点,所以当这8个节点收到我的交易时,他们会验证这个交易是否有效,然后再将它发送给他们连接的8个节点。如果我的交易是无效的,那么它甚至不会通过网络的第一道“防线”。我的节点连接的节点绝对不会把无效交易发送给他们的同伴节点。我的同伴节点甚至不会知道是我创建了那笔无效交易。他们无法得知这个交易是谁创建的,并且会平等地对待所有数据,但是如果我继续向我的同伴节点发送无效交易的话,它们最终都会屏蔽我。他们会自动防止我向他们发送垃圾信息。不管你是谁或者你的公司有多大牌,如果你的交易无效,那它就不会被广播出去。
现在假设你运行的不是全节点而是一个轻量客户端,有不同的轻量客户端可供桌面端或手机端使用,包括Electrum、Armory、Bread以及Samourai Wallet。轻量客户端系连在一个特定的节点上,有一些客户端一段时间之后可以改变系连的节点,但是他们最终还是必须系连在其他节点上。下面是轻量客户端系连在节点上的示意图:
我向读者展示这个的原因将会在下文逐渐展开。我想请读者注意这只是一个示意图,我把这个轻量客户端画在球的表面只是为了方便展示,实际上根本没有表面,不管这个节点在图中的哪个地方,轻量客户端都只是和它系连在一起。我用黄色把它圈出来了,绿色的点是轻量客户端系连的节点,蓝色的点是轻量客户端。所有发送到轻量客户端或者从轻量客户端发出的信息都要经过系连的节点。他们依赖这个节点,他们不是网络的一部分,他们不是节点。请记住这一点,在以太坊中他们的行为方式稍有不同,但他们对网络的影响都是一样:即毫无影响。
现在要讲到好玩的部分了,有些人会误解网络的工作原理:如果我想开始挖矿会怎样?
挖出一个区块就是创建一个区块。就像要发送一个交易一样,你必须创建一个区块并向网络宣布。任何一个节点都可以宣布创建一个新的区块,这个过程并没有什么特别的,你只是需要一个新的区块而已。挖矿现在越来越困难了,但如果你愿意的话,你可以购买专门的设备然后接入你的个人节点。
还记得刚才关于无效交易的讨论吗?对于区块来说也是一样,但你首先要明白区块是如何创建的。
首先请观看以下视频。我直接跳到了关于哈希的比较重要的部分,使用nonces(随机数)以及将新的区块头接到链上:
https://v.youku.com/v_show/id_XMzY3MjIzMTczMg==.html?spm=a2hzp.8244740.0.0 如果有时间的话最好看完整个视频。这是我个人最喜欢的解释挖矿原理的视频。当你看到视频的这个部分的时候,标着“Prev hash”的就是区块头:
视频中没有提到的是,哪怕区块里所有的交易都是无效的,你仍然可以创建有效的区块头。要挖出一个包含无效交易的区块所需要的时间,和包含有效区块所需时间是一样的。那么为什么要花这么多时间精力创建区块呢?因为要推动通过一笔交易,然后会把本不属于你的比特币奖励给你。所以这就是为什么节点不仅要检查区块头,还要检查区块中的交易。这样才能阻止矿工花时间创建包含无效交易的区块。所有节点都要检查,没有任何一个矿工能够蒙骗系统。如果不是所有节点都检查的话,那这个系统就要依靠那些检查的节点。这就会把节点分成三六九等,只有检查的那些节点才重要。以太坊目前就是这样,我将在下个章节中展开讲述。
如果你加入了一个矿池会怎样?你可能会选择加入矿池,因为单独一个人挖矿实在是太难了,或者你的公司比较大,你想要稳定的收入。许多矿工都选择加入矿池,他们将自己的专用设备通过一个完全不同的协议——Stratum挖矿协议来直接接入矿池。就和用你的非节点手机创建一个交易一样,你不需要运行节点才能将你的设备接入矿池。不用运行节点也能够挖矿,许多矿工都是这么干的。下图中蓝色箭头显示的就是这种模式,在这里我以Slush 矿池为例:
请注意,我把这些由矿池运行的节点单独拎出来是为了方便展示。就和任何其他节点一样,这些由矿池运行的节点也需要同伴节点。他们需要同伴节点来接收交易和区块,也需要同伴节点来广播他们创建的区块。我要再强调一遍:所有节点都验证所有区块和交易。如果任何一个矿池传播了一个无效区块,他们的同伴节点马上就会知道,因为他们是完全验证节点,他们不会把这个无效区块发送给其他节点。就像交易一样,无效区块不会进入到网络中。
如果不把这些节点单独拎出来的话,可以从另一个角度去看。以下是一个私人矿工,他不想别人知道他的身份;他有8个随机的同伴节点,这些节点都不知道他是一名矿工。这个机制故意设计成这样以保护隐私。网络中的任何一个节点都无法得知他们收到的区块是由他们的同伴节点所创建的。他们所能知道的只是这个区块是否有效,如果有效就继续发送给下一个,如果无效则不发送。
但愿你现在已经能够理解个大概了,我应该没有使用任何复杂的数学或者方程式来解释。我认为现在已经基本覆盖完这个话题,可以转而继续下一个了。但是最后还有一件事我要说一下,因为很多人会用这个来迷惑还没有完全理解我刚才讲的东西的人。这个太常见了,所以我必须要讲一下。
https://twitter.com/VitalikButerin/status/1000232465540136960@StopAndDecrypt:你实际上就是创建了一个子网,让Electrum和Bread的SPV客户端发送区块头,然后把他们称为比特币网络的一部分。但实际上他们什么也不干。
Vitalik:其拒绝对网络有直接影响的节点只有矿工或者验证者。这个系统能够安全应对33-50%针对验证层的攻击。
我原本的评论是在讨论轻量客户端,也叫作SPV客户端,他们并不算是网络的一部分。我在前文用蓝色的系连点演示过了。Vitalik的回复试图暗示说只有挖矿的节点,其拒绝才对网络有影响。请记住:节点无法判断另一个节点究竟是创建了一个区块还是只是把这个区块中继而已,这个机制是故意设计成这样子的。
下面是最后一个图表,让我来努力解释一下“只有挖矿的节点才重要”这种说法背后的逻辑。一些矿工会和其他矿工连接,所以他们的同伴节点中有一些也是矿工。并不是所有矿工都会这么做。这些直接相连的矿工中有一些也会使用可选的中继网络,比如由Bitcoin Core开发者Matt Corallo开发的FIBRE,但甚至连这个侧网络也不是仅属于矿工的,任何人都可以加入,包括你和我,它只是用来帮助区块在网络里中继而已。不管怎样,有人试图争辩说,这些挖矿节点相互连通(不管是用FIBRE等工具还是不用),就说明这些节点才是重要的。这个结论很荒谬:
在这个例子中,我没有把节点的同伴节点单独拎出来。你现在应该明白了吧。他们拒绝无效的区块。绿色圈子里的节点绝对不是网络中唯一重要的节点。说完了这点,我想我已经覆盖了比特币区块链网络中的知识点,现在可以开始讲以太坊了。
使用工作证明的以太坊
除去几个重要的不同点外,这一章和上一章内容差不多。最重要的知识点是完全验证节点不能因为区块的大小或者gas限制而拒绝某一区块。如果这个外部流程没有一个油门阀加以控制的话,完全验证节点就会受到很大的压力,不得不加快处理信息的速度,甚至是赶不上进度,导致节点数量减少,将节点组推向更大的企业。
和比特币相似,以太坊的区块链延长过程和代币分发过程目前使用的都是工作证明。由于以太坊区块链网络的功能不同,区块内储存的数据也不同。这个和数据的类型,“智能合约”之类的没有关系,只和数据量以及网络拓扑学有关。
下面的图表,和比特币的那个图表一样,只是为了演示而画的示意图,和真实的网络拓扑学有一定差距。在图中,我没有给每个节点都平均分配同伴节点,每个节点拥有的同伴节点数量呈曲线,因为众所周知以太坊的同伴节点有问题,因为节点数量一直在下降,能够服务足够的数据量的“好的”同伴节点如今已经很难找了。
https://github.com/ethereum/go-ethereum/issues/15753philoctetes409bc: 我正在试图弄清楚是什么问题,但我只能得出这一个结论,那就是我们没有足够的同伴节点了,你们有谁也遇到这个问题吗?
copumpkin: 我也没办法进行同步,甚至换上了现代固态硬盘也不行,所以我认为这个问题的根源还要更深。
当好的同伴节点数量受到限制时,这个“去中心化的”网络就会变成这样。当人们试图同步一个新的以太坊节点的时候就会出问题,因为已经没有足够的同伴节点提供他们所需要的数据了。只有一小群有很多个连接的同伴节点为整个区块链服务。这对于一个广播网络来说是非常糟糕的。更糟糕的是gas限制(并进一步限制区块大小)不断上涨,因为它根本不受限制,给这些有限的节点施加更大的压力,节点越来越少,尽管Vitalik声称“gas限制已经X个月没有变过了”:
>由于以太坊区块大小不断迅速增长,瓶颈不受管制
>你的节点迟早有一天会因为这个问题而无法同步,除非设置一个区块大小限制。
这种观点非常无知。以太坊已经有区块大小限制了,只不过是以gas限制的形式进行。Gas限制值是8百万,并且已经有6个月没有变过了。快速同步datadir增长已经停留在10GB每月并且持续6个月了,并且将不会再增长太多,因为大幅提高gas限制会导致叔伯率(uncle rate)中心化问题。所以我们其实已经见识过最糟糕的情况了,这种情况持续了半年。
Gas“限制”并不能算作真正的限制,并且就像我上文说过的,矿工可以随意选择。重要的是,不管gas限制是多少,以太坊节点都不会拒绝区块。这是比特币和以太坊的本质区别之一。节点并没有能力组织外部压力用不受管制的数据来把他们中心化。矿工现在不提高gas限制是因为他们好心,而且Vitalik也告诉他们不要这么做。这听起来很去中心化吧?区块链不应该以这样的方式运转。如果费用上涨得太高了会发生什么?
读读Vitalik的回复,再结合下面的图表看看:
以太坊有两个选择:
· 如果gas限制不上涨,则没有足够的空间来储存这些合约,用户就会展开价格大战,进而导致费用上涨。如果费用上涨太多,普通的合约就会变得非常昂贵,依靠低廉费率运行的Dapps(去中心化应用)就无法工作了。上次发生这种事的时候,他们被迫提高限制,因为他们需要Dapps。
· 如果gas限制上涨,那么以同伴节点为中心的节点数量将会下降得更多。
幸运的是,以太坊和比特币一样有轻量客户端,如果你无法运行你自己的验证节点的话,可以使用轻量客户端…
还记得我前文演示过的吗?SPV客户端(只同步区块头)需要系连在一个特定的节点上,并不属于网络的一部分。在以太坊中,他们更进一步地为这些轻量客户端创建了一个“子网络”,他们可以在这个子网络上分享区块头。可能你还不知道吧,实际上在以太坊中,大多数人(因为各种原因)并不运行完全验证节点,而只是运行轻量客户端。
https://www.reddit.com/r/ethereum/comments/7k4vy5/we_desperately_need_more_lightserve_nodes/https://github.com/ethereum/go-ethereum/issues/15454/// 你也可以查看我之前的文章。我们非常迫切地需要更多—lightserve节点!!!!!!!
以太坊钱包有一个很棒的功能就是用轻量客户端网络来同步。这是一个可用的工作程序(所以不需要网页浏览器),可以与以太坊网络互动,同时只下载大约1 GB数据。这对大多数人来说非常重要,因为他们都没有很高级很昂贵的硬件。但是最近我在geth的最新版本中发现了一些bug,导致轻量模式网络非常不稳定。我们没有足够的同伴节点来为每一个人服务,这就导致新的同伴节点可能永远也无法连接,如果他们能够连接的话,他们肯定会帮助到其他轻量模式用户。所以轻量模式网络现在就像在“闹饥荒”一样。拜托了开发者们,麻烦尽快修复连接不稳定的bug吧。这里的用户们也可以伸出援手,用轻量模式运行以太坊钱包,这样就会有更多可用的轻量节点了。此外,Parity的开发者们,希望你们能给Parity也开发一个兼容的轻量模式版本,这样两个钱包的用户就能相互连接了。
这是一个很好的机会让以太坊接收被比特币背叛的用户。这里的社区很活跃,开发者很团结,网络很稳定,交易又快又便宜。
所以请尽快修复这个bug,让轻量模式网络正常运转,这会帮到很多像我这样的用户,我们目前没有能力负担得起储存20 GB数据,但我们很聪明,不想用网页浏览器来运行以太坊。(永远不要把生意和快乐混在一起。)
我想更多地使用以太坊来支付,但每次我上网时,我总是需要让我的笔记本联网大约20小时,才能和其他轻量模式同伴节点连接上,下载几个100 MB的区块头。由于有bug,有时候光链会被损坏,获取1 GB光链数据需要花上30至40小时。如果我在bittorrent上下载东西,速度为500 kb/s,下载1 GB只需要33分钟。
我们需要更多lighserve节点!!!!!! 目前这个需求非常非常高。
修改:所以问题出在,最新的协议升级导致搜寻同伴节点不太靠谱,这个问题在轻量模式下更加严重,因为本来lightserve节点就少,可能是因为运行geth的时候lightserve选项默认是关闭的(因为lightserve还在试验阶段)。我在Github上看到有人建议运行geth 1.7.2版本而不是1.7.3版本,但我没法试试这个是不是能解决问题。在Linux系统上,运行geth后,你可以运行以太坊钱包,然后它就会监测到geth正在运行。我认为如果你只是运行以太坊钱包的话,geth会在内部启动或者怎样,我觉得最新的这次更新之后用的是geth 1.7.3。
KainniaK: 能不能修一下这个?做一个应用程序版的以太坊钱包很难吗?我不想用在线钱包,而且我也不是随时都能上网。我希望我的笔记本电脑在我上线的时候能够和网络同步,但现在就没法用。请快点修好这个拜托了!!!!!!
lmars: 跟你们说一下,我现在自费运行几个轻量服务器,所以我的节点能够拥有充足的轻量客户端同伴节点。这个“解决方案”就是要求社区里更多人运行节点并开启轻量服务器(查看这里),希望大家能够帮帮忙,也运行一个轻量服务器。
他们一直都面临着全节点短缺的问题,没有足够的全节点向轻量客户端提供所需的区块头。轻量客户端无法一直和同伴客户端相连接,因为人们开启和关闭客户端比较随意,所以他们更依赖于全节点志愿给他们数据。在比特币中,没有志愿这回事,所有全节点执行同样的中继功能,这很容易做到。总之,我不认为为轻量客户端专门创建一个子网并没什么问题。我认为如果有人想要运行一个轻量客户端,那么他们应当能够这样做。我认为这些轻量客户端有一个子网是一件好事,最好的情况下,人们不再需要信任某一特定节点来获取区块头,最坏的情况下,他们无法满足他们自己制造的需求。问题在于开发者们开始管这些轻量客户端叫“节点”,误导社区相信这些轻量客户端对网络是有贡献的。轻量客户端不是“节点”,他们对网络毫无贡献。
https://twitter.com/NickSzabo4/status/1001488447129829377Nick Szabo: 好的篱笆造就好邻居,“经常对清账目让友谊天长地久”(语出Pacioli)。全节点验证加上全球广播造就全球化的社区——这个社区只包括完全验证者,不包含外来人。
以太坊开发者确实把轻量客户端称为节点。下面这张图是关于数据分片的,这个话题我等下会讲,但开发者们不应该到处跟社区里的人将他们运行的轻量客户端是节点。这样的话计算出来的节点数量一直往上涨,但实际上是轻量客户端数量上涨,而全节点数量下降。把轻量客户端称为节点只是在掩盖事实。
但愿我现在已经讲明白了。验证区块头对网络一点意义都没有。限制就是每一个节点都要验证所有数据分片的区块头,而节点对区块头的验证能力受到其计算能力的限制,因此要进行“二次方数据分片”:如果一个节点能够处理C件事情,那么就有C个数据分片的区块头来让该节点处理;或者说,如果一个节点在验证一个单一的区块,那么它就能验证C个交易,所以他的总处理容量就大约是C的二次方。
下面的图表更能准确代表网络是什么样子的:
看到这个图之后,你对“节点”总计数的数值有什么看法?这些节点看起来有什么不一样吗?没读这篇文章之前你知道他们之间的区别吗?就算他们不把轻量节点也算进去,最终会发生什么变化?
随着时间的推移,尽管“节点”总计数可能会上升,如果一个网络是本质中心化的并且对完全验证节点不够重视的话,它就会注定变成这样:更加糟糕。
不仅仅是验证者数量开始下降,矿工也会开始直接连接到彼此以避开糟糕的叔伯率或者孤块率。叔伯或者孤块的出现是因为出块时间相距太近。不同的矿工在同一时间挖出有效的区块将会形成两条有效的链。最终其中一个区块有人接着继续创建区块,而另一个则会成为孤块。
在这张图中紫色的就是孤块。当网络选择了另一条分支继续下去的时候,你知道孤块会给谁带来最大的损失吗?是那些小矿工,这样就导致网络更加中心化了,因为小矿工无法承担收入上的震荡。
现在的情况是:
· 验证者数量不断下降
· 社区成员无法运行验证节点,只能转而运行轻量节点。
· 开发者们告诉社区这没关系,因为他们反正也不是“有意义的验证者”。
· 即将对网络架构进行本根性的改动,将会使得验证节点数量更加少,到时候需要32 ETH才能成为验证节点
对于这个话题的回应要么是同意这是个问题,要么根本不承认存在问题。当人们争辩说不存在问题的时候,他们往往爱用我们之前已经讨论过了的“非挖矿”策略。他们会说“中间那些正在减少的节点,他们本来也什么都不干,除非他们参与挖矿或权益”。
https://twitter.com/StopAndDecrypt/status/999716942322814976@StopAndDecrypt: 如果你处在验证节点下面的一层,那么你的拒绝对于在你之上的网络没有任何影响。我的手机可以接收全节点并且拒绝他们,但无法将有效的区块广播给验证节点的网络。将轻量节点放到子网上也不会改变这个事实。
@nicksdjohnson: 这个非挖矿比特币节点所做的事情有什么不同?
@StopAndDecrypt: 如果你非要跟我玩文字游戏,那我只能这样回应:不存在什么非挖矿节点。挖矿是一个哈希过程,区块被提交给网络以进行验证。大多数矿工并不运行节点,他们只是连接到一个运行单个节点的矿池而已。你明明知道还要问。
@nicksdjohnson: 恭喜你,这是我这个月听到的最难懂的言论。
这真的是你这个月听到的最难懂的言论吗?
https://twitter.com/NickSzabo4/status/1001488447129829377Nick Szabo: 好的篱笆造就好邻居,“经常对清账目让友谊天长地久”(语出Pacioli)。全节点验证加上全球广播造就全球化的社区——这个社区只包括完全验证者,不包含外来人。
回顾:
· 在比特币中,所有的节点都验证,没有哪个节点拥有更大的话语权,因为区块大小受到限制,并且这个限制由他们共同守护。
· 在以太坊中,节点分为全节点和轻量节点,只有全节点才验证。全节点对gas限制没有硬性要求,这就导致他们要处理的数据越来越多,许多节点因此而关闭。
使用权益证明的以太坊
和使用工作证明的以太坊差不多,前文所说的内容在使用权益证明的以太坊上也成立。他们计划将权益证明和数据分片一起上线,所以我不认为单单只有权益证明的以太坊会出现。这一章节只是为了重申中心化的问题,因为我快要讲到数据分片了。除了上一章节讲到的内容,权益证明还存在以下问题:
· 不挖矿就意味着没有外部成本。进行权益的验证者只需要拿出他们的币并托管他们的服务器。他们可以什么都不干躺着挣钱,同时继续升级服务器来适应不断增长的节点要求,而其他人都被远远地抛在后头。
· 进行权益需要32 ETH(文章发稿时约16,000美元),所以不仅是验证者数量不断下降,而那些负担得起16,000美元来进行权益的人并不在乎数据处理要求。这将只会导致数据吞吐量增长加快。
这个网络和下面的以太坊网络的结构一样,只不过这次我将进行权益的节点高亮标出了,这样你就可以看到验证节点和进行权益的验证者的比例随着时间的变化。请记住,Vitalik说本来就一直这样,在上文我已经解释过了这在技术上讲是不正确的。不管怎样,有了权益证明之后,这个过程推进速度加快了:
到价格巅峰的时候,理论上讲你需要有45,000美元才能成为这些节点的一员。众筹集资并不会改变任何事情,运行节点的是矿池而不是你。幸运的是权益证明将与数据分片一起上线,所以这个章节到这里就结束了。
使用权益证明+数据分片的以太坊
就和这个章节标题说的一样,数据分片带来向内扩容,却给人向外扩容以太坊的假象。就和你所想的一样,这跟验证节点计数有关,但稍微有点小插曲。验证工作分配给不同的群组,每一组都有他们自己的数据分片。这样做的目的是为了减轻单一验证节点所需要承担的工作量,这样才会有更多的节点。但这只会延长问题,而不是解决问题。此外,其中一些节点现在面临着巨大的成本,因为要成为其中的一员就必须进行权益。
Vitalik:是的,数据分片提案中进行权益的最低要求是32 ETH。
worthalter: 在第一阶段不建议当验证者,除非你对这个技术很熟悉。成为一个独立验证者需要的权益估计会超过1000 ETH,这是很大一笔钱。加入权益矿池会简单得多,你可以在这里查阅更多资料:https://medium.com/rocket-pool/rocket-pool-101-faq-ee683af10da9
capitalol: 我比那更多的ETH。自打众筹开始我就在这儿了。我需要指导告诉我如何安全地进行设置,我要设置我自己的,还要帮我管理的其他人设置。
Sefirot8: 这他妈要1000?太荒谬了。
rxg: 要在以太坊上进行权益的最低价格大概会由运行一年casper智能合约的成本(即gas费用)来决定。如果你的权益每年收益比成本低的话,那你就负担不起进行权益。所以不太可能需要1000ETH才能达到收支平衡。
https://v.youku.com/v_show/id_XMzY3MjM5NTA5Mg==.html?spm=a2hww.20027244.uerCenter.5!3~5~5!2~5~DL~DD~A&firsttime=1
完整视频: https://www.youtube.com/watch?v=r0TGpp2SV-w1. 我们不会让比特币每3秒就要处理1GB的数据,因为我们不打算提高区块大小限制。
2. 我们将不会有10个全节点,我们将会有数以百万计的节点,因为我们不打算提高区块大小限制。
3. 很显然我们对于“向外”扩容的定义有差别,他们认为牺牲全节点数量换取基层吞吐量并没有什么不对。
我在上文已经对全节点作了非常详细的解说了,我们对于定义上的不一致并不会有什么影响,接下来我要讲讲他们的定义。
换个说法:
· 他们想要在基层提高交易吞吐量。
· 他们知道不管他们怎么做这都会导致节点数量下降。
· 他们的解决方案是将工作量分摊开来,这样节点数量下降的影响“不会太糟糕”。
· 他们认为节点数量下降后剩余的节点还能“凑合”保证轻量客户端的安全。
· 他们提出“挖矿模式”的谬论,将节点数量下降后剩余的节点与假设的只有10个全节点的比特币相比较,以此来为自己辩护。
· 他们的解决方案是数据分片,他们把这称为向外扩容,并且觉得牺牲“一些”节点也没关系,但却声称这在将来会带来更多节点,比比特币的10个节点还要多。
我认为这篇文章最重要的知识点是含有完全验证节点的比特币网络、本质去中心化,以及这和别人试图向你宣传的“扩容方案”有什么不同。现在让我们来把它和数据分片比较一下。这里开始就有趣了,因为甚至Vitalik都没有清晰地给出它的拓扑学是什么样子的。数据分片的概念是“所有节点都是平等的,做着同样的工作”,然后却背道而驰。找出究竟是哪里开始中心化的过程将会非常…有趣。
首先,以下是对数据分片常见的解释,一篇经典的讲数据分片的文章通常长这样:
https://bitcoinist.com/vitalik-buterin-sharding-plasma-scale-ethereum-10000-times/第一层— 数据分片
Vitalik解释说数据分片是一种第一层(L1)扩容方案,旨在直接改善现有的区块链,让它更好地运行。
目前,以太坊上运行的每个节点都要处理每一笔进入网络的交易。这个验证过程提供了很高的安全保障,但这也意味着这个区块链最快的速度取决于每个节点的最快速度,而不是他们合力一起工作。
而数据分片则意味着区块链网络被分散成含有独立交易历史的小片。这样节点就只需要处理某一片上的交易,总的交易吞吐量将会增加,因为单一的节点不再需要承担所有的工作了。
这篇文章发表在一个区块链新闻网站上,所以肯定会使用吸人眼球的话语而根本没有技术含量。我把其中一些词语高亮标出来是因为这些词语最能吸引不太懂行的社区成员:“可扩容性”这个词文章没有给出定义,“处理”需要进一步澄清含义,每次说到“节点”这个词的情况都不适用于你或者你的轻量节点。下列这些词组:
· “单一节点”
· “独立节点”
· “每个节点”
都可以用以下词组替代:
· 需要花$16,000来进行权益的节点
· 需要花$16,000来进行权益的节点
· 需要花$16,000来进行权益的节点
每当你读到有关数据分片的文章时,它总是说“这会让节点更加轻松”,但是能够负担得起$16,000来进行权益的节点根本不需要轻松。他们本来就可以处理更大的区块。数据中心并不需要数据分片,如果某个节点很重要的话,你也不会在一台笔记本电脑上运行它。这个系统中有许多种不同的节点,目前还不清楚当协议定稿后,哪一些节点会保留下来。我会先讲基本构造,然后定义该系统内的主要几种节点,这样就能区分哪些节点重要,哪些不重要。
数据分片把一个区块链分成许多个区块链,这些区块链被称为Collation,然后在顶部打个结,祈祷模子不会再长大。开玩笑的,以下是一个collation的示意图:
开玩笑的啦,下面这个才是collation的示意图,我花了很长时间才把它画得好看一点:
下面我们来分析一下这个图:
· Collation [紫色区块]: Collation就是数据分片语境下的区块,他们可以形成collation链,和区块链相似。
· 执行者节点[蓝色]: 执行者节点验证每个collation内的数据。他们计算合约,然后将Collator节点下放到特定的分片中。
· Collator节点[红色]: Collator节点从分片中“获取”数据,创建collation(区块),然后拿给执行者节点去“执行”。
· 轻量节点 [粉色]: 这些是你将要运行的节点。这些节点对网络不作任何贡献,他们只是“观看”。这些节点有能力检查交易,但是他们不能中继交易或者区块,所以即使他们发现某个交易或者区块是无效的,他们也没有办法终止中继。再说一遍,这就是比特币节点和其他区块链的本质区别。每一个比特币节点都做同样的事,没有办法把他们区分开来。
在每个分片中,唯一重要的节点是执行者和Collator节点,这两者都需要32 ETH才能运行。每一个轻量节点可以“选择他们‘在乎’的节点(如果他们想选的话),然后同步该分片以及主链上的区块头。他们大概不需要这样做,除非他们是一个应用或者服务,需要依靠验证该分片,因为他们的合约在那个分片上。
上面这张图中有多条Collation链,许多执行者和Collator节点在这些链(32 ETH)上工作,还有“主链(绿色)”,以及在顶部还有你的轻量节点,如果你选择了一个特定的分片来“验证”。
你应该注意的几件事:
· 除非你有32 ETH,不然你将不会成为执行者或者Collator节点。
· 你的轻量节点并不中继区块。它并不执行共识代码,遇到无效区块时除了大喊大叫什么也做不了。(验证节点形成的网络能够拒绝广播无效的交易和区块,所以他们才有话语权。轻量节点根本就不能广播区块,也就更不用说阻止无效区块了。)
· 主链上并没有交易数据,它只储存Collation链的区块头。
这还不是全部,还有更多关于这个网络的内容。你所有的轻量节点只同步主链的区块头,他们可以被归为一大类,就是下图中的这个大的长方形。他们什么也不干,但数量却是最多的。一般来说,如果你没有32 ETH的话,那你就会成为他们中的一员。
vbuterin: “数据分片将节点分成三六九等的做法在我看来是对区块链网络来说最糟糕的主意了,并且子层节点对保护网络的去中心化性质并没有任何实际作用。”在协议中并没有说要把节点分成三六九等… 我说过很多次了。即使“验证一切”的节点数降为零,这个网络也照样能够存活。安全模型并不依靠“验证一切”节点;这些节点只是额外的,大概只有像etherscan这样的人和互联网文档才会去运行,因为它在数据搜集上具有优势。从协议的角度来看,这样的节点还不如不存在。如果没有这些节点,我们就只有分片节点组成的网络,每个分片节点只需使用比目前以太坊节点所需少得多的资源即可运行。这是因为每个分片节点只需处理O(sqrt(n))活动。
StopAndDecrypt: 对的,你已经把“验证一切”的任务分摊给了各个分片,这些分片受某些节点协调,而这些节点必须要进行权益才能参与数据分片的任务下放过程。这些节点数量有限,并且会不断减少。除非你能证明这些节点将会增长而且不需要进行猜测、祈祷或者补贴,否则这将是一个大问题。
vbuterin: “这些节点数量有限,并且会不断减少。”为什么会减少?如果gas限制不断上涨,确实是会减少,但是如果gas限制保持不变呢?
StopAndDecrypt: 永远保持不变?
我想说的重点是,尽管“完全验证”的工作被分散了,但是做这些工作的节点数量依然很少。Vitalik说这些节点所要处理的工作量比现在以太坊节点要做的少,但那本来就不是问题。问题在于做这项工作的难度会随着时间的推移越来越大,这就是本质中心化的。Vitalik甚至也同意如果gas限制不断上涨的话,节点数量将会下降,没有什么能够阻止这件事情的发生。现在矿工的行为是利他的,但是如果挖矿已经不存在了,会发生什么呢?如果只剩下权益,而且进行权益的人并不在乎别人的区块被孤立怎么办?为什么他们要让gas限制降下来?请记住,他们可以手动调整这个数值,如果他们彼此紧密相连,并且完全有能力处理数据,为什么不故意将gas限制降下来呢?如果他们开始把他们的权益收益凑起来,搭建更多节点,增加他们对网络的控制权该怎么办?
@dr_hodes: 有了#masternodes之后,最好是把你的权益集合起来然后创建更多的节点!如果你卖掉你的收益的话,就会失去规模效应。在所有masternode/POS挖矿当中,这是最有价值的一条建议。
红色曲线=集合奖励
蓝色曲线=卖掉每日收益
@bccponzi: 这让我想起bitconnect雇的那帮托儿,将他们的1%每日利息集合起来。集合shitcoin只会让你最终得到一大袋毫无价值的币。
如果人们不认为这是一个shitcoin会怎样?大多数会失败,但是如果其中一个币确实暂时能够保持比较去中心化,说服人们一直使用它,又会发生什么?
在文章的开头我说过这篇文章很容易读懂,现在我不认为它达到了这个效果,但是我已经尽力把它写得简单明了了。我提到这个是因为我想用数据分片的常见问题的链接来结束这篇文章,这个链接里列举了很长一串大家都公认的数据分片的问题,他们的应对方案,这些应对方案所带来的新的问题,以及这些新的问题的应对方案。总之非常复杂,我花了很长时间才好不容易弄清了其中关于节点类型的长篇累牍,但我觉得必须要把这个链接放出来才算公平。
我的问题从来不是以太坊是否“能行”,而是它是否能够保持去中心化。引进数据分片之前,以太坊确实比较糟糕,但是长期来看这个网络只有一条路可走。如果你觉得有中心化的验证者也没什么关系的话,那你还不如买EOS。他们甚至连假装一下都懒得,直接奔着中心化去了。他们甚至不需要数据分片,因为他们就直接以中心化的方式来处理区块链数据。
谷歌可以处理所有人的交易。
但我们不想让谷歌处理所有人的交易。
我们也不想让财富500强或400强公司来处理。
我们从中学到了什么?
听起来我们面临着扩容的三难困境。这个困境是什么,我们将如何克服它?
三难困境声称区块链系统最多只能有下列三个特质中的两个:
· 去中心化(定义:在每个参加者只能获取O(c)资源的情况下,系统仍然能够运行,例如一个普通的笔记本电脑或者一个小的虚拟专用服务器)
· 可扩容性(定义:能够处理O(n) > O(c)交易)
· 安全性(定义:能够阻挡拥有O(n)资源的入侵者的攻击)
这份文档接下来的内容中,我们将继续使用c来指代每个节点所拥有的计算资源的大小(包括计算能力、带宽以及存储空间),用n来指代在一些抽象语境中生态系统的大小;我们假设交易量、状态大小以及该数字货币的市值都是n的倍数。
不。
请使用第二层。
分析Vitalik的回复
1:Vitalik:”这种观点非常无知。以太坊已经有区块大小限制了,只不过是以gas限制的形式进行。Gas限制值是8百万,并且已经有6个月没有变过了。”
- 我在前文已经讨论过这个了。如果数据分片不能及时上线作为缓兵之计的话,你就会提高gas限制。
2:Vitalik:”快速同步datadir增长已经停留在10GB每月并且持续6个月了,并且将不会再增长太多,因为大幅提高gas限制会导致叔伯率(uncle rate)中心化问题。所以我们其实已经见识过最糟糕的情况了,这种情况持续了半年。”
- 如果不提高gas限制的话,费用上涨将会导致Dapp无法使用,引起社区不满,因为他们抱有期望和需求。这一点我在前文也提到过了。你别无选择的时候,叔伯率将不再重要。目前矿工只是出于好心才听从你的指挥,这也是一个问题。
3:Vitalik:”此外,只关注档案节点大小是不对的,因为(i)你可以甚至每年一次再次同步,或者运行一个Parity节点,它会帮助你修剪,这样就可以大大减小datadir体积。(ii)档案节点包含一大堆额外的数据(技术上讲是所有的历史状态以及Patricia 树节点),这些数据都可以从区块链(小于50 GB)重新计算出来,所以在任何严格的信息理论语境下这都不能算作“把历史数据丢掉”。如果你觉得丢掉历史数据也没什么关系的话,你可以在只有状态模式下运行Parity,光盘要求会下降到10 GB。”
- 我展示那张数据吞吐量随时间变化的图表时就讨论过这个“冲突”了。目录大小和节点处理需求的不断攀升是非常相似的。对于这个论断唯一的回应就是你将不会提高gas限制。但是你会。
4:Vitalik:”数据分片的全部意义就在于网络理论上讲可以在所谓的“全节点”数量降为零的情况下存活。如果有5个全节点,这5个全节点也不会有任何额外的特殊待遇能够决定共识;这些节点只会验证更多的东西,因而能够更快地找到正确的链,就是这样。形成共识的节点只能是分片节点。”
- 我在前文已经讨论过数据分片的问题了。
5 (好好笑哦):Vitalik:”最后要指出的是,你把“BCash”这个词用错了;这是一个装置,而不是区块链或者数字货币。”
- https://hackernoon.com/thats-not-bitcoin-that-s-bcash-f730f0d0a837
红圈内:你似乎不太懂啊…Bcash还没有上线简介
在这篇文章的开头,我想先澄清一些事情。当我说BCash的时候,我指的是Bitcoin的山寨版,正式名称是Bitcoin ‘Cash’(比特币“现金”)。
由于比特币现金社区成员并不太喜欢别人给他们取的“BCash”的昵称,于是有人开玩笑地创建了一个假的项目就叫做“BCash”,以此来让外人困惑并阻止别人把比特币现金称为“BCash”。现在当你说“BCash”的时候,他们就会说这指的是那个假的项目,好像这样就能让你的论点不再成立似的。
如果你正在和别人辩论,然后说了BCash的这个词?不好意思辩论到此为止,对方肯定会说:“BCash是一个完全不同的币,你要么不懂行,要么就是来找茬的。”
不好意思,我既不是不懂行也不是来找茬的。你就是个大骗子。
这是假的:
解析Gustav Simonsson的回应:
https://medium.com/@gustav.simonsson/keeping-up-with-the-etherians-a-response-to-blockchain-size-concerns-a4858c2701d9
1: “(…) 基层的奖励结构完全坏掉了,因为以太坊区块大小没有限制(…)”
Gustav Simonsson:“这种论断往轻了说是误导人,往重了说就是假话了。以太坊是有区块大小限制的,这个限制以gas限制的形式存在,这是由共识协议保障的。
他们不太可能会选择提高区块大小,因为这会破坏网络。”
- 我在这篇文章中非常详细地解释了gas限制,这要感谢这帮人给我的动力。网络不会因为验证者掉线或者同伴节点丢失而坏掉。网络运转于两个数据中心之上。会坏掉的是去中心化。已经连接的节点没有理由去关心其他连接不上的节点的验证能力。
2: “就算有了区块大小限制,这个限制也得是合理的,这些Dapp将无法运转,因为他们现在在没有区块大小限制的情况下就已经几乎无法运转了。”
Gustav Simonsson:“没有人会再去海滩玩了,因为那里人多太挤了。
如果一个区块链网络已经达到最大工作限度,所有区块都填满了交易,那么所有的交易发送者就会在发送交易的时候同时附上一笔交易费。”
- 这完全没说到点上,因为这和我们讨论比特币时用的论点是一样的,这个论点很流行,但是比特币并不会向Dapp开发者和用户们承诺低廉的费用以及可用性。比特币混合器用他们偷来或者黑来的币把90%的区块空间斗占满了,因为比特币混合比用那些愚蠢的没人用的Dapp更好,于是Dapp在价格大战中就会被挤出来,这时候你还能用什么来营销呢?这就是我要说的重点。随便你怎么说,总有一天你会不得不用和比特币一样的特色来为以太坊的存在辩论,但是比特币能够做得更出色。
Gustav Simonsson:“作者的论述自相矛盾,建议把以太坊上的应用搬到比特币上。如果这些应用因为交易费用上涨而在以太坊上毫无用处,那么搬到比特币上之后,其他用户会支付更高的交易费用,这些应用也同样会毫无用处。”
- 我建议开发者们在比特币的基础之上进行开发,但我不是说把那些本来就不会成功的点子移植到比特币上。几乎所有的Dapp本质上都是中心化的,根本就不能算作“Dapp(去中心化应用)”。他们都可以在闪电网络上安装。不管该支付通道网络区块大小如何都不会出现费用问题。你可以争辩说以太坊也能够做到,但这并不表示它的基层有什么额外的理由存在。
Gustav Simonsson:“根本不存在由于应用加载量过大而拖垮以太坊的说法”
- https://www.google.com/search?q=cryptokitties+ethereum
3: “比特币区块大小并不会限制交易流,它管理的是向整个网络广播的数据。”
Gustav Simonsson:“对于任何正确定义的“交易流”来说这都是错误的。对交易的任意限制并不会限制交易流,因为更多的交易在给定的时间段内不能流动…如果我们把闪电网络等链下解决方案也算进来,当做L1交易限制并不会降低交易流的论据,那么我们也应该把以太坊上已经有的解决方案也算进来。或者干脆承认创建例如支付通道的成本会随着L1费用的增加而上涨。”
- 我们确实把它算进去了,所以我说它确实不会限制交易流。区块大小相当于一个发电大坝,发的电就是交易费用。流过大坝的水溢进了闪电网络中,而闪电网络对于闪电节点和支付通道外的交易吞吐量没有上限,闪电节点和支付通道本身的流量也没有上限。
此外,如果在一笔交易中你将收到比特币,那么这笔比特币可以直接通过一个新开的通道接收。这并不是一个两步走的流程。
4: “我想说的是说这个信息不应当这么隐晦。如果有那一天这个不再隐晦了,那就已经太晚了,来不及拯救了。”
Gustav Simonsson:“这个信息并不隐晦。你可以直接运行一个全节点然后进行查询。
只是因为你还没找到在做这个的网站
这个“太晚了”的说法,往轻了说是把这个具体问题进行有瑕疵的扩大化,往重了说这是个事后谬误。”
- 这个信息就是很隐晦,并不是我“找不到”追踪这个信息的网站,追踪这个信息的网站现在已经停止追踪了。
你忘了引用下一句话了:“现在已经太晚了。”
这是一个讽刺手法,不是谬误。要么接受要么走人。
5: “请注意,这些信息(区块传播时间以及交易时间)当中没有一项是以太坊能够提供的”
Gustav Simonsson:“这是完全错误的。只要运行几个在地点上较为分散的节点就能轻松计算出区块传播时间,让这几个节点彼此相互连接,然后测量他们发现并中继新区块和交易的时间。
如果你比较懒,不想花费几个小时的时间学习如何部署、使用、甚至添加debugging到以太坊客户端的话,可以去查看连接到https://ethstats.net/的节点的区块传播时间。”
- 首先,这并不简单。再说一遍,这和我没有关系,因为很显然我有能力区别这些网络并搜集这些信息。这些信息就是我分享出来的,因为我做过这些事。
其次,我不需要在全世界各地建立节点来查这个,网上的抱怨以及上图左边这栏里的数据(这张图就是从你说的那个网站上得来的)更加坚定地支持了网上的共识。有半数的节点志愿将他们的数据共享到这个网站上,但是有很糟糕的延迟,这就说明存在问题。
第三,懒人是不会像我这样不嫌其烦地去搜集数据的,当我说这个数据不向公众开放的时候我也没有说错。一般来说网络数据都不向大众开放,因为它并没有被整理出来呈献给公众,虽然其中有些信息确实曾经向公众开放。要搜集这些资料可不是光有普通人的常识就能做到的。
6: [瞎嚷嚷要用“正确”的方式来使用区块链,痛骂CryptoKitties]
Gustav Simonsson:“作者预设存在一种“正确”的方式来使用一个公开的不需要许可的区块链。如比特币和以太坊这样的区块链的魅力所在,就是用户可以用它来干什么都行,只要他们能够说服矿工接受他们的交易。
例如,很多人确实_很喜欢_ CryptoKitties,甚至在最近的一次拍卖中为了一只猫拍出了价值$140,000的ETH的天价。”
- 这个矿工接受什么交易无关。我说的是,尽管这些交易现在被矿工接受,但在将来,任何只能用低廉价格才能运转的Dapp将无法继续运转,除非提高限制,或者牺牲去中心化。你或许要开始在别处寻找这个功能了。如果你不在乎去中心化,那么这个说法就不适用于你的情况,这也完全没关系。但是这确实就是以太坊现在的卖点:
抛开洗钱不讲,这世上确实有傻瓜存在。CryptoKitties就是一个很好的例子。我实际上很喜欢CryptoKitties,因为它就像个试金石一样能够试出谁是傻瓜,而且我并不讨厌猫:
7: “比特币网络大约有115,000个节点,其中约有12,000个听节点。”
Gustav Simonsson:“这个比特币节点计数和好几个其他来源的计数有出入
如果这些其他来源都算错了,那么他们肯定很想知道作者提供的这个网站究竟是如何计算比特币节点的。
此外,计算这些较大节点数量的代码是由谁审计的?”
- 它所做的一切就是计算非听节点以及听节点。这两者都计算会比较困难,所以很多网站都不会做。同样地,在以太坊中区分轻节点和验证节点也比较困难,所以很多网站也都不做。
https://twitter.com/LukeDashjr/status/1001202223009935361@LukeDashjr: 我把他们全部都算进去
@Emoji_Nakamoto: 对,我知道,但你会减去离开网络的节点吗?其他节点探索者是不是只计算core最新版本中的节点?
@LukeDashjr: 不再活跃的节点要几周后才会被除名。
@Emoji_Nakamoto: 所以节点探索者们并不计算听节点,或者他们偷懒用别的方法来实现,有这个可能吗?
@LukeDashjr: 他们*只*计算听节点,而听节点是少数。
@Emoji_Nakamoto: 这个现象有没有什么比较好的解释?
@LukeDashjr: 因为这样做很容易。
8: “你所看到的以太坊节点数量?我敢说那大多数都是轻量节点,根本不进行验证工作(检验区块头不能算是验证)。不同意的话就来证明我是错的吧,拿出数据来。”
Gustav Simonsson:“作者为什么不提供一些数据来支持他们的胡说八道?“我敢说”是一种诉诸权威的诡辩技巧。读了作者这些错误的说法和误解,我认为在讨论(以太坊)协议和网络问题时,他的可信度已经下降到不足以被严肃对待了。”
- 我承认我确实有在假设,但是说我已经失去可信度就有点太扯了。我的担心是有依据的并且不应该被无视。你可以不同意,但你必须说明为什么你不同意。我的这篇以及上一篇文章就进行了非常清楚的说明:验证节点很重要,而以太坊从协议开始就一直在忽视他们。
9: “如果你的节点无法同步,那它就会降级为一个轻量客户端。”
Gustav Simonsson:“这是错误的。就算一个节点同步时落后了几个区块,它还是可以回复关于过去的区块和交易的查询以及服务其他正在同步的节点。作者可以查看一下比如Parity或者go-ethereum的客户端的并发和状态处理,来理解目前节点是如何安装同步以及将如何与新的数据分片提案一同工作的。”
- 这并没错,是你只看到字面意思。网上有很多评论都是关于节点无法同步,别人一直说“没关系”,于是人们只好使用快速同步。站远了看,这将导致验证节点离线而轻量节点在线,就像我在前文中展示的图表一样。
10: “在这种情况下,你究竟如何才能知道有多少完全验证节点?你现在完全无法得知了,因为唯一一个追踪这个数据的网站把轻量客户端也算进去了。假如这些全节点中心化到了10个数据中心里,那你怎么知道呢?你永远不会知道。”
Gustav Simonsson:“好吧,我们现在已经能确切地知道,目前有115000完全验证的比特币节点,但是在作者所想象的假设的将来,我们将无法知道以太坊网络中到底有多少正确地进行验证的全节点?
很显然现在比特币里的一些网络工程设计魔法可以应用到这个假想的未来的以太坊网络中。由于比特币和以太坊的客户端都是开源的,我想以太坊开发者们应该很快就会发现这个魔法然后应用它,让我们随时都能得知当前究竟有多少个全节点。”
- 能够确定比特币中到底有多少个全节点的原因是所有节点都进行验证。这个网络中的所有参与者都验证这条链,只有这样你才知道下一个区块是有效的而不需要依靠信任其他人。比特币当中没有轻量节点。
在以太坊中,节点可以以非常多种模糊暧昧的方式与彼此交互,要想知道哪些节点是完全验证节点,唯一的方法是向过去的随机区块发起请求,看它是否有那个完整的区块,但大多数以太坊节点一般不保存历史记录,因为以太坊是基于状态的。
以太坊和比特币的网络的本质上是完全不同的,这就是为什么对比特币网络进行调查很容易,而对于以太坊来说则困难重重。
— — —
Gustav Simonsson:“运行以太坊全节点的要求当然会高一点。旧一点的电脑可能会跑不动,而且一定得用固态硬盘。但是不管怎样都肯定不需要一个很强大的服务器。实际上,任何一台机器,只用来运行节点,装有过去六年之内上市的CPU,8 GB的RAM以及一个现代固态硬盘都能够很好地运行一个以太坊全节点(我的一个蛮普通的服务器上就运行了好几个全节点)。中继交易和区块所用的带宽确实需要考虑,但是对于连接良好的网络来说一般不是个问题。”
- 1: 随着时间的推移越来越难了。
2: 这已经没有什么实际意义了,因为验证节点需要花费$45,000
3: 不花费$45,000的验证节点网络的带宽很重要,因为“连接良好”对于隐私保护是很危险的,这一点前文已经讲过了。
— — —
Gustav Simonsson:“矿工们已经意识到现行的区块(gas)限制,并且积极与社区中的其他成员讨论理想的区块大小限制应该是什么
在历史上,矿工曾经降低过也曾经提高过限制“
- 在一个中心化的工作证明网络中这一切都不重要。不过如果是一个工作证明系统的话那么将会非常危险。矿工们并没有激励机制来保证“其他”节点保持连接或者同步,“因为他们可以只同步区块头”。矿工们现在只是好心,但是并不能保证他们将来也会保持这样。当这些网络开始向上扩容的时候,信任那些执掌大权的人是一件很危险的事。
— — —
Gustav Simonsson:“总的来说,网络上线之后,随着客户端性能不断改善,矿工逐渐提高限制,直到目前的8M(以太坊上线的时候是3.14M)。一般来说,如果同步问题严重到影响ETH的价格,矿工将会降低限制来管理网络。”
- 我没有理由相信限制会下降,我已经写了很多文章来讲这个了。
— — —
Gustav Simonsson:“其他人已经讨论过以太坊支持的各种同步模式及其不同的资源要求,另一件值得讨论的事情是,如果以太坊网络确实发展得太快,导致大多数全节点跟不上,那么有一个紧急补救措施,那就是checkpoint。
像StopAndDecrypt这种人,听到区块链checkpoint这种不神圣的、充满罪恶的词语的时候,大概要跳脚吧。如果安装共识协议的客户端同意从checkpoint区块而不是从创世区块开始进行同步的话,这个区块链如何能实现去中心化呢?!“
- Checkpoint有它自己的功能,但是你所声称的我对他们的看法都是胡扯。不管怎样,同步模式并不重要,如果你想这样做的话那也没关系。再重申一遍,我的担心是验证节点组以及checkpoint只关心历史数据,而不是同步以后的数据处理要求。
Gustav Simonsson:“对比特币或以太坊进行大于几个小时的重组在实际操作中都是非常不可能的”
- 我同意。
— — —
Gustav Simonsson:“结语
没有人真正知道要保证一个网络“安全”究竟需要多少个全节点。
我们无法得知一千、五千、一万或其他数值是不是确保网络安全的最低值。“
-请看上文。
— — —
Gustav Simonsson:“说了这么多,我们应当继续鼓励开发以太坊应用的个人或团队——或者任何想要为这个网络做贡献的人——运行自己的全节点。”
- PoS和Sharding上线之后,我希望那些人口袋里有$45,000这么多钱。如果ETH价格上涨那就更糟糕了。DASH要求得有1000个币,运行masternode的成本曾经一度高达$1,000,000。
— — —
Gustav Simonsson:“对于那些坚持读到这里的读者们——“
- 我坚持读到这里了,并且我不恨你。大家老是说我的写作风格充满敌意,但我确实没有敌意。
原作者:StopAndDecrypt
原文:https://hackernoon.com/sharding-centralizes-ethereum-by-selling-you-scaling-in-disguised-as-scaling-out-266c136fc55d