区块链 · 数字资产知识 · 行业资讯
文章库关于本站

信息核验

bit比特币挖矿有哪些常见问题:原理、矿池与哈希目标详解

摘要

比特币挖矿并不是直接破解加密,而是不断对区块头进行哈希计算,寻找低于目标阈值的结果。本文解释单独挖矿与矿池挖矿的区别、哈希函数和随机数的作用、share为何不等于区块,以及getblocktemplate与Stratum在工作流程上的差异。

区块链液冷的科技主题配图

比特币挖矿究竟在做什么?

挖矿的核心任务,是构造并尝试提交新区块。矿工会取得待处理交易、前一区块哈希、区块版本、时间等信息,组成区块头,再不断改变其中的随机数或相关字段,计算区块头的哈希值。只有当结果低于网络规定的目标阈值时,区块才具备被提交到网络并参与验证的条件。

因此,挖矿更准确地说是大量尝试,而不是按照固定公式一步算出答案。哈希函数会把任意长度的输入映射为固定长度的结果;输入哪怕只有细微变化,输出也会明显不同。矿工无法根据目标结果反推出唯一输入,通常只能持续尝试。

区块链显卡矿机的科技主题配图

哈希函数是不是加密?

不是。密码学哈希函数主要用于生成数据的固定长度摘要,并强调单向性、抗碰撞性以及在特定场景下的第二原像抵抗性。它不同于可用密钥加密、再用密钥解密的加密算法。

区块链硬盘挖矿的科技主题配图

在挖矿中,哈希结果被用来判断区块头是否满足目标阈值。哈希值本身不是被“解密”出来的内容,矿工也不是从哈希值中恢复交易或区块数据,而是在不同输入之间反复尝试。

单独挖矿和矿池挖矿有什么区别?

单独挖矿时,矿工自行从网络获取交易并构造区块。如果成功找到符合网络目标的区块,相关区块奖励和交易手续费由其按照规则处理;但成功事件具有较强的偶然性,获得区块之间的间隔可能较长。

矿池挖矿则把多个矿工的计算能力组织起来。矿池会设置一个比网络目标更容易满足的内部目标,矿工提交达到该内部目标的结果,称为share。share用于证明矿工完成了一定数量的计算工作,但通常并不代表它已经构成可加入区块链的完整区块。

偶尔会有某个share同时满足网络目标,这时矿池才可能将对应区块提交到网络。矿池通常依据矿工提交的有效share等规则分配相关收入,具体分配方式取决于矿池采用的制度。

为什么提交了share,却没有找到区块?

这是矿池挖矿中最常见的误解。矿池目标被设置得比网络目标宽松,是为了让矿工能够更频繁地提交工作证明,从而估计各自贡献的计算量。大量share可以反映持续工作,但只有少数结果会碰巧达到更严格的网络目标。

所以,share主要是矿池内部核算和验证工作的凭据,不等于新区块,也不等于已经获得区块奖励。提交share后没有立即产生区块,通常并不意味着设备故障,而是不同目标阈值和概率共同造成的正常现象。

随机数、额外随机数和默克尔根有什么作用?

区块头中的nonce通常是矿工首先反复尝试的字段。但nonce的空间有限,当可尝试的组合用尽,挖矿软件需要改变其他相关数据。常见做法是在coinbase交易中加入额外随机数;coinbase交易变化后,包含全部交易摘要的默克尔根也会随之变化,矿工便获得新的一组区块头输入。

这也是矿池或单独挖矿软件需要持续生成新工作模板的原因之一。若网络出现新区块,原先以旧区块为前一区块的工作就可能失效,矿工需要及时切换到新的工作内容。

getblocktemplate和Stratum有什么不同?

getblocktemplate会向挖矿软件提供构造区块所需的较完整信息,例如交易、前一区块哈希、区块版本、目标相关字段以及支付信息。挖矿软件可以据此检查、选择或处理部分交易,再构造默克尔根和区块头。

Stratum则通常由矿池向矿工提供构造任务所需的精简信息,包括coinbase相关内容、默克尔树所需的部分数据、区块头其他字段和矿池接受share的目标。矿工可以据此更新coinbase、计算新的默克尔根并持续工作,但通常不能像使用完整区块模板那样自由检查或添加当前区块交易。

两者都是传递挖矿任务的机制,不是两种不同的哈希算法。实际使用哪种协议,还取决于矿池、挖矿软件和设备的兼容性。

判断挖矿资料是否准确时应注意什么?

首先要区分网络目标、矿池目标和设备自身的计算过程:网络目标决定结果能否作为区块提交,矿池目标主要用于收集和衡量share。其次,不要把哈希函数描述成可逆加密,也不要把提交share描述成必然找到区块。

最后,还应确认资料讨论的是单独挖矿、矿池挖矿,还是某种具体协议,因为不同工作流程提供给矿工的数据范围并不相同。本文所述概念适用于参考材料中介绍的比特币挖矿流程及密码学哈希的一般定义,不延伸到未被材料支持的设备、矿池政策或实时网络状况。

← 返回全部文章

延伸阅读 · 相关栏目

安全防护钱包与账户风险识别信息核验