风险提示:理性看待区块链,提高风险意识!
以太坊源码(03):POA委员会选举机制
首页 > 币界资讯 > 区块链知识 2018-07-31 11:04:00

目录

1 名词介绍

2 矿工投票方法

3 委员会确定投票流程

​ 3.1 关键概念描述

​ 3.1.1 Epoch & checkpointInterval

​ 3.1.2 Snapshot

​ 3.2 投票方法

1.名词介绍

节点:普通的以太坊节点,没有区块生成的权利。

矿工:具有区块生成权利的以太坊节点

委员会:所有矿工的集合

2.矿工投票方法

  • 用户通过RPC接口,调用Propose(address common.Address, auth bool)方法(consensus/clique/api.go),进行投票,address表示要投票的节点的地址,auth表示要从将该地址加入委员会,还是从委员会中删除。
  • Propose方法将address和auth两个输入参数写入到clique.proposals集合中。
  • 任何一个委员会的委员,可以在任意时刻进行投票,投票包括两种,即加入委员会和从委员会中删除。

3.委员会确定投票流程

3.1 关键概念描述

3.1.1 Epoch & checkpointInterval

  • CheckpointInterval:为常量1024(consensus/clique/clique.go中定义),即每当区块链的高度为1024的整数倍时,到达checkpointInterval时间点。
  • Epoch:默认为30000(cmd/puppet/wizard_genesis.go中makeGenesis方法中定义),即每当区块链的高度为30000的整数倍时,到达Epoch时间点。

3.1.2 Snapshot

Snapshot是一个快照,矿工程序在区块链高度为CheckpointInterval的整数倍时,会对当前相关数据和状态形成快照,并存储到数据库中。

snapshot结构体(consensus/clique/snapshot.go)关键成员:

  • Number:生成快照时的区块链高度
  • Signers:生成快照时的委员会地址
  • Votes:生成快照时所有的投票集合
  • Tally:被投票的节点集合,其中的Tally是该节点被投票的次数

3.2投票方法

所有投票都是在委员生成新区块的过程中完成,具体流程如下:

1)委员生成新区块时,先为该区块初始化一个header。

prepare方法,consensus/clique/clique.go)

2)从proposals中随机获取一个投票,将被投票的节点地址写入header.coinbase,将提名是添加还是删除写入header.Nonce(添加:0xffffffffffffffff 删除:0),若该委员生成的这个区块最终被写入区块链,则header中的投票也被写入区块链。

prepare方法,consensus/clique/clique.go)

3)委员在生成新区块时,会创建新的snapshot,新的snapshot是由上一checkponitinterval时间点存储到数据库中的快照加入当前时间点和checkpointinterval时间点之间所有的headers数据组成。添加header过程中,若该header的number是Epoch时间点,则会将snap中的Votes和Tally两个集合清零。

apply方法,consensus/clique/snapshot.go)

4)新的snapshot添加header过程中,会检查每一个header中存储的投票,若该投票snap.Votes中已经存在,则将snap.Votes和snap.Tally两个集合的该投票删除。

apply方法,consensus/clique/snapshot.go)

将每一个header中有效的提名写入新snapshot的snap.Votes和snap.Tally集合。

apply方法,consensus/clique/snapshot.go

5)判断snap.Tally集合中某个被提名的节点,提名的次数是否大于snap.Signers的1/2,即是否有超过一半的委员对该节点进行投票,若超过,则投票成功,该节点会被添加到委员会或者从委员会中删除。

apply方法,consensus/clique/snapshot.go)

注释:snapshot快照中的记录的委员会,即Signers集合,初始化时来源于创世块header中的Extra。

本文由HPB(芯链)团队整理。

关于我蓝莲花(汪晓明),微信/QQ:263305605,公众号:xm123798。朝夕网络(zhaoxi.co)创始人。致力于推动区块链应用落地。

上一篇: ETH-Pow算法分析
下一篇: 关于以太坊:网络服务分析
推荐专栏
web3首席知识博主
一位相信价值投资的币圈KOL。稳定盈利的缠论野生交易员 #BTC行情分析师 #价值投资 #链上数据分析
爱Web 3,爱生活,爱科技,爱炒币的老韭菜
热门币种
更多
币种
价格
24H涨跌幅
BTC比特币
¥264,358.04
37,039.98 USDT
-0.08%
ETH以太坊
¥14,381.54
2,015.04 USDT
-0.33%
USDT泰达币
¥7.20
1.01 USDT
+0.03%
BNB币安币
¥1,622.26
227.30 USDT
-0.04%
XRP瑞波币
¥4.34
0.60860 USDT
+1.11%
USDC
¥7.14
1.00 USDT
+0.04%
SOLSolana
¥397.24
55.66 USDT
+0.89%
OKBOK币
¥398.18
55.79 USDT
-1.98%
ADA艾达币
¥2.68
0.37490 USDT
-1.52%
DOGE狗狗币
¥0.55410
0.07765 USDT
-1.04%
热搜币种
更多
币种
价格
24H涨跌幅
Terra Classic
¥0.00
9.433E-5 USDT
-17.92%
Gala
¥0.18
0.025395 USDT
-4.47%
dYdX
¥22.45
3.1738 USDT
-1.74%
比特股
¥0.05
0.006817 USDT
+3.93%
PancakeSwap
¥15.45
2.1845 USDT
-3.6%
Conflux
¥1.07
0.1514 USDT
-3.57%
Filecoin
¥31.38
4.4363 USDT
-1.25%
FTX Token
¥30.21
4.2702 USDT
+16.02%
Shiba Inu
¥0.00
8.12E-6 USDT
-2.52%
Yield Guild Games
¥2.54
0.3591 USDT
-0.91%
比特币
¥262,018.97
37039.98 USDT
-0.08%
比原链
¥0.07
0.010012 USDT
-5.35%
最新快讯
更多
汇丰、恒生、渣打、富邦华一四家外资银行入围首批“数字人民币”业务试点名单
2023-11-28 19:06:57
摩根大通和Apollo计划建立代币化“企业主网”
2023-11-28 19:03:57
Nansen2公测版本上线,新增链上数据异动、智能搜索等功能
2023-11-28 18:59:52
西班牙公民需在明年3月底前申报其海外平台上加密货币持仓
2023-11-28 18:53:43
Nansen2已公开测试
2023-11-28 18:53:38
dYdX基金会:主网启动以来超过1645万DYDX被质押
2023-11-28 18:52:07
NicCarter等比特币倡导者发文:比特币挖矿是清洁能源和平衡电网的关键工具
2023-11-28 18:47:58
下载币界网APP