购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5
比特币挖矿

Alice的交易现已在比特币网络上传播。这笔交易直到通过“挖矿”的过程被包含在一个区块中,并且该区块在经过全节点的验证后,才会成为区块链的一部分。详细解释请参见第12章。

比特币的防伪系统是基于算力的。交易被打包成区块。这些区块有一块由一种特定的方式构造的非常小的信息头,构造需要大量的计算才能做到正确——但验证其正确性只需少量的计算。在比特币中,挖矿的过程有两个目的:

· 矿工们只能通过创建遵循比特币所有共识规则的区块来获得合法收入。因此,矿工只会将有效的交易纳入他们的区块以及构建的区块链上以得到激励。这允许用户可选择性做出基于信任的假设,即区块中的任何交易都是有效交易。

· 目前,通过挖矿在每个区块中产生新的比特币,这就像是央行印发新货币一样。每个区块产生的比特币数量是指定的,并且会随着时间的推移而递减,这一过程遵循着一个固定的发行计划。

挖矿在成本和回报之间达成一种精密的平衡。挖矿使用电力来解决一个数学问题。一个成功的矿工会通过新的比特币和交易手续费的方式来收集回报。但是矿工只有按照共识规则正确地验证了所有的交易之后才能收取回报。这个精妙的平衡在没有一个中央权威的情况下为比特币提供了安全保证。

挖矿的设计就像一个去中心化的彩票系统。每个矿工可以通过创建包含他们想要打包的新交易以及一些额外数据字段的候选区块来制作自己的彩票。矿工将其候选区块输入到一个特别设计的算法中,该算法将数据进行摘要计算(或称“哈希”,SHA256),产出的结果与输入数据截然不同。这个哈希函数对于相同的输入总是产生相同的输出——但输入数据的细微变化也会导致新的输出与之前截然不同。

如果哈希函数的输出与比特币协议所确定的模板相匹配,那么矿工就赢得了彩票,比特币网络将会接受带有其交易的区块作为一个有效的区块。如果输出与模板不匹配,那么矿工会对其候选区块数据做出小的改动,然后再试一次。截至本文撰写时,矿工需要尝试的侯选区块数大约为1680万亿亿(译者注1.68×10 23 )次才能找到一个中奖组合。这也是哈希函数需要运行的次数。

然而,一旦找到了一组成功的组合,任何人都可以通过单次运行哈希函数来验证区块的有效性。这意味着,一个有效的区块需要大量的工作才能创建,但只需要极少的工作就能验证。这个简单的验证过程能够大概率地证明工作已经完成,因此生成该证明所需的数据(在本例中为块)称为工作量证明(Proof of Work,PoW)。

交易被添加到新区块时,会优先考虑费率最高的交易和一些其他标准。每个矿工在从网络接收到前一个区块的信息后,立即开始打包计算新的交易候选区块,因为他们知道其他矿工已经赢得了本轮彩票。他们承认新区块并立即创建新候选区块,用交易填充它,并开始计算候选区块的PoW。每个矿工在其候选区块中包含了一笔特殊的交易,即支付给自己的比特币地址的挖矿奖励,以及候选区块中包含的所有交易的手续费总额。如果他们找到了一个使候选区块变为有效区块的解决方案,那么在他们成功生成的区块被加入全球区块链中且其中的奖励交易变得可用之后,他们就会收到这个奖励。参与矿池的矿工已经设置了他们的软件,以创建将奖励分配给矿池地址的候选区块。随后,矿池中的矿工会根据他们贡献的工作量比例分得奖励的一部分。

Alice的交易被网络广播,并加入未验证交易池。一旦由全节点验证通过,该交易便被包含在一个候选区块内。在Alice的钱包首次传输交易大约五分钟后,一个矿工找到了该区块的解决方案,并向网络宣布。其他矿工验证了获胜区块之后,他们开始了新一轮挖矿,以生成下一个区块。

包含Alice交易的获胜区块已成为区块链的一部分。该区块被视为该交易的一次确认。在包含Alice交易的区块通过网络传播之后,若要创建一个包含有别于Alice交易的替代区块(例如一个不支付给Bob的交易),其工作量等同于所有比特币矿工创建一个全新区块的工作量。当存在多个可选的替代区块时,比特币全节点会选择具有最高总工作量证明(PoW)的有效区块链,即最佳区块链。因此为了使整个网络接受一个替代区块,还需要基于该替代区块挖出一个额外的新区块。

这意味着矿工们有选择权。比如他们可以与Alice合作,将支付给Bob的交易顶包——也许Alice会向矿工支付她之前支付给Bob的一部分钱。这种不诚实的行为要求他们付出努力去创建两个新的区块。相反,行为诚实的矿工们只需创建一个新区块,即可获得该区块中所有交易的手续费以及区块奖励。通常情况下,非诚实地创建两个区块以获得少量额外收益远没有诚实地创建一个新区块来得有利可图,因此已确认的交易被故意更改的可能性并不大。对于Bob来说,这意味着他可以开始相信来自Alice的付款是可靠的。

你可以查看包含Alice交易的区块,请见 https://oreil.ly/7v_lH

大约在含有Alice交易的区块广播后19分钟,另一名矿工挖出了一个新区块。由于这个新区块是建立在含有Alice交易的区块之上的(Alice的交易确认增加到两次),因此现在要更改Alice的交易,就需要挖出两个替代区块,再加上一个建立在它们之上的新区块,总共需要挖出三个区块,Alice才能收回她发送给Bob的资金。每一个建立在含有Alice交易区块之上的区块,都算作一次额外的确认。随着区块的不断叠加,逆转交易变得越来越困难,这也使得Bob越来越有信心,Alice的付款是安全的。

在图2-7中,我们可以看到包含Alice交易的区块。在其下方,有数十万个区块相互连接构成了一个从区块0开始的区块链,区块0被称为创世区块。随着时间的推移,随着新区块“高度”的增加,整个链的计算难度也随之增长。按照惯例,任何获得超过六次确认的区块都被认为是很难被更改的,因为这需要巨大的计算量去重新计算六个区块(加上一个新区块)。我们将在第12章更详细地研究挖矿过程以及该过程如何建立起人们的信心。

图2-7:Alice的交易被包含在一个区块中 /CK8b3GlDMOi3S48ujo9oI+cUYel6aq02gn8X0s3KbF7dMYEexo0gUw4vkE9Uhb/

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开