这个系列的内容是根据肖臻老师《区块链技术与应用》公开课的内容进行的内容整理,以及部分延伸的思考。文末附有公开课链接。
这节内容比较多,本篇主要回答以下8个问题:
1、以太坊的出块时间缩短到10+秒,会带来哪些不好的情况?
2、GHOST协议主要内容是什么?核心的设计目的是什么?
3、对应比特币和以太坊的奖励类型,Uncle block会有哪些类型的奖励?
4、Uncle block的奖励机制是如何设计的?是否有数量的上限?
5、最长合法链包含进Uncle block的动力是什么?
6、设计Uncle block奖励以及最长合法链包含进去的奖励的目的是什么?
7、Uncle block的交易应该执行吗?原因是什么?
8、分叉之后的链上又有一堆Uncle blocks,应该给奖励吗?原因是什么?
以太坊是出块时间只有十几秒,别的节点没来得及收到新的区块,沿着原来的区块在挖,并且挖到新的,临时性的分叉会变成常态。 对于比特币来说,最长合法链上的区块才是有效的,其他的会作废,是orphan block或者叫stale block。
以太坊出块时间比较短,可能出现的情况:大型矿池所在的链有越大的概率成为最长合法链,因为节点多,其他的节点更容易收到。 会出现mining centralization,有centralization bias。
以太坊的改进:GHOST协议,之前就有这个协议,不是以太坊的创新。但是以太坊有迭代。
以太坊出块奖励,早期5个,18年3个,主要是挖矿难度调整,没有类似比特币那样确定性地阶段下调。
废弃的区块叫uncle block,也会获得奖励,奖励数量=7/8*(出块奖励数量)可以拿到大部分的出块奖励
与此同时最长合法链上把uncle block包含进去,也会额外获得1/32*(出块奖励数量)。一个区块最多可以包含两个uncle block,也就是2/32*(出块奖励数量)

这种设计有利于快速收拢到最长合法链上。
存在的问题 1.出现第三个分叉怎么办 2.如果在最长合法链上,下一个区块出来的时候,客观上叔父区块的信息还没收到,就没包含进去 3.主观上不愿意包含叔父区块,自己损失比较小

以太坊的uncle block不是就上一代的,隔好几代的都是叔父。 但是仍旧存在问题,如果有人早期想利用这个漏洞,挖很多叔父区块等着被包含。
在以太坊的规则中,实际上只有6代,和当前的区块7代以内是有共同的“祖先”,uncle reward收益向前追溯是递减的,利于鼓励分叉的时候及早进行合并;对当前区块来说奖励都是1/32 即At most seven generation。

Ghost协议,是为了解决临时性的分叉,最长合法链也是为了解决临时性分叉
对于运行的协议有不同的意见,这个是现在讨论的协议解决不了的。
去中心化的系统,版本的修改很麻烦,修改了会出现分叉,可能会被一些节点认为是非法的。有bug修改不方便。
比特币有Block reward(静态奖励)和tx fee(动态奖励,执行获得) 以太坊Block reward(静态奖励)和gas fee(动态奖励,执行合约获得) 叔父区块只有block reward没有gas fee
gas的消耗,从一个账户到另外一个账户(执行交易的矿工获得),不是用了就消失了
问题1:叔父区块的交易是否应该执行? 不应该执行,因为可能包含有冲突的交易。执行叔父区块的交易,就可能变成非法的交易。对于交易而言,主链上收到交易,会再包含进去,不用担心交易丢失或者不成功。 不检查叔父区块包含交易的合法性,只需要检查是否是合法发布的区块(是否符合挖矿难度要求)
问题2:如果分叉之后,又带着一堆区块怎么办,应该给叔父奖励吗?

不能给,这样做会降低forking attack的难度。
因为如果有人蓄意发动分叉攻击,原来的难度会比较大,但是如果仍旧是给了后续的区块叔父区块的奖励,会降低分叉攻击的损失,即便是分叉攻击不成功,也会有叔父区块的奖励。 不利于鼓励及时的合并。

可以实时查看以太坊当前状态的网站。 右边曲线是过去两个星期的交易历史。 左下角是最新被挖出的区块。 右下角是最新的交易。

上表是叔父区块的信息。 每一行是一个叔父区块,第一列是区块的序号,block number,叔父区块的序号和第一列的差额就是差几个区块,差2个就是6/8的奖励,差1个数字就是当代叔父,7/8的奖励

左边的区块,包含了一个叔父区块,距离为2的叔父。右边包含了两个叔父区块。 距离为1的当代叔父,和距离为2的上代叔父。
视频课程原文链接
