以太坊五之GHOST协议

正在学习区块链,如果我哪里有错误希望大家指出,如果有任何想法也欢迎留言。这些笔记本身是在typora上写的,如果有显示不正确的敬请谅解。笔记本身也是给我自己写的,所以如果有侵权的请通知我,我立即删除。

5.GHOST协议

这个地方在比特币中就一句话:最长合法链,但是在以太坊中因为以太币的出块时间只有几十秒,分叉现象特别频繁,这个方法就不能用了。这里的标准就是GHOST协议。

5.1叔父区块

比特币中有讲,目前挖矿的趋势是设备的专业化,算力的集中化。每个区块得到出块奖励的概率应该是占总算力的比例。但是如果出块时间很短会出现及其不平衡的情况。例如CDE都是B的后续区块,但是D区块是个大矿池挖出来的。如果仅考虑最长合法链,大矿池会无视C和E,哪怕它们是最长合法链,大矿池会继续自己的D挖。所以虽然本身CDE的出现是公平的,但是CDE成为最长合法链的概率却是不公平的。

A
B
C 7/8
D
E 7/8
F

那怎么处理C和E的分叉呢?平衡一下block reward。以太坊开始的时候block reward是4个以太币,现在是3个,即D会被奖励3个以太币,而C和E会得到(7/8)个出块奖励,即(3*7/8)个以太币。看起来不少啊,就差了(3/8)个。那F为什么要把C和E的结果打包到区块链中呢?所以如果F把C和E打包到区块链中除了F得到的3个以太币的出块奖励外还会额外获得(叔父区块的个数*1/32)个区块奖励 。F最多可以包含两个叔父区块。

5.2 叔父区块有效的代数

上面的方法还有问题。其一,因为十几秒实在是太短了,区块链是工作在应用层的,网络层的延迟可能就不止十几秒了,即分叉的概率会非常高,只保存两个,还是太拼运气了。其二,我现在能不能找到创世区块后面的那个块慢慢挖,完了会有人包含我这个叔父区块,多好。而且如果这样会造成时间和空间的浪费,时间是因为要找很久远的叔父区块,空间自然就是太多交易了。其三,非大矿池的矿工可能永远都只能成为叔父区块。其四,肖老师说了,如果主链上的区块不打包叔父区块呢?例如上图中的F不打包C和E。表面上看这是个损人不利己的事,但是各个矿池之间是竞争的关系,我仅丢了1/32的奖励,却让敌人丢了7/8,我其实是赚了。

第三个问题肖老师没有提,我后来也想了一下,成为叔父区块也还好,毕竟只丢了1/8个区块而已。那交易小费呢?在以太坊中小费就是汽油费,叔父区块肯定是没有汽油费的,毕竟叔父区块不是有效节点。那以后会不会出现出块奖励无限趋于零,交易的收益主要依赖汽油费呢?比特币会出现定期出块奖励减半的情况,但是以太坊并没有这个规定。比特币是为了人为制造稀缺性,以太坊在17年10月将出块奖励由5个减为3个是因为挖矿难度的问题,所以这个问题先不用考虑。

第一二四个问题有解,就是下面这张图

A
B
T 和A是兄弟节点 不是叔父区块
C
M 7/8
D
N 6/8
S 6/8
E
O 5/8
F
P 4/8
G
Q 3/8
H
R 2/8
I
J
K
L

L到A为主链,其它的是叔父区块。以太坊仅会包括7代以内的叔父区块,等到A的时候,M是它的叔父区块,能拿到7/8的出块奖励,N能拿到6/8的出块奖励,直到R能拿到2/8的出块奖励。其它的叔父区块如果一旦已经被某个侄子包含就不会再考虑了。比如区块S如果已经被C或B包含了,A的时候就不会再包含它了,所以还是越早被包含越能获得更多的出块奖励。所谓的7代是指从A到H一共有8辈分,一共7代(这个7代就这么理解吧)。第一个问题,七代每代都能包含两个,每代都又能成为第一代第二代叔父区块,所以能包含很多很多区块。第二个问题在七代方法下直接解决。第四个问题,大矿池的G不是不包含嘛,但是F可能又是我挖出来的,我把自己包含了不就完了,比较每个矿池挖出区块的概率是公平的。这样的7代设计也有利于分叉的快速合并,再说一遍,区块的有效性和时间戳无关,越早并入主链就能获得越多的出块奖励。1/32的叔父区块打包奖励和包含的第几代没关系。

5.2 Q&

叔父区块是否有效?

叔父区块根本就是一个有效区块,只是类似于矿池资源分配的那种,为了平衡挖出无效区块的矿工心情。因此叔父区块不仅拿不到汽油费,里面的交易也是无效的。在检查叔父区块的有效性时,侄子区块并不会检查内部交易的有效性,仅会检查挖矿难度那个nonce是否有效。那如果有的矿工随便打包一个不符合交易要求但是符合nonce的区块怎么办?首先,如果这个区块想拿到更多的奖励它就得打包有效交易,其次那要是有的人只为了混叔父区块奖励呢?因为叔父区块的奖励也不少。我自己来答一下,首先做出符合nonce而且块头数据结构是正确的区块本身就不是一件容易的事情,这个难度和生成一个完全正确交易树的区块差不多了,与其这么混,真不如把正确的交易打包进去了。

叔父区块只有区块头有效吗?

A
B
C
D
E
F
G
H
I
J
K

假设J->E是一条合法链,B肯定是叔父区块,有奖励,那A和K还有奖励吗?表明看起来应该给,这样更符合叔父区块的设计理念,但是这样的话会让分叉攻击变得更容易。例如F中有甲->乙4个以太币,等过了几个区块后,乙认为安全了,但是此时甲决定回滚这个交易,甲会再发布甲->甲‘的交易区块B。如果上面那条链变最长我成功回滚了那就赢了,如果没有我也能获得叔父区块奖励。因此就只给块头奖励。

会不会有人挣叔父区块

如果我正在挖矿或者正在执行智能合约,有人已经发布了一个可用区块,我要不要抛弃当前的挖矿工作呢?我觉得不用,去争叔父区块。但是肖老师说目前没有这样做的,因为我能挖到区块的概率和我挖了多久是没关系的。这个理由我懂了,后面这个理由我有点不懂,肖老师说:“就算你挖出来了还要切换到主链”.

5.3 eg

avatar

这个是实际的区块,其中Uncles Reward是指叔父区块拿到的奖励,因为本区块肯定是有效区块。Uncles Reward是2.25个以太币,这个叔父区块是两代的,因为2.25=3*(6/8)。Block Reward有三部分,分别是出块奖励、汽油费和打包叔父区块的奖励。

avatar

这是另一个区块,包含了两个叔父区块,其中4.875是6/8和7/8的和。

发布了38 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qigezuishuaide/article/details/104245051
今日推荐