什么是工作量证明?
定义 · 工作量证明(PoW)
一种机制:谁先找到一个低于目标值的区块头哈希,谁就有权添加区块。找到它要猜非常多次;验证只要算一次哈希。
中本聪在 2008 的 比特币白皮书 里描述了它,基于 Adam Back 的 Hashcash,一个更早的想法,用来让垃圾邮件变贵。有效哈希就是证明。你不做功就拿不到它,而且任何人都能看出你做过。
本页后面会把每一部分都讲一遍,上面的框也能让你自己试:这是真实的比特币区块头格式,会在你的浏览器里实时计算哈希。想看挖矿的全局概念,可以看我们的 完整比特币挖矿指南。
工作量证明解决了什么问题?
比特币没有公司、银行或服务器来管。成千上万台电脑各自保存一份账本副本,它们必须对下一个区块是谁、付款发生的顺序达成一致。不然就有人能把同一枚币花两次。
网上用简单投票不行,因为任何人都能开一千台假电脑,投一千次票。这叫女巫攻击。工作量证明绕开了它:你有多少话语权,看的是你算了多少哈希,而哈希要电和硬件。
谁能影响下一个区块?
每个节点一票
攻击者免费启动 60 个假节点,就能在投票里压过 12 个诚实节点。
每个哈希一票
诚实矿工 88%攻击者 12%
这些 60 个节点还是共用攻击者的真实硬件,所以加起来也还是只有 12%。复制节点几乎不花钱,算哈希可不是。
比特币区块头里有什么?
矿工不会对整个区块做哈希。他们哈希的是它的 80 字节区块头,而区块头会承诺区块里的其他所有内容。下面是你在上方框里编辑过的 6 个字段:
| 字段 | 字节 | 它包含什么 | 谁能改动它 |
|---|---|---|---|
| 版本 | 4 | 这个区块遵循哪套规则 | 很少变化 |
| 上一个区块的哈希 | 32 | 上一个区块的哈希,把整条链连起来 | 每个区块都会更新 |
| 默克尔根 | 32 | 区块里所有交易的一个指纹 | 矿工,当交易或 extra nonce 改变时 |
| 时间 | 4 | 矿工宣称区块生成的时间(Unix 时间) | 矿工,在一定限制内 |
| Bits | 4 | 目标值,压缩后装进 4 字节 | 网络,每 2,016 个区块 |
| Nonce(随机数) | 4 | 一个可以免费再试一次的数字 | 矿工,每次尝试时 |
因为区块头里包含上一个区块的哈希,改动旧区块就会改掉它的哈希,下一块的区块头就对不上,再下一块也会断。我们在构建本页时,用 hero 里同一段代码,在我们的服务器上核对了来自 2009 的真实创世区块:
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
SHA-256 在比特币里怎么用?
SHA-256 会把任意输入变成一个 256 位的数字,用 64 个十六进制字符表示。比特币会在区块头上跑两次(大家叫它 SHA-256d)。对挖矿来说,关键属性很简单:
输入一样,输出就一样
确定性的
同一个区块头在任何电脑上都会得到同一个哈希。这就是为什么验证能成立。
256 位
固定大小
不管是短短一行还是一本书,哈希值永远是 64 个十六进制字符。
单向的
没有回头的捷径
你没法推算出某个输入,让它得到你想要的哈希。你只能不断尝试不同的输入。
≈ 50%
雪崩效应
改一个字符,大约会有一半的比特翻转。看看 hero 里的网格。
最后这点就是工作量证明的核心。哈希值离目标值很近,并不能告诉你下一次会更接近还是更远,所以没有什么取巧的路能直接找到有效区块。每个矿工跑的都是同一种彩票,你每秒算的哈希越多,就只是买到更多“票”。
什么是目标值?为什么要看前导零?
目标值是一个 256 位的数字。把区块的哈希当成数字来读,只要它小于等于目标值,区块就有效。因为小数字开头会有很多 0,所以目标值越低,显示出来的前导 0 就越多。十六进制里每多一个 0,平均要多猜 16 倍。
找到一个有效区块平均需要的哈希次数
- 开头的玩具区块 · 十六进制前导 0 有 4 个65,536
- 比特币最容易的目标(2009) · 十六进制前导 8 个零,bits 1d00ffff4,294,967,296
- 现在一个比特币区块· 约 20 个前导十六进制 0(实时估算)4.9 × 1023
网络每 2,016 个区块调整一次目标值,大约两周,这样不管算力进来多少或离开多少,区块都能保持大约每 10 分钟出一个。现在全网算力大约是 811 EH/s(实时,每小时更新)。调整机制怎么运作,我们在 比特币挖矿难度指南 里讲了;单位怎么读,算力说明 会讲清楚。
nonce 是什么?extra nonce 又是什么?
nonce(“只用一次的数字”)是一个 4 字节的字段,矿工每次猜测都会改它。它是区块头里唯一“就是为了被修改”而存在的字段。问题在于,4 字节也只够大约 4.3 十亿种取值,现代机器几乎一瞬间就能全跑完。
矿工的循环
- 01
把每个 nonce 都试一遍
0、1、2 一直到 4,294,967,295。这就是 4 字节能存的全部数值。
- 02
很快用完
一台 100 TH/s 的机器,大概 43 百万分之一秒就能把它们全试完。
- 03
修改额外 nonce
矿工会在自己的奖励交易(coinbase)里改一个备用字段。
- 04
新的默克尔根
那笔交易变了,所以 merkle root 也会变,每个 nonce 又会产出全新的哈希。
所以矿工还会改一个 extra nonce,也就是 coinbase 里多出来的几字节。coinbase 是区块第一笔交易,用来把奖励付给矿工。coinbase 一变,merkle root 就会变,也就等于又多了几十亿个全新的 nonce 可以试。在 矿池 里,矿池会给每个矿工分配各自的 extra nonce 范围,这样就不会重复别人算过的东西。
为什么找到一个区块很贵,但验证它很便宜?
用来挖到一个区块
≈ 4.9 × 1023 哈希
整个网络,所有机器一起算,大概猜十分钟。
实时估算,每小时更新一次。
用来验证
1 哈希
任何节点,哪怕是便宜的笔记本,也能把这段 80 字节的区块头哈希一次,并在远小于 1 毫秒内和目标值对比完成。
矿工必须不断试哈希,直到有一个落在目标值以下。其他人只要把区块头哈希一次再对比就行。这个成本差,就是为什么成千上万台普通电脑能验证整条链,而不用信任挖出这些区块的矿工。
下面你可以自己动手试试“搜索”这部分。这个演示用的区块格式比顶部的示例更简单,但本质还是同一个双重 SHA-256 抽奖,而且每个挖到的区块都会连到上一个。
互动 · 在浏览器里挖一个区块
真实 SHA-256d 工作量证明,简化版区块头
区块哈希(双重 SHA-256)
改一下交易内容,只改一个字母,哈希就会完全变掉。
尝试次数:0
你的算力:n/a
用时:0.0 s
什么是最长链规则?什么是 51% 攻击?
有时两个矿工几乎同时找到区块,网络会短暂出现两条版本。节点会跟随“总工作量”更多的那条链。大家常叫它“最长链”,但更准确是“最重的链”:少数几个高难度区块,可能比更多低难度区块更重。
想把一笔付款倒回去,攻击者得从那笔付款之前开始,造出一条比所有人都更“重”的链。每多叠一个新区块在上面(也就是一次确认),攻击者就更落后一步。白皮书算过概率。拖动滑块看看:
互动 · 攻击者追得上吗?
来自《比特币白皮书》第 11 节的公式
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
攻击者落后的区块数(确认数)。柱状图用对数刻度,从百万分之一到几乎确定。
当算力占比为 10% 时,在 6 次确认后改写一笔支付的概率是 0.024%,在 1 次确认后是 20.5%。
当算力占比达到 50% 或以上时,攻击者最终会赢。这就是 51% 攻击。很严重,但它也有局限:
掌握大部分算力时,攻击者可以
- 用自己的链替换最近的区块
- 把他们转给自己的币做双花
- 把一些交易排除在他们的区块之外
就算这样,他们也做不到
- 花掉别人钱包里的币
- 在区块奖励之外造币
- 替所有人改掉比特币规则
所以交易所对大额充值会等多个 确认。常见的经验值是 6 次。
为什么工作量证明要消耗这么多能量?
因为能量就是安全性。一个有效区块证明确实消耗了真实电力。想改写历史,攻击者至少得再花同样多的成本,还要在诚实网络继续前进时持续投入。
能量花到哪里了,它换来了什么
区块奖励和手续费
每个区块的新 BTC 加上手续费,发给找到它的人。
机器和电力
矿工最多会花到“这份奖励对他值多少钱”为止。
网络算力
这些投入最后都会体现为每秒哈希数。
篡改历史的成本
攻击者得在每个区块上都花得比所有人加起来还多。
用多少电、从哪来,这是个合理的讨论点。剑桥指数会跟踪各类预估,我们的 比特币挖矿能耗指南 也会把数字讲清楚。每次 减半 都会减少奖励里的新币部分,所以时间久了,手续费得承担更多这笔安全预算。
工作量证明 vs 权益证明:有什么区别?
权益证明(PoS)会从把币锁起来当押金的人里选出下一个出块者,而不是从烧电的人里选。以太坊在 2022 从工作量证明切换到了权益证明。下面是公平的并排对比:
| 工作量证明 | 权益证明 | |
|---|---|---|
| 谁来添加下一个区块 | 第一个找到低于目标值哈希的矿工 | 按质押比例选出来的验证者 |
| 是什么在保护它 | 在链外消耗的电力和硬件 | 锁在链里的币,作弊时可能会被没收 |
| 能耗 | 很高,这是设计使然 | 低 |
| 用来参与 | 机器和低价电力 | 要质押的币 |
| 结算 | 每多一次确认就更安全 | 明确的最终性检查点 |
| 主要批评点 | 能耗与挖矿集中度 | 质押更集中,设计也更复杂 |
| 历史记录 | 比特币,自 2009 起 | 以太坊,从 2022 起 |
比特币的开发者一直保留工作量证明,因为它的成本在系统之外,没人能用自己已经持有的币买下控制权。权益证明的支持者则强调更省电和更快的最终确定性。
Can you get mining rewards without running proof of work yourself?
Yes. With CloudMineCrypto you mine bitcoin for free from your phone or browser, with no hardware, noise or power bill. Claim the free 8-hour plan, and add more free plans by watching ads, playing games, completing offers and checking in daily. Your estimated BTC ticks up while your plans run, and you withdraw to your own wallet, Lightning included.
Each plan has a hashrate, and your estimate is that hashrate’s share of the whole network, times 6 blocks an hour, times the block reward. That’s the formula the app uses to estimate your rewards (rules and limits apply). Want more speed? Paid plans are an optional boost for fun. They usually mine less than they cost, and the price is shown before you confirm.
你要知道:奖励是预估值,会随网络变化,不保证一定拿到,而且方案不代表你拥有任何矿机或矿池。提现可能有额度限制,或需要验证。细节见 奖励规则 和 免费比特币挖矿指南。适用条款。
常见问题
用大白话说,工作量证明是什么?
它让“添加一个区块”必须付出真实的努力。矿工会一遍遍对区块头做哈希,不断改一个叫 nonce 的数字,直到结果低于目标值。找到那个哈希需要海量次尝试,但任何人只要做一次哈希就能验证。
比特币里的 nonce 是什么?
区块头里的一个 4 字节数字,矿工每次猜测都会改它。它大约有 4.3 十亿种可能取值。用完后,矿工会改 coinbase 交易里的额外 nonce,这会生成新的默克尔根,也就得到一整套新的哈希可试。
为什么比特币要把 SHA-256 计算两次?
比特币用 SHA-256 对 80 字节的区块头做哈希,然后再把结果哈希一次。中本聪从没解释过为什么这么选。一般的理解是:它能防长度扩展攻击,并多给一层安全余量。
51% 攻击能让人做到什么?
如果有人掌握了大部分算力,就能私下挖出一条更长的链,再用它替换最近的区块。这样他们可以对自己的币做双花,或者阻止某些交易进块。但他们不能花别人的币,不能在规则之外凭空造币,也不能替所有人改规则。
权益证明比工作量证明更好吗?
它用的能量少很多,安全性来自被锁定当作质押的币。工作量证明把安全性绑定到链外成本上,也就是电力和硬件,并从 2009 年起一直支撑着比特币运行。两者取舍不同,所以哪个更好,取决于你看重什么。
Can I get bitcoin mining rewards without my own hardware?
Yes. In the CloudMineCrypto app you claim free mining plans (the free plan, ads, games, offers and a daily check-in) and your estimated BTC ticks up while they run, then you withdraw to your own wallet. Rewards are estimates based on your plan’s hashrate and live network data, they aren’t guaranteed, and a plan doesn’t give ownership of any hardware.
来源与延伸阅读
- 《Bitcoin: A Peer-to-Peer Electronic Cash System》(白皮书) · 中本聪,bitcoin.org
- 区块链指南:区块头、工作量证明、coinbase · 比特币开发者文档
- 挖矿指南:独立挖矿、矿池、getblocktemplate · 比特币开发者文档
- 难度 · Bitcoin Wiki
- 确认 · Bitcoin Wiki
- 剑桥比特币用电量指数 · 剑桥另类金融研究中心
- 挖矿面板:算力、难度、最近区块 · mempool.space
本页实时数据来自 CloudMineCrypto API 或旁边标注的公共区块链数据服务,按计划定时刷新,并在页面上标明来源。本指南仅供学习,不构成财务建议。CloudMineCrypto 不是投资产品;应用中的奖励均为估算值,不保证获得。
你已经知道它怎么运作了。现在看它实际跑起来。
在 CloudMineCrypto 应用中领取一个 8 小时的免费挖矿方案,根据实时网络数据查看你的预估 BTC 不断增长。无需硬件,无需银行卡。