
一、比特币挖矿究竟在做什么
比特币挖矿的核心任务,是构造一个符合网络规则的新区块,并通过计算找到满足条件的区块头。新区块被网络接受后,会被添加到区块链中,使交易历史获得新的确认和更强的连续性。挖矿并不是简单地把交易“打包上传”,而是同时包含交易选择、区块构造、哈希计算和网络验证等环节。
矿工通常先获得待处理交易和上一新区块所需的信息,再构造区块头。矿机不断改变其中的随机数等字段,对区块头进行哈希运算;只有当结果低于网络规定的目标阈值时,才可能形成符合条件的候选区块。这个过程就是工作量证明机制在挖矿中的具体体现。

二、工作量证明、哈希与目标阈值
工作量证明通常简称 PoW。它要求参与者先投入可验证的计算工作,才能提出一个候选结果。验证者不需要重复相同规模的搜索,只需检查区块头、交易及哈希结果是否符合规则,因此能够较快判断候选区块是否有效。

哈希函数会把输入数据转换成固定格式的结果。矿工无法直接推算出一个必然满足条件的随机数,只能反复尝试不同输入。挖矿中的“随机数”通常指区块头里的 nonce,但当 nonce 的取值空间不够时,还需要改变 coinbase 交易中的额外随机数据,从而改变默克尔根并继续搜索。
目标阈值是判断哈希结果是否合格的数值条件。哈希结果越低,通常意味着越难随机得到符合条件的结果。网络目标与矿池目标并不一定相同:矿池可以设置一个比网络要求更宽松的目标,用来收集矿工提交的工作量证明,即份额;真正达到网络目标的结果,才有机会成为全网认可的区块。
三、难度、区块头与默克尔根
难度可以理解为寻找合格哈希结果的相对困难程度。它与目标阈值相关:目标越严格,满足条件的哈希越少,搜索难度通常越高。难度并不是矿机的功率,也不是矿工一定需要运行的时间,而是网络用于约束有效区块的计算条件。
区块头是区块中供哈希计算使用的重要部分,通常包含版本信息、前一区块哈希、默克尔根、时间、难度目标相关字段以及 nonce 等内容。矿工反复计算的是区块头的哈希,而不是任意一段独立数据。
默克尔根是由区块内交易经过默克尔树汇总得到的根哈希。交易集合发生变化,或 coinbase 交易中的额外随机数据发生变化,都可能导致默克尔根改变。区块头因此也会改变,矿机便可以继续尝试新的搜索空间。
四、独 solo 挖矿与矿池挖矿
独立挖矿是矿工自行获取交易、构造区块并向网络广播候选区块。若成功找到符合网络目标的区块,相关区块奖励和交易手续费由独立挖矿者自行处理;但在单次成功之间可能经历较长且不稳定的等待,这体现为结果出现频率的较大波动。
矿池挖矿则把许多矿工的计算能力组织起来。矿池向参与者分发任务,矿工提交能够证明其完成部分计算工作的“份额”。多数份额达不到全网区块的要求,但可以用于记录矿工贡献;少数情况下,某个份额也符合网络目标,矿池便可将对应区块提交给网络。
矿池通常依据矿工提交的有效份额或其他明确规则分配收入。份额主要是工作量证明,不等同于已被区块链确认的完整区块,也不意味着每次提交都能获得区块奖励。具体分配方式还取决于矿池采用的结算制度。
五、区块模板、getblocktemplate 与 Stratum
区块模板可以看作矿工构造新区块时使用的工作说明,其中可能包含待选交易、前一区块哈希、版本信息、时间、目标条件以及接收区块奖励所需的信息。矿工据此生成区块头并开始计算。
getblocktemplate 是一种让挖矿软件获取区块构造信息的接口。它可以提供较完整的交易和区块头信息,使挖矿软件能够检查、选择或调整部分交易,再计算默克尔根。旧式 getwork 方法曾用于直接取得供矿机计算的区块头,但由于单个区块头可供使用的 nonce 空间有限,现代挖矿场景通常更依赖其他方式。
Stratum 是矿池与矿工之间常用的挖矿协议。它倾向于向矿工发送构造区块头所需的关键信息,包括 coinbase 相关内容、默克尔树所需部分、区块头信息和矿池份额目标。与能够传递较完整交易信息的方式相比,使用 Stratum 时,矿工通常不能自行检查或增删当前任务中的交易,而是按照矿池提供的任务进行计算。
六、这些术语分别适用于什么场景
如果只是学习比特币挖矿原理,应先掌握工作量证明、哈希、目标阈值、难度、区块头和默克尔根,它们解释了为什么矿工需要持续尝试,以及网络如何验证结果。
如果关注矿机与矿池的协作,则应进一步理解份额、矿池目标、区块模板和 Stratum。份额用于衡量矿工完成的计算工作,矿池目标用于提高提交反馈的频率,但份额本身并不改变全网对有效区块的判断标准。
如果阅读开发文档或编写挖矿相关软件,还需区分接口、协议和共识规则:getblocktemplate 属于获取区块构造信息的接口,Stratum 属于矿池通信协议,而目标阈值、区块结构和验证条件则属于挖矿结果能否被网络接受的规则范围。
七、常见问题
问题一:算出一个哈希就算挖到区块了吗?不是。只有哈希结果满足网络目标,并且区块中的交易、区块头及其他规则都通过验证,候选结果才可能成为有效区块。
问题二:提交份额是否等于挖到区块?不等于。份额通常只是矿池为衡量工作量设置的较宽松证明,主要用于记录贡献和进行结算。只有达到网络目标的结果才具备提交为全网区块的条件。
问题三:随机数只有 nonce 吗?不一定。nonce 是区块头中的一个字段,但矿工还可以通过改变 coinbase 交易中的额外数据,使默克尔根和区块头发生变化,从而扩大可尝试的输入空间。
问题四:矿池目标和网络目标为什么不同?矿池需要较频繁地收到矿工提交,以便统计工作量,因此可设置更宽松的份额目标;网络仍使用自己的目标判断一个结果是否具备成为有效区块的资格。