Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
share
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张振华
share
Commits
788e9c8e
Commit
788e9c8e
authored
May 06, 2019
by
张振华
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
a8b98fa2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
9 deletions
+13
-9
DPOS共识算法介绍.md
dpos共识/DPOS共识算法介绍.md
+13
-9
No files found.
dpos共识/DPOS共识算法介绍.md
View file @
788e9c8e
...
@@ -133,6 +133,9 @@ SignBlock 蜃ス謨ー蟇ケ蛹コ蝮怜、エ霑幄。檎ュセ蜷,蟷カ譖エ譁ー蛹コ蝮怜、エ逧ュセ蜷榊ュ玲ョオ縲
...
@@ -133,6 +133,9 @@ SignBlock 蜃ス謨ー蟇ケ蛹コ蝮怜、エ霑幄。檎ュセ蜷,蟷カ譖エ譁ー蛹コ蝮怜、エ逧ュセ蜷榊ュ玲ョオ縲
# 六、Tendermint的共识机制
# 六、Tendermint的共识机制
Tendermint的共识是一种类Pos共识,由指定的validator,根据设定的权重值选择节点出块。
其状态机运行如下:


...
@@ -200,7 +203,7 @@ Period蛻困譌カ瑚ヲ∝ッケ蟾イ逕滓蛹コ蝮礼。ョ隶、悟ケカ霑幄。瑚鰍轤ケ驥肴眠騾我クセ梧
...
@@ -200,7 +203,7 @@ Period蛻困譌カ瑚ヲ∝ッケ蟾イ逕滓蛹コ蝮礼。ョ隶、悟ケカ霑幄。瑚鰍轤ケ驥肴眠騾我クセ梧
### (2). Voting状态处理逻辑:
### (2). Voting状态处理逻辑:
1.
3s周期检查投票状态,未超过2/3,则切换状态到Init状态。
1.
3s周期检查投票状态,未超过2/3,则切换状态到Init状态。
2.
如果收到超时消息,则认为是超时未达成共识,切换到Init状态,重新开始新一轮投票。
2.
如果收到超时消息,则认为是超时未达成共识,切换到Init状态,重新开始新一轮投票。
3.
如果收到投票消息,则判断是否有节点票数超过2/3,如果超过,则达成共识,切换状态到Voted状态,对于出块节点设定出块定时器;对于非出块节点设定周期超时定时器,并同步出块节点生成的区块。
3.
如果收到投票消息,则判断是否有节点票数超过2/3,如果超过,则达成共识,切换状态到Voted状态,对于出块节点设定出块定时器;对于非出块节点设定周期超时定时器,并同步出块节点生成的区块。如果没有节点票数超过2/3,且未收到所有投票,则继续等待投票直到超时。
### (3). Voted状态处理逻辑:
### (3). Voted状态处理逻辑:
1.
对于出块节点:
1.
对于出块节点:
...
@@ -208,18 +211,19 @@ Period蛻困譌カ瑚ヲ∝ッケ蟾イ逕滓蛹コ蝮礼。ョ隶、悟ケカ霑幄。瑚鰍轤ケ驥肴眠騾我クセ梧
...
@@ -208,18 +211,19 @@ Period蛻困譌カ瑚ヲ∝ッケ蟾イ逕滓蛹コ蝮礼。ョ隶、悟ケカ霑幄。瑚鰍轤ケ驥肴眠騾我クセ梧
状态切换到Init状态,开始新一个节点的选举。
状态切换到Init状态,开始新一个节点的选举。
2.
对于非出块节点:
2.
对于非出块节点:
周期定时器超时,则切换状态到WaitNotify状态,等待出块节点发来的notify消息,如果高度不同步,需要进行区块同步。
周期定时器超时,则切换状态到WaitNotify状态,等待出块节点发来的notify消息,如果高度不同步,需要进行区块同步。
3.
如果收到出块节点发来的notify消息,直接切换状态到WaitNotify状态,检查区块高度,如果高度不同步,需要进行区块同步。
3.
如果收到出块节点发来的notify消息,直接切换状态到WaitNotify状态,检查区块高度,如果高度不同步,需要进行区块同步。
4.
如果收到投票消息,则返回本周期的本地票,以帮助新启动
节点完
成投票及状态切换。
4.
如果收到投票消息,则返回本周期的本节点投票,以帮助新
启动节点完成
投票及状态切换。
### (4). WaitNotify状态处理逻辑:
### (4). WaitNotify状态处理逻辑:
1.
2s周期检查是否收到Notify。
1.
2s周期检查是否收到Notify。
如果超时未收到,则进入Init状态,参与投票。
如果超时未收到,则进入Init状态,参与投票。
如果超时前收到,则记录相关结果,如果区块高度未同步则进行区块同步,并进入Init状态,参与新一轮投票。
如果超时前收到,则记录相关结果,如果区块高度未同步则进行区块同步,并进入Init状态,参与新一轮投票。
## 3 DPos共识相关配置
## 3 DPos共识相关配置
当前实现,对于受托节点采用了配置制定的方式,各受托节点的公钥配置在genesis.json文件中,各个受托节点使用相同的genesis.json文件;各受托节点自身的私钥、地址信息保存在各自的priv_validator.json文件中。
当前实现,对于受托节点采用了配置指定的方式,各受托节点的公钥配置在genesis.json文件中,各个受托节点使用相同的genesis.json文件;
各受托节点自身的私钥、地址信息保存在各自的priv_validator.json文件中。
这种配置方式借鉴了tendermint的配置方式,后续可以进一步修改为投票选举受托节点的方式,则通过智能合约来对受托节点进行管理。
这种配置方式借鉴了tendermint的配置方式,后续可以进一步修改为投票选举受托节点的方式,通过智能合约来对受托节点进行动态管理。
1.
genesis.json:
1.
genesis.json:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment