加密货币挖矿是如何运作的

· 7 分钟阅读

本指南讲解加密货币矿工在做什么以及为什么这样做:交易如何变成区块,哈希和 nonce 是什么,难度如何让出块保持节奏,奖励从哪里来,以及为什么大多数人在矿池中挖矿。全文以 Blocknet 为例,所以每个数字都是你可以核对的真实数字。

什么是加密货币挖矿?

简短回答

加密货币挖矿是工作量证明区块链添加新区块的方式。矿工把等待中的交易打包成一个区块,然后竞相为这个区块找到一个满足难度目标的哈希。第一个找到的矿工广播该区块,每个节点都会检查它,胜出者获得新产生的区块奖励。

挖矿同时完成两项工作。它为交易排序,让所有人对哪笔付款在先达成一致;它还按固定的计划发行新币,因此不需要信任任何人来创造货币。比特币在 2008 年提出了这个思路,如今许多币都在使用它,Blocknet 也是其中之一。有些链改用权益证明,例如 2022 年起的以太坊;工作量证明与权益证明的区别一文比较了两者。

区块里有什么?

区块是一批交易加上一个描述它的简短区块头。Blocknet 的区块头有七个字段:

字段 内容
版本(Version) 协议版本
高度(Height) 区块在链中的位置
前一个哈希(Previous hash) 上一个区块的 ID
默克尔根(Merkle root) 区块中所有交易的指纹
时间戳(Timestamp) 区块生成的时间
难度(Difficulty) 找到这个区块的难度
Nonce 矿工每次尝试时改变的数字

前一个哈希字段让区块连成链。每个区块都指向它前面的区块,所以修改任何一笔旧交易都会改变该区块的指纹,并破坏它之后的每一个链接。每个区块的第一笔交易是 coinbase 交易,它把奖励支付给找到该区块的矿工。

矿工如何找到区块?

简短回答

矿工对区块头做哈希,检查结果是否小于或等于网络的目标值;如果不是,就改变 nonce 再试一次。好的哈希函数让输出无法预测,所以唯一的胜出办法就是大量尝试。你的算力就是每秒尝试的次数。

哈希函数把任意输入变成一个看起来随机的固定长度数字。输入哪怕只改变一个比特,输出也会完全不同。把这个输出看作一个巨大的数字:如果它小于或等于目标值,区块就有效。目标值越低,能胜出的哈希就越少,平均需要的尝试次数也就越多。

在 Blocknet 上,每次尝试都是一次 Argon2id 哈希。8 字节的 nonce 作为密码,区块头的其余部分作为盐值,每次哈希都要处理 2 GiB 内存,才会得到一个 32 字节的结果。当矿工找到小于或等于目标值的哈希时,就把区块发送到网络。每个节点只需重复这一次哈希就能确认它,所花的工作只是找到它所需工作的一小部分。

Argon2id 详解逐步讲解了这种哈希的每个步骤,以及它为什么需要这么多内存。

什么是挖矿难度?

难度是决定目标值的数字。在 Blocknet 上,目标值等于 (2^256 − 1) 除以难度,这意味着难度大约就是全网平均找到一个区块所需的哈希次数。

这给了你一个快速读懂网络的方法。Blocknet 目标是每 300 秒一个区块,所以全网算力约等于难度 ÷ 300。举个例子,难度为 6,000,000 时,全网每秒大约进行 20,000 次哈希。

随着矿工来来去去,网络会调整难度,让出块保持节奏:

LWMA 还限制了单个异常区块对结果的影响:每个区块的出块时间至少按 1 秒、最多按 1,800 秒(目标的六倍)计算。如果出块快于每五分钟一个,难度就上升;如果慢于这个速度,难度就下降。

矿工如何获得收益?

每个区块都在它的 coinbase 交易中产生新币。在 Blocknet 上,coinbase 交易只有一个输出,金额恰好等于区块奖励,支付到矿工选定的地址。创世区块中没有任何交易,所以流通中的每一枚币都是挖出来的。

奖励遵循公开的计划。Blocknet 的奖励起始为每个区块 723.25 BNT,并平滑递减,每个 30 天的月份(8,640 个区块)下调一次。四年后总发行量约达 1 亿 BNT,此后每个区块永久支付 2 BNT 的尾部奖励,所以矿工始终有币可挖。

挖出的币要等 60 个区块(约五小时)后才能花费。这段等待让链上短暂的分叉先平息下来,然后新的奖励才能花费。

为什么大多数矿工加入矿池?

矿池把许多矿工的算力合在一起,让整个群体经常找到区块,然后按每个成员贡献的工作分配每笔奖励。独立挖矿时,一个小矿工可能要等几天或几周才能挖到一个完整的区块;在矿池中,同样的算力会带来稳定的一连串小额收益。

算一算就明白了。Blocknet 每天产生 288 个区块,所以你独立挖矿时每天预期挖到的区块数为 288 × (你的算力 ÷ 全网算力)。如果你的机器占全网的千分之一,平均每天可找到约 0.29 个区块,即每三天半一个区块,但实际间隔每次都会有所不同。

矿池用份额衡量你的工作。份额是满足矿池为你的连接设定的较低目标的哈希。每个份额都计入你应得的奖励部分,而同时满足网络完整目标的份额就是一个真正的区块,矿池会把它提交到区块链。在 bntpool.com 上:

如果你运行自己的节点,也可以独立挖矿(solo),保留你找到的每一个区块。挖矿指南介绍了这两种方式。

什么决定你的挖矿速度?

哈希函数决定哪种硬件表现好。比特币的 SHA-256 几乎不需要内存,所以如今大部分比特币挖矿由叫作 ASIC 的专用芯片完成。Blocknet 选择了 Argon2id,这是一种内存密集的函数,设计目标是抵抗 ASIC:每次哈希都要占满 2 GiB 内存,所以内存容量和内存带宽决定你的速度。

这改变了普通电脑的计算方式:

seine 测得的最好成绩是 AMD EPYC Zen 5 服务器(EPYC 9R45,32 个线程)上的 49.4 H/s,Apple M4 Max MacBook Pro 可达 30.9 H/s。硬件指南列出了测试过的每一代硬件的结果,2026 年 CPU 挖矿一文则解释了内存密集型币种为什么适合普通处理器。

谁来保证链的诚实?

每个节点都会检查每个区块:哈希满足目标值,交易有效,奖励完全正确。任何一项检查不通过的区块都会被拒绝,不管为它投入了多少工作。

当两个矿工几乎同时找到区块时,链会短暂分叉。Blocknet 节点跟随总工作量最大的链,也就是所有区块难度之和最大的链,所以只要下一个区块落在其中一边,分叉就会消除。这就是钱包要计算确认数的原因:在 Blocknet 上,10 个确认(约 50 分钟)即视为安全,任何节点都不会重组超过 100 个区块深度的链。

在你自己的电脑上试试

挖 Blocknet 只需三步:准备一个地址,下载 seine,运行它并接受默认矿池 bntpool.com。seine 会在挖矿时自行选择线程数、CPU 计算内核和内存布局,所以几分钟内你就能看到第一批份额。

说明

据 blocknetcrypto.com 介绍,Blocknet 计划在 2027-02-16 前后进行名为 Faraday 的网络升级,计划带来更轻量的工作量证明。上文的工作量证明细节描述的是 Faraday 之前的网络。seine 会在启动时以及每 12 小时检查一次新版本。

常见问题

加密货币矿工实际在计算什么?

矿工反复对区块头做哈希,每次改变一个叫作 nonce 的数字,直到结果小于或等于网络的目标值。在 Blocknet 上,每次尝试都是一次使用 2 GiB 内存的 Argon2id 哈希。没有人能预测哪个 nonce 会胜出,所以找到区块的唯一办法就是不断尝试。

挖出一个区块需要多长时间?

每个网络都设定自己的目标。比特币目标是每十分钟一个区块,Blocknet 目标是每五分钟一个区块,即每天 288 个区块。随着矿工加入或离开,难度会调整以保持这个节奏,所以无论全网算力是多少,出块时间都接近目标。

矿池里的份额是什么?

份额是满足矿池为你的连接设定的较低目标的哈希。份额证明你贡献了多少工作,而不必等到挖出完整的区块。在 bntpool.com 上,矿池会调整每个连接的份额难度,目标是每五分钟约十个份额,区块奖励按份额分配。

可以用普通电脑挖加密货币吗?

可以,前提是这种币的工作量证明是为普通硬件设计的。Blocknet 使用内存密集的 Argon2id,所以只要内存足够,台式机、笔记本、Mac 或服务器都能挖。每个挖矿线程约需 2 GB 内存,seine 会自动为你的机器算出合适的线程数。