作者:HPB核心链团队
名词介绍POA块数据结构新块生成周期新块生成优先级1名词介绍
节点:一个普通以太坊节点,无权进行块生成。
矿工:拥有块生成权的以太坊节点
委员会:所有矿工的集合
2 POA块数据结构POA共识,块数据和POW有一些区别尚力财经小编2022,主要体现在头结构:
序列号字段POWPOA1Coinbase挖掘奖励地址被提名为矿工的节点地址2Nonce随机数提名分类,或者增删3多余的其他数据。在Epoch时间点,存储当前委员会集singners 4难度的挖掘难度优先级,1或2,相同的块数,且只有一个矿工是23新的块生成周期
矿工开始生成块有三种情况:
程序启动时,执行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)
4新块生成优先级
在POA consensus算法中,委员会中的每个矿工都会不断地生成新块。对于相同数量的块,不合理的挖掘者在生成块时具有不同的优先级。
优先级计算方法:
Number:要生成的块的块号
Signers:snapshot中记录的委员会集合,根据矿工的地址,按升序排列
Offset:矿工在Signers集合中的位置
If:(Number % uint 64(len(Signers))尚力财经小编2022==uint 64(Offset),优先级最高,header . difference=2;否则,标题。难度=1本文由芯链团队整理。