以太坊源码之POA区块生成机制

当前位置:首页 > 币圈百科 > 以太坊源码之POA区块生成机制

以太坊源码之POA区块生成机制

2022-11-14币圈百科267

作者:HPB核心链团队

名词介绍POA块数据结构新块生成周期新块生成优先级

1名词介绍

节点:一个普通以太坊节点,无权进行块生成。

矿工:拥有块生成权的以太坊节点

委员会:所有矿工的集合

2 POA块数据结构

POA共识,块数据和POW有一些区别蓑衣网小编2022,主要体现在头结构:

序列号字段POWPOA1Coinbase挖掘奖励地址被提名为矿工的节点地址2Nonce随机数提名分类,或者增删3多余的其他数据。在Epoch时间点,存储当前委员会集singners 4难度的挖掘难度优先级,1或2,相同的块数,且只有一个矿工是2

3新的块生成周期

矿工开始生成块有三种情况:

程序启动时,执行newWorker方法初始化Worker对象时。(miner/worker.go)

网络接收到其他矿工广播的新块。在验证块被有效地插入到区块链中之后,将生成ChainHeadEvent日志。在worker对象的更新进程检测到这个日志之后,它将调用commitNewWork方法开始生成新的块。(miner/worker.go)

矿工自己生成新块并合并到链中后,会调用commitNewWork方法开始生成新块。

(wait cooperative,miner/worker.go)

新的区块生成时,矿工会做出一定的延迟。延迟算法:

高优先级矿工:

header.time=new (big.int)。添加(新(大。int). setu int 64(c . config . period))

delay:=time。Unix(标题。Time.Int64(),0)。sub(time 蓑衣网小编2022 . now())

(consensus/clique/clique . go中prepare和seal**的两种定义)

其他矿工:

header.time=new (big.int)。新增(大。int). setu int 64(c . config . period))

delay:=time。Unix(标题。Time.Int64(),0)。Sub(时间。Now())

wiggle :=time。持续时间(镜头(快照。signers)/2 1)* wiggle time

delay=time。持续时间(兰特。int 63n(int 64(wiggle)))

(consensus/clique/clique . go定义了两种方法:prepare和seal)

以太坊源码之POA区块生成机制

4新块生成优先级

在POA consensus算法中,委员会中的每个矿工都会不断地生成新块。对于相同数量的块,不合理的挖掘者在生成块时具有不同的优先级。

优先级计算方法:

Number:要生成的块的块号

Signers:snapshot中记录的委员会集合,根据矿工的地址,按升序排列

Offset:矿工在Signers集合中的位置

If:(Number % uint 64(len(Signers))蓑衣网小编2022==uint 64(Offset),优先级最高,header . difference=2;否则,标题。难度=1

本文由芯链团队整理。

以太坊源码之POA区块生成机制 | 分享给朋友: