揭秘比特币挖矿原理:区块生成与交易验证过程

创始人
2024-12-31 02:59:02
0 次浏览
0 评论

详解比特币挖矿原理

将区块链视为记录所有交易的公共分类账(列表),比特币网络中的每个参与者都将其视为所有权的官方记录。
比特币没有中央权威;几乎所有全节点都有一份公共账本的副本,可以将其视为授权账本。
到目前为止,还没有一次对主链的成功攻击,甚至一次也没有。
比特币以固定的速度铸造,但随着新区块的创建而不断减少。
大约每十分钟就会产生一个新区块,每个新区块都伴随着一定数量的从头开始创建的新比特币。
每开采21万个区块,大约需要4年时间,代币发行率就会下降50%。
2016年的某个时候,第420,000个区块被“开采”后,比特币价格跌至12.5BTC/区块。
在13,230,000号区块(可能在2137年开采)之前,新币的发行速度将以指数方式减半64倍。
届时,每个区块发行的比特币数量将成为比特币的最小货币单位——1聪。
最终,经过1344万个区块后,将发行全部2,099,999,997,690,000中本聪比特币。
换句话说,到大约2140年,比特币的数量将达到大约2100万个。
此后,新的区块不再包含比特币奖励,矿工的收入完全来自交易费用。
每个节点收到交易后,都会验证这些交易,然后将其广播到全网,并在收到交易时按照相应的顺序创建一个新的有效交易池(交易池)。
每个节点验证每笔交易时,都需要检查一长串标准:交易的语法和数据结构必须正确。
输入或输出列表不能为空。
事务的字节大小小于MAX_BLOCK_SIZE。
每个产出值加上总量必须在指定的值范围内(小于2100万币,大于0)。
不存在哈希值为0且N为-1的条目(Coinbase交易不应被中继)。
nLockTime小于或等于INT_MAX。
交易字节大小大于等于100。
交易签名数量必须小于最大签名数量。
解锁程序(Sig)只能将数字压入堆栈,而锁定程序(Pubkey)必须符合isStandard格式(该格式将拒绝非标准操作数)。
池中或主分支块中必须有匹配的交易。
为你输入,如果输出引用的内容出现在池中的任何交易中,该交易将被拒绝。
对于每个输入,找到主分支和交易池中引用的输出交易。
如果输出交易缺少任何输入,则该交易将成为孤儿交易。
如果匹配交易尚未出现在池中,则将其添加到孤儿交易池中。
对于每个输入,如果指示的输出交易是货币基础输出,则输入必须至少接收COINBASE_MATURITY(100)断言。
对于每个输入,指定的输出必须存在并且不被花费。
使用指示的输出交易获取输入值,并检查每个输入值和总价值是否在指定的值范围内(小于2100万币,大于0)。
如果输入值的总和小于输出值的总和,则交易将被中止。
如果交易费用太低而无法放入空区块,则交易将被拒绝。
必须对照相应的输出锁定脚本检查每个输入解锁脚本。
下一个挖掘节点称为挖掘节点,因为挖掘节点始终监视比特币网络上发布的新块。
这些新添加的区块对于挖矿节点来说特别重要。
矿工之间的竞争以新区块的发布而结束,这类似于宣布最终的获胜者。
对于矿工来说,获得一个新的区块意味着一个参与者在竞争中获胜,而一个人输了。
然而,一轮比赛的结束也标志着下一轮比赛的开始。
验证交易后,比特币节点将这些交易添加到其内存池中。
内存池也称为交易池,用于临时存储尚未添加到区块中的交易记录。
节点A需要为内存池中的每笔交易分配优先级,并选择优先级最高的交易记录来创建候选块。
想要成功的交易是“更高优先级”,必须满足的条件:优先级值大于57,600,000。
该值的生成基于3个参数:1个比特币(即1亿聪)、1天(144个区块)、交易大小250字节:helloghPriority>100,000,000satoshis*144blocks/250bytes=57,600,000使用的前50,000字节将交易存储在为更高优先级交易保留的块中。
当节点填满这50,000字节时,它将优先处理那些优先级最高的事务,不管是否包含挖矿费。
这种机制允许高优先级的交易即使零挖矿费用也能得到优先处理。
然后,挖矿节点A将选择挖矿费用最低的交易,并按照“每KB挖矿费用”进行排序,优先考虑挖矿费用最高的交易来填充剩余的区块。
如果区块还有剩余空间,挖矿节点A可以选择不包含挖矿费用的交易。
一些矿工会竭尽全力将不涉及矿工费用的交易包含在区块中,而其他矿工可能会选择忽略此类交易。
当区块填满后,内存池中剩余的交易成为下一个区块的候选交易。
由于这些交易保留在内存池中,随着新的区块被添加到链中,这些交易输入指示的UTXO深度(即交易的“区块年龄”)也会增加。
由于一笔交易的优先级值取决于其交易输入的“区块年龄”,因此该交易的优先级值也会相应增加。
最后,零挖矿费交易的优先级值可能满足高优先级阈值并免费包含在区块中。
UTXO(UnspentTransactionOutput):每笔交易都有多个交易输入,即资金的来源,以及多个交易输出,即资金的去向。
一般来说,每笔交易都会花费一个输入并产生一个输出,而它产生的输出就是“未花费的交易输出”,也就是UTXO。
区块年龄:UTXO的“区块年龄”是自UTXO在区块链中注册以来已经经过的区块数量,即UTXO在区块链中的深度。
区块中的第一笔交易是私人交易,称为硬币创建交易或硬币基础交易。
该交易由挖矿节点生成,用于奖励矿工的贡献。
假设此时的区块奖励是25个比特币。
A的挖矿节点会生成“向A的地址支付25.1BTC(含0.1BTC的挖矿费)”这样的交易,并将该交易产生的奖励发送到您的钱包。
A挖掘该区块所获得的奖励金额是coinbase奖励(25个新比特币)与该区块中所有交易的挖矿费用之和。
节点A构建了一个候选区块,接下来轮到A的矿工“挖掘”这个新区块,并解决工作量证明算法,使这个区块有效。
比特币挖矿流程使用SHA256哈希函数。
简单来说,挖掘节点不断地一遍又一遍地尝试,直到找到导致哈希值低于某个目标的随机修改。
哈希函数的结果无法提前得知,并且不存在可以得出特定哈希值的模式。
例如,如果你一个人在房间里打台球,母球从A点到B点,但如果你推开门看到母球在B点,你就不知道如何从A点走到B点。
为了。
哈希函数的这一特性意味着获得哈希值的唯一方法就是不断尝试,每次随机修改输入,直到出现合适的哈希值。
需要以下参数•区块版本•前一个区块的哈希值:prev_hash•待写入交易日志的哈希树值:merkle_root•更新时间:ntime•当前难度:nbits发现挖矿进程为x即SHA256(SHA256(version+prev_hash)+merkle_root+ntime+nbits+x))打个简单的比方,想象一个游戏,人们不地掷骰子以获得低于一定数量的分数。
第一局目标是12,只要不丢两个6就赢了。
那么下一场比赛的目标是11。
玩家只有掷出10分或更少才能获胜,但这很简单。
假设几轮后目标下降到5。
现在有超过一半的机会骰子总数超过5,因此无效。
随着目标越来越小,如果你想获胜,掷骰子的次数就会急剧增加。
最终,当目标为2(尽可能低的分数)时,只有一个平均投掷36次(即2%的时间)的人才能获胜。
正如前面提到的,目标决定了难度,进而影响了解决工作量证明算法所需的时间。
那么问题来了:为什么要调整这个难度的数值呢?谁来进行调整?如何调整?比特币区块平均每10分钟生成一次。
这是比特币的心跳,是资金发行速度和交易完成速度的基础。
它不仅在短期内而且在几十年内都必须保持不变。
在此期间,计算机性能将显着提高。
此外,参与挖矿的人员和计算机也在不断变化。
为了维持每10分钟产生新区块的速度,挖矿难度必须相应调整对于这些变化。
事实上,难度是一个动态参数,定期调整以实现每10分钟出一个新区块的目标。
简而言之,难度级别的设置使得无论挖矿能力如何,新块的生成率都保持在每10分钟1个。
那么,这种修改是如何在完全去中心化的网络中实现的呢?难度调整在每个全节点独立且自动地进行。
所有节点每2,016个区块(每两周生成一个区块)调整难度级别。
难度调整公式是通过将最近2,016个区块的运行时间与20,160分钟(两周,即这些10分钟区块预计需要的时间)进行比较来计算的。
根据实际持续时间与期望持续时间的比率相应地调整难度(更难或更容易)。
简单来说,如果网络发现出块速度快于10分钟,就会增加难度。
如果你发现它慢于10分钟,请降低难度。
为防止难度变化过快,每轮的调整量应小于一个因子(值4)。
如果调节范围大于4倍,则调节4次。
由于2016件的下一个区块周期仍将存在不平衡现象,因此下一个周期将进行进一步的难度调整。
因此,平衡算力和难度的巨大差异可能需要几个2,016块周期才能完成。
例如,节点A当前正在挖掘277,316个块,一旦挖掘节点A完成计算,它会立即将该块发送给其所有邻居节点。
这些节点收到并验证这个新区块后,就会继续发布这个区块。
随着这个新区块在网络中传播,每个节点都会将其添加到自己的区块链副本中,作为区块277,316(原始区块是277,315)。
当挖矿节点收到并验证这个新区块时,它们会放弃之前的计算,在相同高度构建这个区块,并立即开始计算区块链中的下一个区块。
比特币共识机制的第三步是由网络中的每个节点独立验证每个新块。
当一个新块在网络中传播时,每个节点都会运行一系列测试来验证它,然后再将其转发给其对等节点。
这确保了只有有效的块才分布在网络上。
每个节点独立验证每个新区块,确保矿工无法作弊。
在上一章中,我们看到了矿工如何记录交易以获得在此创建的新比特币区块和交易费用。
矿工为什么不自己记录一笔交易来获得数千比特币?这是因为每个节点都根据相同的规则验证块。
无效的Coinbase交易将使整个区块失效,从而导致该区块被拒绝,因此该交易将不再成为账本的一部分。
比特币去中心化共识机制的最后一步是将具有最大工作量证明的链上区块聚合起来。
一旦节点验证了新区块,它将尝试将新区块链接到现有区块链,并对其进行抵押。
节点维护三种类型的区块:·第一种连接到主链,·第二种从主链(备份链)分叉,·第三种不在父区块的已知链中。
有时,新区块延伸出来的区块链并不是主链,这一点我们将在下面的“区块链”中出现。
如果一个节点收到一个有效块,但在当前区块链中找不到其原始块,则该块将被视为“孤儿块”,并将保留在孤儿块池中,直到该节点收到其原始块为止。
原始块被接收并连接到现有区块链,节点将从孤儿块池中删除孤儿块,并连接到其父块,允许它作为区块链的一部分在短时间内开采两个块。
在一段时间内,节点可能会以相反的顺序接收它们,此时它们会收到。
确定链后难度最大的区域在创建这些节点时,所有节点最终达成全网共识,并且随着更多的工作量证明被添加到链上,链上暂时的分歧最终将过“投票”的方式得到解决”。
他们想要扩展区块链。
当他们开采一个新区块并扩展链条时,新区块本身就代表了他们的投票。
由于区块链是一种去中心化的数据结构,副本可能并不总是能够在不同时间、不同节点中一致地相互通信,从而导致节点对区块链有不同的看法。
解决方案是始终选择每个节点并尝试扩大最大累加值。
工作量证明区块链是最长或最大的累积难度链,通常当两个候选块想要同时扩展最长的区块链时发生分叉。
一旦两个矿工发现问题,就会在短时间内找到解决方案解决候选块后,他们立即将“获胜”块传播到网络,首先传播到相邻节点,然后在整个网络中传播它们。
每个接收到有效块的节点都会将其合并到区块链中并将其扩展,如果该节点随后接收到另一个候选块并且该块由同一个原始块拥有,那么该节点将被连接,结果是一些节点接收到。
一个候选块,而其他节点接收另一个候选块,两者是不同的。
区块链版本显示,在分叉之前,我们看到两个矿工大约在同一时间挖出了两个不同的区块,为了更容易追踪这次分叉事件,我们将其标记为红色,这是来自加拿大的区块,来自澳大利亚的区块被标记为绿色。
让我们假设有一种情况,加拿大的矿工发现了“红色”区块工作的证据。
解决方案,在“蓝色”区块上扩展区块链大约在同一时间,一位澳大利亚矿工找到了“绿色”区块的解决方案,以及扩展“蓝色”区块,现在我们有两个区块解决方案:一个是源自加拿大的“红色”区块,另一个是源自澳大利亚的“绿色”区块。
两个区块都是有效的,并且包含扩展原始区块的有效PoW解决方案。
这两个区块可能包含几乎相同的交易,但交易的顺序略有不同。
它们将被比特币网络中相邻的“红色”节点(靠近网络拓扑)接收。
并创建一个具有最大累积难度的块,“红色”块是该链的最后一个块(蓝色和红色),忽略稍后到达的“绿色”块。
反过来,距离澳大利亚最近的节点将决定“绿色”区块获胜,并以其作为最后一个区块来扩展区块链(蓝绿),忽略几秒钟后到达的“红色”区域。
那些第一次收到“红色”区块的节点将立即使用该区块作为原始区块来创建新的候选区块,并尝试找到该候选区块的工作量证明解决方案。
同样,接受“绿色”区块的节点将开始生成新区块,并将该区块作为链的顶部,从而扩展链。
分叉问题几乎总是在集群内解决。
网络的部分计算能力集中在“红色”块作为父块并在其之上构建新块;计算能力的另一部分集中在“绿色”块上。
即使计算能力在两个阵营之间平均分配,也总会有一个阵营另一个阵营发现并部署了工作量证明解决方案。
在这个例子中,我们可以打个比方,如果在“绿色”区块上工作的矿工发现一个延伸了区块链的“粉色”区块(蓝、绿、粉红),他们会立即发布这个新区块,整个网络就会考虑到该块是有效的,如上图所示。
所有在上一轮中选择“绿色”区块作为获胜者的节点将立即将链扩展一个区块。
然而,那些选择“红色”区块作为获胜者的节点现在将看到两条链:“蓝-绿-粉”和“蓝-红”。
如上图所示,这些节点会根据结果将“蓝、绿、粉”链设置为主链,将“蓝、红”链设置为备份链。
这些节点接受了新的更长的链,不得不改变他们对区块链的原有看法。
这称为链重共识。
由于作为父区块的“红色”区块不再位于更长的链上,其候选区块已成为“孤儿区块”,因此任何原本想要在“蓝红”链上扩展区域的人现在都会停下来。
整个网络将“蓝、绿、粉”链定义为主链,“粉”块是这条链的最后一个区块。
所有矿工立即将他们创建的候选区块的原始区块切换为“粉红色”,以扩展“蓝-绿-粉”链。
理论上,当由于前一个分叉而相互反对的矿工几乎同时发现两个不同区块的解决方案时,两个区块的分叉是可能的。
然而,这种情况发生的几率非常低。
单块分叉每周都会发生,而双块分叉则非常罕见。
比特币出块间隔设计为10分钟,这是更快的交易确认和更低的分叉发生概率之间的折衷。
较短的区块创建间隔将允许交易结算更快地完成,同时也会导致更频繁的区块链分叉。
相反,较长的间隔会减少分叉数量,但会导致过滤时间较长。

比特币与莱特币之间有什么区别

两者的区别:1、莱特币的工作量证明机制采用的是scrypt算法,而比特币的工作量证明机制是SHA256。
scrypt算法计算时间较长,占用内存较多。
这种算法使得算力难以集中。
矿工比比特币更分散,可以防止51%的攻击。
正是因为莱特币的加密算法与比特币不同,所以比特币芯片矿机不能用来挖莱特币。
这使得莱特币能够避免攻击并维持正常发展。
2、莱特币的区块处理速度为2.5分钟,比特币的区块处理速度为10分钟。
比特币的缺点之一是交易确认相对较慢。
打包一个区块需要10分钟。
打包后,必须经过网络中所有节点的验证。
验证时间较长。
大约40到50分钟。
莱特币的区块调理速度是比特币的四倍,加上交易确认时间,大约20分钟即可完成。
3.总供应限额:莱特币总供应限额为8400万枚,比特币总供应限额为2100万枚。
莱特币的总限额是比特币的四倍。
4.安全性截至2013年5月,整个比特币网络的算力是世界500强超级计算机总和的8倍,达到158THash/s。
由于CPU挖矿性能限制,莱特币的算力仅为15GHas/s。
莱特币每2.5分钟处理一个区块,而比特币每10分钟处理一个区块。
对区块链发起双花攻击的进度遵循泊松分布,攻击成功的概率随着区块数量的增加呈指数下降。
当区块数量大于6时,攻击成功的概率就会下降到可以忽略不计的程度。
这就是比特币推荐6次确认以保证交易安全的基础。
当区块处理速度提高到比特币的4倍时,攻击者创建假节点的成功概率也急剧增加。
通过计算泊松分布的概率密度,避免双花攻击所需的节点确认数量将会增加。
也提升至比特币的4倍,即莱特币需要24个节点确认才能达到比特币6个节点确认的安全性。
温馨提示:以上信息仅供参考。
回复时间:2021-12-10。
最新业务变化请参见平安银行官网。
热门文章
1
2024以太坊价格展望:牛市潜力与投资时... 年末以太坊会有所升温吗?什么时候买涨?以太坊年底的价格走势很难确定,但可能性有很...

2
小米手机加密解除攻略:轻松解锁红米K40... 小米区块链加密怎么解除(小米区块链加密怎么解除密码)如何取消红米K40手机上的加...

3
张雪峰解析:就业率最高的十大热门专业盘点 最好就业的专业张雪峰张雪峰就业率最高的专业如下:1.信息安全:信息安全是指保护信...

4
以太坊2024年价格展望:技术升级与市场... 以太坊2023年能涨1万美金吗以太坊到2023年可能会上涨10,000美元。在实...

5
Filecoin价格动态与未来展望:深度... Filecoin介绍,FIL价格预测Filecoin是一个致力于减少云存储对中心...

6
揭秘比特币:数字货币的崛起与未来应用 比特币是什么东西?有什么用?比特币是一种数字货币和去中心化电子支付系统。它不委托...

7
BCC区块查询教程及比特币安全探讨 bcc怎么样查询区块如何查询bcc区块BCC(BitcoinCash)是比特币的...

8
游戏区块链怎么赚钱 依靠区块链怎么赚钱(区块链靠什么盈利)区块链挖矿如何赚钱?1.通过促销赚取佣金。...

9
为什么用比特币交易 比特币有什么用比特币的用途比特币是一种数字货币,其主要用途包括:1.交易媒介比特...

10
以太坊价格分析:2024年牛市预测与多元... 以太坊现在卖多少钱?以太坊价格是动态的,取决于市场。作为区块链2.0的旗舰项目,...