07 / 736HASH

挖矿

Mining

等待确认的付款如何进入已确认区块,矿工为什么获得报酬,以及其他人为什么仍须检查结果。

挖矿是争取把下一个区块加入 Bitcoin 历史记录的竞争。矿工把交易组装成区块,通过计算寻找其他人容易验证的结果。区块被接受后,矿工可以获得新发行的比特币和其中交易的手续费。但矿工不能因此制定规则:网络上的其他计算机会独立检查提案,拒绝无效区块。

Mining:运营结果模型按输入的算力、功耗和矿池费率,比较预期区块补贴份额与电力成本。

挖矿并不是把藏在计算机里的硬币挖出来,而是争取提出下一个有效区块:一批接在既有历史之后的交易。矿工为自己的提案寻找难以获得的计算结果,成功后再把整个区块发送给其他人。接收方检查计算和交易,按相同规则判断能否接受。新比特币是这项工作的部分报酬,但发行货币并不是挖矿的唯一作用。对付款者而言,关键是交易从等待状态,变成可验证历史中的记录。 [1] [2]

发送付款后,交易首先在节点之间传播。节点是参与 Bitcoin 网络的计算机;它的 mempool 是本地保存的未确认交易集合。并不存在一个由某方替所有人管理的统一队列。矿工从现有交易中组装候选区块,考虑手续费和有限空间。如果一笔交易花费另一笔尚未确认交易的输出,前一笔交易就必须先出现在同一区块中。getblocktemplate 命令提供构建区块所需的信息,包括这些依赖关系。区块重量上限和签名检查成本上限也会限制交易选择。 [1]

区块的第一笔交易叫 Coinbase Transaction。它与同名交易所的账户无关,而是矿工领取规则允许奖励的特殊交易。奖励包括区块补贴,即新创建的比特币,以及区块内其他交易的手续费。手续费是交易输入总额与输出总额的差额,因此只是在转移已有比特币。矿工如果多领,节点会拒绝整个区块。即使奖励金额正确,也不能立即花费:Coinbase Transaction 的输出最早只能在高度比原区块高 100 的区块中使用。 [2]

可以把它想成一次抽奖:没人预先知道中奖结果,但结果公布后,人人都能迅速检查。矿工计算 hash,也就是数据的数字指纹,它也可以看成一个大整数。Bitcoin 区块的这个数值必须小于或等于称为 target 的门槛,这就是 Proof of Work 的要求。具体做法是,对保存区块主要汇总信息的 80 字节区块头,连续使用两次 SHA-256 哈希函数。矿工并不是逐笔破解付款,而是更改用于计算的数据,尝试新结果是否满足条件。 [3]

ASIC 是为特定计算任务设计的芯片;Bitcoin 挖矿 ASIC 不断对 80 字节区块头的不同版本计算双重 SHA-256。矿工改变的字段之一是 nonce,它是区块头中的一个四字节数字,但取值范围有限。遍历完后,可以修改 Coinbase Transaction 内称为 extra nonce 的额外数据。这会改变交易的汇总指纹 Merkle Root,进而改变区块头,产生更多可尝试的版本。失败一次并不意味着下一次更接近必胜。十分钟也不是对某台矿机的承诺,而是整个网络追求的平均间隔。 [3]

矿工有动力构建有效区块,因为被拒绝的提案不会带来可用奖励。但矿工的检查不能替代其他人的检查。Full Node 是独立验证 Bitcoin 规则的计算机,它检查交易、奖励和 Proof of Work。例如,一个区块如果创建了超出规则允许数量的比特币,即使矿工投入大量算力,Full Node 仍会拒绝它。运行自己的节点,意味着用户不必仅凭矿工声称区块正确就相信它。 [2] [4]

独立矿工可能等待很久才获得一次成功。Mining Pool 让参与者共同分配工作和收入。为了估算设备的贡献,运营者也接受满足较容易内部门槛的结果,这种结果叫 share。绝大多数 share 不足以满足 Bitcoin 网络的要求,只有一部分也满足更严格的网络条件。参与者的付款取决于所选结算模式、约定条款和矿池费用。加入矿池并不赋予矿工更改 Bitcoin 规则的权力。运营者也不一定拥有连接的矿机,找到区块的占比本身无法证明设备所有权。 [3]

计算成功后,完整区块还必须传到其他节点。两位矿工可能几乎同时找到不同的有效区块,都接在同一个前驱区块之后。网络的一部分于是暂时知道一条分支,另一部分知道另一条。节点跟随累计工作量最大的有效分支,也就是各区块所计工作量总和最大的分支。下一个区块可能使选择偏向其中一方。被放弃分支上的区块本身可能有效,但其奖励不会进入当前有效历史。因此,矿工既要迅速传播结果,也要在收到新的链顶后停止处理过时提案。 [4]

Hashrate 表示每秒进行的哈希尝试次数。矿工在全网算力中的占比,有助于估计成功频率,但不保证固定收入。收入也不是利润:还要扣除电力、冷却、设备、维护和矿池费用,停机可能进一步削弱结果。单位同样重要:TH/s 衡量计算性能,瓦特衡量消耗的电功率。高性能矿机在电价昂贵时仍可能亏损,一次幸运发现也不能证明长期盈利能力。 [3]

在自己的节点上,可以把 getblocktemplate 提供的提案,与实际找到区块的区块头、Coinbase Transaction 和普通交易进行比较。getblocktemplate 等命令属于节点的技术接口,并不是需要把钱交给它的服务。submitblock 把完成的区块提交给节点检查,但本地接受不保证区块永久留在全网历史中。查看矿池数据时,应区分三件事:提交的 share、被接受的 Bitcoin 区块,以及实际收到的付款。结合运营成本,才能判断挖矿的经济结果。 [5]

要获得更完整的理解,请将本词条与以下词条结合阅读: Proof of Work, Difficulty Adjustment, Block Subsidy, Transaction Fees, Mempool. 反向关联还来自: Proof of Work, Difficulty Adjustment, Block Subsidy, Halving.

DOC · 001Bitcoin Core v29.0: block assembler一手来源 DOC · 002Bitcoin Core v29.0: block validation一手来源 DOC · 003Bitcoin Developer Guide: Mining一手来源 DOC · 004Bitcoin whitepaper一手来源 DOC · 005BIP 22: getblocktemplate一手来源
修订日期: 来源优先 · 非投资建议