美文网首页区块链研习社区块链大学区块链
『学概念找员外』寻找有效区块

『学概念找员外』寻找有效区块

作者: 刘员外__ | 来源:发表于2019-04-29 09:04 被阅读2次

    这篇我们说如何找到一个使区块有效的随机数的问题上。之前我们介绍过,区块链主要有两层基于哈希函数的结构。第一层在是区块链上,每个区块的头部都有一个指针指向其前一个区块,第二层是在每一个区块里,包括所有交易的梅克尔树。作为矿工,首先需要从你的交易池中选出一系列有效的交易并且编译成梅克尔树。

    当然,只要不超过每个区块随机数的交易上限,你可以选择编译的交易数量。然后,组装出一个新的区块,让它的头部指向区块链上的前一个区块。新区块的头部,有一个32位的随机数区域。你需要尝试不同的临时随机数,直到该随机数能使整个区块的哈希值小于目标值。这个目标值一般体现为以零开始的特定位数的数值。作为一名矿工,你可能使随机数从0开始,每次增加数值1,直到该随机数能使区块有效为止。

    在大多数情况下,随机数试过所有32位可能的取值后,仍然不能产生一个有效的哈希值,这时候你必须做出更多的改变。当你遍历区块头部随机数所有可能的取值后,可以改变币基里的随机数,比如加1,然后可以重新改变区块头部随机数来寻找有效的哈希值。

    当改变币基里的随机数后,整个梅克尔树上交易的哈希值都会改变,因为币基值的改变会向上传递,所以改变币基的随机数值比改变头部随机数值的代价要大很多。正因为如此,矿工大部分时间只改动头部的随机数,只有在遍历头部2的32次方个随机数值且还没有找到一个有效区块时,才改动币基的随机数。

    你所尝试的绝大多数临时随机数都不会成功,但若能够坚持足够长的时间,你总能找一对正确的临时随机数组合——头部随机数与币基随机数,用来产生一个符合哈希值要求的新区块。找到后要立即宣布,就有希望得到相应的区块奖励。

    你可能会想,如果每个矿工都在临时随机数值上逐步加1,岂不是大家都在按照同一个运算模式解同样的谜?岂不是最快的一个总赢得竞争吗?不会的。首先,矿工们不太可能在完全相同的一个区块上进行运算,因为每个矿工都会把或多或少不同的交易用不同的次序来放进区块内。但更关键的是,就算两个不同的矿工所组建的区块里包括了一模一样的交易,这两个区块的哈希值还是会不同。请记住在币基交易里,矿工会写自己的地址接收新铸币。这个地址本身的区别会沿着梅克尔树往上传递直达树根,导致整棵树上的哈希函数值不同,从而保证了没有两个矿工的区块是一样的。除非两个矿工共享公开密钥。这种情况只有可能两个矿工同在一个矿池(我们以后会讨论)。同在一个矿池的矿工会互相通信,确保使用不同的币基临时随机数以避免重复工作。

    找到一个有效区块到底有多难?到2015年年底,这个挖矿的难度目标区域值(用16进制来表示)为:

    0000000000000000172E000000000000000000000000000000000000000000
    

    所以任何有效区块的哈希值必须低于这个值。换句话说,大约2的68次方个临时随机数里只有不到一个可以成功,这是一个非常巨大的数值。一个粗略的估计,它比全球人口总和的平方还要大。也就是说,如果地球上的每个人都是一个包含7亿人口的独立星球,那么总人口将会是2的65次方。

    相关文章

      网友评论

        本文标题:『学概念找员外』寻找有效区块

        本文链接:https://www.haomeiwen.com/subject/uiazeqtx.html