在区块链系统框架中,共识层提供了全网对交易和区块的共识,是接在区块链中产生信任的方法和机制。
目前常用的共识机制有三种: Proof of Work工作量证明,简称PoW;Proof of Staked权益证明,简称Pos; Delegated Proof of Stake授权股权证明,简称DPoS。其中,工作量证明PoW是比特币所用的共识机制,也是目前使用最广泛和成熟的共识机制,权益证明PoS和授权股权证明DPoS这两种机制是针对工作量证明机制不足之处进行优化和完善而产生的,其应用范围目前也集中在后期产生的一些数字货币,等等;下面我们介绍第二种机制POS。
权益证明机制,是针对工作量证明机制存在的不足而设计出来的一种改进型共识机制,其英文全称Proof of Stake,简称POS。与工作量证明机制要求节点不断进行哈希计算来验证交易有效性的机制不同,权益证明机制的原理是:要求用户证明自己拥有一定数量的数字货币的所有权,即“权益”。
2012年8月个化名 Sunny King的极客推出了 Peercoin( PPC采用工作量证明机制发行新币,采用权益证明机制维护网络安全。这是首次将权益证明机制引入到加密数字货币领域。经过近两年的发展,这种机制得到了市场的广泛认同,后来采用PoS机制的还有 BitShares、Shadow cash、Nxt、 Black coin等数字货币,以太坊( Ethereum)也计划通过硬分叉( hard fork)来从PoW转换到PoS机制上来。
PoS这种机制与PoW机制的最大不同在于,只有持有数字货币的人才能进行挖矿,而且不需要大量的算力就可以挖到货币,避免了比特币网络中出现的“算力集中”趋势,回归到区块链“去中心化”的本质要求。
工作量证明机制产生区块时依赖于算力,致使每一个比特币的创建至少需要240度电(2014年数据),相当于16加仑的汽油。权益证明机制产生区块时不采用算力作为资源,而将对数字货币的拥有权视作稀缺资源来产生共识,创建区块的节点必须提供证明,让全网认同它在创建这个区块之前拥有一定数量的数字货币。
首先,PoS机制在创建区块时,要求自己先拥有数字货币(如比特币或PPC),即先拥有一定数量的权益( Stake)。有意思的是,对于整个数字货币网络来说,创始区块拥有的数字货币是用比特币的PoW机制“挖矿”出来的,但从创始货币往下实施的是权益证明机制,创建区块的同时也创建出更多的数字货币。因此在PoS机制下,创建区块的过程不叫“挖矿”而叫“铸币”。
PoS机制的主要特点是引人了“币龄”概念。币龄的概念至少在2010年就为中本聪所知,并用于比特币中帮助区分交易的优先级,但在比特币的安全模型中不担负关键作用。币龄定义为交易的货币数量乘以该货币在钱包中储存的时间,例如,假设Bob从Ace处收到10个币并持有90天,我们就说BQb已经积累了10×90=900天”的币龄另外,当Bob把他从 Alice处收到的10个币花掉之后,系统认定Bob将这10个币上积累的“币龄”已经消费了,在Bob的钱包中这10个币的币龄归零,相应地,他创建一个新区块的能力也就归零了。为加快币龄的计算,PoS机制在每项交易中引入了一个时间戳。区块的时间戳以及与协议相关的交易时间戳促进了币龄的计算。
新型区块中的PoS是一种特殊的交易,称为币权交易( coinstake,与比特币的特定交易命名为币基 coinbase相对应)。在币权交易中,区块所有者进行支付并消耗币龄,同时得到产生一个区块和PoS铸币的权限。
币权交易的第一个输入称为核心( Kernel)输入,需要符合特定的哈希目标协议,因此使产生PoS区块的过程成为一个随机过程,与PoW区块相似。但与PoW区块不同的是,币权交易的哈希操作是在一个有限的搜索空间内执行(更具体地说,是每秒在每个未支付的钱包进行一次哈希),而不是像PoW那样一个无限的搜索空间内进行,因此不需要消耗大量的能源。
权益核心必须匹配的哈希目标是在核心中所消的每单元币龄(与之相对的是比特币的PoW目标是符合一个给定的目标哈希值)。因此在核心中消耗越多的币龄,就更容易符合哈希目标协议,例如,假如Bob有一个钱包,其中累积了100币年,希望两天内生成一个核心,那么 Alice可以预期她的200币年的钱包在一天内产生一个核心。另外,PoS的哈希目标是连续调整的,不像比特币有两周的调整间隔,可以避免网络产出率的突然波动。
在比特币PoW铸币机制之外,PoS区块引入了一种新的铸币机制。PoS区块基于币权交易中消耗的币龄来铸造货币,选择“每消耗1币年产生1分钱”的铸币速率,导致未来的通货膨胀率很低。PoS保留了PoW作为铸币流程的初始部分以促进初始铸币,但是作用类似于股票交易的上市首发,之后就不需要PoW机制进行铸币了。
PoS采用区块消耗的币龄来决定哪一个竞争的区块链赢得主链地位区块中的每一笔交易的币龄合计为区块的积分,具有最大的总消耗币龄的区块链被选择为主链。这与比特币的主链协议中使用PoW相反,其使用区块链的总工作量来决定主链。这种设计减缓了对比特币51%攻击的担心,在比特币网络中,只有当好节点”至少控制51%的网络挖矿能力时系统才认为是安全的。在PoS机制下,控制51%权益的成本远远高于控制51%挖矿能力的成本,因此攻击方的成本会大幅提高。此外攻击方的币龄在攻击期间大量消耗,可使得攻击者继续阻止交易进入主链的行为变得更加困难。
使用消耗的总币龄决定主链,这种机制的一个不利因素是它降低了攻击全部的历史区块链的成本;另一个担心是双花攻击的成本也下降了,因为攻击者只需积累一定数量的币龄就可强制重组区块链尽管比特币对交易历史有相当强的保护作用,但中本聪还是在2010年引入了检查点机制,通过阻止对检查点之前的区块链的任何改动,来强化区块链历史交易的保护。借鉴比特币的做法,为保障PoS的商业实践,在PoS中也引入一个检查点的附加表格,在较短间隔内(如一天多次)进行中心广播,用于冻结区块链和完结交易。这种新型检查点的广播机制类似于比特币的报警系统。另一个技术原因也导致了PoS采用中心化广播的检查点。为了抵御“拒绝服务攻击”,在PoS区块可被每个节点的本地数据库(区块树)接受之前,PoS必须验证币权交易的核心。PoS采用了中心化检查点,其解决方案是:修改币龄算法为设定一个最小币龄,如一个月,低于最小币龄的都计为0,然后中心化检查点确保所有节点都认同过去的全部交易都比一个月长,因此,验证币权核心连接是否能成为核心时要求非零的币龄,也就是说必须使用比一个月时间更早的产出。
每一个区块必须由所有者签名,防止攻击者复制和使用同一PoS。权益复制协议用来抵御攻击者用一个PoS产生多个区块来实施的“拒绝服务”攻击,每一个节点收集它所看到的全部币权交易具备的(核心,时间戳)数据对,如果节点收到的一个区块含有与另一个之前收到的区块相同的数据对,则忽略这一复制权益的区块,并接收其他区块。在数据对中“时间戳”是指本区块的创建时间距离创始区块的秒数。
在比特币中,当PoW铸币率接近为0时,构造PoW区块几乎没有奖励,在这种长期情况下网络的能源消耗降到非常低的水平,因为不感兴趣的矿工停止了PoW区块的挖矿。这时比特币网络将面临危机,除非提升交易费用到足够高以持续能源消耗。而在PoS机制下,即使网络能源消耗为0,PoS仍然保护着网络。如果用于PoW机制的能源消耗可以接近于0,这种加密货币就被称为“长期能效”。
PoS机制修改了PoW的铸币速率决定机制,不是由区块高度(即时间)决定的,而是由难度决定的。当挖矿难度上升时,铸币速率降低,相比于比特币的阶梯函数走势,PoS的曲线相当平稳,避免了对市场的人为冲击。
在比特币及PoW机制下,交易费的存在导致矿工之间排斥合作。为了解决这个问题,在PoS机制下,对区块所有者不再支付交易费用,而且如果不确认其他矿工的区块就没有交易费,只在协议层级实施交易费。这种方式有利于抵消PoS铸币的通货膨胀作用。
PoS的铸币是基于账户所拥有的有效数字货币权益,必然会导致“富者越富,穷者越穷”的马太效应,因为“富有”的人,即持有数字货币权益越多的人,他创建新区块的可能性更高,“铸造”出新的数字货币也越容易,就会拥有越多的数字货币,然后这一结果再反过来推进“铸币”的过程……而“穷人”由于初始权益少,币龄不足,创建区块、获得新币的可能性大为降低,反过来又进一步影响下一次的“铸币”成功率,最终的结果就是“富者越富,穷者越穷”。
当然,在比特币中也存在这样的现象,比如越富有的人就有越多的资金,可以购置更多的高性能矿机甚至建立矿池,拥有更强大的算力,也就是说可以挖到更多的比特币,而穷人由于缺乏资金,在极端情况下只能采用CPU或GPU挖矿,在当前网络算力下可能根本挖不到矿、得不到比特币,这不就是另一种形式的“富者越富,穷者越穷”吗?
PoS机制为了解决这个问题,一方面设计了一种“随机抽签”机制系统中建立了一套透明的算法机制,根据每一个活跃账户的权益数量(这些权益数量对于全网节点来说是公开的、可以查询的),依据算法,其他节点可以预测到哪一个账户将获得产生下一个区块的权限。当这个账户通过哈希计算撞针获得了创建下一个区块的权限后,它将收集全网中所有未确认的交易,打包到区块中,并填写各种参数,然后将区块向全网广播等待其他节点确认后链入主链,完成了区块链的延续。同时,系统中还规定:当持有数字货币达到90天时其产生下一个区块的概率达到最高,以后即使再增加持有时间,也不能增加产生下一个区块的概率,这一规定避免出现通过增加持有权益时间或数量来垄断区块链的情形。


