首页 > 热点资讯 > 正文

比特币挖矿揭秘:从原理到实践

2024-05-07 22:50 来源:网络

在之前的两篇文章中,我们已对比特币交易与区块生成的过程进行了详细介绍,现在让我们来看看这一切与"挖矿"有何关联。

比特币挖矿揭秘:从原理到实践

矿工挑战挖矿任务

在比特币网络里,众多挖矿节点及矿工合力创造新区块。若多个节点同时创建了同高度的区块,如何确定哪个区块更具合法性呢?比特币运用了PoW(Proof of Work,工作量证明)共识机制,以挖矿的形式争夺新区块的记账权。获得新区块记账权的矿工,其所创建的区块就被视为有效。简而言之,挖矿的核心目的正是为了赢得记账权,确保新区块及其所含交易的有效性。

矿工与挖矿节点协同作业

挖矿节点构建预备区块后,将其区块头数据传输给矿工。矿工接到挖矿任务后,逐步增加区块头中的随机数。每次变动之后,他们会根据比特币协议,利用SHA256算法计算区块头的哈希值。只有当区块头的哈希值大于预设的目标哈希值时,矿工会继续调整随机数,直至其哈希值小于或等于目标哈希值(另一种情况是,若挖矿节点发现新区块已被其他节点抢先挖出,便会放弃原任务,构建新预备区块,重启挖矿进程)。

挖矿节点验证新区块并拓展区块链

一旦矿工找到使预备区块头哈希值小于目标哈希值的随机数,便迅速向挖矿节点报告挖矿成果。接收到这一消息后,挖矿节点将立即依据矿工提供的信息重组区块,并对其进行验证。验证环节包括检查:


区块头哈希值是否合法(是否小于等于TargetHash);


区块头的Merkleroot哈希值是否与区块内的交易数据MerkleRoot哈希值相匹配(确保交易未遭篡改);


交易数据的第一条是否为Coinbase交易;


以及区块中的每一笔交易是否均合法等。



验证无误后,挖矿节点会将新区块存储至本地数据库,并将其加入本地区的区块链中。

全网广播新区块

成功创建新区块后,挖矿节点会在本地存储新区块,随后向比特币网络同步广播挖矿结果。由于整个区块的数据量较大,通常会优先广播新区块的区块头。其他节点在接收广播后,首先验证区块头信息,验证通过后,将在本地区块索引库中为新区块创建索引。在接收到新区块完整信息后,节点会验证交易信息及区块头的MerkleRoot哈希值,验证通过后,这些交易信息会被录入新区块并拓展本地区块链。至此,新区块的广播与验证宣告完成,挖矿节点随即开启挖掘下一个新区块的工作。

当前挖矿的特点

矿池集群挖矿


理论上来讲,任何人都可建立比特币挖矿节点并参与到挖矿活动中,甚至可以手动验证区块头哈希值以解密挖矿任务,从而争取记账权。然而如前文所述,鉴于当前的挖矿难度,即使采用最先进的主流矿机,理论上也需要大约42年才能挖到符合比特币网络要求的新区块;对于使用普通PC或手工计算的尝试来说,这个时间可能会长达上万乃至上百万年之久。

在这种背景下,矿池应运而生,众多矿工将自己的矿机接入矿池,通过矿池的挖矿节点获取挖矿任务,联合挖矿。这样一来,可在相对较短的时间内挖到新区块并获取区块奖励。矿池按照矿工在挖矿过程中所做的贡献比例,公平地分配挖矿收益,使得所有矿工都能实时获取收益并进行再投资或回收成本。

矿机接收到的实际挖矿任务中,TargetHash远高于比特币网络所需TargetHash


矿池与矿工合作挖矿的过程中,矿机会通过网络与矿池通信,申请挖矿任务,矿池则会向矿机发送包含区块头等数据的挖矿任务。矿机接着调整区块头的随机数并验证区块哈希值。符合挖矿任务TargetHash要求的随机数,将按挖矿协议规定的格式提交给矿池,矿池再根据矿机提交的挖矿结果为其计算收益。

需要注意的是,若直接给矿机下发与比特币网络TargetHash相同的挖矿任务,由于其TargetHash值过小,矿机几乎不可能找到符合条件的随机数,进而无法提交有效的挖矿结果,也无法获得挖矿收益。因此,矿池给矿机下发的挖矿任务会包含一个初始挖矿难度值,这个难度值远小于全网挖矿难度,对应的TargetHash值更大,矿机在这种较低的难度水平下可以在较短时间内找到符合条件的随机数,并向矿池提交更多的挖矿结果。

矿池算力与矿机本地算力的区别


提及挖矿,人们往往会谈论一个关键概念——算力。究竟何为算力呢?

简单来说,算力是指矿工验证区块头哈希值的速度。矿机在获取挖矿任务后,会不断递增区块头的随机数,并随之验证区块头的哈希值。显而易见,矿机挖矿速度的唯一限制因素便是其验证区块头哈希值的速度,由此产生了“算力”的概念。

目前,常见的比特币矿机算力单位为TH/s,意味着矿机每秒可以验证1万亿次哈希,其中1TH=1×10^3GH=1×10^6MH=1×10^9KH=1×10^12SH。

有过挖矿经验的朋友可能会注意到,矿机本地显示的算力与矿池显示的算力并不完全相同。矿机本地显示的算力仅反映了矿机验证哈希的速度,与其自身性能相关,无论是否找到了满足挖矿任务要求的随机数,矿机本地算力始终存在。而矿池显示的矿机算力则是基于矿机实际提交的有效挖矿结果计算得出的。若矿机长时间未能找到满足挖矿任务要求的随机数,无法向矿池提交挖矿结果,其在矿池的算力将会下降。不过,随着时间的推移,运气因素对矿机能否解密挖矿任务的影响将逐渐减小,矿机长期在矿池的平均算力与矿机本地算力之间的差距将变得微乎其微。

以上即是比特币挖矿的基本知识,如能理解本文三篇内容,相信读者已对比特币挖矿有了初步的认知。若想与作者深入探讨更多挖矿方面的议题,敬请关注“闲话挖矿”微信公众号,以便更即时地获取作者更新的挖矿资讯。

参考知识点:


区块高度:即Block Height,相当于区块的编号,其数值等于区块链中位于此区块之前的区块数量。比特币区块链的第一个区块为创世区块,区块高度为0,第二区块区块高度为1,第三区块区块高度为2,依此类推。区块链中所有区块的数量即为最新区块的区块高度加1。


PoW:全称Proof of Work,译作工作量证明,是比特币网络中用于解决新区块确权问题的一种方法。在比特币网络内,所有人都有机会参与新区块的创建,PoW机制规定,谁能最快找到一个区块头哈希值小于比特币网络指定TargetHash的预备新区块,谁就能拥有该新区块的正式记账权。


记账权:比特币区块链本质上是一个链式的大型账本,链上的每一个区块就像一本账簿,记录着区块链上的比特币交易信息。因此,我们将创建新区块的过程视作记账的过程。记账权即记录交易账簿的权利,也就是在比特币区块链上创建正式新区块的权利。


文章内容来源于网络,不代表本站立场,若侵犯到您的权益,可联系多特删除。(联系邮箱:[email protected]