区块链:POA委员会选举机制
目录
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。
区块链:POA委员会选举机制相关推荐
- 以太坊源码(03):POA委员会选举机制
目录 1 名词介绍 2 矿工投票方法 3 委员会确定投票流程 3.1 关键概念描述 3.1.1 Epoch & checkpoin ...
- POA委员会选举机制
目录 1 名词介绍 2 矿工投票方法 3 委员会确定投票流程 3.1 关键概念描述 3.1.1 Epoch & checkpointInterval 3.1.2 Snapshot ...
- 万向副董肖风:区块链的六大治理机制
雷锋网(公众号:雷锋网)4月28日报道,今日2017全球区块链金融峰会在杭州举行.大会宣布了全国首个区块链产业园区落户杭州,此外还邀请了多位重量级嘉宾演讲,据雷锋网了解包括以太坊创始人 Vitalik ...
- 一文读懂区块链共识及其容错机制
翻译 | shawn 编辑 | 波波 区块链是一个分布式和去中心化的系统,这意味着它需要一种可以追踪当前系统官方状态的方法.由于区块链可以包括金融交易和商业协议,因此所有相关方必须在协议条款上保持一致 ...
- 塞拉利昂首次秘密进行基于区块链的总统选举
点击上方 "蓝色字" 可关注我们! 暴走时评: 塞拉利昂利用瑞士区块链选举初创企业的许可型分布式账本技术,完成了首轮基于新技术的投票流程.然而计票还是手动完成,只是将结果记录在区块 ...
- 区块链中的共识机制以及共识算法
什么是共识 共识,从字面上来看,是在某方面达成一致.打个比方,一个部门最近来了几位新同事,部门主管为了欢迎新同事的加入,以能让新同事融入到新环境,提议下班后聚个餐,对于聚餐了,大伙对此举双手赞成,毕竟 ...
- pbft共识机制 java实现_区块链开发:共识机制PBFT #C09
拜占庭将军问题是指系统中除了网络延迟.系统宕机等问题外还存在恶意节点,会进行"精神分裂式"投票. BFT(Byzantine Fault Tolerance)系统是指能够容忍拜占庭 ...
- 区块链 重塑不良资产互信机制
数据显示,2021年一季度末,银行业不良贷款余额3.6万亿,不良贷款率1.89%,较年初下降0.02个百分点:四季度末商业银行不良资产余额2.8万亿,较上季度末增加135亿元,商业银行不良贷款率1.7 ...
- 区块链技术之共识机制
"共识机制"一词通常通俗地用于指代"股权证明"."工作证明"或"权威证明"协议.然而,这些只是防止女巫攻击的共识机制的组 ...
- HPB芯链 -- 共识算法选举机制描述
1 简介 为了适应BOE技术的要求,同时尽可能的提升安全TPS, HPB共识算法采用了高效的双层选举机制,即外层选举和内层选举. 外层选举:由具有BOE板卡的所有用户中选取出.选取周期为3个月.选取方 ...
最新文章
- hive 时间转字符串_2. HIVE 基本操作
- Method-Swizzling实战-实现iOS原生网络请求性能采集
- 蓝桥杯 单点最短路径问题
- python创建和控制的实体称为_Python eds包_程序模块 - PyPI - Python中文网
- android返回页面代码实现,Intent携带信息返回上一个界面实现基本信息的设置
- 【完全开源】博客园客户端UWP版(上篇)
- [转载] sklearn FutureWarning: numpy not_equal will not check..., The comparison did not return the sam
- php二级垂直导航栏,垂直(纵向)二级导航菜单
- 数据合并concat
- 【资源篇】在线下载B站视频(免安装)
- Python CSV模块
- 前端必读:浏览器工作原理
- Justinmind恢复30天试用 For Mac
- java中isolate时间_Flutter 92: 图解 Dart 单线程实现异步处理之 Isolate (一)
- TCP 与 CPU 架构发展史
- 易基因|m5C RNA甲基化测序技术---从mRNA到全转录组(mRNA+lncRNA+tRNA)m5C单碱基分辨检测|技术解读
- 前端CDN资源库,解决HTML大屏首次加载慢的问题了,大屏项目必备cdn加速
- Visio用UML2.2模板包
- mvn 命令打包项目
- Java java.lang.ArithmeticException: Rounding necessary问题解决