首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

详解DPoS共识算法

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301G1C5TB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券