区块链共识算法之POS
简介
POS,即Proof of Stake,即股权权益证明。是一种比POW环保、绿色的共识算法。权益证明机制(POS)将工作量证明机制(POW)中的比拼算力改成了系统权益,拥有权益越大则成为下一个记账人的概率越大。而权益的大小和你持有的“某些东西”有关系,这里的"某些东西"通常是指你持有的代币。
POS原理
关于POS的应用,笔者找了2个"山寨币"的源码大致看了下。所谓山寨币就是和比特币同出一脉,拿着比特币的源码修改某些"特性",然后发自己的币。
1、点点币peercoin。pos"挖矿"和"币龄"密切相关。币龄=持有的币量*持有的时间。下面通过源码简单描述下点点币的POS机制。下面这个for循环就是在"挖矿"(利用pos机制验证是否满足出块的条件),可以看出这个循环次数最大为60次。
下面函数CheckStakeKernelHash就是pos的核心了,其中426行和比特币POW一样的套路,由难度值nBits产生一个目标值,不过点点币的难度值全网调整和比特币的调整是不一样,感兴趣的可以自己去研究下。
接下来就是计算"币龄"了。
接下来就是hash撞块了,比特币POW是对区块头SHA256,而且是疯狂hash,而点点币的hash则是对下面的6个字段进行,而且次数至多60次,因为那个for循环 nMaxStakeSearchInterval = 60。
到目前为止,点点币的POS看起来和比特币的POW基本一致,那区别到底在哪呢?精彩的2行代码来了
同样是比小,但是右边的目标值却被乘以了一个bnCoinDayWeight,即币龄。这将会直接导致币龄越大的,越容易找到满足出块条件的hashProofOfStake,而hashProofOfStake的产生次数每一轮(即一个for循环)最多60次,从这里看出 点点币的POS已经极大弱化了靠野蛮算力的撞块。更为占决定性因素的是持币的多少和持有时间。
因为币龄=指持有的币量*持有的时间,而点点币的"持有的时间"是2个时间点相减,所以部分节点平时保持离线,只在积累了可观的币龄以后才连线获取利息,然后再次离线.。。。如此反复,对整个全网的稳定有很大影响。所以有了山寨币blackcoin的出现。
2、黑币blackcoin。因为源代码和点点币差不多,这里就只贴出核心源码了。
移除了币龄,改为和币数直接挂钩。
总结
由以上的POS机制可以看出,权益的大小和你持有的"某些东西"有关系,这里的"某些东西"通常是指你持有的代币。POS虽然环保、绿色,但是PoS并不消耗更多的算力,容易出现Nothing at Stake。后来POS共识为了应对这种Nothing at Stake问题,出现了抵押金的模式。Tezos、Cosmos、Ethereum、Cardano和Pokaldot等都使用了这种方式来防止Nothing on Stake的情况发生,采用抵押出块保证网络安全的方式。攻击者发起攻击的时候,会承担抵押金被扣除的风险,这样保证了验证节点不会轻易发起作恶行为。
POS的委托模式,即人人可以委托专业化节点(验证人)来代理出块,这样持币用户有了更强烈的股权证明方式,而不是和财阀、技术阀竞争过程中出现的完全劣势情况。
POS共识在不停的进化和演进,笔者觉得整个POS史其实就是一条无数精英为之不停努力的求真之路。好了,结束。