imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
目录
1. 以太坊的出块时间及可能出现的问题 1. 以太坊的出块时间
以太坊将区块生成时间缩短至十几秒imToken钱包,提高了系统吞吐量()并减少了响应时间。与比特币系统10分钟的出块时间相比,以太坊的出块速度相当于提高了40倍。这大大减少了区块生成时间,同时也带来了一些新问题。比特币和以太坊都是运行在应用层的共识协议。底层是P2P,传输时间本身就比较长(制定拓扑协议时没有考虑实际的拓扑结构)。这就带来了一个问题:发布一个区块时,将该区块上传到网络上的其他节点可能需要十几秒的时间。那么很有可能两个节点(甚至更多)同时获得记账权,从而造成临时分叉。
2. 以太坊和比特币系统平均出块时间对比
对于比特币系统来说,平均区块生成时间为600秒,这足以让新发布的区块传播到互联网上的其他节点。但由于挖矿是一个概率过程,因此仍然有两个矿工同时获得记账权。释放区块的可能性会导致临时分叉。在以太坊中,这种临时分叉将会成为常态,分叉的数量也会变得更多(超过十几秒的区块生成时间很可能其他节点将没有时间接收已发布的区块),并且仍然沿着原始区块链向下挖掘。也许当他收到发布的区块时,他自己已经挖到了该区块),这对共识协议来说是一个挑战。
图1-1
3、引发的问题
在比特币系统中,只有最长合法链上的那些区块才有真正有用的区块奖励。其他分叉链上的区块奖励实际上是无效的,如图1-1所示。例如图中的区块链分为三个分叉。他们几乎同时获得了会计权。最终,其中一个将获胜并成为最长的合法链。假设中间的区块获胜,那么上面和下面的区块称为Block或Stale Block,挖出这样的区块的矿工有铸币交易,可以获得一定数量的比特币,但这实际上是没有用的,因为他们不在最长的区块上合法的链条,所以他们得到了区块。奖励最终无效。对于比特币来说,这样的临时分叉并不多,所以这个规则是可以接受的。
对于以太坊来说,如果分叉区块的区块奖励也失效,则意味着该矿工挖出的区块有很大概率被白挖,这对于个人矿工来说尤其明显。按照常理,矿工的收入应该和算力成正比,矿池的收入也应该和矿池的总算力成正比。但会出现大型矿池(挖矿中心化),即大型矿池所在的分叉更有可能成为最长合法链,从而鼓励其他矿工沿着最长合法链继续挖矿(因为如果其他链如果去挖的话,很有可能会挖空)。这会对大型矿池造成恶性循环。矿池越大,收益就越大,但情况也就越严重。有时也称为偏差(Bias),指的是中心化带来的不成比例的优势。如果以太坊遵循比特币的共识机制,就会出现一定的问题。
2.GHOST协议
为了解决以太坊沿袭比特币共识机制带来的问题,采用了基于GHOST协议的共识机制。该协议不是以太坊发明的。以太坊只对协议做了一些修改。
1.GHOST协议核心思想
开采该矿的矿工发布一个区块。即使该区块最终失效,也会给予一些奖励。这时候,你还可以获得一些区块奖励。无效块(上图1-1中的Block或Stale Block)称为Uncle Block。相对于最长合法链的当前块,它是它的叔叔块。最长合法链的下一个块在释放时可以包含叔块,如图2-1所示。
图2-1
该协议的核心思想是给那些已经挖矿但没有成为最长合法链的矿工一个安慰。虽然挖出的区块没有成为最长合法链上的区块,但你仍然可以获得大部分的区块奖励。这将有助于鼓励系统出现分叉后及时合并,相当于最长合法链上的区块招募其他两条分叉链。这是 GHOST 协议的原始版本。
2. GHOST协议的缺陷
(1) 叔块数量不能超过两个
叔叔块只能包含两个。如果出现第三个Uncle Block,如下图2-2所示,那么设计GHOST的目的就是给Uncle Block一些好处,并将它们合并。不过,只能招募两人。如果出现第三个叔叔块,则您对三个叔叔块无能为力。事实上,只包含两个叔块是有意义的,因为叔块获得八分之七的块奖励非常高。如果没有限制,那么以太币就太不值钱了。
图2-2
(2) 区块传播存在延迟
区块D将区块A视为叔块的前提是:在挖掘区块D时,它已经知道了叔块A的存在。如果D块已经被释放,那么叔块就会被知道。布洛克,这个时候已经晚了,布洛克叔叔一点好处都没有。
(3)受矿工主观影响
如果矿工是自私的,出于商业目的,他可能故意不包含叔块,即他挖矿时知道叔块,但就是不包含。这样的话,对于叔块来说,7/8他就无法获得区块奖励。对他来说,他无法获得区块奖励的1/32。似乎是损人不利己。但从商业竞争的角度来看,这个矿工的损失是比较小的,但是对于开采叔块的矿工来说损失是比较大的。
3.改进GHOST协议
改进后的GHOST协议如图2-3所示。这一规定解决了矿池为了竞争而故意不加入叔块的问题。例如,区块D故意不包含区块A,但区块E仍然可以包含区块A。甚至可能存在一种情况,挖区块A的矿工发现自己不在最长合法链上,所以挖了区块E沿着D块,然后他可以将自己的A块包含在其中。
图2-3
这样的话,第三叔块出现的问题也就解决了。改进后的GHOST协议的本质是为了改进原版本GHOST协议中存在的一些问题,因此对uncle的定义进行了扩展。不一定是当代的叔叔,但可能是相隔几代的叔叔。以太坊规定叔块可以获得区块奖励的7/8。如果向前推进一代,叔块将获得块奖励的 6/8。以此类推,只有这6个块是叔块,其他块都不是叔块,如图2-4所示。叔块的定义是它必须与当前块在7代之内有共同的祖先。如果超过7代就无法识别。也就是说,法定叔叔只有6代。
图2-4
为什么设置合法叔叔必须是当前区块的七代之内并且有共同的祖先?
(1)如果不限制叔叔的辈分,那么要实现它,全节点将需要维护很多状态(你可能要记住哪些叔叔区块是100代之前的),以及包含在其中的叔叔区域新发布的区块,其他节点也需要验证;
(2)设计最多相隔7代,在这7代内,区块奖励逐渐递减,有利于鼓励分叉后早期合并,只要合并即可获得区块奖励出现分叉。这是最多的。如果经过几代之后,区块奖励会越来越少。如果代数太多,你将不会获得任何区块奖励。
叔块的奖励称为Uncle。如果当前区块包含叔块,则无论是哪个叔块,您都将获得该块奖励的1/32。
4、改进后的GHOST协议无法解决的问题
该协议主要是为了解决系统中出现的临时分叉,包括比特币和以太坊。规定最长合法链原则的目的是为了防止篡改,但实际上也是为了解决临时分叉。最长合法链提供了临时分叉(State Fork)发生后合并的机制。如果分叉是由于其他原因造成的,比如对正在运行的区块链协议有不同意见,那么这个方法就无法解决。也就是说,改进后的GHOST协议仍然无法解决硬分叉问题。
比如我在学习比特币脚本的时候就学了(用来检查多重签名的合法性)。过程中出现了一个错误。检查时以太坊和比特币区块链钱包,堆栈中会再弹出一个元素。如果运行正常的话,检查就会失败,那就得先在里面压一个无用的额外元素,只是为了抵消这个bug。这里之所以不修正这个BUG,是因为修正后版本会不一样。比特币系统与中心化系统不同(中心化系统很容易发布新版本)。如果去中心化系统被修改,就会发生硬分叉。如果图2-4中的两条链对当前状态没有意见分歧,但认为对方是非法的,并且对方的区块包含非法交易,那么它们就不能使用这种方法进行合并。如果一个矿工包含这样的区块,其他矿工就会认为这条链是非法的,他们不会继续沿着这条链挖矿,而是会沿着其他分叉链挖矿,因为:即使主链是最长的,但是包含非法交易。
3. 以太坊奖励
在区块链和以太坊上发布区块可以获得的奖励如下图3-1所示。事实上,你得到的是两部分奖励。叔块奖励的八分之七仅限于Block,即7/8×3ETH。叔块不会获得Gas费,但是Gas费所占比重很小,大部分都是区块奖励,这与比特币中的情况类似。
图3-1
以太坊没有规定定期将区块奖励减半。比特币的监管是为了制造人为的稀缺性。在以太坊中,五个以太币减少为三个以太币。这并不是为了制造稀缺性,实际上和挖矿是一样的。与挖矿难度调整相关。 2017年,挖矿难度炸弹向后调整了300万块,导致挖矿难度大幅下降。为了维护公平性,防止以太坊的供应量发生剧烈变化,降低为三枚以太币,这是一次性使用的,并没有说以后会继续降低。
比特币通常被视为数字黄金,用于存储价值;以太坊被比作石油,用于支出、消费,然后执行智能合约。这个比喻并不完全恰当,因为石油用完就没有了,而以太坊中执行智能合约所消耗的gas只是从一个账户转移到另一个账户。发布智能合约时,您必须支付燃气费才能执行。这个智能合约的矿工可以获得这个gas费,所以这个类比并不完全恰当。
4. 思考
1. 包含叔块时,叔块中的交易是否需要执行?以太坊是一个交易驱动的状态机,比特币也是如此,所以每次在最长合法链上发布新的区块时,当前状态都会转移到下一个状态。现在介绍了叔块,您想执行它们吗?叔叔区块里的交易怎么样?
不应被执行。最长合法链上的父块及其叔块中包含的交易可能会发生冲突。如果它们包含不同的事务,则不同的事务可能不会全部执行。对于比特币系统来说,对于冲突的交易,比特币需要检测是否是双花攻击。在以太坊中,双花攻击的成本为两倍减两倍,但有可能在一笔交易被花费后,另一笔交易无法被花费。因此,叔块中的某些交易可能会成为非法交易。叔块本身不一定是非法的,但是执行父块中的交易后,执行叔块中的交易可能会变得非法。 。
在以太坊中,只有最长合法链上的交易才会被执行。叔块中的这些交易不会在当前块中执行。并且它根本不检查叔块交易的合法性,而只是检查叔块是否是合法发布的块,即该块是否满足挖矿难度,即是否获得了记账权。
2. 叔块可以推广吗?
叔块是分叉后最先出现的块。如果叉子后面跟着一个字符串,如图4-1所示,这些就不能被认为是叔块。假设将这些块视为叔块将会产生一个后果:分叉攻击的成本太低。正常意义上,分叉攻击需要使分叉链的长度大于原来最长合法链的长度才算成功。否则,用于分叉攻击的区块将无效,原有的区块奖励将丢失。如果分叉链上的区块被视为叔块,如果分叉攻击失败,它们仍然可以获得一些作为叔块的奖励。因此,以太坊规定只有分叉后的第一个区块才能得到Uncle,后续的区块则不能。
图4-1
5. 以太坊的真实情况
.io可以实时查看以太坊当前状态。右边的曲线显示了过去两周的交易历史。它还包括最新开采的区块和最新交易,如下图5-1所示。
图5-1
下图5-2展示了叔块的几种情况。这里的每一行对应一个叔块。第一列的Block是区块的序号,即Block,与表中不同代的叔叔得到的相同。叔叔的号码对应。
图5-2
下图5-3是两个块的具体示例。左边的块包含一个叔块。倒数第二行的叔叔是2.25,应该是距离为2的叔叔。倒数第三行这个区块的奖励由三部分组成,分别是3ETH区块奖励、gas费和区块奖励包括叔叔区块奖励的三十分之一。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。