Sunny King于2018年9月发布了SPoS共识机制,并应用于V SYSTEMS项目。SPoS共识机制的核心是基于冷铸造技术,将超级节点作为铸币经济中的铸币池,通过获得持币者的币租赁权来进行铸币产生区块获取奖励。SPoS的超级节点能够实现完全去中心化,同时超级节点和持币者之间共生共存为一个良好的生态。
区块链系统是一个分布式计算系统,即由许多节点(电脑)共同维护一个账本。区块链维护账本包括谁来更新新账本页,和在所有节点中同步账本。
共识机制就是在区块链系统内,让所有节点达到一个——由哪个节点来更新新账本页,并且其他节点会将自己的账本同步到该最新的账本页——的共同的决策方法论。
更专业的术语是,共识机制是决定哪个节点能出块的算法。
比特币的共识机制是工作量证明PoW,点点币的共识机制是权益证明PoS。PoW和PoS都是去中心化的共识机制。
PoW和PoS都没有规定一共有多少节点可以出块,理论上出块节点可以是无限个。
PoW机制是系统发一个“目标值”,这是一个数字,比如前面19个零的数字,只要你的节点能够提供一个通过特定算法计算出来的前面有20个零的数字,你就可以获得出块的权力。
PoW机制下是要消耗能源来完成计算,我认为这是合理的。不过整个加密数字货币社区有很大的声音认为PoW不对,浪费能源。PoS的诞生就是基于反对PoW消耗能源。
PoS是所有节点出一个叫“币龄”的值,“币龄=币数x持币不动的时间”,比大小,谁的币龄大,谁就获得出块的权力。
PoW和PoS这种模式是可以实现去中心化,任何人,都可以买矿机或买币,加入出块的博弈。
PoW的出块原理决定了竞争出块是需要消耗真实的能源的,在同一高度上,哪怕你是没有竞争到出块权,你也是真实消耗了计算能力。在每一个高度上诞生出新块后,之前所有的计算全都报废,大家又同时站在同一起跑线重新计算。
PoS出块是要真实消耗币龄的,一个PoS节点一旦获得了出块权,那它的币龄就归零了,要重新积累参与博弈。但只要你不出块,你的币龄就不会因为别人出块了而消耗。这和PoW是不一样的,PoW是别人出块了,你的计算就得清零。
目前纯PoS共识机制好像流行,点点币已经被边缘化了。ADA币看起来是最成熟的PoS。ADA币的PoS模块被Fork的最多。
PoW和PoS的出块还有一个大特点,就是出块在时间分布上是随机的,只能在统计意义上获得一个平均的出块时间。比如比特币的出块时间平均是10分钟,但具体的两个块时间间隔可能是几秒钟,也可能是1个小时以上。
中本聪通过比特币发明了PoW机制。SunnyKing通过发明点点币发明了PoS机制。PoW工作的非常好,但PoS并没有大量流行。SunnyKing曾经发表过一篇文章描述他的认知升级,他认为真实的世界是多中心的。整个人类就是一个多中心的世界,一个国家就是一个中心。多中心形成庞大的系统。
SunnyKing思考去中心化在性能上遇到了瓶颈,大量的真实世界并不是去中心化的,自然的演化形成多中心的系统。而比特币挖矿矿池的诞生,大矿场的诞生,也证明了多中心是一个复杂系统演化的方向。
所以,SunnyKing在他的新区块链系统中采用了多中心的架构——SPoS。
在SPoS机制下,出块节点的数量是有限的,目前vsys一共15个出块节点,叫超级节点。超级节点分成两类,一类是“候任节点”,一类是“在任节点”。在任节点是可以出块的节点。要成为出块节点,需要先完成“挑战”。
“挑战”的过程就是将“在任节点”选下去,自己成为“在任节点”。“挑战”是使用“加权平均币龄”这个参数来完成。
vsys币同样是有币龄的属性,这和比特币、点点币是完全一样的。“币龄=余额x持币天数”,以“币天”为单位。只要持币不动就可以累计币龄,币只要转移其币龄就会被销毁。
但是币龄在比特币这种UTXO模型下是非常方便计算的,因为UTXO和钱包里的余额是不同的概念,钱包余额是UTXO的总和。币龄只需要计算UTXO剩余持币天数,钱包里的余额的总币龄就是所有UTXO币龄的累加。但在账户制下,比如以太坊,计算币龄就非常复杂了,因为一个账户有多笔金额转入时,余额会变成一个数值,无法像UTXO那样非常方便地区分输入。
在vsys币里,为了实现币龄更方便地计算,使用了“已确认余额”的属性来计算币龄,具体的计算公式很复杂,我们不用管,你可以简化成是将区块确认数和账户余额相乘。在SPoS的白皮书里,还描述了更多的计算细节,以在工程上实现“节点”的“挑战”与“被挑战”。包括一些攻击解决办法。数学上的证明,我们就不用管了,我们只需要理会里面的精神就好了。
用户持有vsys币,在钱包里可以有发送接收操作,这就和我们发送接收比特币一样。vsys币还有一个"租赁"操作。允许用户将自己的vsys币的“已确认余额(即币龄)”的属性“租借”给超级节点。超级节点累加借来的所有币的“币龄”,一旦超级节点的“币龄”挤进了全网所有节点“币龄”排行前15名,就可以通过“挑战”操作将“在任节点”币龄最后一名挑下马,自己成为“在任节点”。
“挑战”操作需要消耗超级节点5万个vsys。
用户发起“租赁”操作,只是将“币龄”租借给超级节点使用,而私钥依然是用户控制,用户依然是可以随时发起“发送”和“接收”操作的。
“在任节点”需要时刻关注全网其他“候任节点”的“币龄”,一旦“币龄”被比下去了,那“在任节点”就可能会被挑战,从而被挤出去。
在超级节点挑战成功后,就获得了出块权。系统有一个叫“槽位”的概念,每一个超级节点占据一个槽位,共同构成一个有顺序的环,轮流有序出块。
目前vsys系统设置15个可出块的超级节点,将1分钟切割成15份,4秒一份,全网4秒出一个块,15个节点轮流有序出块。SPoS机制还可以升级成更多的超级节点数,vsys在将来会在需要提升性能时将节点数提升到30个,2秒出一个块,在更远的未来会提升至60个超级节点,1秒出一个块。
SPoS机制下,出块节点成为一个中心节点,它们共同组成多中心的系统。SPoS机制的特点是系统设置固定数量的出块节点,和节点按顺序出块,出块时间是固定的。采用SPoS,可以获得相对去中心化共识机制更高的出块速度,更高的tps。
在网络结构上多中心机制和去中心化机制是有质区别的。去中心化共识机制的节点是一个P2P网络,各个节点之间需要网络发现探测各自在哪里。但多中心节点的系统,节点之间共同组成一个有序网络,相互之间是知道各自存在的。
现在更流行的多中心共识机制是DPoS,这是BM发明了比特股和EOS带来的,其内置的共识机制是委托权益证明DPoS。
DPoS是一个多中心共识机制,其特点是系统设置固定数量的出块节点,和节点按顺序出块,出块时间是固定的。
在DPoS机制下,同样的,节点有两类,一类是“候任节点”,一类是“在任节点”。在任节点是可以出块的节点。要成为出块节点,需要先完成“竞选”。
DPoS机制下的“竞选”选票是币的“投票权”。在DPoS机制下,币有一个属性,叫“投票权”,用户可以通过锁定币来获得“投票权”,即用户要放弃币的“流动属”性才能获得“投票权”。
在EOS系统里,任何用户的EOS币都可以通过锁定来获得一些特性,包括“内存资源”“CPU资源”和“Net资源”,还有就是一个币获得“30张投票权”。这“30张投票权”对一个节点来说,只能投一次,你不能说我给一个节点投30张票,但你可以投给30个不同的节点,一个节点一张票。用户锁仓币的行为会让币丧失流动性,赎回需要3天。
DPoS机制下“候任节点”向全网公布自己的被“投票账号”,你要吸引足够多的票数。EOS系统设定21个可以出块的“在任节点”,节点之间通过比“票数”多少来竞争,票数前21名竞选成功。
BTS也是类似的。
在节点竞选成功后,就获得了出块权。系统有一个叫“槽位”的概念,每一个节点占据一个槽位,共同构成一个有顺序的环,轮流有序出块。
“在任节点”需要时刻关注全网其他“候任节点”的“票数”,一旦“票数”被比下去了,那“在任节点”就会被挤出去。
采用DPoS,可以获得更高的出块速度,更高的tps。比如EOS就是现在所有链里出块最快的,0.5秒,tps可以达到千,真实峰值达到过3000多。
SPoS和DPoS,vs, PoW和PoS。
显然,在区域链的性能上,包括确认时间和tps,这两个指标上多中心要明显优于去中心化机制。
多中心的缺点在于抗打击性上。去中心化机制是的出块节点可以是完全匿名的,出块节点是无须许可加入网络的,这样的机制是很难被消灭的。你消灭了任何一个出块节点,对整个网络的影响是非常小的。你又不可能同时消灭所有的出块节点。
多中心机制则有可能被同时消灭,因为多中心的节点想要匿名更难,整个网络结构决定了,这是一个需要某种许可的机制。
当然,两类机制的差别还远不止这一些,但评估这两类共识机制不是本文的重点,以后有机会再讲。
哈哈,中心共识机制就是“服务器-客户端”结构啦,账本由中心节点负责维护,即“出块权”全部归中心节点。
银行、支付宝、微信支付都是中心共识机制。
很多人讲“多中心化”,我怎么都觉得这个“化”字多余。“去中心化”是一个动词“去”,“化”这个词是一个描述这个动作后的结果。但“多中心”,这里面没有动词,就不需要“化”了。