Crypto OS
Non-Technical Crypto OS第一阶段 · Crypto 为什么出现

第 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 章的老王。

第四版:把「宣布顺序」这件事变成一件必须真实花钱才能做到的事。

规则改成这样:

  1. 所有人把收到的条子都攒在一个筐里。
  2. 任何人都可以尝试把筐里的一批条子抄成一页,接在上一页后面。
  3. 但要让这一页被大家承认,必须先做完一件很费力的事——一道只能靠一次次瞎猜才能碰上答案的题,猜中之后所有人一眼就能验证它猜对了。
  4. 全村认「最长的那一串页」。谁想推翻已经写下的某一页,就得从那一页开始重新做题,并且赶上并超过其他所有人已经累积的工作量。

现在回头看第二版那个双花:你的两张条子进了同一个筐。抄页的人只能抄其中一张——抄两张会让这一页直接作废,因为同一枚贝壳出现了两次,任何人一验就知道。

所以冲突在这里被消解了:不是有人裁决哪张条子是真的,而是只有一张能被写进最长的那一串。

请注意这一版真正的巧妙之处。它没有回答「哪张条子在物理上更早」——这个问题本来就没有答案。它做的是另一件事:让「推翻已经写下的顺序」变成一件必须持续烧钱的事。

你来决定

村里要正式选一条规则,决定「谁有权写下一页」。四个方案。

观察结果

四个方案表面上在选「谁有权写」,实际上都在做同一件事:

给「宣布顺序」这个权力,标一个无法伪造的价格。

把它们排开看:

方案权力的价格是什么能不能伪造作恶的代价
按持有量账面上的数字不能伪造,但可以集中几乎为零
先到先得网络速度可以无限刷
烧能量真实消耗的电力不能伪造烧掉的成本全部沉没
押保证金被锁住的资产不能伪造保证金被没收

第三列和第四列是全部的重点。一条规则要能撑住,必须同时做到两件事:这个价格不能被凭空变出来,而且作恶要真的赔钱

再看一个更重要的结论。回到最初那个问题——「怎样让同一份钱不能被花两次」——现在答案已经很清楚了,而且它和大多数人的直觉相反:

不是靠保护那份数据。 数据依然可以被随意复制,你的转账记录全世界都能抄走一份。

是靠让所有人对顺序达成一致,并且让推翻这个顺序变得昂贵。 你的两张条子里,只有一张进了最长的那一串。另一张不是被销毁了,它只是永远没被接受。

这句话请反复念几遍。它是整个 Bitcoin 设计的全部内核,而且它同时解释了为什么这套系统必须慢、必须贵、必须有奖励。

建立模型

一笔转账要真正生效,走的是这条路:

  1. 一张盖了章的条子
  2. 被广播给所有人
  3. 躺在公共的筐里
  4. 被抄进新的一页
  5. 这一页接在上一页后面
  6. 后面又接了更多页
最后一格才是安全感的来源。前五格完成不代表结束,第 6 章会讲清这一点。

第二个模型解释了这套系统为什么能长期稳定。它是一个负反馈回路

  1. 更多人来做题 → 出页速度变快
  2. 系统每隔一段时间自动检查:最近这些页出得比预定节奏快还是慢
  3. 出得快,就把题调难;出得慢,就把题调简单
  4. 速度回到预定节奏

这个回路有一个非常反直觉的后果,值得单独拎出来:

全网算力翻倍,出页速度不会变快。 它只会让题变难一倍,节奏维持原样。

换句话说,算力买不到速度,只能买到"在这段时间里由谁来写"的概率,以及"推翻历史有多贵"。 这是初学者最常搞错的一件事,待会儿的 AI Lab 专门考它。

第三个模型是关于「稀缺」的。物理世界的稀缺来自物质本身,数字世界没有这个条件,所以必须靠三件事撑起来:

条件它在问什么谁能改
总量规则最多会有多少,按什么节奏发出来规则写在每个人跑的软件里
修改路径想改总量需要什么条件必须说服绝大多数人同时换软件
验证成本普通人能不能自己查一遍全部历史只要人人能验,规则就骗不了人

第三条最容易被忽略,却是前两条的地基。如果只有少数几台超级计算机才能验证账本,那么规则有没有被偷偷改过,你只能听他们说。 这就是为什么「一台家用电脑要能跑得动一个完整节点」这件事,在设计上被看得极重——它直接决定了第 3 章那把尺子上,你站在哪一档。

最后是资产的记法。这套系统没有「账户余额」这个东西,它记的是一张张没被花掉的条子

  • 你收到一笔钱,就是多了一张写着你名字的条子。
  • 你要花钱,就把若干张旧条子整个作废,生成一张给对方的新条子,外加一张找零给自己的新条子。
  • 你的「余额」是所有还没被作废的条子加起来的结果,不是某处存着的一个数字。

这个记法有一个直接好处:要检查一笔钱有没有被花过,只需要看那张条子在不在「还没被作废」的集合里,不需要回溯全部历史。双花在验证层面变成了一次查表。

它叫什么

现在给名字。

双花Double Spending

同一笔钱被成功花出去两次。

它是数字货币的根本难题:数据可以复制,签名可以对两个人各签一次,两笔在单独看的时候都完全合法。

在有中心机构的系统里,它由机构扣减余额来防止;没有机构的时候,只能靠对顺序达成一致来防止。

数字稀缺Digital Scarcity

在一个复制成本为零的世界里,让某样东西的数量受到可验证的规则约束。

注意它稀缺的方式:不是这份数据难以复制,而是**「哪一份算数」这件事由全网共同维护的记录决定**,而修改这份记录的代价极高。

工作量证明Proof of Work

要获得写下一页的资格,必须先完成一件确实消耗了资源的计算——反复尝试直到碰上一个满足条件的结果。

它有两个关键性质:做起来极慢,验起来极快。全世界的机器要算很久才能找到答案,而任何人拿到答案后一瞬间就能确认它是对的。

这个不对称是整套机制的支点:作恶需要付出真实成本,检查作恶却几乎免费。

挖矿Mining

参与工作量证明竞赛,争取写下一页并获得奖励的行为。

「挖矿」这个比喻容易造成误解。矿工真正在做的不是「挖出」新币,而是替整个网络提供排序服务,新币只是这项服务的报酬。

报酬由两部分组成:每写成一页可以按规则铸造一笔新币,加上这一页里所有交易支付的手续费。第一部分按固定的时间表递减,长期来看,第二部分会变成主要收入。

难度调整Difficulty Adjustment

系统每隔固定数量的页自动检查出页节奏,并据此调高或调低题目难度,让节奏维持在预定值附近。

它就是上面那个负反馈回路。它保证了出块节奏不随全网算力变化而变化,也因此保证了新币的发行速度可以被提前写死。

减半Halving

每写成固定数量的页之后,铸造新币的奖励减少一半。

值得注意的是它的触发方式:按页数触发,不按日历触发。所以它具体落在哪一天,取决于这段时间全网的实际出页节奏,只能估算,不能预定。

未花费输出UTXO

还没有被花掉的那些「条子」。

一笔交易的作用是:作废若干张旧条子,生成若干张新条子。你的余额就是属于你的所有未作废条子之和。

这个模型和「账户余额」模型各有取舍,第 9 章会对比它们。

收成一句话:

Bitcoin 不是一种更好的支付方式,它是第一个「没有发行者的数字稀缺资产」。

它用真实消耗的资源,买到了一样别的办法买不到的东西:在没有任何管理员的前提下,让一群陌生人对同一份历史达成一致。

动手

动手亲手拆开一个 Bitcoin 区块任意一个 Bitcoin 区块浏览器0 元,全程只看不动,不需要钱包,不涉及任何资产

不需要任何账号,不需要任何资产。二十分钟。

打开一个区块浏览器,找到最新的那个区块。 随便搜一个「Bitcoin 区块浏览器」,挑一个能打开的就行,不同浏览器显示的字段大同小异。

记下四个数字:区块高度、交易笔数、区块大小、出块时间。

找出这个区块的奖励。 翻到交易列表的第一笔,它和其他所有交易长得不一样——它没有来源。

这一笔就是铸造新币的那一笔。把它拆成两部分记下来:按规则铸造的部分,和这个区块里所有交易手续费的总和

算一下后者占总奖励的比例。这个比例是一个很有意思的长期指标,第 26 章会回到它。

记下当前的难度值,以及距离下次调整还有多少个区块。

然后往回翻几次调整记录,看看难度是怎么变的。你会发现它一直在上下浮动,但出块的平均间隔始终稳定在同一个量级。这就是那个负反馈回路在你眼前运转。

连续看十个区块的时间戳,算出相邻区块的间隔。

你会看到有的间隔一分钟,有的间隔半小时。平均值是稳定的,单次是随机的。

这个观察在第 6 章非常重要:它意味着「等一个确认」这件事,等待时间本身就是不确定的。

最后做一次时间旅行。 把区块高度改成 1,看看最早的那些区块长什么样。

记下三处差别:交易笔数、区块大小、铸造奖励。这三个数字的变化,就是这套系统十几年运行史的缩影。

把这五步的结果写成半页纸。 它是你的阶段作品里第一份真正的链上数据。

AI Lab

AI Lab让 AI 写出挖矿的伪代码,再用一道算术题考它Level 2 · AI Copilot

分两步,第二步是真正的考题。

第一步,让它写伪代码:

用二十行以内的伪代码,写出一个矿工在做什么。
要求包含:候选区块怎么组装、反复尝试的是什么、什么条件算成功、
成功之后广播什么、其他节点收到之后如何验证。

不要用任何具体的库或语言 API,只写逻辑。
每一行后面用一句中文注释说明这一行在做什么。

第二步,问一道它很可能答错的题:

假设从明天起,全网算力永久性地翻了一倍,其他条件都不变。

问一:从长期看,平均出块时间会变成原来的几分之几?
问二:在下一次难度调整发生之前的那段时间里,出块会变快吗?
问三:全网算力翻倍,对「推翻一个已有区块的成本」有什么影响?

每一问都要写出推导过程,不要只给结论。

第二问是关键。正确答案是:长期不变,但在下一次调整生效之前会暂时变快。 这两句话必须同时说出来,只说其中一句都算没答完整。

很多模型会在问一上答「变成一半」——它把算力当成了产能。产能翻倍,产量不变,这正是这套系统最反直觉的地方。 难度调整是一个负反馈,它的存在就是为了消化掉算力的变化。

问三也值得看它怎么答。算力翻倍不影响出块速度,但确实让推翻历史的成本翻倍了。 一个把这三问都答对的模型,说明它真的理解了这套机制;答错任何一问,都是一次很好的学习机会——去追问它,比自己读十遍定义有效。

AI 说完之后,你必须自己验证

  • 伪代码里有没有一个不断递增的随机数,以及一个「结果是否小于目标值」的判断。没有这两样,它写的不是挖矿
  • 它有没有把「难度」和「出块时间」的因果搞反:是难度决定出块时间,出块时间反过来触发难度调整,这是一个闭环
  • 第二问的答案必须是「不变」。回答「快一倍」的,直接判错,并追问它难度调整发生在什么时候
  • 追问「调整前那段时间呢」,正确答案是出块会暂时变快,直到下一次调整把节奏拉回来——只答「不变」而说不出这个过渡期的,理解得不完整
  • 它说验证一个区块需要做什么时,有没有区分「找答案很慢」和「验答案很快」这两件事
  • 凡是它给出具体数字(奖励、难度、间隔、算力),核对它有没有标明时间点;没标的一律当作未验证

真实案例

写在第一个区块里的那句话2008 至 2009 年

2008 年 10 月,一份九页的论文被发到一个密码学邮件列表上,标题是「一种点对点的电子现金系统」。它没有提出任何一项全新的技术——工作量证明、数字签名、哈希链,这些零件当时都已经存在。

它的贡献是把这些零件组装起来,用「最长链 + 工作量证明」解决了那个悬了二十多年的排序问题。

2009 年 1 月,第一个区块被创建。它里面嵌了一句当天报纸的头条,内容和银行救助有关。这句话没有任何技术作用,它是一个时间戳,也是一句态度。

请注意这一年的背景。 这不是一个技术故事的开头,是第 1 章和第 2 章那些问题在一个特定时刻集中爆发之后,有人给出的一个回答。

凭空多出来的币,和修好它的几个小时2010 年

早期版本的代码里有一个数值溢出漏洞。有人利用它构造了一笔交易,凭空产生了远超总量上限的币,并且这笔交易被正常打包进了区块。

几个小时内漏洞被发现、修复,新版本客户端发布,网络转到了不含这笔交易的分支上。

这件事有两层意义,缺一不可。第一层:规则是由代码执行的,代码会有 bug,「数学保证」不等于「实现正确」。 第二层:修复它靠的是足够多的人自愿升级软件,没有任何人有权强制执行。

这两层合起来,正是第 3 章那次 2016 年事件的预演。一条链的规则从来不是刻在石头上的,它是「此刻绝大多数人正在运行的那份代码」。

被真实攻破的小链2018 年至今,多次

多条采用工作量证明的小型公链发生过深度重组攻击:攻击者掌握了超过全网一半的算力,把已经确认的交易推翻,实现了双花。

这些事件的共同点不是技术上有什么新突破,而是经济账:这些链的全网算力很小,攻击者只要在算力租赁市场上短期租用足够的算力,成本就可能低于收益。

这是第 3 章那个「代币归零还能不能运行」问题的实物版本。 一条链的安全性不是一个技术属性,是一个价格:推翻它要花多少钱,推翻它能赚多少钱。两个数字的差额就是这条链的安全边际。

多家交易所在那之后提高了相关资产的充值确认数要求。确认数要等几个,从来不是一个固定答案,第 6 章会讲怎么判断。

改一个变量

如果出块时间从十分钟改成十秒

好处显而易见:确认更快,体验更好。

代价藏在网络延迟里。一个新区块要传遍全球需要时间,如果出块间隔和传播时间在同一个量级,经常会出现两个矿工几乎同时出块,网络被迫在两个分支之间反复摇摆。

结果是:单个确认的含金量大幅下降。你可能要等三十个确认,才相当于原来一个确认的安全性。总等待时间不一定缩短,但网络的不确定性明显上升。

这就是为什么不同的链在这个参数上做了完全不同的选择,而且每一种选择都拖着一串后果。第 8 章会把这串后果摊开。

如果总量上限被取消,奖励永不减少

矿工的长期收入有保障了,网络安全的资金来源不再依赖手续费市场——这确实解决了一个真实存在的长期问题。

代价是稀缺性没了。一个会持续增发的资产,它的定位就从"数字黄金"变成了别的东西,而围绕它形成的全部叙事和持有理由都要重写。

更关键的是第二个层面:这个改动本身需要绝大多数人同意换软件。 谁会同意?现有持有人不会。所以这个假设真正揭示的是一件事——规则的稳定性不来自代码,来自持有人和矿工的利益结构。 第 20 章会用这个视角重新看所有代币的供应设计。

如果挖矿不再烧电,改成押上一笔资产

能耗问题解决了,参与门槛降低了,写页的成本大幅下降。

但成本下降本身带来一个新问题:作恶的代价也从"烧掉的电"变成了"可能被没收的押金",而押金是链上的资产,它的价值由这条链自己的市场决定。一旦价格大幅下跌,安全预算同步缩水。

烧电的成本是外部的、真实的、和这条链的币价没有直接绑定;押金的成本是内部的、自我指涉的。这不是哪个更好的问题,是两种不同的风险结构。 第 8 章会正面比较它们。

如果全世界只剩一个矿工

这个假设能一次照出好几件事。

出块还会继续,因为难度会自动降到这个矿工能承受的水平。系统不会停。

但它彻底失去了安全性。 这个矿工可以随意重排交易、推翻历史、实施双花,没有任何人能阻止他——注意,他依然不能凭空创造币,也不能花别人的钱,因为那些要靠签名和规则来验证,而验证是每个用户自己做的

这个区分极其重要:共识保护的是顺序,密码学保护的是所有权。 矿工能攻击前者,攻击不了后者。第 5 章整章都在讲后者是怎么做到的。

带走的问题

十八问里挑三问,用在这一章。

3
为什么需要 Token?

Bitcoin 是第一个能把这一问答得干干净净的系统:没有这个代币,这套机制根本跑不起来。

因为矿工必须被支付,而支付的对象必须是这条链自己能凭规则创造和转移的东西——如果用法币支付,就需要一个银行账户和一个发工资的人,整套设计立刻塌回中心化。

以后看到任何一个项目,用这一条做基准线:它的代币是不是机制运转的必要零件,还是只是一层贴上去的融资和积分? 大多数项目在这条线前面就停住了。

5
谁在支付?

这条链的安全由谁买单?

有两个付款人。新币的铸造——这部分实际上由所有持有人共同承担,方式是稀释。交易手续费——这部分由使用者承担。

设计上,第一部分会持续衰减,第二部分必须逐步接上。这个交接能不能完成,是这套系统最长期的一个开放问题,没有人现在就能给出答案。第 7 章会讲手续费市场是怎么形成的。

10
激励是什么?

这套系统的全部稳定性,都压在一句话上:对矿工来说,老老实实挖矿的收益,高于攻击网络的收益。

拆开看有三层:诚实挖矿有稳定的收入;攻击需要巨额的前期投入;而攻击一旦成功,这条链的价值下跌,他手里的设备和币也跟着贬值。

第三层最关键,也最脆弱。 如果攻击者本来就不持有这条链的资产,甚至在别处做空它,第三层就不成立了。小链被攻破的案例,几乎全是这一层失效导致的。

本章自测

一句话带走

Bitcoin 创造的是没有中央发行者的数字稀缺资产。

做完这一章的动手环节了?勾上它查看全部进度

本页目录