ETH-GHOST-18

188 阅读5分钟
  • ETH中的共识协议:

    • BTC系统中出块时间为10min,⽽ETH中出块时间被降低到15s,虽然有效提⾼了系统反应时间和吞吐率,但也导致系统临时性分叉变成常态,且分叉数⽬更多。这不利于共识的快速达成
    • 在BTC系统中,不在最⻓合法链上的节点最后都是作废的,但如果在以太坊系统中也这样处理,由于经常性出现分叉,则矿⼯挖到矿很⼤可能会被废弃,这会⼤⼤降低矿⼯挖矿积极性
    • 其次对于个⼈矿⼯来说,和⼤型矿池相⽐更是存在天然劣势。对此,以太坊设计了新的公式协议——GHOST协议(该协议并⾮原创,⽽是对原有的GHOST协议进⾏了改进)
  • GHOST最初版本:

    • 假定以太坊系统存在以下情况,A、B、C、D在四个分⽀上,最后随着时间推移B所在链成为最⻓合法链,因此A、C、D区块都作废,但为了补偿这些区块所属矿⼯所做的⼯作,给这些区块⼀些“补偿”,并称其为"Uncle Block"
    • ghost.png
    • 规定E区块在发布时可以将A、C、D叔⽗区块包含进来,A、C、D叔⽗区块可以得到出块奖励的7/8,为了激励E包含叔⽗区块,规定E每包含⼀个叔⽗区块可以额外得到1/32的出块奖励。为了防⽌E⼤量包含叔⽗区块,规定⼀个区块最多只能包含两个叔⽗区块,因此E在A、C、D中最多只能包含两个区块作为⾃⼰的出块奖励
      • Uncle Block:3x7/8
      • E:3+2x3x1/32
    • 假定⼀个矿⼯挖出了B,此时它沿着其所在链继续挖,⽽它知道A和⾃⼰“同辈”,则可以招安A,使其也愿意一起扩展最长链,而E区块也可以将A包含进来作为叔父,然后重新组织成⼀个新区块继续挖,由于挖矿的⽆记忆性,这样并不会降低成功挖到矿的概率
    • 缺陷:
      • 叔⽗区块最多只能包含2个,如图出现3个怎么办?
      • 矿⼯故意不包含叔⽗区块,导致叔⽗区块7/8出块奖励没了,⽽⾃⼰仅仅损失1/32。比如如果甲、⼄两个⼤型矿池存在竞争关系,那么他们可以故意不包含对⽅的叔⽗区块,因为这样对⾃⼰损失⼩⽽对对⽅损失⼤
  • GHOST新版本:

    • F为E后⾯的⼀个新区块,因为规定E最多只能包含两个叔⽗区块,所以假定E包含了C和D。此时,F也可以将A认为⾃⼰的的叔⽗区块(实际上并⾮叔⽗辈的,⽽是爷爷辈的)。如果继续往下挖,F后的新区块仍然可以包含B同辈的区块(假定E、F未包含完),这样就有效地解决了上⾯提到的最初Ghost协议版本存在的缺陷
    • ghostv2.png
    • “叔⽗”这⼀定义隔多少代才好?
      • 以太坊中规定,如果M包含F辈区块,则F获得7/8出块奖励;如果M包含E辈区块,则F获得6/8出块奖励,以此类推,直到包含A辈区块,A获得2/8出块奖励,再往前的“叔⽗区块”,对于M来说就不再认可其为M的"叔⽗"了
      • uncle_generation.png
      • 对于M来说,⽆论包含哪个辈分的“叔⽗”,得到的出块奖励都是1/32出块奖励
      • 因此,叔⽗区块的定义是和当前区块在七代之内有共同祖先才可(合法的叔⽗只有6辈)。这样就⽅便了全节点进⾏记录 (不⽤维护太多代的叔⽗区块信息),此外也从协议上⿎励了⼀旦出现分叉尽早合并
  • ETH中的奖励:

    • BTC:静态奖励(出块奖励)+ 动态奖励(交易费,占据⽐例很⼩)
    • ETH:静态奖励(出块奖励+包含叔⽗区块的奖励)+ 动态奖励(汽油费,占据⽐例很⼩,叔⽗区块没有)
      • gas fee汽油费:执⾏智能合约时得到,占⽐⼩
    • BTC中为了⼈为制造稀缺性,每隔⼀段时间出块奖励会降低,最终当出块奖励趋于0后会主要依赖于交易费运作,⽽以太坊中并没有⼈为规定每隔⼀段时间降低出块奖励
  • 以太坊中包含了叔⽗区块,要不要包含叔⽗区块中的交易?

    • 不应该,叔⽗区块和同辈主链上的区块有可能包含有冲突的交易
    • 叔⽗区块是没有动态奖励的,因此⼀个节点在收到⼀个叔⽗区块时,只检查区块合法性⽽不检查其中交易的合法性,即只检查区块是否符合难度要求
  • 对于分叉后的堂哥区块怎么办,例如下图所示,A->F并⾮⼀个最⻓合法链,所以B->F这些区块怎么办,该给挖矿补偿吗?

    • cousin.png
    • 如果规定将下⾯整条链作为⼀个整体,给予出块奖励,这⼀定程度上⿎励了分叉攻击(降低了分叉攻击的成本,因为即使攻击失败也有奖励获得)。因此ETH系统中规定,只认可A区块为叔⽗区块,给予其补偿,⽽其后的区块全部作废