1703865090
1703865091
这是怎么做到的?比特币里有两种不同的奖励机制。其中一个就是区块奖励。根据比特币的规则,创建区块的节点可以在这个区块中加入一笔特别的交易。这笔交易就是一个造币的交易,类似于财奴币里面的造币,节点可以指定这笔交易的接收地址。当然,节点通常都会选择一个属于自己的地址。你可以把这视为对节点在共识链上进行创建区块服务的报酬。
1703865092
1703865093
在写本书时,区块奖励金额定在25个比特币。但每生成210 000个区块,金额就会减半。根据区块生成的速度,我们可以看到,这个金额大概每4年减半一次。我们现在处在第二个4年。比特币存在的最初4年,区块奖励金额为50个比特币,现在是25个比特币。然后会不断减半。这将造成一些有意思的结果,我们不久会看到。
1703865094
1703865095
你可能会问为什么区块奖励能做到鼓励诚实行为。给予我们目前讨论的,从表面上看,这个节点无论提议一个正当有效的区块还是恶意伪造,都会受到奖励。但其实并非如此!想一想这个节点是如何收取奖励的?奖励只有当区块最终被纳入长期共识链才会实现。因为造币交易和其他每一笔交易一样,只有当它最终被纳入共识链,才会被其他节点接受。这就是比特币奖励制度的一个关键概念。这是一个十分微妙却十分强大的设计。这个设计激励节点想方设法让其他节点延展它们自己的区块。因此如果网络中大部分节点遵循去延展最长支链的规则,那这样的设计将激励所有节点去遵循这个规则。这就是比特币的第一个奖励机制。
1703865096
1703865097
我们前面提到每产生210 000个区块(大约4年),区块奖励将被减半。在图2.4中,曲线的斜率将持续减半。这是一个等比数列,你可能知道数列的总和是有上限的。最终一共是21 000 000个比特币。
1703865098
1703865099
注意,这是新比特币被允许创造出来的唯一途径,没有任何其他新增币的机制。所以这是为什么比特币最终的数量是2 100万(至少目前的规则规定是这样)。按照现在奖励发放的速度,到了2140年比特币区块奖励就发完了。这是否意味着这个系统到了2140年就无法继续运行,并且因为不再有奖励诚实行为的激励而变得不安全呢?不是这样的。因为区块奖励只是比特币两种奖励机制之一。
1703865100
1703865101
1703865102
1703865103
1703865104
图2.4 比特币的总供应量
1703865105
1703865106
注:区块奖励每4年减半一次,限制了比特币的供应上限为2 100万个。这是一个简化的模型,实际中的曲线会有轻微的差异,但都有2 100万的上限限制。
1703865107
1703865108
交易费
1703865109
1703865110
比特币的第二个奖励机制称为交易费。任何交易的制造者都可以选择让交易输出值比输入值小。第一个创建区块把交易放进区块链的人可以取得这个差额,作为交易费。如果你是一个节点,正在创建一个包含200笔交易的区块,那么这200笔交易的交易费将会被付到你放在区块内的那个地址。这些交易费现在是完全自愿的,但是我们可以预见,随着区块奖励逐渐发完,交易费会变得越来越重要,几乎是必需的,因为用户需要通过交易费来保障合理的服务质量。从某种程度上来说,这已经开始发生。但目前还不清楚这个系统会如何演变——这取决于还并不完善的博弈论的研究与发展。这也是比特币一个很有趣的研究领域。
1703865111
1703865112
我们在描述共识机制时还有一些问题没有解答。第一个主要问题是我们要你相信这样的假设:我们能随机选取一个节点。第二个是因奖励那些节点参与而产生的新问题:如果大家都想来分一杯羹成为一个节点来获得这些奖励的话,整个系统会变得不稳定。第三个是第二个问题的复杂版,就是可能会有攻击者创建大量的女巫节点来尝试颠覆整个共识过程。
1703865113
1703865114
挖矿与工作量证明
1703865115
1703865116
事实证明,这些问题都是相互联系的,所有这些问题都有相同的解决办法——工作量证明(proof of work)。工作量证明的核心理念是,我们把随机选取节点改为根据节点占有某种资源的比例来选取节点,我们希望这种资源是没有人可以垄断的。比如说,如果这个资源是计算能力,那我们称之为工作量证明系统。或者这个资源可以是某种币的拥有量,我们称之为权益证明(proof of stake)。虽然比特币没有使用,但权益证明也是另一种合格的模式,并被其他加密货币所使用。我们将在第8章中更多地讨论权益证明和其他工作量证明的变种。
1703865117
1703865118
先回到工作量证明。我们试着更好地理解根据计算能力来选择节点到底是什么意思。换一个角度理解,我们是允许节点用它们的计算能力来互相竞争,导致的结果是计算能力的比例决定了节点被自动选中的概率。工作量证明还有一种理解方式,即我们把制造新身份的难度适度提高了。这就好像是对制造新身份,继而对女巫攻击收税一样。这听起来好像有点模糊,我们接下来看下比特币使用时工作量证明体系的细节,事情就变得清楚多了。
1703865119
1703865120
比特币是用哈希函数解谜来证明工作量的。任何一个提议并创建区块的节点想要制造下一块,这个节点必须要找到一个数,或者我们把它称为临时随机数(见第1章1.1节)。当你把这个临时随机数、前序块的哈希值还有要填进这个区块的交易列表连接起来,组成一整串字符,然后用哈希函数计算这一整串字符的输出值,这个输出值正好要落在一个相对于这个哈希函数所有可能的输出中很小的目标区间内。用公式来表示的话,就是临时随机数要满足下面的不等式:
1703865121
1703865122
H(nonce‖prev_hash‖tx‖tx‖…‖tx)
1703865123
1703865124
就像我们前面看到的,通常一个区块会包含这个节点提议的一系列交易。而且,这个区块还会包含一个指向前序区块的哈希指针(我们这里说的哈希指针是一个宽泛的概念。这个指针只是文本中的字符串,它并不需要告诉我们去哪里找到这个区块。我们可以通过在网上询问其他的节点找到区块。重要的是,这个哈希值既作为我们在网络上请求其他节点寻找区块的ID,又能够让获取这个区块后验证它)。除此之外,我们现在还要求区块包含一个临时随机数。这个想法是为了适度提高发现符合要求的临时随机数的难度,即把包含临时随机数在内的整个区块的哈希值组合到一起,输出结果要是一种特定的形式。如果哈希函数符合我们在第1章中所描述的谜题友好特性,那唯一解出哈希谜题的办法就是去试足够多的临时随机数,直到成功为止。具体来说,如果这个目标区域是所有可能的输出的1%,那你大概就要试100次才能成功。事实上,这个目标区域远比输出范围的1%小得多得多,我们后面就能看到。[1]
1703865125
1703865126
用这种哈希函数解谜以及工作量证明的办法,我们可以完全舍弃采取那种随机选取节点的办法。这些节点在竞争哈希函数解谜的过程中一直都是互相独立的。有时一个节点鸿运当头,正好发现一个临时随机数可以满足要求。这个幸运的节点就可以提议创建下一个区块了。这就是比特币系统实现完全去中心化的方式,没有任何人能决定谁可以提交下一区块。
1703865127
1703865128
难于计算
1703865129
1703865130
哈希谜题有三个重要的特性。第一个特性是要有一定的难度。我们前面说适度的难度,其实你马上会看到难度实际上是随时间而改变的。在2014年年底,产生一个区块平均要做1020次哈希运算。换言之,目标区域仅仅是整个输出范围的1/1020。这是超大的计算量——举例来说,超过了商业化笔记本电脑可能的计算范畴。因此,只有一些节点还在不厌其烦地竞争造块。这个不停尝试解哈希谜题的过程,就是我们听说的比特币挖矿,参与挖矿的节点被称为矿工。尽管技术上每个人都可以成为矿工,但由于挖矿的高成本导致了挖矿生态系统要消耗大量能源。
1703865131
1703865132
可参数化成本
1703865133
1703865134
第二个特性是,我们希望成本是可以通过参数来变化的,而不是一个固定值。在比特币的点对点网络里,是这样来达到这一特性的:每产生2 016个区块之后,所有的节点都会自动重新计算目标区域相对于整个输出范围的比例大小,使得后续的区块产生的时间间隔约为10分钟。两个区块之间的平均间隔是10分钟,2 016个区块就需要两个星期。所以大约每两个星期,目标区域的大小会被重新计算一次。
1703865135
1703865136
我们想一下这意味着什么。如果你是个矿工,你花了一定的费用投资了一些硬件来做比特币挖矿。但是整个挖矿体系在不断增加,越来越多的矿工加入这个行业,或是他们部署了运算越来越快的硬件设备,那两个星期的时间段里,被找到的区块可能比预期的要多一点。然后,那些节点就会自动调整目标区域,你要找到一个块所要做的工作量就随之增加。所以如果你投了一笔固定资金在硬件上,你找到下一区块的速率实际上取决于其他矿工在做什么。有一个公式可以很好地描述这一点:任何一个矿工,比如爱丽丝,找到下一区块的概率,就相当于她控制的计算力占整个全球计算力的比例。这意味着,如果爱丽丝的挖矿设备的计算能力占全部计算能力的0.1%,那大概每产生1 000个区块,她就可以找到一个区块。
1703865137
1703865138
这样重新调整的目的是什么?我们为什么想要维持10分钟间隔不变?原因很简单。如果区块产生的间隔太小,就会造成很多低效率,我们还会失去许多优化上的好处,比如在一个区块内放入大量的交易。10分钟并没有神奇之处,如果把10分钟下调到5分钟大概也可以。关于其他加密货币的理想区块间隔应该是多少,已经有很多讨论。除去关于理想间隔的不同意见,大家都认为应该是个固定的值。它不允许被无限降低。这就是为什么我们有自动重新计算目标区域的特征。
1703865139
[
上一页 ]
[ :1.70386509e+09 ]
[
下一页 ]