翻译:子轩 校对:Neo MA
2018年8月,美国国家标准与技术研究院(NIST)发布了"Blockchain Technology Overview"一文,较为全面、客观地梳理了区块链技术。文章颇具价值,μNEST将其译成中文,以飨读者,并用十期进行系列连载。本期为系列连载的第五期,为大家详细介绍区块链的两种共识算法:PoW算法和PoS算法。
4共识模型
区块链技术的一个核心要点是确定由谁来发布下一个区块。这可以通过选用多种共识模型中的一种来解决。在公链网络中,通常是多个节点同时竞争从而决定由谁来发布下一区块。这么做通常是为了获得加密货币或交易费用。他们通常是非互信的用户,仅知道彼此的公开地址。每个出块节点的行为都受到经济回报驱使,而不是为了其他节点或整个网络的正常运转。
试想,为什么用户愿意扩散其他用户试图发布的区块呢?如何解决多个节点几乎同时发布区块时的冲突呢?区块链技术利用共识模型来确保非互信用户间的合作。
当用户加入区块链网络时,便默许了系统的初始状态。而这个初始状态是被唯一的预配置块记录的,它叫做创世块。每个区块链网络都有其创始区块,每个区块都需基于共识模型的认可接续添加在创始区块之后。无论何种共识模型,每个区块都必须有效且可以被所有区块链网络中的每个用户独立验证。在结合了初始状态和自那以后每个区块都可验证的前提下,用户可以对区块链当下的运行状态表示认可。需要注意的是,当全节点面对两条均有效的链,那么大多数区块链的默认机制是认可网络中“较长”的一条并将其作为正确的一个并将后续的区块附在它之后。这是因为它的链上保存了绝大多数的工作成果。这种情况在一些共识模型中经常发生,我们会在后文中详细阐述。
以下是共识模型的一些特性:
(1)系统的初始状态已达成共识(例如,创世块);
(2)用户认可了共识模型,即决定哪些区块可以上链;
(3)每个区块以写入前一区块块头哈希值的方式与之相连(创世块除外,它没有前一区块,所以这个区域通常写为全0);
(4)用户可以独立验证每个区块。
实际上,是软件在处理这一切,因此用户并不需要在意这些细节。
区块链技术的一个核心特征是不需要第三方信任主体来提供系统状态,系统中的每个用户均可以验证系统的完整性。在一个新块上链前,所有节点必须达成共识,但也允许存在短暂的分歧。对公链网络而言,即使存在恶意用户试图破坏甚至控制整个区块链的可能,共识模型也要正常工作。而许可链网络中如果有用户作恶,就会使用法定补偿措施。
在一些区块链网络中,例如许可链,出块节点间存在一定程度的信任。这种情况下,就不需要资源密集型(计算时间、投资等)的共识模型来决定谁来添加下个上链的区块。一般地,随着信任等级的提升,用来维持信任的资源需求也随之降低。对一些许可链而言,共识不仅意味着确认区块的有效性和真实性,还包含了对全系统交易产生到上链的全过程查验。
接下来,我们将讨论几种共识模型和解决冲突的几种常见办法。
4.1工作量证明(PoW)共识模型
在PoW模型中,最先解答出复杂计算难题的用户将发布下一区块。对难题的解答就是用户开展工作的“证明”。难题的设计思路是难解答却易验证,这保证了其他全节点可以对预发布的区块进行验证,而没有解出难题的区块就会被拒绝添加。
通常难题的解答要求块头的哈希值要少于一个目标值(译者注:这其实是BTC的“难题”)。通常出块节点可以通过对块头进行细微的改动(如改变nonce)以找到满足要求的哈希摘要。每次尝试中出块节点都需要计算整个块头的哈希值。多次对块头的哈希处理是资源密集型的工作。目标值的难度可以做相应地调整以控制新块产生的频率。
例如,比特币中每发布2016个区块就会进行一次问题难度的调整,保证出块的速度维持在每10分钟一个。这个难度调整是通过增或减少哈希值的前置0来实现的。问题的难度随前置0数量的增加而增加。任何解答都必须小于难度级别,这就意味着可能的解答在减少。因此,对问题计算难度的调整是比特币网络保证安全的核心机制。随着算力的增加,虽然参与发布节点的数量也在增加,但总体上问题的难度也是增加的。
对难度目标的调整是为了保证没有人可以控制整个区块链的算力,但结果是难题的解答需要消耗大量的资源。基于PoW共识模型的区块链网络通常需要耗费大量的资源,因此有些节点选择转移到电力更廉价的地区。
在PoW中难题是各自独立的,因此解答某个难题时投入的工作量并不影响解答出其他难题的可能性。这意味着当用户收到一个完整有效的区块时,他们会放弃手上当前块的计算工作而选择构建下个新区块,因为他们知道其他出块节点也会做同样的选择。
这有个用SHA-256算法的例子,一个计算机必须发现一个满足如下条件的哈希值:
SHA256(“blockchain” + nonce) =以“00000”为开头的哈希值
在这个例子中,字符串blockchain后面跟了一个nonce然后被计算哈希值。Nonce只能取数字。这是个比较容易算出来的“难题”,下面是一些可能的结果:
SHA256(“blockchain0”) =
0x BD4824D8EE63FC82392A6441444166D22ED84EAA6DAB11D4923075975ACAB938
(不对)
SHA256(“blockchain1”) =
0x DB0B9C1CB5E9C680DFFF7482F1A8EFAD0E786F41B6B89A758FB26D9E223E0A10
(不对)
…
SHA256(“blockchain10730895”) =
0x 000000CA1415E0BEC568F6F605FCC83D18CAC7A4E6C219A957C10C6879D67587
(搞定)
为解决这个难题,计算机猜了10730896次(这在一个相对比较旧的电脑上用了54秒,nonce值从0开始,每次加1)。
在这个例子中,每个前置0都会增加难度。比如,仅仅增加一个前置0(“0000000”),同样的硬件需要猜934224175次才能解出答案(总耗时1小时,18分钟,12秒):
SHA256(“blockchain934224174”) =
0x 0000000E2AE7E4240DF80692B7E586EA7A977EACBD031819D0E603257EDB3A81
目前并没有解答难题的捷径。出块节点必须消耗大量的算力、时间和资源去找到满足目标的随机数值。为了获得不同形式的报酬(通常形式是区块链网络提供加密货币),出块节点努力计算出难题的答案。能够获得奖励的预期使得区块链网络能够正常运转并不断扩展,而这被称为奖励系统或者激励模型。
一旦某个出块节点投入了工作量,便会向网络中的全节点发送带有一个有效随机数(nonce)的区块。作为接收方的全节点验证新块是否完成了难题的解答,然后将新块添加到自己本地区块链账本上,并向邻居节点传播该区块。这样新块会快速在网络中的所有参与节点间扩散。对随机数的验证是很简单的,因为只需要检查1次哈希结果是否解决了难题即可。
对很多使用PoW共识模型的区块链网络而言,节点可以以“矿池”或“集合体”的方式协同工作来解决难题并分享报酬,这很大程度上是因为工作量可以被分摊到两个或多个节点中。比如把上文的例子分成4份,每一个节点用平分1/4范围的随机数(nonce)来计算哈希值:
节点1:计算从0000000000 到 0536870911的nonce
节点2:计算从0536870912 到 1073741823 的nonce
节点3:计算从1073741824 到 1610612735 的nonce
节点4:计算从1610612736 到 2147483647 的nonce
下面是第一个找到合适nonce的解答结果:
SHA256(“blockchain1700876653”) =
0x 00000003BA55D20C9CBD1B6FB34DD81C3553360ED918D07ACF16DC9E75D7C7F1
这是个全新的随机数,但仍旧是个合适的答案。计算机猜了90263918次(耗时10分钟,14秒)。可以看出工作量被分配给矿池的节点越多,结果越理想,获得工作量证明模型的回报也越优异。
设置计算难题有助于抵御“女巫攻击”(Sybil Attack)——一种计算机安全攻击(不仅限于区块链),通过创造多个节点(新建多个身份标识)从而影响或控制网络。PoW模型用算力的数量(付费的硬件)结合彩票系统(控制大多数的硬件增加了网络影响力,但不绝对),来对抗网络中免费创建的身份信息。
4.2权益证明(PoS)共识模型
PoS模型的构想是,用户在系统中投资的权益越多,他就越希望系统能成功,越没有意愿去破坏它。权益通常是区块链用户投资在系统中的加密货币(有各种各样的方式,比如,用特定的交易锁定在里面,或者发送交易到一个特定地址,又或者放进一个特定的钱包软件中)。一旦成为权益加密货币便无法使用。使用PoS的区块链网络通过用户拥有的权益总量决定由谁发布新块。因此,用户发布新块的可能性取决于,自身拥有的权益在全网络中权益化加密货币占的比率。
在PoS中,不需要进行PoW那样资源密集型的计算(耗费时间、电力和处理能力)。PoS消耗更少的资源,一些区块链甚至已经决定放弃发布区块的奖励。这些系统适用于所有加密货币已经在用户间分配完成的情况,而非那些新加密货币正在以稳定速率持续生成的环境。这些系统中,发布区块的报酬通常是用户交易时的交易费用。
区块链网络使用PoS的方式多种多样,这里我们列举四种:随机选择权益用户;多轮投票;币龄系统;代理系统。无论哪种方法中,拥有更多权益的用户总是有更大概率发布新块。
(1)当区块发布者是随机选择的结果时,系统会根据用户拥有的权益与全网络中权益化加密货币的比率进行选择。如果一个用户拥有全网42%的权益,那他将会有42%的概率被选中(发布新块)。而那些只拥有1%权益的,则只有1%被选中发布新块的概率。
(2)当区块的发布者是由多轮投票系统(有时候也叫拜占庭容错权益证明系统)选出的,情况就更复杂一些了。区块链会选择几个权益化用户发布提名区块,所有权益化用户均有表决权,可以为其中一个提名区块投票。在一个新块确定前可能会经过多轮表决。这个方法可以让所有权益化用户都能参与新块发布的选择过程。
(3)当区块的发布者是由币龄系统决定时,权益化的加密货币就具有了年龄属性。一段时间后(例如30天)权益化的加密货币拥有者就获得发布新块的资格。随后权益化加密货币的币零被清零,在下个规定时间到来前不可以被重复使用。虽然该系统意味着拥有越多权益的用户可以发布更多的区块,但由于加密货币上附有创造区块的冷却时间而避免了支配整个系统的可能性。旧币和大型团体通常有更大概率被选中发布新块。为了防止利益相关者囤积有年限的加密货币,系统内普遍会内置一个获胜概率的最大上限。
(4)当区块的发布者是由代理系统决定时,用户投票表决选出出块节点来代表他们创建新块。用户表决权的大小与所拥有的权益数量相关,拥有越多的权益也意味着表决时更强的话语权。得到最多票数的节点将成为出块节点,校验并创建新块。同时,用户也可以投票反对已有的出块节点,将其从候选的出块节点中排除。票选出块节点是持续性的,这保证了被选择的节点保持一定的竞争力。失去出块资格的威胁和获得报酬的奖励同时存在,这激励了出块节点不要作恶。另外,用户也要选出代理人参与区块链的治理。代理人提出优化及改进意见后再由网络中的用户进行投票表决。
值得注意的是,有些PoS算法中会出现“无利害关系”的问题。如果在某些时刻多条链同时存在(由临时的账本冲突所导致),权益化的用户可以在多条链上同时行动以增加获得报酬的几率。长期下去而不加干预会导致区块链的分支逐渐发展很难再统一为一条链。在PoS系统中,“富人”更有可能通过数字资产的股权投资获取更多收益。然而,试图获得系统内大部分数字资产以控制系统的行为往往代价高昂。
联系我们
Homepage:iotee.io
Facebook:NESTchain
Twitter:@miuNEST
Telegram:@miuNEST
Reddit:r/miuNEST
Medium:r/miuNEST
Steemit:μNEST
微信公众号二维码