去年年底参加Polkadot在北京聚会后,就一直在期待官方关于Staking这块的经济与治理计划,虽然最终方案还没有定下,但是Web3地研究文档看起来相當完整了,整个设计让我有惊艳的感觉,看了很多以PoS為共识的项目,关于Staking经济的设计都不尽相同,新项目总会学习过往项目,这次Polkadot带来的NPoS是具备相当创新程度,且一定程度解决PoS的现有问题。
Polkadot可以写的东西还很多,这篇文章将会主要环绕Staking部分与NPoS公式挑选验证人节点的方法,这两个方面与持币人与节的收益有非常密切的关系。
简单为大家复习一下PoS共识项目的完整出块过程
1. 团队运行节点
2. 注册成为验证人
(过了基本门槛)
3. Staking过程
(持币人委托给节点,或是团队自由代币进行Staking委托)
4. 选举验证人
(系统通过某种算法选出每一轮的出块节点或是验证节点,这篇文章细说的就是Polkadot的NPoS选举算法)
5. 打包交易、广播交易、验证人确认一连串过程
6. 获得奖励
(奖励是由节点与持币人按照Staking比例分配)
从持币人的角度,更简单理解PoS
持币人拥有以PoS为共识的代币Moon,将Moon进行Staking委托给喜欢的节点,节点代持币人进行出块并获得奖励,奖励依照Staking比例进行分发。(Staking比例=持币人参与Staking的Moon数量/所有参与Staking的Moon数量)。
上面提到的是一般的PoS项目计算奖励的做法(奖励多寡与持币人Staking量为正相关)
Polkadot提出了NPoS, 初衷是为了解决过去PoS运行后,遇到的问题,因为奖励与Staking量正相关造成富有节点更富有,代币分配趋向中心化。
NPoS里最终奖励结果不是依据Staking量,而是依据每个被选出节点确实出块的工作量计算(白话来说就是不管节点拥有多少Staking量,出一个块或是验证一个块得到的奖励是一样的),NPoS将解决一部分大节点因为Staking量大获得更多奖励的问题,但同时也损害了一些大节点利益。
PS: 个人意见一般项目在初期不一定适合这样的做法,这是一个博弈过程,Polkadot是一个明星项目,他认为大多数的人愿意参与到网路中,即使超过一定Staking量的节点不会获得如预期那么多的收益,他们还是愿意贡献
Polkadot究竟是怎么做到的呢?
NPoS既然有别于传统PoS项目,不是Staking权重越高出块概率越高,我们就要详细说明下NPoS选举验证人的算法。
非常详细的文档在Web3的研究中,另外有一篇medium文章“How Nominated Proof-of-Stake will work in Polkadot”,我参考了里面的举例(Web 3研究中有很多数学,如果发现我的逻辑错误请告诉我)
NPoS的共识算法历史
NPoS参考了当时19世纪末,一个瑞典数学家Lars Edvard Phragmén提议的选举方法,当时瑞典的国会席位都是被主流党派占据,通过他的算法能更公平的让席位分配是和投票的比例有更高的联系,小党派能够获取过去没有办法获得的席位,Polkadot团队认为两者在设计理念上有相似之处,改良后就是现在看到的NPoS。
NPoS的选举人算法,我们都知道区块链这个分布式系统是由众多分散各地的节点(验证人)来维护,在PoS共识里大部分的链为了保证一定效率及安全下,会限制一定数量的验证人进行出块,也就是没有被选上的验证人就只是备选出块人,而NPoS就是从一群验证人中选取出正式验证人,Polkadot里把一群正式验证人成为选举人委员会(Committee)。
选举人算法有三大客观目标
1. 平衡Balance
一旦选举人委员会确定后,会将持币人Nominators的Staking量尽可能平均分配给每个选上的选举人Validators。
PS: 持币人是可以选择多个选举人的,所以存在系统重新分配空间
2. 最大支持Support
选出一个选举人委员会,委员会中的选举人Validators收到的Staking量要尽可能贴近总持币用户Nominators的Staking量。
3. 公平代表FairRepresentation
选出一个选举人委员会,其中持币人Nominators的投票权不会被过度代表,也不会被低估代表。
PS: 持币人可以选择多个节点,公平代表最简化是,每个持币人对应到的节点至少有一个会被选出,加上现实条件(持币状况及系统要选出几个节点)后有些节点会被淘汰,但尽可能保证拥有一定Staking权重的持币人可以至少对应到一个节点。
基于这三大原则筛选出来的验证人群(选举人委员会)可能有多个,最终系统会挑选出一组最合理的Committee(选举人委员会)进行出块,看起来很复杂很懵吧,我最开始也绕了很久,接下来会搭配下面持币人选举验证人的例子,大家会更加清晰的理解,建议先快速看过这个例子,然后阅读过程中搭配上面三个选举人算法的客观目标思考,最后再仔细看一次例子。
这是Medium上官方人员的举例(我会协助大家更好的理解)
假设有5个持币人(左边),5个节点(右边),要从中选出4个节点进行出块,为了简化模型先忽略节点自己拥有Staking量
下面是选举结果的举例(我一一为大家说明)
第一张图(最左边)
并不符合公平代表(FairRepresentation)的目标,因为图中第一个持币人拥有10Dot的权重, 相比第五个持币人只有3Dot的权重,最终却没有对应到任何他支持的节点,不符合公平代表目标拥有一定Staking权重的持币人至少对应到一个节点(在现在情况下,第一个持币人是拿不到奖励的)。
第二张图
符合公平代表(FairRepresentation)的目标,有些人可能会质疑为什么E节点选上了,而B节点没有选上,这和接下来会举例的重新分配算法相关,这边简单理解,图中第二个持币人同时支持了3个节点,系统只要保证他支持的节点至少有一个被选举上就好(这边他支持的节点有两个选上,第二个持币人所有Staking量将会被分配到这两个节点上),同时保持第五个持币人也有支持的节点E,对于Polkadot这样的选举结果是可能之一。
第三张图
符合公平代表(FairRepresentation)的目标,有些人可能会质疑这个与第二张图产生矛盾,目标是尽可能让每个持币人最少要有一个支持节点被选上,那第5个持币人支持的节点没有被选上,因为整个系统只需要选出4个节点,所以第五个Staking权重低的持币人支持的节点没有选上的结果是可能之一。
以下是上述两个符合公平原则的选举人委员会可能结果,确立选举人委员会后系统还要经过Staking权重重新分配
Polkadot系统会在每次从中选出一个更公平分配且具备安全性的结果,这个例子中选择右边因为它平均分配的更好,右边的节点中平均最低都拥有了9的Staking权重。
以上就介绍完Polkadot的选举算法了,上面的逻辑非常的绕,背后的数学更是复杂,官方的举例是在一个简单的情况下,真实情况如果放大到100个节点,每个持币人Staking权重都不同,同时又委托给多个节点,就会相当相当复杂,大家可以多思考几遍,依照上面提到的三大目标,每一个目标都可以当作标准检验一遍,就能够更明白。
NPoS这个选举算法动态分配持币人Staking权重,还基于一些规则挑选出最后的选上的节点,对现有的PoS生态中造成了一些不同
1. 在持币人可以选择多个节点下,大节点不努力争取社区支持,也有机会在算法下被排除在外(如图二中间B节点)
2. 在平衡staking量目标下,小且没有资本的节点更有利,因为只要社区中越多人选择它,在系统分配Staking量的机制下,选上出块可以获得奖励概率更高(如图二右边D节点)
3. 在平衡staking量目标下,大节点利润相对被压缩,大节点需要思考是否将自己的币委托出去,能获得更多利润
4. 持币人更有动机去选择小节点,利润更高,因为奖励是依据被选上节点的工作量计算的,只要持币人支持的小节点成功选上进行出块,小节点上累积的Staking的权重没有那么高,不同持币人依据委托给小节点的Staking比例分奖励,相对于委托给大节点,委托给小结点利润更高(就想像每个节点都赚10块钱,大节点需要和100个人分,小节点只需要和30个人分)
Polkadot到底想解决现有PoS什么问题
1. 一部分不可避免地中心化问题
2. 低手续费未来不会无限地吸引staking量,因为收益是看节点工作量
(现在Cosmos上就出现0手续费节点吸引大量持币人委托,在Polkadot里这样高Staking权 重的节点与普通Staking权重的节点获得的收益是一样的)
3. 持币人可以通过挑选不同节点最大化自己利益,同时促进去中心化
(对于持币人就可以有多种委托策略,我可以挑选安全可靠的节点,同时也可以挑选一些小但是也挺靠谱节点,可以获得更高收益率)
Polkadot在整个机制其实非常复杂,我可能也有漏掉的地方,怎么攻击这样的机制,包挂选举算法到底有没有漏洞可以钻,都需要专业人士投入大量精力区专研,这边就不进行讨论。
评论
查看更多