1703866203
区块链技术驱动金融:数字货币与智能合约技术 第5章 比特币挖矿
1703866204
1703866205
1703866206
1703866207
1703866208
这一章节我们将着重讨论比特币挖矿(bitcoin mining)。前面我们已经讨论了比特币是如何依赖这些矿工们而运行的——他们查证交易记录,制造和储存所有的区块,并对被写入区块链的区块达成共识。我们还知道矿工们会从中得到一些奖励,但还是有些悬而未决的问题:这些矿工都是谁?他们是如何进入这个行业的?他们是怎么运作的?他们的商业模式是什么?他们对环境造成什么影响?我们将在这一章节回答这些问题。
1703866209
1703866210
1703866211
1703866212
1703866214
区块链技术驱动金融:数字货币与智能合约技术 5.1 比特币矿工的任务
1703866215
1703866216
你若是想加入比特币挖矿行列,我们不会极力劝阻你,但会提醒你比特币挖矿潮很像当年的淘金热。历史上的淘金热充斥着各种年轻的淘金者下海淘金发财的故事,并且不可避免地,许多人最终失去了一切。在这些确实经历了千辛万苦的人们当中,也只有少数人变得富有。我们将在本章中了解到,和传统淘金以及其他快速致富途径一样,比特币挖矿也面临着类似的挑战和风险。我们首先要看一下技术细节。要成为比特币矿工,你必须加入比特币网络并与其他节点相联。建立链接之后,还有六个任务要完成:
1703866217
1703866218
1.监听交易广播。监听网络上的交易广播,然后验证它们的签名是正当有效的,交易输出没有被重复支付。
1703866219
1703866220
2.维护区块链网络和监听新的区块。必须先维护区块链。为了做到这一点,一开始你可以要求其他节点把区块链上的历史记录(在你加入区块链网络之前的)同步过来。然后,监听那些被广播到网络上的新的区块。你的任务是验证你收到的每个区块,这里的验证是指保证区块里的每笔交易都是有效的,而且这个区块包含了一个有效的随机数。我们会在本章后面谈到验证随机数的技术细节。
1703866221
1703866222
3.组装一个备选区块。一旦拥有最新的全部区块链数据备份,你就可以开始制造你自己的区块了。要做到这一点,你要把所监听到的交易进行组合并放进一个新的区块,然后把该新区块排在整条链中最新的区块的后面。你必须保证你建立的新区块里的每笔交易都是正当有效的。
1703866223
1703866224
4.找到一个让你的区块有效的随机数。这一步的工作量最大,也是矿工工作中最难的一个环节。我们后面会谈到细节。
1703866225
1703866226
5.希望你的区块被全网接受。即使你找到了一个区块,也不能保证该区块会成为共识链(concensus chain)的一部分。这需要有点运气,希望其他的矿工接受你的区块,然后从该区块开始继续接龙下去,而不是从你的竞争对手发现的区块开始。[1]
1703866227
1703866228
6.利润。如果所有其他矿工接受了你的区块,那你就能获取利润。在2015年,一个区块的奖励是25个比特币,大约在10 000美元左右。此外,如果在该区块里的任何交易都有交易费,所有交易费也会为矿工所有。到目前为止,交易费作为额外收入,相对来说还比较低,大概是一个区块默认奖励的1%。
1703866229
1703866230
我们可以把矿工的任务分成两类:第一类任务是验证交易和区块,这是比特币网络赖以生存和运转的基础。这些任务也是比特币协议需要矿工的首要原因。第二类任务是和其他矿工竞争,争取可以找到区块并因此获益。这些任务并不是比特币网络存在所必需的,而是为了鼓励矿工去完成第一类任务而设置的。当然,这两类任务都是使比特币成为一个数字货币的必要条件,因为矿工必须获得奖励才会去完成这些重要的任务。
1703866231
1703866232
寻找有效区块
1703866233
1703866234
现在回到如何找到一个使区块有效的随机数的问题上。在第3章中我们讨论过,区块链主要有两层基于哈希函数的结构。第一层在是区块链上,每个区块的头部都有一个指针指向其前一个区块,第二层是在每一个区块里,包括所有交易的梅克尔树。
1703866235
1703866236
作为矿工,首先需要从你的交易池中选出一系列有效的交易并且编译成梅克尔树。当然,只要不超过每个区块随机数的交易上限,你可以选择编译的交易数量。然后,组装出一个新的区块,让它的头部指向区块链上的前一个区块。新区块的头部,有一个32位的随机数区域。你需要尝试不同的临时随机数,直到该随机数能使整个区块的哈希值小于目标值。这个目标值一般体现为以零开始的特定位数的数值。作为一名矿工,你可能使随机数从0开始,每次增加数值1,直到该随机数能使区块有效为止,如图5.1所示。
1703866237
1703866238
1703866239
1703866240
1703866241
图5.1 寻找有效区块
1703866242
1703866243
注:在这个例子中,矿工尝试了一串都是零的临时随机数,但没有产生有效的哈希值,所以矿工继续尝试其他不同的临时随机数。
1703866244
1703866245
在大多数情况下,随机数试过所有32位可能的取值后,仍然不能产生一个有效的哈希值,这时候你必须做出更多的改变。注意,图5.1中币基(coinbase)还有一个随机数可以改动。当你遍历区块头部随机数所有可能的取值后,可以改变币基里的随机数,比如加1,然后可以重新改变区块头部随机数来寻找有效的哈希值。
1703866246
1703866247
当改变币基里的随机数后,整个梅克尔树上交易的哈希值都会改变(见图5.2),因为币基值的改变会向上传递,所以改变币基的随机数值比改变头部随机数值的代价要大很多。正因为如此,矿工大部分时间只改动头部的随机数,只有在遍历头部232个随机数值且还没有找到一个有效区块时,才改动币基的随机数。
1703866248
1703866249
1703866250
1703866251
[
上一页 ]
[ :1.703866202e+09 ]
[
下一页 ]