DPoS 的诞生
想象这样一家公司:公司员工总数有1000人,每个人都持有数额不等的公司股份。每隔一段时间,员工可以把手里的票投向自己最认可的10个人来领导公司,其中每个员工的票权和他手里持有的股份数成正比。等所有人投完票以后,得票率最高的10个人成为公司的领导。如果有领导能力不胜任或做了不利于公司的事,那员工可以撤销对该领导的投票,让他的得票率无法进入前10名,从而退出管理层。这就是对DPoS(Delegated Proof of Stake)共识机制的一个形象描述。
DPoS 是一种区块链的共识算法, 2014年4月由Bitshares 的首席开发者 Dan Larimer (现为EOS CTO)提出并应用。当时Dan观察到比特币系统共识算法POW的一些问题:比如矿池导致算力越来越集中、电力耗费过大等。所以他提出了一种更加快速、安全且能源消耗比较小的算法,这就是后来的DPOS。
DPoS的选举机制
在DPoS共识算法中,区块链的正常运转依赖于受托人(Delegates),这些受托人是完全等价的。
受托人的职责主要有:
1. 提供一台服务器节点,保证节点的正常运行;
2. 节点服务器收集网络里的交易;
3. 节点验证交易,把交易打包到区块;
4. 节点广播区块,其他节点验证后把区块添加到自己的数据库;
5. 带领并促进区块链项目的发展。
受托人的节点服务器相当于比特币网络里的矿机,在完成本职工作的同时可以领取区块奖励和交易的手续费。
一个区块链项目的受托人个数由项目发起方决定,一般是101个受托人。任何一个持币用户都可以参与到投票和竞选受托人这两个过程中。用户可以随时投票、撤票,每个用户投票的权重和自己的持币量成正比。投票和撤票可以随时进行,在每一轮(round)选举结束后,得票率最高的101个(一般为101个,也可以是其他数字,具体由区块链项目方决定)用户则成为该项目的受托人,负责打包区块、维持系统的运转并获得相应的奖励。
选举的根本目的,是通过每个人的投票选举出社区里对项目发展和运行最有利的101个用户。这101个用户的服务器节点既可以高效维护系统的运转,而他们也会贡献自己的能力促进区块链项目的发展,这有点类似于我国的‘人民代表’制度(但是周期更短、效率更高)。通过这种方式,既达到了去中心化的选举共识,又保证了整个系统的运行效率和减少能源浪费。
DPoS的伪代码实现
先来看一下DPoS的伪代码实现:
for round i //分成很多个round,round无限持续
dlist_i = get N delegates sort by votes //根据投票结果选出得票率最高的N个受托人
dlist_i = shuffle(dlist_i) //随机改变顺序
loop //round完了,退出循环
slot = global_time_offset / block_interval
pos = slot % N
if dlist_i[pos] exists in this node //delegate在这个节点
generateBlock(keypair of dlist_i[pos]) //产生blockelse
skip
可以看到,在每一轮循环里,系统会重新统计得票排名。在选出最高的N个受托人里,系统采用先打乱顺序,然后受托人依此生产区块。一轮区块生产完毕后进入下一个周期。
知名 DPoS 项目
1. Bitshares
最早应用DPoS机制的项目,其DPoS机制里包含见证人(Witnesses)和受托人(Delegates), 见证人负责区块的打包,受托人负责系统参数的修改。
2. EOS
共识算法我DPoS + BFT, 有21个受托人。
3. Asch
共识算法为DPoS + PBFT, 有101个受托人, 目前正在开放竞选。
参考:
Explain Delegated Proof of Stake Like I’m 5 – Hacker Noon
Delegated Proof of Stake (DPOS) vs Proof of Work (POW)
DPOS Consensus Algorithm - The Missing White Paper — Steemit
Delegated Proof-of-Stake Consensus - BitShares
Delegated Proof of Stake (DPOS) White Paper by Daniel Larimer
Explanation of DPoS+BFT
领取专属 10元无门槛券
私享最新 技术干货