第 4 章 · Bitcoin 为什么被发明
数字世界里,怎样让同一份钱不能被花两次?
- 练习的能力
- Mental ModelProtocol Literacy
- 动手
- 在区块浏览器上找一个 Bitcoin 区块,数清它包含多少笔交易、奖励多少、难度是多少。
- AI Lab
- 让 AI 用一段伪代码解释挖矿,再让它算一次:算力翻倍以后,出块时间为什么没有变快。
一个现实问题
你拍了一张照片,发给朋友。发完之后,你手机里那张照片还在。
这是数字世界的基本性质:复制的成本几乎为零,发送等于复制。 音乐、文档、视频、代码,全都如此。
那么,为什么转账不是这样?
你给朋友转 100 元,你的余额少了 100。这 100 不是被「复制」过去的,是被「移动」过去的。可是屏幕上的数字明明也只是数据,凭什么它不能被复制?
答案在第 2 章:因为有一个机构在一份账本上,同时做了减和加两件事。是这家机构在保证「移动」,而不是数据本身有什么特殊。
现在把这家机构拿掉。
假设有一个文件,里面写着「这是一枚数字硬币,编号 000731」。你把它发给 A。发完之后,这个文件还在你电脑上。你再发给 B。
A 有一份,B 有一份,你自己还有一份。三份一模一样,没有任何差别,也没有任何人能说哪一份是「真的」。
所以问题是:
在一个没有中心机构的数字世界里,怎样让同一份钱不能被花两次?
这个问题在计算机科学里被讨论了二十多年。第 3 章已经把它的难点定位到了那一层:不是伪造,是顺序。 这一章要看的是 2008 年有人给出的那个具体答案。
思想实验
把第 1 章的村子搬到网上,一版一版地试。
第一版:贝壳变成文件。
村里把每一枚贝壳做成一个文件,比如 shell-000731.txt。谁持有文件,谁就拥有这枚贝壳。
三分钟后失败。复制粘贴之后,一枚变成两枚。这一版连伪造都挡不住。
第二版:加上第 3 章的暗记。
不再传文件,改成传条子。每个人有一枚只有自己能用的私章,转账时写一张条子「编号 000731 归 B 所有」,盖上自己的章。全村人都能验证这张条子确实是章主人盖的。
伪造解决了:没有章,你写不出一张有效的条子。
但你可以做另一件事:对 B 写一张「000731 归 B」,同时对 C 写一张「000731 归 C」,两张都盖自己的真章。
两张条子单独看都完全合法。B 和 C 各自验证之后都会确信自己收到了这枚贝壳。这就是第 3 章那个「在房间两头说两句话」的麻烦,在数字世界的标准形态。
第三版:全村共用一本公开的账本,谁先被记上算谁的。
思路对了,但「先」这个字把问题原样退了回来。网络上没有一个客观的先后——B 那边看到你的条子更早,C 那边看到他的更早。谁来宣布顺序? 一旦有人宣布,他就是第 2 章的老王。
第四版:把「宣布顺序」这件事变成一件必须真实花钱才能做到的事。
规则改成这样:
- 所有人把收到的条子都攒在一个筐里。
- 任何人都可以尝试把筐里的一批条子抄成一页,接在上一页后面。
- 但要让这一页被大家承认,必须先做完一件很费力的事——一道只能靠一次次瞎猜才能碰上答案的题,猜中之后所有人一眼就能验证它猜对了。
- 全村认「最长的那一串页」。谁想推翻已经写下的某一页,就得从那一页开始重新做题,并且赶上并超过其他所有人已经累积的工作量。
现在回头看第二版那个双花:你的两张条子进了同一个筐。抄页的人只能抄其中一张——抄两张会让这一页直接作废,因为同一枚贝壳出现了两次,任何人一验就知道。
所以冲突在这里被消解了:不是有人裁决哪张条子是真的,而是只有一张能被写进最长的那一串。
请注意这一版真正的巧妙之处。它没有回答「哪张条子在物理上更早」——这个问题本来就没有答案。它做的是另一件事:让「推翻已经写下的顺序」变成一件必须持续烧钱的事。
你来决定
村里要正式选一条规则,决定「谁有权写下一页」。四个方案。
观察结果
四个方案表面上在选「谁有权写」,实际上都在做同一件事:
给「宣布顺序」这个权力,标一个无法伪造的价格。
把它们排开看:
| 方案 | 权力的价格是什么 | 能不能伪造 | 作恶的代价 |
|---|---|---|---|
| 按持有量 | 账面上的数字 | 不能伪造,但可以集中 | 几乎为零 |
| 先到先得 | 网络速度 | 可以无限刷 | 零 |
| 烧能量 | 真实消耗的电力 | 不能伪造 | 烧掉的成本全部沉没 |
| 押保证金 | 被锁住的资产 | 不能伪造 | 保证金被没收 |
第三列和第四列是全部的重点。一条规则要能撑住,必须同时做到两件事:这个价格不能被凭空变出来,而且作恶要真的赔钱。
再看一个更重要的结论。回到最初那个问题——「怎样让同一份钱不能被花两次」——现在答案已经很清楚了,而且它和大多数人的直觉相反:
不是靠保护那份数据。 数据依然可以被随意复制,你的转账记录全世界都能抄走一份。
是靠让所有人对顺序达成一致,并且让推翻这个顺序变得昂贵。 你的两张条子里,只有一张进了最长的那一串。另一张不是被销毁了,它只是永远没被接受。
这句话请反复念几遍。它是整个 Bitcoin 设计的全部内核,而且它同时解释了为什么这套系统必须慢、必须贵、必须有奖励。
建立模型
一笔转账要真正生效,走的是这条路:
- 一张盖了章的条子
- 被广播给所有人
- 躺在公共的筐里
- 被抄进新的一页
- 这一页接在上一页后面
- 后面又接了更多页
第二个模型解释了这套系统为什么能长期稳定。它是一个负反馈回路:
- 更多人来做题 → 出页速度变快
- 系统每隔一段时间自动检查:最近这些页出得比预定节奏快还是慢
- 出得快,就把题调难;出得慢,就把题调简单
- 速度回到预定节奏
这个回路有一个非常反直觉的后果,值得单独拎出来:
全网算力翻倍,出页速度不会变快。 它只会让题变难一倍,节奏维持原样。
换句话说,算力买不到速度,只能买到"在这段时间里由谁来写"的概率,以及"推翻历史有多贵"。 这是初学者最常搞错的一件事,待会儿的 AI Lab 专门考它。
第三个模型是关于「稀缺」的。物理世界的稀缺来自物质本身,数字世界没有这个条件,所以必须靠三件事撑起来:
| 条件 | 它在问什么 | 谁能改 |
|---|---|---|
| 总量规则 | 最多会有多少,按什么节奏发出来 | 规则写在每个人跑的软件里 |
| 修改路径 | 想改总量需要什么条件 | 必须说服绝大多数人同时换软件 |
| 验证成本 | 普通人能不能自己查一遍全部历史 | 只要人人能验,规则就骗不了人 |
第三条最容易被忽略,却是前两条的地基。如果只有少数几台超级计算机才能验证账本,那么规则有没有被偷偷改过,你只能听他们说。 这就是为什么「一台家用电脑要能跑得动一个完整节点」这件事,在设计上被看得极重——它直接决定了第 3 章那把尺子上,你站在哪一档。
最后是资产的记法。这套系统没有「账户余额」这个东西,它记的是一张张没被花掉的条子:
- 你收到一笔钱,就是多了一张写着你名字的条子。
- 你要花钱,就把若干张旧条子整个作废,生成一张给对方的新条子,外加一张找零给自己的新条子。
- 你的「余额」是所有还没被作废的条子加起来的结果,不是某处存着的一个数字。
这个记法有一个直接好处:要检查一笔钱有没有被花过,只需要看那张条子在不在「还没被作废」的集合里,不需要回溯全部历史。双花在验证层面变成了一次查表。
它叫什么
现在给名字。
同一笔钱被成功花出去两次。
它是数字货币的根本难题:数据可以复制,签名可以对两个人各签一次,两笔在单独看的时候都完全合法。
在有中心机构的系统里,它由机构扣减余额来防止;没有机构的时候,只能靠对顺序达成一致来防止。
在一个复制成本为零的世界里,让某样东西的数量受到可验证的规则约束。
注意它稀缺的方式:不是这份数据难以复制,而是**「哪一份算数」这件事由全网共同维护的记录决定**,而修改这份记录的代价极高。
要获得写下一页的资格,必须先完成一件确实消耗了资源的计算——反复尝试直到碰上一个满足条件的结果。
它有两个关键性质:做起来极慢,验起来极快。全世界的机器要算很久才能找到答案,而任何人拿到答案后一瞬间就能确认它是对的。
这个不对称是整套机制的支点:作恶需要付出真实成本,检查作恶却几乎免费。
参与工作量证明竞赛,争取写下一页并获得奖励的行为。
「挖矿」这个比喻容易造成误解。矿工真正在做的不是「挖出」新币,而是替整个网络提供排序服务,新币只是这项服务的报酬。
报酬由两部分组成:每写成一页可以按规则铸造一笔新币,加上这一页里所有交易支付的手续费。第一部分按固定的时间表递减,长期来看,第二部分会变成主要收入。
系统每隔固定数量的页自动检查出页节奏,并据此调高或调低题目难度,让节奏维持在预定值附近。
它就是上面那个负反馈回路。它保证了出块节奏不随全网算力变化而变化,也因此保证了新币的发行速度可以被提前写死。
每写成固定数量的页之后,铸造新币的奖励减少一半。
值得注意的是它的触发方式:按页数触发,不按日历触发。所以它具体落在哪一天,取决于这段时间全网的实际出页节奏,只能估算,不能预定。
还没有被花掉的那些「条子」。
一笔交易的作用是:作废若干张旧条子,生成若干张新条子。你的余额就是属于你的所有未作废条子之和。
这个模型和「账户余额」模型各有取舍,第 9 章会对比它们。
收成一句话:
Bitcoin 不是一种更好的支付方式,它是第一个「没有发行者的数字稀缺资产」。
它用真实消耗的资源,买到了一样别的办法买不到的东西:在没有任何管理员的前提下,让一群陌生人对同一份历史达成一致。
动手
不需要任何账号,不需要任何资产。二十分钟。
打开一个区块浏览器,找到最新的那个区块。 随便搜一个「Bitcoin 区块浏览器」,挑一个能打开的就行,不同浏览器显示的字段大同小异。
记下四个数字:区块高度、交易笔数、区块大小、出块时间。
找出这个区块的奖励。 翻到交易列表的第一笔,它和其他所有交易长得不一样——它没有来源。
这一笔就是铸造新币的那一笔。把它拆成两部分记下来:按规则铸造的部分,和这个区块里所有交易手续费的总和。
算一下后者占总奖励的比例。这个比例是一个很有意思的长期指标,第 26 章会回到它。
记下当前的难度值,以及距离下次调整还有多少个区块。
然后往回翻几次调整记录,看看难度是怎么变的。你会发现它一直在上下浮动,但出块的平均间隔始终稳定在同一个量级。这就是那个负反馈回路在你眼前运转。
连续看十个区块的时间戳,算出相邻区块的间隔。
你会看到有的间隔一分钟,有的间隔半小时。平均值是稳定的,单次是随机的。
这个观察在第 6 章非常重要:它意味着「等一个确认」这件事,等待时间本身就是不确定的。
最后做一次时间旅行。 把区块高度改成 1,看看最早的那些区块长什么样。
记下三处差别:交易笔数、区块大小、铸造奖励。这三个数字的变化,就是这套系统十几年运行史的缩影。
把这五步的结果写成半页纸。 它是你的阶段作品里第一份真正的链上数据。
AI Lab
分两步,第二步是真正的考题。
第一步,让它写伪代码:
用二十行以内的伪代码,写出一个矿工在做什么。
要求包含:候选区块怎么组装、反复尝试的是什么、什么条件算成功、
成功之后广播什么、其他节点收到之后如何验证。
不要用任何具体的库或语言 API,只写逻辑。
每一行后面用一句中文注释说明这一行在做什么。第二步,问一道它很可能答错的题:
假设从明天起,全网算力永久性地翻了一倍,其他条件都不变。
问一:从长期看,平均出块时间会变成原来的几分之几?
问二:在下一次难度调整发生之前的那段时间里,出块会变快吗?
问三:全网算力翻倍,对「推翻一个已有区块的成本」有什么影响?
每一问都要写出推导过程,不要只给结论。第二问是关键。正确答案是:长期不变,但在下一次调整生效之前会暂时变快。 这两句话必须同时说出来,只说其中一句都算没答完整。
很多模型会在问一上答「变成一半」——它把算力当成了产能。产能翻倍,产量不变,这正是这套系统最反直觉的地方。 难度调整是一个负反馈,它的存在就是为了消化掉算力的变化。
问三也值得看它怎么答。算力翻倍不影响出块速度,但确实让推翻历史的成本翻倍了。 一个把这三问都答对的模型,说明它真的理解了这套机制;答错任何一问,都是一次很好的学习机会——去追问它,比自己读十遍定义有效。
AI 说完之后,你必须自己验证
- 伪代码里有没有一个不断递增的随机数,以及一个「结果是否小于目标值」的判断。没有这两样,它写的不是挖矿
- 它有没有把「难度」和「出块时间」的因果搞反:是难度决定出块时间,出块时间反过来触发难度调整,这是一个闭环
- 第二问的答案必须是「不变」。回答「快一倍」的,直接判错,并追问它难度调整发生在什么时候
- 追问「调整前那段时间呢」,正确答案是出块会暂时变快,直到下一次调整把节奏拉回来——只答「不变」而说不出这个过渡期的,理解得不完整
- 它说验证一个区块需要做什么时,有没有区分「找答案很慢」和「验答案很快」这两件事
- 凡是它给出具体数字(奖励、难度、间隔、算力),核对它有没有标明时间点;没标的一律当作未验证
真实案例
2008 年 10 月,一份九页的论文被发到一个密码学邮件列表上,标题是「一种点对点的电子现金系统」。它没有提出任何一项全新的技术——工作量证明、数字签名、哈希链,这些零件当时都已经存在。
它的贡献是把这些零件组装起来,用「最长链 + 工作量证明」解决了那个悬了二十多年的排序问题。
2009 年 1 月,第一个区块被创建。它里面嵌了一句当天报纸的头条,内容和银行救助有关。这句话没有任何技术作用,它是一个时间戳,也是一句态度。
请注意这一年的背景。 这不是一个技术故事的开头,是第 1 章和第 2 章那些问题在一个特定时刻集中爆发之后,有人给出的一个回答。
早期版本的代码里有一个数值溢出漏洞。有人利用它构造了一笔交易,凭空产生了远超总量上限的币,并且这笔交易被正常打包进了区块。
几个小时内漏洞被发现、修复,新版本客户端发布,网络转到了不含这笔交易的分支上。
这件事有两层意义,缺一不可。第一层:规则是由代码执行的,代码会有 bug,「数学保证」不等于「实现正确」。 第二层:修复它靠的是足够多的人自愿升级软件,没有任何人有权强制执行。
这两层合起来,正是第 3 章那次 2016 年事件的预演。一条链的规则从来不是刻在石头上的,它是「此刻绝大多数人正在运行的那份代码」。
多条采用工作量证明的小型公链发生过深度重组攻击:攻击者掌握了超过全网一半的算力,把已经确认的交易推翻,实现了双花。
这些事件的共同点不是技术上有什么新突破,而是经济账:这些链的全网算力很小,攻击者只要在算力租赁市场上短期租用足够的算力,成本就可能低于收益。
这是第 3 章那个「代币归零还能不能运行」问题的实物版本。 一条链的安全性不是一个技术属性,是一个价格:推翻它要花多少钱,推翻它能赚多少钱。两个数字的差额就是这条链的安全边际。
多家交易所在那之后提高了相关资产的充值确认数要求。确认数要等几个,从来不是一个固定答案,第 6 章会讲怎么判断。
改一个变量
好处显而易见:确认更快,体验更好。
代价藏在网络延迟里。一个新区块要传遍全球需要时间,如果出块间隔和传播时间在同一个量级,经常会出现两个矿工几乎同时出块,网络被迫在两个分支之间反复摇摆。
结果是:单个确认的含金量大幅下降。你可能要等三十个确认,才相当于原来一个确认的安全性。总等待时间不一定缩短,但网络的不确定性明显上升。
这就是为什么不同的链在这个参数上做了完全不同的选择,而且每一种选择都拖着一串后果。第 8 章会把这串后果摊开。
矿工的长期收入有保障了,网络安全的资金来源不再依赖手续费市场——这确实解决了一个真实存在的长期问题。
代价是稀缺性没了。一个会持续增发的资产,它的定位就从"数字黄金"变成了别的东西,而围绕它形成的全部叙事和持有理由都要重写。
更关键的是第二个层面:这个改动本身需要绝大多数人同意换软件。 谁会同意?现有持有人不会。所以这个假设真正揭示的是一件事——规则的稳定性不来自代码,来自持有人和矿工的利益结构。 第 20 章会用这个视角重新看所有代币的供应设计。
能耗问题解决了,参与门槛降低了,写页的成本大幅下降。
但成本下降本身带来一个新问题:作恶的代价也从"烧掉的电"变成了"可能被没收的押金",而押金是链上的资产,它的价值由这条链自己的市场决定。一旦价格大幅下跌,安全预算同步缩水。
烧电的成本是外部的、真实的、和这条链的币价没有直接绑定;押金的成本是内部的、自我指涉的。这不是哪个更好的问题,是两种不同的风险结构。 第 8 章会正面比较它们。
这个假设能一次照出好几件事。
出块还会继续,因为难度会自动降到这个矿工能承受的水平。系统不会停。
但它彻底失去了安全性。 这个矿工可以随意重排交易、推翻历史、实施双花,没有任何人能阻止他——注意,他依然不能凭空创造币,也不能花别人的钱,因为那些要靠签名和规则来验证,而验证是每个用户自己做的。
这个区分极其重要:共识保护的是顺序,密码学保护的是所有权。 矿工能攻击前者,攻击不了后者。第 5 章整章都在讲后者是怎么做到的。
带走的问题
从十八问里挑三问,用在这一章。
Bitcoin 是第一个能把这一问答得干干净净的系统:没有这个代币,这套机制根本跑不起来。
因为矿工必须被支付,而支付的对象必须是这条链自己能凭规则创造和转移的东西——如果用法币支付,就需要一个银行账户和一个发工资的人,整套设计立刻塌回中心化。
以后看到任何一个项目,用这一条做基准线:它的代币是不是机制运转的必要零件,还是只是一层贴上去的融资和积分? 大多数项目在这条线前面就停住了。
这条链的安全由谁买单?
有两个付款人。新币的铸造——这部分实际上由所有持有人共同承担,方式是稀释。交易手续费——这部分由使用者承担。
设计上,第一部分会持续衰减,第二部分必须逐步接上。这个交接能不能完成,是这套系统最长期的一个开放问题,没有人现在就能给出答案。第 7 章会讲手续费市场是怎么形成的。
这套系统的全部稳定性,都压在一句话上:对矿工来说,老老实实挖矿的收益,高于攻击网络的收益。
拆开看有三层:诚实挖矿有稳定的收入;攻击需要巨额的前期投入;而攻击一旦成功,这条链的价值下跌,他手里的设备和币也跟着贬值。
第三层最关键,也最脆弱。 如果攻击者本来就不持有这条链的资产,甚至在别处做空它,第三层就不成立了。小链被攻破的案例,几乎全是这一层失效导致的。
本章自测
现金是物理的:给出去就不在你手里了,「移动」是物理性质自带的。
数字数据不是。发送等于复制,签名可以对两个人各签一次,两笔在单独看的时候都完全合法。
所以数字世界里,「同一笔钱只能花一次」必须靠别的东西来保证:要么有一个机构在一份账上同时做减和加,要么让所有人对交易顺序达成一致。 没有第三种办法。
证明有人为了争取写下这一页的资格,确实消耗了资源。
它成立的支点是一个不对称:找答案极慢,验答案极快。 全网机器要算很久才能碰上一个合格的结果,而任何人拿到这个结果后瞬间就能确认它是对的。
这个不对称同时做到了两件事:伪造身份不再有用(题不认身份,只认算力),推翻历史变得昂贵(要重做那之后所有页的工作量,还要追上别人新增的进度)。
长期不变。难度调整会把题调难一倍,节奏拉回预定值。
但要补上一句:在下一次调整生效之前的那段时间里,出块确实会暂时变快。 只说「不变」的答案不完整。
那么算力买到了什么?两样东西:这段时间里由你写页的概率,以及整条链抵抗历史被推翻的能力。它买不到速度。
黄金的稀缺来自物理世界:地壳里就那么多,开采要花真实成本,谁也改不了这个事实。
Bitcoin 的稀缺来自规则加验证:总量写在每个人运行的软件里,任何一个普通用户都能自己查验有没有超发。
最大的差别是修改路径。 黄金的总量不可能通过开会改变;Bitcoin 的规则理论上可以改,只要说服绝大多数人同时换软件。
所以它的稀缺是一种社会性稀缺——不是不可能改,是改的协调成本极高,而且所有持有人的利益都在反对它。这既比很多人想的脆弱,也比很多人想的坚固。
没有标准答案,但检查这几件事。
第一,攻击它要花多少钱? 租用足够算力或买入足够质押资产的市场成本,是一个可以估算的数字。
第二,攻击成功能赚多少钱? 能双花的最大金额,通常取决于交易所和大额场景的确认数要求。
第三,这两个数字的差额是多少,以及它随币价怎么变? 价格下跌时,第一个数字会跟着跌,第二个不一定。
第四,验证的门槛高不高? 普通人能不能用一台家用电脑独立验证全部历史。如果不能,你对这条链的全部信任都建立在别人的说法上。
能把前三条写成三个具体数字的人,已经超过了绝大多数看着排行榜做判断的人。第 24 章会把这套算法扩展到所有类型的协议。
一句话带走
Bitcoin 创造的是没有中央发行者的数字稀缺资产。