POS & POW 混合共识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kesalin/article/details/84032088

POS & POW 混合共识

点点币PPCoin、新星币NovaCoin、雅币YaCoin、比特存储、黑币早期都采用POW+POS结合的模式。

点点币PPCoin首次实现POS(年利率1%)
新星币NVC助力POS(年利率5%)
雅币YaCoin(年利率5%)

新星币:https://github.com/novacoin-project/novacoin
黑币:https://github.com/CoinBlack/blackcoin
比特存储:https://github.com/UnitedBitcoin/UnitedBitcoin

业内提出了PoS(Proof of Stake)的思想:

  1. 把生产block的工作交给拥有更多token的人,拥有的越多,作为block producer的概率越高
  2. 生产block的过程中得到token奖励,可以理解为持有token带来的利息
  3. 拥有大量token的人如果攻击网络,则会造成token价格的下降,对这些人是不利的,所以这些block producer攻击网络的意愿较低
  4. 生产block只需证明自己持有的token即可,不需要消耗多少算力,节约能源

围绕以上PoS的思想,各个区块链系统有不同的PoS实现,以下将依次介绍。

Peercoin PoS v1

最初的一版PoS由Peercoin设计实现[8]。其中,用户要产出block必须满足以下条件:

hash(stake_modifier, current_time, UTXO) < coin(UTXO) * age(UTXO) * difficulty

具体解释如下:

  1. 用户在每一秒时间(current_time),遍历自己所有的UTXO,代入上述公式中,看是否能满足不等式条件;如果满足,就把相应的UTXO记录在block中,并发布block(见4)
  2. stake_modifier是对前一个block中部分字段hash后的值,加入这一项是为了防止用户提前预知自己何时有权挖矿
  3. difficulty会根据近期的block产出时间动态调整,保证block产出时间间隔稳定
  4. 由于每秒只需要完成和自己UTXO数量相等的hash计算,所以需要的算力较低
  5. 从不等式可以看出,持有的UTXO越多、UTXO中token数额越大(coin(UTXO))、UTXO持有时间越长(age(UTXO),或称之为币龄),不等式越容易成立,越容易进行挖矿
  6. 生成block的奖励设置为了coin(UTXO) * age(UTXO),即UTXO数额越大持有时间越长,奖励越高
  7. 为了将符合条件的UTXO记录进block,并且兼容原本的PoW模式,Peercoin设计了coinstake的逻辑:保留原本第一个transaction为coinbase,但要求输入数量必须等于1,且输入的prev.out字段必须置空值,输出数量必须大于等于1;令第二个transaction为coinstake,要求输入数量大于等于1,且第一个输入为满足条件的UTXO,输出数量大于等于2,且第一个输出必须置空值,第二个输出为block奖励。

币基结构图:

该版本的PoS面临着如下的问题:

  1. 因为构造新的block没有算力成本,所以当区块链出现fork的时候,用户有可能会倾向于同时在多个branch一起挖矿来获得潜在更高的收益,这样制造了大量的分支,破坏了一致性。这个问题多次被以太坊团队提及,并称之为nothing at stake问题,以太坊在其PoS方案CASPER中致力于解决该问题
  2. 出现了攒币龄的现象,即关闭节点,直到age(UTXO)足够大的时候再启动节点挖矿,从而节省电力,这样引起了在线节点数太少系统脆弱的问题
  3. 可以攒够足够的币龄后,保证自己有足够的UTXO能够连续生产block,从而发动double-spend攻击

Blackcoin PoS v2

Blackcoin在Peercoin的基础上进行了修改,从而缓解了上述问题,主要改动如下:

  1. 去掉了不等式公式右边的age(UTXO),从而解决了问题3中攒币龄然后进行double-spend的现象;但是block奖励还是使用了币龄,因此并不能完全解决问题2中节点关闭的现象。
  2. 优化了stake_modifier的计算逻辑,让用户提前预知自己有权挖矿时间的难度更大了。

Blackcoin & Qtum PoS v3

Blackcoin又在v2的基础上改进得到了v3,然后Qtum对v3又进行了修改并应用。主要改动点描述如下:

  1. 把block奖励改成固定值,解决了问题2
  2. 规定500个block之前的UTXO才能参与挖矿,缓解挖矿过于频繁带来的潜在风险

代码流程图

Blackcoin 黑币 POS 流程

ThreadStakeMiner miner main wallet kernel CreateNewBlock GetNextTargetRequired SignBlock CreateCoinStake SelectCoinsForStaking CheckKernel CheckStakeKernelHash CheckStake CheckProofOfStake IsConfirmedInNPrevBlocks ProcessBlock CheckBlock AcceptBlock ThreadStakeMiner miner main wallet kernel

UBTC 比特存储 POS 流程

ThreadStakeMiner miner PoW CWallet CreateNewBlockPos ComputeBlockVersion GetAdjustedTime GetNextWorkRequired PosGetNextTargetRequired Create coinbase Create coin stake SelectCoinsForStaking CheckKernel CheckProofOfStake TestBlockValidity CheckStake ProcessNewBlock ThreadStakeMiner miner PoW CWallet

猜你喜欢

转载自blog.csdn.net/kesalin/article/details/84032088