主页 > imtoken华为 > 比特币区块链挖矿原理由浅入深介绍

比特币区块链挖矿原理由浅入深介绍

imtoken华为 2023-01-18 16:01:40

自从开始了解区块链后,关于挖矿机制的问号就越来越多。网上的文章大多只谈一些笼统的方面,不谈一些细节,所以我稍微梳理一下挖矿的整体流程。

本文将重点介绍挖矿过程和细节,因此仅涵盖一些基础知识。这篇文章也不是在教如何开始挖矿,而是在教挖矿的原理。

什么是挖矿?

从最基本的开始,比特币区块链是一个记录所有比特币交易的账本。你可以想象每个区块一个区块就是账本上的一个页面,每个区块(页面)上都写有很多交易。

在一个中心化的世界里,会有一个所有人都信任的中央机构来管理这个分类账,比如中央银行,并将新交易记录在分类账上。在比特币的世界里,我们已经移除了这个中央权威,取而代之的是所有节点的账本。

挖矿就是确定负责更新下一个区块的节点。赢得挖矿比赛的矿工可以更新下一个区块并获得奖励。所有其他节点将验证该块并更新它。它自己的账本形成了一个去中心化的世界。

挖矿的过程是一场猜数字的游戏。你可以把它想象成一个掷骰子的游戏。谁先掷出小于 3 点的数字(1 或 2) 获胜,但是这个骰子如果只有六个面就太简单了。在采矿界,这个骰子是一个数亿(天文数字)的骰子。数量)的面孔。

比特币新区块创建流程

矿工在挖矿过程中消耗大量能源。猜猜这个数字,为​​了让这些勤劳的矿工继续努力比特币新区块创建流程,中本聪设立了奖励机制,奖励获胜的矿工新挖出的比特币(目前为12.5比特币)加上交易费对于该区块中的所有交易。所以大家普遍认为挖矿是为了盈利,但实际上挖矿的概念是为了维护比特币的去中心化。

在采矿过程中对矿场初步了解后,再去详细了解采矿过程。

挖矿过程

在所有过程中,我们都在不断地倾听互联网上发生的新事物。不断向交易池中添加新交易,并确认是否有人挖出新区块

上一轮挖矿结束后,将最新区块更新到自己的账本中,并从交易池中删除已确认的交易。创建一个候选块(candidate block),从交易池中选择喜欢的交易(通常是费用较高的交易)打包到候选块中创建一个Coinbase交易,即奖励部分,其中包含基本的新比特币奖励和手续费。奖励将是区块中出现的第一笔交易,因为新的比特币不是从任何人那里交易的,而是无中生有的。创建区块头(Block Header),包括版本号、上一个区块的hash、Nonce等。开始挖矿,猜测Nonce更新区块的hash值(假设你是第一个猜的矿工)成功挖出阻止并将其广播到您的相邻节点以供他们验证。如果区块有效,这些节点将广播该区块并更新自己的账本下一轮挖矿比赛开始更深一点……

我们将深入到第四步,即猜测哈希部分

比特币区块链使用的是SHA256算法,也就是说我们把区块头里的所有东西都扔进去后,会生成一个64位的十六进制数:

比特币新区块创建流程

SHA256(块号、时间戳、Nonce、数据、上一个块的哈希)➝

0f8ef3377b30fc47f96b48247f463a726a802f62f3faa03d56403751d2f66c67

这个输出是不可预测的,所以我们只是要不断改变Nonce值,如果输入值(Input)不同,就会得到不同的哈希值(Output)

哪个哈希值是正确答案?

在比特币中,为了使出块的平均时间落在10分钟以内,设置了一个难度目标值(Difficulty Target)。猜到的数字必须小于这个目标值才是正确的,大于目标值的结果都是错误的。

上图将所有的hash值从小到大排列,从最底层(最小的hash值)到目标值(Target)就是正确的hash值。与目标匹配的哈希值示例:

比特币新区块创建流程

000000000000000000000000f8ef337347f96b42743260f62f3a3d56751d2c67

简单来说,这个目标值可以看作是前导“0”的数量。一个 64 位的十六进制数有 1⁶⁶⁴ 不同的结果。假设目标值是前18位全为0,那么目标值以下只有1⁶⁴⁶个数。而随机猜出一个低于目标值的数字(正确答案)的概率为:

1⁶⁴⁶/1⁶⁶⁴= 0.00000000000000000002%

所以我们可以通过增加leader 0的数量来降低或增加或降低难度。

假设我们设定目标值只要第一个数字为0,那么我们的难度会直接降低到1⁶⁶³/1⁶⁶⁴=1/16=6.25%

p>

比特币新区块创建流程

问题来了……

在挖矿过程中,我们猜测Nonce是为了找到与目标匹配的hash值,但是在区块头中,Nonce的大小是32bits,也就是‘³²’,大概有40亿种可能性,这导致两个问题:

可以找到合适的Nonce,使hash值低于目标值。平均而言,一台矿机可以在一秒钟内计算出一亿个哈希值比特币新区块创建流程,即尝试所有的随机数只需要 40 秒。

但比特币挖一个区块平均需要十分钟?

所以除了Nonce之外,挖矿机制中其实还有两个隐藏的key来解决这个问题:

输入值中的时间戳会随时间变化

比特币新区块创建流程

因为时间戳每秒更新一次,所以你的输入和输出每秒都会变得完全不同,而尝试过的 Nonce 也会相应产生不同的结果。因此,如果你的矿机速度超快,并且在一秒钟内尝试了所有的 nonce,你可以等待下一秒再尝试所有的随机数。

如果您不想等待下一秒怎么办?所以还有第二把钥匙:

2.更改打包的交易组合

同理,如果交易组合发生变化,输入值会发生变化,得到的哈希值会完全不同,所以我们可以不停地挖矿。 .

以上是整个挖矿过程的细节。有些部分可能过于复杂,所以在很多文章中都有提及。希望大家能理解~

郑重声明:本文版权归原作者所有,转载文章仅出于传播更多信息之目的。如作者信息标注有误,请第一时间联系我们修改或删除,谢谢。