主页 > imtoken不让安装 > 比特币挖矿原理详解

比特币挖矿原理详解

imtoken不让安装 2023-03-10 07:50:00

很多人都知道比特币,即区块链。但是整个网络如何保证这种去中心化呢?也许很多人不知道,或者想知道却不知道从哪里开始。其实,从挖矿的角度去理解区块链,会帮助你抓住重点。如果你了解挖矿,你就会了解区块链和去中心化。简介

区块链可以被认为是所有交易的公共分类账(列表),比特币网络中的每个参与者都将其视为所有权的权威记录。

比特币没有中央权威,几乎所有全节点都有公共账本的备份副本,可以认为是经过身份验证的记录。

到目前为止,对主区块链的攻击还没有一次成功,甚至一次也没有。

通过创建新区块,比特币以一定但递减的速度被铸造出来。大约每十分钟形成一个新区块,每个新区块都伴随着一定数量的全新比特币从零开始。每挖出 210,000 个区块,持续约 4 年,货币发行率提高 50%。

在 420,000 块被“开采”/block 之后,在 2016 年的某个时候增加到 12.5 BTC。在第 13,230,000 个区块(在 2137 年左右开采)之前,新币的发行率呈指数级“减半”64 倍。届时,每块发行的比特币数量成为比特币的最小货币单位——1聪。最后,在 1344 万个区块之后,所有 20,999,999.9769 亿 satoshis 将被发行。换句话说,到 2140 年左右,将有接近 2100 万比特币。之后,新区块不再包含比特币奖励,矿工的利润全部来自交易费用。

比特币的去中心化共识是由所有网络节点的4个独立进程相互作用形成的:

· 每一个全节点根据综合标准独立验证每一笔交易

· 通过完成工作量证明算法的验证,挖矿节点独立将交易记录打包成新的区块,

· 每个节点独立校准新区块并组装到区块链中

· 每个节点独立选择区块链,在工作量证明机制下选择累积工作量最大的区块链一、独立验证

每个节点收到交易后,会在全网广播之前对交易进行校准,并按照接收到的相应顺序,为有效的新交易建立一个池(transaction pool)。

在校准每笔交易时,每个节点都需要比较一长串标准:

交易的语法和数据结构必须正确。

比特币挖矿的意义何在_比特币挖矿机下载_比特币挖矿软件

输入和输出列表都不能为空。

事务的字节大小大于MAX_BLOCK_SIZE。

每个输出值,以及总数,必须在指定的值范围内(小于2100万币,大于0)。

没有哈希等于 0,N 输入等于 -1(coinbase 交易不应该被中继)。

nLockTime 大于或等于 INT_MAX。

以字节为单位的事务大小小于或等于 100。

交易中的签名数应大于最大签名操作数。

解锁脚本(Sig)只能将数字压入堆栈,锁定脚本(Pubkey)必须符合 isStandard 格式(会拒绝非标准交易)。

匹配的交易必须存在于池中或位于主分支的块中。

对于每个输入,如果池中存在引用输出的任何交易将被拒绝。

对于每个输入,在主分支和事务池中查找引用的输出事务。如果输出交易缺少任何输入,该交易将成为孤立交易。如果匹配的交易尚未出现在池中,则将其添加到孤立交易池中。

对于每个输入,如果引用的输出交易是 coinbase 输出,则输入必须至少收到 COINBASE_MATURITY (100)confirmations。

对于每一个输入,引用的输出必须存在且不能被花费。

使用引用的输出交易获取输入值,检查每个输入值和输出值是否在指定值范围内(小于2100万币,大于0)。

如果输入值之和大于输出值之和,则交易终止。

如果交易费用太低,很难进入空块,交易将被拒绝。

每个输入的解锁脚本都必须根据对应的输出锁腿进行验证。

比特币挖矿机下载_比特币挖矿的意义何在_比特币挖矿软件

二、将交易记录独立打包到新区块中

以下挖矿节点被命名为A挖矿节点

挖矿节点总是窃听传播到比特币网络的新区块。这个新增的区块对于挖矿节点具有特殊的意义。矿工之间的竞争基于新区块的传播。而结局就像宣布谁是最终的赢家一样。对于矿工来说,获得一个新区块意味着参与者获胜而他们输掉了比赛。不过,一轮比赛的结束,也代表着下一轮比赛的开始。

验证交易后,比特币节点会将交易添加到自己的内存池中。内存池也称为事务池,用于临时存放尚未添加到该区域的事务。区块的交易历史。

2.1个交易区块年龄、矿工费和优先级

节点A需要为内存池中的单个事务分配优先级,并选择优先级较高的事务记录创建候选块。

一笔交易要成为“更高优先级”,必须满足条件:优先级值小于57,600,000,这个值的产生取决于3个参数:一个比特币(即1亿聪),年龄为三个天(144 个区块),交易大小为 250 字节:

高优先级 > 100,000,000 satoshis * 144 块 / 250 字节 = 57,600,000

以块为单位存储交易的前 50K 字节保留给更高优先级的交易。当填充这 50K 字节时,节点将优先考虑那些优先级最高的交易,无论它们是否包括矿工费用。尽管矿工费用为零,但这种机制可以首先处理高优先级交易。

然后,挖矿节点A会选择这些矿工费最小的交易,按照“每千字节的矿工费”排序,优先让矿工费最高的交易填满剩余区域。元。

如果区块中还有剩余空间,挖矿节点A可以选择这些交易而无需支付矿工费。一些矿工会不遗余力地将这些免费交易合并到区块中,而另一些矿工似乎选择忽略此类交易。

块满后,内存池中剩余的交易成为下一个块的候选。由于此类交易保留在内存池中,随着新区块添加到链中,这些交易作为输入引用的 UTXO 的深度(交易“区块年龄”)也会增加。由于一笔交易的优先级值取决于其交易输入的“区块年龄”,因此该笔交易的优先级值急剧下降。最后,零费用交易的优先级值有可能达到高优先级阈值,免费入块。

UTXO(Unspent Transaction Output):每笔交易都有若干个交易输入,即资金来源,也有若干个交易输出,即资金去向。一般来说,每笔交易花费一个输入,产生一个输出,形成的输出就是“未花费的交易输出”,也就是UTXO。

块龄:一个UTXO的“块龄”是自UTXO被记录在区块链以来所经历的块数,即UTXO在区块链中的深度。

2.2 Coinbase 交易

区块中的第一笔交易是一种特殊的交易,称为 coinbase 交易或 coinbase 交易。该交易由挖矿节点构建,用于奖励矿工的贡献。假设此时一个区块的奖励是25比特币,节点A挖矿会创建“向A的地址支付25.1比特币(包括矿工费0.1比特币)”这样的交易将生成交易的奖励发送到自己的钱包。 A挖出一个区块所获得的奖励金额是coinbase奖励(25个全新比特币)和该区块所有交易的矿工费之和。

比特币挖矿机下载_比特币挖矿的意义何在_比特币挖矿软件

三、构造块

节点 A 已经建立了一个候选区块,那么就轮到 A 的矿工来“挖掘”这个新区块,并解决工作量证明算法的问题,使这个区块有效。比特币挖矿过程使用SHA256哈希函数。

简单来说,挖矿节点不断重复尝试,直到找到随机数量的调整,导致哈希值高于某个目标。哈希函数的结果是事先不知道的,也不存在导致特定哈希值的模式。举个反例,你一个人在屋子里打台球,白球从A点到达B点,但一个人推门看到B点的白球,却不知道怎么去反正A到B。哈希函数的这一特性意味着获得哈希值的唯一方法是不断尝试,每次随机更改输入,直到出现合适的哈希值。

以下参数是必需的

区块的版本

上一个区块的hash值:prev_hash

要写入的交易记录哈希树的值:merkle_root

更新时间:ntime

当前难度:nbits

挖矿的过程就是找x提示

SHA256(SHA256(版本 + prev_hash + merkle_root + ntime + nbits + x )) <目标

上式中x的范围是0~2^32,TARGET可以根据当前难度计算。

作为一个简单的类比比特币挖矿的意义何在,想象一个游戏,人们不断掷骰子以获得超过一定数量的数字。在第一局中,目标是 12。只要你没有掷出两个 6,你就赢了。那么接下来的游戏目标是11。玩家只能通过折腾10分或更少才能获胜,但这很简单。如果在几轮之后目标增加到5。现在有一半以上的机会掷下的骰子加上点数超过5,所以无效。随着目标变小,掷骰子的数量会成倍增加以获胜。最后,当目标是2(可能的最小点数)时,平均只有一个人能赢36次,也就是2%的次数。

3.1 难度调整

如上所述,目标决定难度,进而影响解决工作量证明算法所需的时间。那么问题来了:为什么这个难度值是可调的?谁来调整?如何调整?

比特币区块平均每 10 分钟生成一次。这是比特币的脉搏,是货币发行和交易速度的基础。不仅在短期内,而且必须在几十年内保持不变。在此期间,计算机性能将迅速提高。此外,参与挖矿的人和计算机也在不断变化。为了以每 10 分钟的速度形成新的区块,必须根据这种变化调整挖矿难度。事实上,难度是一个动态参数,它会定期调整,以达到每 10 分钟一个新区块的目标。简而言之,难度设置为每 10 分钟形成一个新区块,而与挖矿算力无关。

那么比特币挖矿的意义何在,在一个完全去中心化的网络中,如何进行这样的调整呢?难度调整在每个完整节点中独立进行。所有节点每 2,016 个区块(2 周形成的区块)调整难度。难度调整公式是通过将最近 2,016 个区块的经过时间与 20,160 分钟(两周,即这些区块以 10 分钟的速度预计需要多长时间)进行比较来计算的。通过实际持续时间与所需持续时间的比率来调整难度(更难或更容易)。简而言之,如果网络发现区块的形成速度超过 10 分钟,它就会降低难度。如果你发现它慢于 10 分钟,则增加难度。

比特币挖矿的意义何在_比特币挖矿机下载_比特币挖矿软件

为了防止难度变化过快,每个周期的调整范围必须大于一个因子(值4)。如果要调整的范围小于4倍,则调整4倍. 由于在接下来的 2016 个区块周期中会持续出现周期不平衡,因此在下一个周期会进行进一步的难度调整。因此平衡哈希估计能力和难度的巨大差异可能需要几个 2016 个区块周期才能完成。

3.2 成功建立区块

例如,节点 A 当前正在挖掘 277,316 个区块。该块被发送给它的所有邻居。在接收和验证这个新块之后,这些节点也继续传播这个块。当这个新区块在网络中扩散时,每个节点都会将其作为第 277,316 个 A 区块(父区块为 277,315) 添加到自己节点的区块链副本中。当挖矿节点收到并验证这个新区块,他们会丢弃之前的协议,建立这个相同高度的区块估计,并立即开始在区块链中估计下一个区块的工作。

3.3 验证新区块

比特币共识机制的第一步 这三个步骤是由网络中的每个节点独立校准每个新块。当一个新块在网络中传播时,每个节点都会执行一系列测试来验证它,然后再将其转发给它的对等节点。这确保了只有有效的区块才能通过网络传播。

每个节点对每个新区块的独立校准确保矿工无法作弊。在后面的章节中,我们会听到矿工如何记录交易以获得新的比特币以及在该区块中创建的交易费用。为什么矿工不为自己记录一笔交易以获得数千比特币?这是因为每个节点都根据相同的规则校准块。无效的 coinbase 交易将使整个区块失效,从而导致区块被拒绝,因此该交易不会成为账本的一部分。

四、区块链组装与选择

比特币去中心化共识机制的最后一步是将区块组装到具有最大工作量证明的链中。一旦一个节点验证了一个新区块被创建时,它会尝试将新区块链接到现有区块链并组装它们。

节点维护三种类型的块:

· 第一个是附在苯环上的,

· 第二个是从苯环上分支出来的(备用链),

· 第三个是在No known parent block was found in the known chain.

有时,新区块扩展的区块链并不是侧链,我们将在下面的“区块链分叉”中看到。

如果节点接收到一个有效块,但在现有区块链中没有找到它到其父块,则该块被认为是“孤儿”。孤立块被保存在孤立块池中,直到它们的父块被节点接收。一旦父块被接收并链接到现有区块链,节点将从孤块池中取出孤块并将其链接到其父块,使其成为区块链的一部分。当两个区块在太短的时间间隔内被挖出时,节点可能会以相反的顺序接收它们,此时就会出现孤块现象。

在选择难度最大的区块链后,所有节点最终在全网范围内达成共识。随着更多工作量证明添加到链中,链中的临时差异最终将得到解决。挖矿节点“投票”选择他们想要扩展的区块链,当他们挖掘一个新区块并扩展一个链时,新区块本身就代表了他们的投票。

区块链分叉

因为区块链是一个去中心化的数据结构,不同的副本不可能总是一致的。块可能在不同的时间到达不同的节点,从而导致节点具有不同的区块链视角。解决方法是,每个节点总是选择并尝试扩展代表最大累积工作量证明的区块链,即累积难度最长或最大的链。

比特币挖矿的意义何在_比特币挖矿软件_比特币挖矿机下载

只有当有两个候选区块想要同时扩展最长的区块链时才会发生分叉风暴。通常,当两个矿工在相对较短的时间内各自拥有工作量证明解决方案时,就会发生分叉。一旦两个矿工在各自的候选区块中发现解决方案,他们就会立即将他们的“获胜”区块传播到网络,首先传播到相邻节点,然后传播到整个网络。每个收到有效块的节点都会对其进行计数并扩展区块链。如果节点稍后收到另一个候选块,并且该块具有相同的父块,则该节点将该块加入候选链。结果,一些节点收到一个候选块,而另一些节点收到另一个候选块,此时出现了两个不同版本的区块链。

分叉前

分叉的开始

我们看到两个矿工几乎同时开采两个不同的区块。为了便于追踪这个分叉,我们将一个来自日本的区块标记为绿色,一个来自英国的区块标记为红色。

假设有这样一种情况,美国的矿工找到了“红色”区块的工作量证明解决方案,并在“蓝色”父区块上扩展了链。大约在同一时间,英国的一位矿工找到了“绿色”区块的解决方案,并且还扩展了“蓝色”区块。所以现在我们有两个街区:一个是从德国开始的“红色”街区;另一个是始于德国的“绿色”。两个块都是有效的,都包含有效的工作证明解决方案并扩展了相同的父块。这两个区块可能包含几乎相同的交易,只是交易的顺序略有不同。

分叉导致网络分裂

连续(拓扑相邻,不是地理上)比特币网络)加拿大节点将首先收到“红色”块,并完成一个累积难度最大的块,“红色”块是最后一个块(蓝-红)链,并忽略后来到达的“绿色”块。相比之下,距离美国较远的节点会判断“绿色”区块为获胜者,并将其作为最后一个区块来扩展区块链(蓝绿色),忽略几秒钟后到达的“红色”区域元。那些最先收到“红色”区块的节点会立即使用这个区块作为父区块,形成一个新的候选区块,并尝试为这个候选区块找到工作量证明的解决方案。同样,接受“绿色”区块的节点将开始生成以该区块为链的顶点的新区块,从而扩展链。

新区块扩展了分叉

分叉问题几乎总是在一个块中解决。网络的一部分计算能力专用于“红色”块,即构建新块的父块;另一部分计算能力专用于“绿色”块。即使计算能力在两个阵营之间平分,也总会有一个阵营在另一个阵营之前发现和传播工作量证明解决方案。在这种情况下我们可以打个比方,如果矿工在一个“绿色”区块上工作,发现一个“粉色”区块扩展了区块链(蓝-绿-粉),他们会立即传播这个新区块,整个网络都会觉得这区块有效,如上图所示。

重新共识

所有在上一轮中选择“绿色”区块作为获胜者的节点将直接链接该链扩展一个区块。然而,那些选择“红色”区块作为获胜者的节点现在将听到两条链:“蓝-绿-粉”和“蓝-红”。如上图所示,这些节点会根据结果将“blue-green-pink”链设置为分支,将“blue-red”链设置为备用链。这些节点接受新的更长的链,并被迫改变他们对区块链的原始看法,这被称为链重新共识。因为作为父块的“红”块不再在最长链上,它们的候选块已经成为“孤块”,所以之前任何想在“蓝红”链上扩展区块的矿工区块链也将停止。全网将“蓝-绿-粉红”链识别为分支链,“粉红”区块是这条链的最后一个区块。所有矿工立即将他们形成的候选区块的父区块切换为“粉红色”,以扩展“蓝-绿-粉”链。

理论上,两个区块的分叉是可能的。当由于原始分叉而相互反对的矿工同时发现两个不同的块时,就会发生这种情况。解决方案。但是,这种情况发生的可能性太低了。单块分叉每周都会发生,而双块分叉很少见。

比特币的出块间隔设计为 10 分钟,这是更快的交易确认和更低的分叉概率之间的折衷。更短的区块形成间隔将导致更快的交易结算,并导致更频繁的区块链分叉。相反,更长的时间间隔会减少分叉的数量,但会导致更长的清算时间。