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

浅聊区块链共识机制(二)

上一篇文章着重介绍了POW,POS和DPOS共识机制,本篇文章继续介绍其它常见的共识机制。

简介

普通的分布式计算系统中可能存在一些问题,比如节点间通讯的信道不安全,出现作恶节点,节点增多后容不下新节点的加入等,所以在分布式场景下节点达成完全一致性基本是不可能的。于是人们开始根据FLP定理和CAP定理设计共识算法,基于区块链设计的各种共式机制都可以看作牺牲了一部分代价来换取相对的一致性。

如果说区块链解决了在不可信信道上传输可信信息和价值转移的问题,那共识机制则解决了区块链如何在分布式场景下达成一致性的问题。区块链的伟大之处就是它的共识机制在去中心化的思想上解决了节点间互相信任的问题。区块链能在众多节点达到一种较为平衡的状态也是因为共识机制。尽管密码学占据了区块链的半壁江山,但是共识机制是保障区块链系统不断运行下去的关键。如果以后区块链成为一个庞大的"云服务",那么共识机制便是连接各种服务的桥梁。

AuxPOW(联合挖矿)

AuxPOW全称Auxiliary Proof-of-Work,也被称为联合挖矿。目前使用AuxPOW共识算法的币种以NMC(域名币)和DOGE(狗狗币)为主要代表。AuxPOW可以简单的理解为是POW的寄生关系,POW的币种被称为父链(Parent blockchain),寄生在其上的币种被称为辅链(Auxiliary blockchain),父链不需要知道辅链的存在,而辅链需要有协议来支持复用父链的POW结果。在不断进行哈希计算的过程中,当符合父链的难度要求时,父链就挖出一个区块,当符合辅链难度要求时,则辅链挖出一个区块。比如域名币以比特币为父链,狗狗币以莱特币为父链进行挖矿来产生区块。

AuxPOW协议的实现无需改动父链,而实现Merge Mining的辅链则需要做针对性设计。虽然主链不需要做任何改动,但前提是主链必须支持可编程脚本,比如比特币Coinbase的输入字段,此处只规定了长度限制,留了一片未定义区域,这也是比特币实现类似智能合约的雏形。正因为可以通过写入规定格式的数据,辅链可以解析并认可父链计算出的Hash值。

AuxPOW核心理念相对于POW不同的地方在于POW生产区块,规定只有难度符合要求才算一个合格的区块,AuxPOW协议对区块难度没有要求,但是辅链区块的hash值必须内置于父链区块的Coinbase里,该父链区块的难度必须符合辅链的难度要求,还有父链和辅链的算法要一致。

AuxPOW将辅链区块的hash值内置于父链的Coinbase,其实是利用父链作存在证明。这样就可以实现间接依靠父链的算力来维护辅链安全。一般来说,父链的算力比辅链大,因而满足父链难度要求的区块一定同时满足辅链难度要求,反之则不成立。这样一来,很多本来在父链达不到难度要求的区块,却达到辅链难度要求。父链增加区块中Coinbase的scriptSig字段:

magic字段:用于标识联合挖矿

aux_block_hash字段:表示辅链区块的哈希值(多个辅链时则为所有辅链哈希构造的MerklerRoot)

merkle_size字段:表示辅链数量(一条辅链设置为1)

merkle_nonce字段:表示辅链id(一条辅链设置为0)

对于辅链则需要加入5个字段:

父链的coinbase的交易数据

父链区块头的哈希值

父链Coinbase所在MerklerRoot的分支

辅链区块哈希所在MerklerRoot的分支

父链区块头

目前以比特币和莱特币为父链的挖矿币种需要与矿池来对接,父链Coinbase的scriptSig由矿池修改,辅链只需要添加上面5个字段,并对这些字段做验证即可。验证的基本过程是:根据父链区块头和父链区块哈希值验证父链区块头是否符合辅链难度要求;依靠父链coinbase的交易数据、父链Coinbase所在MerklerRoot的分支以及父链区块头,验证辅链Coinbase交易是否真的被包含在父链区块中;依靠辅链区块哈希所在MerklerRoot的分支,以及Coinbase中aux_block_hash字段,验证辅链区块Hash是否内置于父链区块的Coinbase交易中。

AuxPOW在父链强大的算力下保证了整个系统的安全性,而且足够去中心化,并且不会大量浪费电力资源;但是由于依附于父链的算力,如果父链出现问题会直接影响到辅链的运行,并且需要对接各个矿池来支持上述技术的实现。

POW+POS

POW+POS共识机制是使用了POW和POS混合机制的方式来实现的,采用这种方式结合既减少了资源的消耗又保证了一些安全性,但是采用这种方式的币种也有多种结合方式,本文重点介绍PPC(点点币)和DCR(Decred)的实现模式。

点点币采用C++语言编写,它的POS类似与传统的POW机制,也是基于哈希的不断运算来竞争获得记帐权。点点币POS的主要理念是节点记账权的获得难度与节点持有的权益成反比,这样在一定程度上减少了哈希运算带来的资源消耗,根据每个节点所占代币的比例和时间,等比例地降低挖矿难度,从而加快找到随机数的速度。

点点币的POS中有一个叫做币龄(Coin age)的概念,用于给交易排出优先次序,简单地定义为货币的持有时间段,即持有的币数乘以持有币的天数。因为有这个概念这样就产生了持币人的利息,也就是说持币人把代币当作押金放入POS机制中,就有机会产生新区块而得到奖励。POS挖矿所赚取的年化利率为1%。点点币在转账后经过30天才可以进行挖矿,经过90天后,他们成功挖到区块的概率达到最大。总体而言,这个系统中存在一个持币人的集合,他们把手中的代币放入POS机制中,这样他们就变成验证者。比如对区块链最前面的一个区块而言,POS算法在验证者中随机选择一个(选择验证者的权重依据他们投入的代币量,比如一个投入押金为1W代币的验证者被选择的概率是一个投入1K代币验证者的10倍),给他权利产生下一个区块。如果在一定时间内,这个验证者没有产生一个区块,则选出第二个验证者代替产生新区块。与POW一样,POS以最长的链为准。

点点币的POS也有挖矿难度的概念,使用目标值来衡量挖矿难度,目标值与难度成反比,目标值越大难度越小。当前区块的目标值与前一个区块目标值,前两个区块的时间间隔有关。计算公式:当前区块目标值 = 前一个区块目标值 x (1007x10x60 + 2x前两个区块时间间隔) / (1009x10x60),由此可见两个区块目标间隔时间为10分钟。点点币因为也存在POW共识机制,所以区块被分成两种形式,POW区块及POS区块,也就是说存在混合出块的模式。点点币在交易中新加入了一种特殊的交易称利息币(coinstake)类似于比特币的创币交易(coinbase),coinstake的第一个输入被称为 核心(Kernel),并需要符合某一Hash目标协议,这样就产生了出块的随机性,也就是挖矿。

DCR采用GO语言编写,它与点点币有一定的不同点,它使用POS机制将社区治理融合到区块链技术中,通过其基于区块链的投票系统(即链上投票)发起对技术与非技术改变的民主投票。

DCR先通过矿机处理交易,建立起区块,通过不断的碰撞查找,找到满足一定难度的计算目标的数字后,向网络传播,POW的工作就完成了。接下来达成共识的机制就不同了,POW多是靠全网的节点验证区块,最终以最长的链为主链,挖出来的区块如果最终在主链上就是有效,因此区块是否有效来自几乎全网的共识。这样做的优点是安全,前提是没有大于51%的算力攻击,缺点也显而易见,那就是效率低下。而DCR引入了POS来投票决定刚挖出的区块是否有效,每个区块由一个根据区块头数据决定序列的伪随机算法(Hash256PRNG)选出5张选票进行投票,在至少3张选票通过的情况下区块才被承认有效,可以加到主链上。成功验证区块后得到的奖励为30枚新DCR币,它们将会被分成,60%归POW矿工,30%归POS选票持有人,剩下10%预留给参与软件开发的程序员。

DCR的持有者可以锁定一定数量的币来购买新鲜选票,选票有过期时间,如果过期了还未被选中去投票的话,会全部返还。购票之后需要等待被矿工挖掘,每个挖出的区块会包含最多20张新鲜选票,这些选票需要等到256个新区块产生后才能成熟(即拥有被选择行使投票权)。为了激励矿工把新鲜选票包含在挖出的区块中,会有一个额外的购票费,留给矿工作为奖励。成熟之后如果选票顺利被选中去投票,系统会返回购票的币并加上奖励。每个区块需要随机选5张成熟选票进行投票验证区块的有效性。票价每144个区块(大约12小时)调整一次,目的是将整个选票池控制在40960张。

POW+POS共识机制平衡了POW和POS的优缺点,不过也增加了些系统的维护难度。

结语

这次介绍了AuxPOW和POW+POS共识机制,目前POW,POS,DPOS,AuxPOW和POW+POS共识机制是比较常见的共识机制,并且它们都已经上线平稳运行过超过一年以上,属于比较稳定的。其它的还有很多共识机制也在运行,比如Fabric的PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法),NEO(小蚁)的dBFT(delegatedByzantine Fault Tolerance,授权拜占庭容错机制)等。这些可能会在以后的文章中再做介绍。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com