主页 > imtoken国际版和国内版 > 以太坊中的 Ghost 协议

以太坊中的 Ghost 协议

imtoken国际版和国内版 2023-01-18 15:49:42

为了确定哪条路径最有效并防止创建多条链,以太坊使用了一种称为“GHOST 协议”的数学机制。

GHOST = 贪婪最重的观察到的子树

比特币的出块时间是10分钟,也就是说难度也很高;在以太坊中,出块时间增加到了 15 秒,这是很不一样的,所以也会造成一个问题,就是在这 15 秒内,并不是所有的节点都收到了某个区块是新区块的信息,而且很有可能很多节点在15秒内同时出块,所以有人认为这个块是最新的,也有人认为这个块是最新的。该块是最新的,所以有一个分叉。

在比特币中,叔块不会得到奖励,挖叔块的矿工会认为自己做了无用的工作。比特币之前的区块奖励方式是,如果多个矿工同时挖出一个区块,就会形成一个分叉。)以太坊区块能挖出多少个,它将能够更快地在网络上传播新的区块信息,因为它有更多的连接节点和更好的地理位置,从而有更多的其他节点同意该区块是最新的区块,因此它更有可能你所在的分叉将成为主链。这时候基本上会导致大矿池获得大部分奖励,其他分叉上的矿工不会愿意配合这个分叉。大型矿池主链合并,因为基本上不可能合并到主链上然后在主链上挖矿比大矿池快,那么就无法获得奖励,那么可能一直在自己的分叉上挖矿,心想也许你会很幸运,下一个区块会比大矿池快,那么这不利于分叉后区块链的快速合并,直到主链超过分叉。下一个区块挖得更快后,会逐渐被合并,这样会浪费很多叔块的算力。那么这不利于分叉后区块链的快速合并,直到主链超过分叉。下一个区块挖得更快后,会逐渐被合并,这样会浪费很多叔块的算力。那么这不利于分叉后区块链的快速合并,直到主链超过分叉。下一个区块挖得更快后,会逐渐被合并,这样会浪费很多叔块的算力。

因此,GHOST协议的目的是如何鼓励其他分叉的叔块快速与大矿池的主链合并,也就是给他们一些奖励。

比如主链上的大区块会用奖励招募叔块的矿场,同时主链如果愿意招募也会获得一定的奖励。这激励了双方在两个方向上合并。在以太坊中,第 7 代内的叔块可以招募和奖励,但不能更多。这是为了防止一些矿工在前一条链上创建分叉,等待后面的节点招募。

叔块的代数越接近主链上下一个块的代数,它在被招募时获得的奖励就越多。离代数越远,奖励比率越小。7/8、6/8、5/8、4/8、3/8、2/8、1/8,奖励=奖励比例* 区块奖励(即3 eth),只有七代以内的叔块才能获得奖励(注:此招募奖励不是大矿池给的,而是区块链给的)。在大型矿池中招募安全可获得的奖励 = 区块奖励 + 1/32 * 区块奖励 * 安全的区块数(每个区块的最大安全数为2)。

注:规定每次招募只能招募两个叔块,即在块中存储叔块的hash来声明是要招募的叔块。

拜占庭分叉后,区块奖励的数量发生了变化。目前区块奖励为 3 ETH,大叔区块奖励也相应更改。

关于叔块引用奖励:假设A被主链收录,A1是A被主链收录后的下一个区块,A1会将B视为叔块,并将B的hash存储在区块中,当B记录为收到叔块奖励,A1收到叔块奖励。注意,叔块只有在被侄子或侄孙打包确认后才会输入为块叔。

下面是一个例子来说明:

比如上图中,2-1、2-2、3-1、3-2、3-3、3-4都是叔块, 中间的1、2、3、4就是主链。当区块 3 产生时,它是一个大型矿池,如果它想快速将其他小型矿池与它的主链合并,那么它就会被招募。比如它会先选择3-1、3-2两个叔块(最多两个),把这两个叔块的hash写入即将被挖出来的那个。在第四个区块中,表示如果第四个区块挖出成功,两个叔块的矿工将分别获得出块奖励(即3eth)*7/8,而大矿池也将获得出块奖励(即3eth)*1/32*2(赵安叔块数)+出块奖励。修改叔块哈希等区块信息后,大矿池将开始硬挖。由于其高计算能力,第四块很快就会被挖出并发送到网络上。挖矿区块 3 或区块 4 的节点,尤其是 3-1、3-2 的矿工,在收到区块后会立即验证区块 4 的合法性。停止手头的采矿工作。在这个过程中,3-1、3-2的矿工在收到区块后会发现自己是被招募的大叔,因为可以得到相应的区块奖励,不合并就继续挖矿,不是很很可能能够打败一个大矿池,所以接受招聘是一个非常理性的决定。由于其高计算能力,第四块很快就会被挖出并发送到网络上。挖矿区块 3 或区块 4 的节点,尤其是 3-1、3-2 的矿工,在收到区块后会立即验证区块 4 的合法性。停止手头的采矿工作。在这个过程中,3-1、3-2的矿工在收到区块后会发现自己是被招募的大叔,因为可以得到相应的区块奖励,不合并就继续挖矿,不是很很可能能够打败一个大矿池,所以接受招聘是一个非常理性的决定。由于其高计算能力,第四块很快就会被挖出并发送到网络上。挖矿区块 3 或区块 4 的节点,尤其是 3-1、3-2 的矿工,在收到区块后会立即验证区块 4 的合法性。停止手头的采矿工作。在这个过程中,3-1、3-2的矿工在收到区块后会发现自己是被招募的大叔,因为可以得到相应的区块奖励,不合并就继续挖矿,不是很很可能能够打败一个大矿池,所以接受招聘是一个非常理性的决定。停止手头的采矿工作。在这个过程中,3-1、3-2的矿工在收到区块后会发现自己是被招募的大叔,因为可以得到相应的区块奖励,不合并就继续挖矿,不是很很可能能够打败一个大矿池,所以接受招聘是一个非常理性的决定。停止手头的采矿工作。在这个过程中,3-1、3-2的矿工在收到区块后会发现自己是被招募的大叔,因为可以得到相应的区块奖励,不合并就继续挖矿,不是很很可能能够打败一个大矿池,所以接受招聘是一个非常理性的决定。

但是这个时候,3-3、3-4是不会得到奖励的,当然不会,当我们要挖第5个区块的时候,可以招募这两个叔块,但是这里和上面唯一的区别就是这里的比率是 6/8,因为它们与块 5 的代数相差 2。我们也从前面提到的概念中知道,奖励比率与区间代数成反比。以这种方式出现的大叔,会被一一招募,直到超过7代。

从底层代码可以看出:

// Ethash proof-of-work protocol constants.
var (
    FrontierBlockReward    = big.NewInt(5e+18) // Block reward in wei for successfully mining a block
    ByzantiumBlockReward   = big.NewInt(3e+18) // Block reward in wei for successfully mining a block upward from Byzantium
    maxUncles              = 2                 // Maximum number of uncles allowed in a single block
    allowedFutureBlockTime = 15 * time.Second  // Max time from current time allowed for blocks, before they're considered future blocks
)

之前的奖励 FrontierBlockReward 是 5eth以太坊区块能挖出多少个,现在的 ByzantiumBlockReward 是 3eth,一次最多可以入主链的叔块数是 2,出块时间是 15 秒

注意:

以太坊的区块奖励不会随着区块数量的增加而减少。在以太坊中,只要产生一个块,就会获得一个块奖励,而在比特币中,当块数超过 2100 万个时,就会对块树进行奖励。没有区块奖励,之后矿工挖矿的动力来自交易费用。