深入理解比特币系列(5):比特币白皮书(第二部分)

继续白皮书的阅读,本段是白皮书的4-6部分,其中涉及到最重要的核心:工作量证明(4)及激励机制(6),并介绍了比特币网络系统是如何运行的(5)。

【工作量证明】为了在点对点的基础上构建一组分散化的时间戳服务器,仅仅像报纸或UseNet一样工作是不够的,我们还需要一个类似于Adam Back提出的哈Hashcash。在进行哈希运算时,工作量证明机制引入了对某一个特定值的扫描工作,比方说SHA-256,哈希值以一个或多个0开始。那么随着0的数目的上升,找到这个解所需要的工作量将呈指数增长,但是检验结果仅需要一次哈希运算。

我们在区块中补增一个随机数(Nonce),这个随机数要使得该给定区块的哈希值出现了所需的那么多个0。我们通过反复尝试来找到这个随机数,直到找到为止。这样我们就构建了一个工作量证明机制。只要该CPU 耗费的工作量能够满足该工作量证明机制,那么除非重新完成相当的工作量,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定体现为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将在后文证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。

另一个问题是,硬件的运算速度在高速增长,且节点参与网络的程度会有所起伏。为了解决这个问题,工作量证明的难度将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一预设的平均数。如果区块生成的速度过快,那么难度就会提高。

工作量证明(Proof-of-Work,简写为PoW)是比特币的最重要的核心内容之一,白皮书中的内容相对较短,我想额外做一些阐述,先来解释下哈希值与0的问题。

比特币系统采用了SHA-256算法,其原理是给定任意字符串x,通过SHA-256哈希运算,输出结果为256-bit的随机串y。

H(x)=  y

此过程不可逆,也就是知道一个256-bit的串y,无法逆推出H(x)中的x。

在计算区块的哈希值时,我们引入随机数nonce的意义在于通过计算H(x|nonce)来找到一个随机数nonce使得

H(x | nonce)<  t

由于SHA-256算法的不可逆,唯一找到nonce的方法就是枚举。t值不能非常大,否则很容易就能找到nonce,也不能很小,否则需要太长的时间。所以t值是动态调整的,由于t不能过大,所以它的开头部分一定是若干个0。

工作量证明机制的本质是依赖算力,随着越来越多的人参与进来,整体网络计算力提升,区块的产生速度将越来越快,以前需要5小时才能计算出nonce,现在可能5秒钟就解决了。因此,为了维持区块增长的速度相对恒定,t值需要作减小的调整以增加难度(这时,其二进制数将以更多的0开头),这样,网络便需要更多的时间开销来计算nonce。

【网络】运行该网络的步骤如下:
1)新的交易向全网进行广播;
2)每一个节点都将收到的交易信息纳入一个区块中;
3)每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;
4)当一个节点找到了一个工作量证明,它就向全网进行广播;
5)当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;
6)其他节点表示他们接受该区块,而表示接受的方法,则是工作在以该区块为末尾的链条上,通过引用该区块的哈希值来制造新的区块。
节点始终都将最长的链条视为正确的链条,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。当此情形,他们将在率先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。该僵局的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。

所谓“新的交易要广播”,实际上不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果一个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求。

【激励】我们约定如此:每个区块的第一笔交易进行特殊化处理,该交易产生由该区块创造者拥有的新的电子货币。这样就激励了所有节点支持该网络,并在没有中央集权机构发行货币的情况下,提供一种将电子货币分配到流通领域的方法。这种将一定数量新货币持续增添到货币系统中的方法,非常类似于耗费资源去挖掘金矿并将黄金注入到流通领域。此时,CPU的时间和电力就是消耗的资源。

另外一个激励的来源则是交易费(transaction fees)。如果某笔交易的输出值小于输入值,那么差额就是交易费,该交易费将被增加到该区块的激励中。只要既定数量的电子货币已经进入流通,那么激励机制就可以逐渐转换为完全依靠交易费,那么本货币系统就能够免于通货膨胀。激励系统也有助于鼓励节点保持诚实。如果有一个贪婪的攻击者能够调集比所有诚实节点加起来还要多的CPU计算力,那么他就面临一个选择:要么将其用于诚实工作产生新的电子货币,或者将其用于进行二次支付攻击。那么他就会发现,按照规则行事、诚实工作是更有利可图的。因为该等规则使得他能够拥有更多的电子货币,而不是破坏这个系统使得其自身财富的有效性受损。

激励机制是比特币的另一重要核心内容,创造性的将技术与商业利益结合在了一起。挖矿与交易费用是目前比特币系统的两种激励机制。比特币初期的挖矿报酬在每个区块50BTC,以今天的BTC价格计算,高达20万美金。现在经过两次激励衰减,每个区块的报酬是12.5BTC,折合人民币30多万元(5万美金)。比特币交易费用近来也呈现火箭式增长,2015年初平均交易费率仅4美分,今年初的费率已窜升至0.6美金,最新的8月数据显示,平均交易费率已暴涨至5美元。