比特币是怎么挖出来的
很多人对挖矿的第一印象是「用电脑跑一个程序,币就会慢慢冒出来」。这个印象不算错,但它跳过了最有意思的部分 —— 币为什么会冒出来、凭什么冒到你账上、以及那些电到底买到了什么。
先给结论:挖矿不是从哪里刨出币来,而是全网的机器在反复猜一个数字,谁先猜中谁就获得把这一批交易打包记账的资格,并领走这个区块新发行的币和里面的交易手续费。「挖」这个字是个比喻,真正发生的事情是竞争记账权。
这篇想把这件事从头讲一遍,讲到你能用自己的话复述出来为止。我们尽量不用一个专业词去解释另一个专业词 —— 如果哪一段做不到,那是我们没写好,欢迎写信指出来。
为什么记个账还要「挖」
先退一步。比特币要解决的问题其实很朴素:一群互相不认识、也没有共同上级的人,怎么维护同一本账。
你在银行转账,银行的服务器说了算,它记一笔你就少一笔。这套办法能跑,是因为大家都默认银行不会乱改账本。但如果没有银行呢?如果这本账要放在几万台互不信任的电脑上,谁来决定「下一页写什么」?
最直觉的想法是投票,一台机器一票。问题是网络上「一台机器」这个身份几乎不花钱 —— 我可以伪造出一万个身份,投票就没有意义了。这个问题在计算机领域被讨论了很多年,中本聪在 2008 年那份九页的论文里给的答案是:别按身份投票,按算力投票。
算力是要花钱的。你想在这个系统里获得更大的话语权,就得投入更多真实的电和设备。伪造身份很便宜,伪造算力不行。这就是挖矿存在的全部理由 —— 它是把「谁说了算」这件事,从「你是谁」换成了「你付出了多少」。
哈希:一台只能往前走的绞肉机
要理解怎么「按算力投票」,得先认识一个东西:哈希函数。
你可以把它想成一台绞肉机。你往里扔任何东西 —— 一句话、一本书、一部电影 —— 它都会吐出一串固定长度的字符。比特币用的这台机器叫 SHA-256,吐出来的永远是 256 个二进制位,写成十六进制就是 64 个字符。
这台绞肉机有三个性质,缺一个比特币就不成立:
- 同样的输入永远得到同样的输出。今天扔一句话进去和十年后扔同一句话进去,结果一模一样。
- 输入改一点点,输出面目全非。把一句话里的句号改成逗号,出来的 64 个字符会完全不同,看不出任何关联。
- 不能倒着推。拿到输出,没有办法反推输入是什么。想找到能产出特定输出的输入,只有一个办法 —— 一个一个试。
第三条是关键。它意味着这台机器制造了一种只能用蛮力解决的问题。而蛮力,是可以用钱买的。
那个猜数字的游戏,具体长什么样
现在把游戏规则摆出来。
矿工手上有一个叫区块头的东西,八十字节,里面装着几样固定的信息:版本号、上一个区块的哈希、这批交易的摘要(叫默克尔根)、时间戳、当前的难度目标,以及最后一格 —— 一个可以随便填的数字,叫随机数(nonce)。
矿工要做的事是:不停地改那个随机数,把整个区块头扔进绞肉机,看吐出来的 64 个字符是不是足够小。
「足够小」是什么意思?系统会规定一个门槛值。你算出来的那串数必须小于这个门槛才算数。因为哈希结果本质上是个巨大的随机数,要它小于某个很小的门槛,就像要它开头连着好几十个零 —— 概率极低,只能靠试的次数堆。
矿工不是在解一道有答案的数学题,没有什么公式能推出正确答案。它就是在穷举。你的机器每秒能试几百万亿次,全网每秒能试的次数还要再多几百万倍 —— 所有这些尝试里,绝大多数都是废的,只有极少数刚好撞上门槛以下。这个「浪费」不是设计缺陷,恰恰是设计目的,后面会讲到。
随机数那一格只有 32 位,也就是四十多亿种可能。以现在的机器速度,这四十多亿种组合零点几秒就试完了。所以矿工还会同时改另外几个地方 —— 比如打包进去的交易略微调整、时间戳走一秒、或者动一下自己那笔奖励交易里的一段自由数据。这些都会让整个区块头变样,绞肉机就得重算。
难度:让「十分钟」这个数字稳住的机制
门槛不是固定的。如果它固定,那么随着全世界接入的机器越来越多,出块速度就会越来越快,币会被提前发完。
比特币的处理办法是定期调整门槛:每产生 2016 个区块,系统回头看一眼这 2016 个块实际花了多久。理想情况下,按平均十分钟一个算,应该花两周整。
- 如果实际花的时间短于两周,说明全网算力涨了,门槛调低(难度调高),让它更难撞上;
- 如果实际花的时间长于两周,说明算力跑了,难度往下调,让剩下的机器容易一点。
这个调整有个上限,单次最多变化四倍,防止极端情况下系统失控。除此之外它完全自动,没有人在中间做决定,规则写在代码里,每个节点各自算、各自验证。
所以「大约十分钟出一个块」不是一个观测结果,是一个被主动维持的目标。实际的出块间隔忽长忽短,几十秒出一个和半小时出一个都很常见,只是长期平均被拉回十分钟附近。想直观感受这一点,可以去 mempool.space 这类区块浏览器上看最近几十个区块的实际时间戳,间隔的参差程度会比你想的大。
难度这件事对算账的人有个直接后果:你的机器速度没变,但你能分到的东西会随着别人不断加入而变少。这是很多人初算回本周期时漏掉的一项,我们在矿机多少钱、多久回本里单独展开。
矿工的钱从哪来:两笔,不是一笔
抢到记账权的人能拿到两部分收入。
第一部分是区块奖励。这是系统凭空发行的新币,写进这个区块的第一笔交易里(这笔交易有个专门的名字叫 coinbase 交易,和某个交易所同名纯属巧合)。目前每个区块的发行量是 3.125 BTC,这是 2024 年第四次减半之后的数字。
第二部分是交易手续费。这个区块里打包的每一笔用户交易,都会给出一点手续费,全部归打包者。网络拥堵的时候,大家为了插队会把手续费出得很高,这部分可以变得相当可观;网络清闲的时候,它可能只占矿工收入的很小一块。
顺带说一句机制上的细节:新挖出来的币不能马上花。协议规定这笔奖励要等 100 个区块之后才可动用,大约十六七个小时。这是为了防止链发生短暂重组时,凭空多出一笔无效的钱在市面上流转。
减半,和 2100 万这个上限的关系
区块奖励不是一直不变的。协议规定:每产生 210,000 个区块,奖励减半一次。按十分钟一个块推算,大约四年一次。
| 阶段 | 每个区块发行 | 大致时间 |
|---|---|---|
| 起始 | 50 BTC | 2009 年起 |
| 第一次减半后 | 25 BTC | 2012 年 |
| 第二次减半后 | 12.5 BTC | 2016 年 |
| 第三次减半后 | 6.25 BTC | 2020 年 |
| 第四次减半后(当前) | 3.125 BTC | 2024 年 |
把这条路径一直加下去 —— 50 加 25 加 12.5 加 6.25,每一项都是前一项的一半 —— 得到的是一个收敛的和。这就是总量上限 2100 万的来源。它不是有人拍板定了个整数,而是「每四年折半」这条规则自然算出来的结果。
对矿工来说,减半是一件很硬的事:收入的一半在某个区块高度之后凭空消失,而电费一分不少。每次减半前后,成本高的那批机器会被挤出去,全网算力短暂回落,难度随之下调,剩下的人分到的多一点,逐渐重新平衡。这个过程我们在减半对矿工意味着什么里单独讲。
走一遍:一个区块从诞生到被承认
把上面的零件拼起来,看一个区块完整的一生:
- 交易进入等候区。你从钱包发出一笔转账,它会被广播到全网,暂时待在各个节点的内存池里,还没被记进账本。
- 矿工挑单打包。矿工从等候区里挑交易 —— 通常优先挑手续费出价高的 —— 装进一个候选区块。同时把给自己的那笔奖励交易放在第一位。
- 算摘要。把这批交易两两配对做哈希,一层层往上归并成一个值,也就是默克尔根,塞进区块头。这样做的好处是:任何一笔交易被改动,这个根值都会变,篡改藏不住。
- 开始猜。改随机数、算哈希、比对门槛,没中就再改。每秒重复几百万亿次。
- 撞上了。某台机器算出的哈希小于门槛,立刻把这个区块广播出去。
- 全网验证。其他节点收到后各自核一遍:哈希对不对、有没有小于门槛、里面的交易合不合法、奖励金额有没有超发。验证只需要算一次哈希,非常快 —— 找答案很难,验答案极容易,这个不对称是整套机制的支点。
- 接上链。大家认可后,把它接在链的末端,然后立刻开始基于它争夺下一个块。
如果两台机器几乎同时撞上,网络上会短暂出现两个都合法的候选。这时各节点先接受自己先收到的那个,直到下一个区块出现 —— 接在谁后面,谁就成为主链,另一条上的那个块就作废了,行话叫孤块或者陈块。挖出孤块的矿工什么也拿不到,白干。这也是为什么大额交易通常要等几个确认才算安心。
为什么必须「浪费」这么多电
这是外界对比特币最集中的批评,也是最容易被误解的一点。所以值得单独说清楚。
那些算废了的哈希,看起来确实什么也没产生。但它们买到了一样东西:改写历史的代价。
假设你想篡改三个月前的一笔交易。你得重算那个区块,还得把它之后所有区块全部重算一遍,而且要算得比全网其他人加起来还快,才能造出一条更长的链让大家接受。这需要的算力和电,是天文数字。正是因为过去那些电真的被烧掉了,账本才不可能被便宜地改写。
所以这套机制的安全性和它的能耗是同一件事的两面 —— 能耗降下来,攻击成本也就跟着降下来。想看这件事在数量级上是什么规模,剑桥大学有一个长期在做的比特币电力消耗指数,方法学和口径都公开写着,比大部分二手引用可靠。
需要说明的是,这个取舍是有争议的。以太坊就选择了另一条路,在 2022 年把共识机制换成了权益证明,用抵押代币代替烧电 —— 挖矿这条路在那边已经不存在了,细节见以太坊还能挖吗。哪种更好不在这篇的讨论范围内,我们只说清楚比特币这一套是怎么运作的、代价是什么。
谁在挖:从一台笔记本到一整片厂房
最早的几年,普通电脑的处理器就能挖到币,中本聪自己也是这么挖的。后来大家发现显卡更适合干这种重复计算,效率高出一大截;再后来出现了专用芯片 —— 只会算 SHA-256、别的什么都干不了,但干这一件事的效率又高出几个数量级。
这条路一旦走上,就回不去了。今天用通用设备挖比特币,在能效上和专用机器差着几个数量级,电费远高于产出。这一点我们在用电脑和显卡还能挖比特币吗里用具体的量级算给你看。
另一个后果是单打独斗几乎不可能挖到东西。一台现代矿机的算力在几百 TH/s 的量级,全网在几百 EH/s 的量级,中间隔着大约一百万倍。按十分钟一个块推算,单机独立挖到一个区块的期望等待时间要用几十年来计。所以绝大多数人通过矿池参与,把算力凑在一起、按贡献分账 —— 这是什么是矿池那篇的内容。
51% 攻击:为什么它比听起来难
既然记账权按算力分配,那么一个自然的问题是:如果有人掌握了全网一半以上的算力,会怎么样?
先说他能做什么。掌握超过一半算力的人,可以比其他所有人加起来更快地造区块。这让他有能力做两件事:把自己发出的某笔交易从历史里抹掉(先花一笔钱,然后造一条不包含这笔交易的更长的链,让网络接受),以及拒绝把某些交易打包进区块。
再说他不能做什么 —— 这部分常被夸大。他不能凭空造出不属于自己的币,因为每一笔转账都要有对应私钥的签名,算力再大也变不出签名。他不能改动别人钱包里已有的余额。他不能修改区块奖励的数额或者提前把 2100 万挖完,那些规则由每一个运行完整节点的人各自验证,不合规的区块会被直接拒收。
所以这种攻击的破坏力是有边界的:它能撤销攻击者自己近期的交易,不能没收别人的资产。而代价是要持续投入超过全网其余部分总和的算力和电 —— 这是个巨大的数字,而且一旦被发现,他手上那些设备和币的价值会一起崩掉。用来攻击的成本,和攻击成功后能拿到的东西,通常不成比例。这就是这套机制的实际防线:不是「不可能」,而是「不划算」。
顺带一提,这也是为什么大额收款方要等确认数。确认数越多,攻击者要重算的区块就越多,翻盘所需的算力优势和时间就越离谱。
三个反复出现的误解
误解一:挖矿是在解有意义的数学题。不是。那些哈希计算除了证明「有人花了力气」之外,没有任何数学或科学价值,算出来的结果也不能拿去干别的。有些项目试图把这份算力导向有用的计算,但比特币这套没有 —— 它要的恰恰是一种无法走捷径、也无法复用的消耗。这一点也解释了为什么矿机不能拿来渲染视频或者跑模型:那颗芯片除了算 SHA-256 什么都不会。
误解二:币挖完了矿工就不干了。按当前节奏,最后一枚比特币要到下个世纪才会被发行完。而且区块奖励归零之后,矿工还有另一部分收入 —— 交易手续费。设计上,随着奖励逐次减半,手续费会逐渐成为主要激励。这个过渡能不能顺利完成,在技术圈里仍有争论,但「奖励一没矿工立刻全走」不是机制的本意。
误解三:全网算力越大,出块越快、币发行得越快。正好相反 —— 出块速度是被难度调整锁定的。算力翻倍,难度也会跟着翻上去,平均出块间隔还是十分钟左右。所以算力增长不会让币发得更快,只会让每一台机器分到的那份变薄。这句话是理解挖矿收益为什么会衰减的关键,也是下一篇算账的起点。
这套机制对你意味着什么
如果你是抱着「能不能挖点币」的念头点进来的,把上面这些串起来,其实已经能得到几个判断:
- 挖矿的产出不是固定的。它取决于你的算力占全网的比例,而分母一直在变大。任何承诺固定日收益的说法,都和这套机制的运作方式冲突 —— 这是骗局结构那篇的起点。
- 你买的是概率,不是产量。矿机不生产币,它只是提高你在每一轮猜数游戏里中签的机会。
- 电费是这门生意的主体成本。因为整套机制的本质就是把电转换成安全性,你参与的方式就是买电。
- 规则是公开的,没有内幕。难度怎么调、奖励多少、什么时候减半,全部写在代码里,任何人都能查。谁跟你说他有「内部渠道」拿到更高收益,那不符合这个系统的工作方式。
接下来最该看的一篇是现在个人还能挖吗:把账算给你看 —— 那篇把电费、设备、难度、回本周期逐项摆出来算。这一篇讲的是机器怎么转,那一篇讲的是这笔账算不算得平。
几个容易卡住的问题
挖矿到底在计算什么?
在反复计算区块头的哈希值。矿工不停改动区块头里的一个随机数,每改一次就算一次哈希,看结果是否小于系统设定的门槛。这个过程没有捷径,只能一个一个试,所以谁的机器每秒能试更多次,谁中签的概率就更大。
为什么出块时间是十分钟?
这是协议设定的目标值,靠难度调整来维持。每产生 2016 个区块,系统会回看这段时间的实际耗时:比预期快就调高难度,比预期慢就调低。实际的单个区块间隔忽长忽短,十分钟是被主动维持的长期平均值。
矿工的收入只有区块奖励吗?
不是,有两部分。一部分是协议凭空发行的区块奖励,当前每个区块 3.125 BTC;另一部分是这个区块里打包的所有交易支付的手续费。网络拥堵时手续费那部分会明显变大。
为什么比特币总量是 2100 万?
这不是拍板定的整数,是规则算出来的结果。区块奖励从 50 BTC 开始,每 210,000 个区块减半一次,把这个不断折半的序列全部加起来,得到的和收敛到 2100 万附近。
两个人同时挖到区块会怎样?
网络上会短暂出现两条都合法的分支,各节点先接受自己先收到的那个。等下一个区块出现,接在谁后面谁就成为主链,另一条上的区块作废,行话叫孤块。挖到孤块的矿工拿不到奖励。
这篇讲的是协议层面的规则:出块目标约十分钟、每 2016 个区块调一次难度、当前区块奖励 3.125 BTC、总量上限 2100 万。这些写在代码里,不随行情变,所以我们直接写。凡是会变的数字(电价、机器价格、全网算力)都在其他文章里以量级区间加查证年月的方式给出。
署名纪川是笔名,我们不给它编造资历 —— 判断这篇值不值得信,请核里面的规则和算法,不是核作者头衔。写法和数字处理原则见关于,发现问题请写信到 [email protected],更正会记进更正记录。