◢ Lesson 1 ⏱ 105 min

从中心化账本到 BTC

🎬 开场

故事 1:2008 金融危机

2008-09-15,雷曼兄弟申请破产,全球银行系统摇摇欲坠。两个月后,一个署名”中本聪”的人发布了一篇 9 页论文:《Bitcoin: A Peer-to-Peer Electronic Cash System》。

2009-01-03,他挖出了 BTC 的第一个区块——创世块。在区块的 Coinbase 字段,他刻下了一句话:

“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”

这是当天英国《泰晤士报》的头版标题。他用一种几乎挑衅的方式留下时间戳,宣告这个系统的诞生动机。

故事 2:Pizza Day

2010-05-22,程序员 Laszlo 用 10000 BTC 买了两张披萨。按当前 BTC 价格,这两张披萨现在价值数十亿美元。这是 BTC 在现实世界的第一次”购物”。

◆ Timeline · 2008 — 2024

2008-092009-012010-052017-082024-04

Lehman Brothers 破产

BTC 创世块

Pizza Day · 10,000 BTC

BTC/BCH 分叉

第 4 次减半


前章 · 中心化账本

在拆解 BTC 之前,先看清楚我们要拆解的是什么

银行做的事

银行账本是一个中心化系统。所有用户的余额都存在一个权威机构(银行)那里——只有银行能记账。

◆ Centralized Topology

AliceBobCarolDaveEveFrankBANKsingle ledger

所有信任都汇向银行。一处失效 → 全部失效。

这种设计简单有效,但有几个隐含假设:

如果其中任何一个失效,整个系统失效。

试一下

下面是一个简化的银行账本模拟。Alice 给 Bob 转账——但每笔都必须经过银行。

◆ Centralized Ledger · How a Bank Works

Accounts

Alice100
Bob50
Carol30
BANK

awaiting tx

Send Money

Bank Log

(no transactions yet)

银行是唯一能写账本的一方。所有人必须信任它——它离线,整个系统停摆。

注意几件事:

想把它变成”公开透明的去中心化系统”,至少要做到哪 8 件事?

抛开”信任银行”这一条,看上面那个 BANK 方块到底在替我们做什么——其实远不止”记余额”。如果要把它拆掉、改成谁都能验证的开放系统,下面这 8 件事一件都不能少:

◆ The Eight Functions of a Bank

01
验证你是你
?
02
记录账本
?
03
防止双花
?
04
决定记账权
?
05
账本一致性
?
06
防篡改
?
07
激励诚实
?
08
钱的表示
?

接下来 80 分钟,我们把它们一项一项替换掉。每完成一项,右上角清单就 ✓ 一项——整门课走完时,BTC 就在你眼前被”组装”出来了。


密码学预备 · 哈希

进入正式替换之前,需要先掌握一个工具:哈希函数。它会出现在后面几乎所有模块里。

什么是哈希

哈希函数把”任意长度的输入”压缩成”固定长度的输出”。SHA-256 是 BTC 用的那一个。

◆ Hash · The Black Box

INPUT任意长度文本 / 文件 / 区块SHA-256hash functionOUTPUT固定 256 bit64 hex chars
  • 01确定性同样的输入 → 同样的输出
  • 02雪崩效应改 1 字符 → 输出几乎全变
  • 03单向性从输出反推输入 = 几乎不可能
  • 04抗碰撞找两个不同输入产生同一输出 = 几乎不可能

试一下

◆ SHA-256 · Avalanche

6cabdb6b53060a1961f7cceede7e07022505a83870fadb64f9699074150f033e

改一个字符 → 输出几乎全变(雪崩效应)

哈希函数有 4 个对去中心化系统至关重要的性质:

记住这 4 个性质——后面每个模块都会用到。


模块 A — 替换”身份验证”

线索追问

银行靠”第三方记得你是谁”。没了第三方,需要一种”只有你自己持有就能证明身份”的东西。

→ 答案:一对相互绑定的数字——一个绝对私密,另一个可以公开。这一对就是”非对称密钥”。

Step 1 · 先认识私钥和公钥

在讲怎么”签名”之前,先看清楚这两个东西到底是什么

关键直觉:

但”不可反推”这个说法听起来抽象。下面这个模拟器把它做成可以亲眼看见的事——按下按钮,让一个超级攻击者以每秒 5000 万次的速度去猜目标公钥对应的私钥:

▶ start guessing 跑几秒钟看看进度条——它永远停在 0。这就是 2²⁵⁶ 在视觉上的意义。

Step 2 · 用它们做签名 / 验证

有了密钥对,再加两个操作就够替换”身份验证”了:

数字签名的本质:用私钥对消息的哈希做一次密码学运算——这就是为什么”哈希”要先讲。

◆ Digital Signature · Flow

PRIVATE KEYskderivePUBLIC KEYpkMESSAGEAlice → Bob 30 BTCSIGN()sk + msg → sigSIGNATURE0x9f3a...VERIFY()pk + msg + sigTRUEor FALSE

持有 sk = 能签字 = 是账户主人。 任何人都能用 pk 验证,但只有 sk 能签出有效签名

下面是完整的可交互演示——改消息、换密钥对、勾”tamper”看签名失败的瞬间:

真实事件锚


模块 B — 替换”账本记录 + 防双花”

线索追问 1:账本怎么记?

银行账本存余额——这是”状态视角”。但状态需要权威维护

去中心化方案:把”存状态”变成”存事实”——存交易历史,余额由历史推导。

◆ State vs. History · Two Mental Models

State View

状态:余额表

Alice
80
Bob
70
Carol
0

◇ 状态是"当前的快照" — 必须有权威机构维护

Fact View

事实:交易历史

  1. 01mintAlice: 100
  2. 02mintBob: 50
  3. 03AliceBob: 20

◇ 事实是"发生过的所有事" — 任何人都能验证

左边的余额,是右边历史推导出来的——这是去中心化的关键转换。

为什么这样更去中心化?因为事实任何人都能验证。这是从中心化到去中心化的第一个核心思维跃迁

BTC 上的事实交易长什么样

上面的演示用文字写”Alice → Bob: 20”。真实的 BTC 链上长得更具象一点——每条事实都是一对:转账描述 + 签名

BTC Transactions · what facts look like

Block #840000

Transaction
Signature
AliceBob: 50 BTC
9f3a2c8e1b4d7f…10c84a
BobCarol: 20 BTC
44d1ee6f02a91b…607e23
AliceDave: 10 BTC
1c8f5a2eb0d614…4a3f12
CarolBob: 5 BTC
73aaf08e9c25b3…61d361
AliceCarol: 3 BTC
e8d1937af50b62…4f6a07

◇ 每笔"事实"就是一行:谁转给谁多少 + 签名

◇ 链上账本就是这样一行一行积累的——不存余额,只存事实

◇ 但如果有人把这一行复制再发一遍呢?这是签名解决不了的——下一节我们引入 nonce。

这就是链上账本的最小单位。谁转给谁多少 + 签名证明这是本人发的——一条事实压缩成一行。

线索追问 2:怎么防止交易被原样复制?

签名挡住”伪造”,但挡不住重放——攻击者把你已经签好的整条 tx 抓下来,再发一次。

◆ Replay Attack · Nonce 怎么挡住它

step 0/5

✗ without nonce

press ▶ run to play

✓ with nonce

press ▶ run to play

◇ Nonce 是每个账户独立的计数器——Alice 自己 0、1、2…,Bob 自己也从 0 起算,互不影响。

→ 解法:交易里多带一个 nonce 字段(每账户独立计数器,Alice 自己 0、1、2…,Bob 自己也从 0 起)。节点记下”Alice 用过的 nonce”,再次见到同一 nonce 直接 reject。

Transactions · with per-account nonce

Block #840000

Sender · Nonce
Transaction
Signature
Alice·nonce=0
Bob: 50 BTC
9f3a2c8e1b4d7f…10c84a
Bob·nonce=0
Carol: 20 BTC
44d1ee6f02a91b…607e23
Alice·nonce=1
Dave: 10 BTC
1c8f5a2eb0d614…4a3f12
Carol·nonce=0
Bob: 5 BTC
73aaf08e9c25b3…61d361
Alice·nonce=2
Carol: 3 BTC
e8d1937af50b62…4f6a07

◇ 看 Alice 那几行:第一笔 nonce=0,第二笔 nonce=1,第三笔 nonce=2

◇ Bob 自己也有计数器:nonce=0 是 Bob 的第一笔,跟 Alice 的 0 互不影响。

◇ 因为 nonce 进入签名,同一个 nonce 不能用两次——节点见过 Alice nonce=0 就拒绝下一条 Alice nonce=0。

看 Alice 那 3 行 nonce=0/1/2,Bob 自己又从 0 开始——跟着账户走,不是全局序号


模块 C — 替换”记账权 + 一致性”

线索追问 1:谁能写账本?

直觉答案:投票。多数人同意的就是真账本。

但单纯投票有个致命问题:Sybil 攻击

◆ Sybil Attack vs Proof-of-Work

Naive · 1 person 1 vote

投票就能记账?

Evefakefakefakefakefakefake

一个 Eve 制造 6 个假身份 → 投票被她包揽

PoW · 1 cpu 1 vote

投票要花真钱

Evecostvote

想多投票 → 多花算力。Eve 没有那么多电费。

PoW 不是"安全因为难",而是让作恶有真实经济成本

→ 投票需要有真实成本才有意义。

线索追问 2:成本怎么定?

用电力 / 算力 —— PoW(Proof of Work)

PoW 的核心是一个数学谜题:找到一个 nonce,让 SHA-256(区块内容 | nonce)前 N 个 bit 都是 0。SHA-256 输出 256 个 bit,每个 bit 是 0 的概率约 1/2 —— 所以每多要求 1 个 bit 是 0,难度翻 1 倍

◆ Proof-of-Work · Mine a Block

expected

≈ 216 = 65,536

browser est.

<1s

◇ 每 +1 bit → 计算量 × 2(多要求一个 bit 是 0,概率 1/2)

单次方差极大:可能 1 步就撞到,也可能跑 5 倍均值。"快"或"慢"都是抽样,多试几次(改数据 / 重新 Start)看分布。

nonce
0
hash/s
0.0K
elapsed
0.00s
hash

分叉怎么办?

每个矿工独立挖矿,可能同时挖出两个区块 → 短暂的分叉

◆ Chain Fork · Longest Wins

步 4-5:分叉发生,两个矿工同时出块 → 网络出现两个候选链。 步 6:两条链都各自继续延长(共识尚未形成)。 步 7-8:下方链连续抢到新块 → 算力开始倾斜。 步 9:上方链被弃为 orphan。

→ 解法:最长链共识——大家都跟随累积算力最大的那条。短链会被丢弃。

真实事件锚


模块 D — 替换”防篡改”

线索追问

PoW 选出了当前账本。过去账本怎么防止被偷偷改?

如果有人想往历史里插一笔”自己凭空多 100 BTC”,怎么办?

三层防御

  1. 打包成区块:一批交易绑在一起
  2. 链式哈希:每个区块包含上一个的哈希——改一处后面全断(哈希的雪崩效应在这里发挥关键作用)
  3. PoW 累积:改一个旧区块要重做后面所有 PoW(算力上不可能)

下面用 4 步把”为什么改一处会破坏整条链”拆开演示:① 单块结构 → ② 双块如何连接 → ③ 篡改后哪里失配 → ④ 多块级联失效。

◆ Tamper-Proof Chain · Walk Through

Step 1 / 4

① 一个区块包含什么?

一个最简区块 = data(内容) + prev_hash(上一区块的 hash) + hash(前两者算出来的指纹)。

Block 0 · Genesis

data

prev_hash

00000000000000…000000

hash

c0eb42784be69e…7beb69

hash = sha256(prev_hash + "|" + data)

◇ 试着改一下 data 框 → hash 字段(橙色)立刻变。
◇ 含义:区块的 hash 是它内容的指纹

◆ Block Header · Anatomy

Block #840000
version: 0x0100 0000
prev_hash: 00000000…a1b2
tx_root: 4a5e8f9c…dd12
timestamp: 1715616000
bits: 0x1703 4dc4
nonce: 2 873 411 829
header
01
version
协议版本
02
prev_hash
上一区块哈希
03
tx_root
Merkle 树根
04
timestamp
出块时间
05
bits
难度目标
06
nonce
PoW 答案

◇ 区块头是 80 字节,固定大小——这让轻节点可以只下载头部就完成验证。

关于区块头 · 80 字节就够验证

区块头是 80 字节固定大小——里面的 merkle_root 把整块所有交易压缩成一个 hash。轻节点(手机、嵌入式设备)只下载区块头链,验证某笔交易”是不是真在某块里”只要全节点提供一条 Merkle 证明:

◆ Merkle Proof · 轻节点怎么用 root 验一笔交易

locally computedprovided in proofirrelevant
roota08e5f…55c4h120e3499…12bah341a4689…430eh1e86b23…6d4fh21e90a6…e0afh3d84350…a3fdh42eaac1…3fd0tx1tx2tx3tx4

◇ 4 笔交易 → 验证只要 2 个 hash(不是全部 4 个)。

log₂(N) 才是关键——即使一块装 100 万笔交易,验证一笔也只要 ~20 个 hash。

◇ 这就是为什么 轻节点 只下载区块头就够:root 在头里,验证用的 hash 路径从全节点按需取。


出块与验证 · 信任怎么从一块传到下一块

矿工挖出新块 → 广播 → 凭什么别人愿意接?答案:每个节点都独立验证。验证分两层:

看什么
块级这一块作为容器是否合法(prev_hash、PoW、merkle_root)
交易级块里每一笔交易是否合法(UTXO、签名、价值守恒)

任一层任一项失败 → 整块拒绝。


1️⃣ 块级验证

◆ Block-Level Validator · 块结构本身的检查

Block Header #840003

received from miner

prev_hash
00000000000000000000a1…a9b0c1d2
merkle_root
4a5e8f9c…dd12 (下放到交易级再验)
nonce
2,873,411,829
block hash
00000000abf72e8c19503d…5e6f7a8b

Block-Level Checks

prev_hash 等于本地链顶部的 hash

验证方式:拿出本地最新区块的 hash,直接对比 → 这一块能接上你的链

block hash 满足当前难度(前 N bit 是 0)

验证方式:本地算一次 sha256(block header),数前导 0 → 矿工真的烧了算力

✓ BLOCK STRUCTURE OK

块级检查通过 → 接下来还要逐笔验证里面的交易(见下方 TransactionValidator)。

merkle_root 在块级只验形式;每笔交易的内容由下一层负责。


2️⃣ 交易级验证

核心问题:Alice 凭什么能转 5 BTC?

◆ Transaction-Level Validator · 每笔交易的检查

例:Alice → Bob 5 BTC。Alice 凭什么能转 5 BTC? 因为她能拿出价值至少 5 BTC 的、未花过的 UTXO,并且能签名证明那是她的。

Transaction

proposed by Alice

Inputs

UTXO id: a91f...c84a
7 BTC
owner: Alice's pubkey
sig: 9f3a2c8e1b4d7f3052bce8a8

Outputs

→ Bob5 BTC
→ Alice (change)1.99 BTC
→ Miner (差额)0.01 BTC

◇ 矿工的钱不是显式 fee 字段,是 Σin − Σ(bob + change) 的差额

Σ in7 vs 7.00 Σ out

Transaction-Level Checks

Alice 引用的 UTXO 存在于当前 UTXO 集合

验证方式:在本地 UTXO 集合里查找这个 UTXO id → 存在 ⇒ 这笔钱确实"在"

签名能用 UTXO 所有者的公钥验证通过

验证方式:ECDSA verify(UTXO.owner_pubkey, tx_msg, sig) → 证明这笔钱是 Alice 的

输入总值 ≥ 输出总值(没凭空印钱)

验证方式:累加 inputs vs 累加 outputs + fee → 否则就是凭空创造 BTC

✓ TRANSACTION VALID

这笔交易合法 → 节点把输入 UTXO 标记为已花、写入输出 UTXO 给 Bob 和 Alice(找零)。

"Alice 凭什么能转 5 BTC?" = 她能拿出价值 ≥ 5 BTC 的未花过的 UTXO + 能签名证明 UTXO 是她的。

不存在"余额"概念——只有"她还没花的钱有多少"(未花费输出之和)。

◇ 块内每一笔交易都要单独通过这三项检查。一笔不合法 → 整块作废。

→ BTC 里没有”账户余额”,只有”你拿得出未花过的 UTXO”。每笔 tx 必须明确指出消耗哪些 UTXO、生成哪些新 UTXO。


PoW 的不对称性 · 验证可行的关键

出块(挖矿)验证
平均工作量$2^N$ 次 hash几次 hash + 几次签名 verify
耗时~10 分钟(全球算力)< 1 毫秒(一台笔记本)
成本便宜几百万倍

→ 验证白菜价 → 每个节点都做一遍 → 错块”骗”不过任何人。

矿工 M ──广播──> 节点 A B C D E ... ──各自块级 + 交易级检查──> 接受/拒绝

诚实节点的结果必然一致(检查是确定性的)。信任在网络中传播,没有中心节点决定它。

节点凭什么能”查”UTXO?

那个”UTXO 集合”是节点本地数据结构。处理块时对每笔交易:input UTXOs 从集合里删 + output UTXOs 加进去。下面手动一步步走一遍:

◆ UTXO Set Evolution · 节点处理块时本地状态怎么变

step 0 / 3

Initial State

块尚未处理 · 节点拥有初始 UTXO 集合 · 下面 3 笔交易要逐条执行

Alice

#a91
7 BTC
#c2d
3 BTC

Bob

#e44
2 BTC

Carol

#f88
4 BTC

Local UTXO Set · 节点本地的数据结构

{
  #a91Alice  7 BTC  #c2dAlice  3 BTC  #e44Bob    2 BTC  #f88Carol  4 BTC}

◇ 节点把每笔交易解释成"删除某些 UTXO + 增加某些 UTXO"的状态转换。

◇ 整块处理完后,UTXO 集合稳定到新状态 → 下一笔交易来时,直接查这个集合就能判断 UTXO 是否存在、是否未花。

◇ 全网每个诚实节点都做同样的更新 → 每个节点的 UTXO 集合都一致 → 这就是"账本一致性"的底层实现。

这就是”账本”在节点内部的样子——不是余额表,而是不断演化的 UTXO 集合。


模块 E — 替换”激励”

线索追问

PoW 要烧电,矿工凭什么愿意烧?凭什么愿意诚实?

经济学闭环

◆ The Economic Loop

矿工诚实出块Honest mining获得 BTC 奖励Block rewardBTC 有市场价值Market value更多人使用Adoption ↑系统更安全Security ↑

矿工诚实 → 系统有价值 → 奖励有价值 → 更愿诚实。攻击系统 = 砸自己饭碗。

矿工的收益(BTC)只有在系统被信任时才值钱。攻击系统 = 砸自己饭碗。

减半机制

BTC 设计了硬上限 2100 万。每 21 万个区块(约 4 年)奖励减半:

◆ Halving · Reward Decay

2009

50 BTC

$0

2012

25 BTC

~$12

2016

12.5 BTC

~$650

2020

6.25 BTC

~$8,800

2024

3.125 BTC

~$64,000

◇ 每 21 万个区块(约 4 年)减半一次。最终发行量上限 2,100 万 BTC

减半既保证稀缺性,也让矿工激励逐渐从”区块奖励”过渡到”手续费”。


模块 F — 替换”钱的表示”

线索追问

银行账本里”钱” = 余额数字 Alice: 100。但数字本身需要权威维护

去中心化系统里钱该怎么表示?→ 把”钱”也变成事实——交易输出。即 UTXO 模型(Unspent Transaction Output)

UTXO 是什么

一张”数字现金”,三个字段:

◆ Anatomy of a UTXO

UTXO · one unspent output

value5 BTC
ownerH(pubKey_Alice)
sourcetx_a91 · out#0

value

价值 · 多少钱

owner

所有者 · 公钥哈希

source

来源 · 哪笔交易第几个 output

◇ 花钱 = 把整张 UTXO 消耗掉,产生新的 output UTXO(包括给自己的找零)。

◆ Two Mental Models

BTC

UTXO Model

5
3
2
Alice 的 UTXOs
  • 钱是离散的“数字现金”
  • 每张可追溯到铸币
  • 验证只需看 UTXO 集合
  • 花钱要消耗整张 → 找零

ETH · 银行

Account Model

Ledger
Alice10
Bob5
Carol3
  • 钱是全局余额数字
  • 无来源追溯
  • 验证需要全局状态
  • 更接近“银行账户”直觉

◆ UTXO · Build a Transaction

Alice · click to select

Transaction

Σ inputs0 BTC
→ Miner (差额自动归矿工)-7.9800 BTC

Σ in = bob + change + miner。BTC 没有显式 fee 字段——剩余即矿工费。

⚠ outputs > inputs · 凭空印钱

Bob

If Account Model

Alice10.00
Bob1.00

呼应模块 B:UTXO 和”用交易历史代替余额”是同一个哲学的两种表达——存事实,不存状态

真实事件锚

中本聪的早期地址至今持有 ~110 万 BTC——这些 UTXO 从未被花过。它们就在那里,谁都拿不走。

看看真链上 · explorer 实地考察

◆ See it on a real explorer · mempool.space

opens in new tab

◇ 这些是真实的链上记录——任何人都能验证。Genesis block 的 coinbase 字段里就是中本聪刻的那句报纸标题。


深水区 · Bitcoin Script · 锁与钥匙

到现在为止,我们说 UTXO “属于 Alice”——但协议层面这是怎么实现的?

答案:UTXO 不是简单贴一个”Alice 的”标签,而是绑了一段小程序——一个用 BTC Script 写的”锁”(叫 scriptPubKey)。谁能拿出能解开这把锁的”钥匙”(叫 scriptSig),谁就是这个 UTXO 的”主人”。

锁怎么工作?

最常见的锁模板叫 P2PKH(pay-to-pubkey-hash),长这样:

OP_DUP  OP_HASH160  <PKH_Alice>  OP_EQUALVERIFY  OP_CHECKSIG

要花这个 UTXO,得提供:

<sig>  <pubKey>

节点把 scriptSig + scriptPubKey 拼起来,逐 token 在栈虚拟机里执行。如果最后栈顶是 TRUE → 锁开了 → 可以花。

下面的动画一步一步走完执行过程——你可以切换 spender 看 Alice(合法)和 Bob(伪造)两种情况:

◆ Bitcoin Script · UTXO 的锁与钥匙

spender

UTXO 🔒 (a previous output, value 5 BTC)

scriptPubKey · the lock

OP_DUP
OP_HASH160
<PKH_Alice>
OP_EQUALVERIFY
OP_CHECKSIG

◇ "想花这笔钱?拿出能让这段脚本最后返回 TRUE 的钥匙来。"

Provided by Alice 🔑

scriptSig · the key

<sig_Alice>
<pubKey_Alice>

◇ 节点把 scriptSig 拼到 scriptPubKey 前面,然后逐 token 执行。

Stack-based VM

step 1/8

start · empty stack

把 scriptSig + scriptPubKey 拼到一起后逐 token 执行

(empty)

UTXO 不是简单"贴标签写谁的"——而是绑了一段脚本:能让这段脚本返回 TRUE 的人就是它的"主人"。

◇ 标准模板 P2PKH(pay-to-pubkey-hash):锁里只放 pubkey 的 hash,花的时候才公示 pubkey + 签名。

◇ 同一套机制能写出别的"锁":多签(要 m-of-n 个签名)、时间锁(某区块高度后才能花)、条件支付(懂某秘密才能花)等。Bitcoin Script 不是图灵完备的——但足以表达可编程的所有权。

试试切到 Bob (attacker):他用自己的 pubKey 凑出 scriptSig,但执行到 OP_EQUALVERIFY 时,H(pubKey_Bob) 跟锁里的 PKH_Alice 不一致 → 脚本中止 → UTXO 仍然锁着。

不止 P2PKH

同一套”锁脚本”机制可以表达多种所有权规则:

模板解锁条件
P2PK直接给签名(最早的形式,已少用)
P2PKH给签名 + 公钥(最常见,上面演示的)
P2SH给一段”赎回脚本”,hash 匹配后再执行该脚本
MultiSig给 m-of-n 个签名(需要 m 个人同意才能花)
TimeLock在某区块高度 / 时间戳之后才能花
HashLock知道某 hash 的原像才能花(HTLC 闪电网络的基础)

Bitcoin Script 不是图灵完备的(没循环),但它已经能表达可编程的所有权——这正是 ETH 智能合约的雏形。下节课我们看 ETH 怎么把这个想法彻底打开。


深水区 · 2²⁵⁶ 究竟有多大?

整节课所有”密码学安全”的承诺,根上靠的就是这个数字——签名空间、哈希空间、私钥空间都在它的量级。看看它有多荒谬。

◆ 2²⁵⁶ · 安全的根基

22561.16 × 1077

115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,936

◇ Scale · 跟你熟悉的"大数"比一比(log 标度)

🏙️
一座城市的人口
104
🕐
一年的秒数
107
👥
世界人口
1010
银河系恒星数
1011
宇宙年龄 · 秒
1017
🏖️
地球上的沙粒数
1018
🌠
可观测宇宙的星系数
1022
🧍
人体原子数
1028
🌍
地球原子数
1050
🔑
2²⁵⁶ · BTC 私钥空间
1077
🌌
可观测宇宙原子数
1080

◇ Brute Force · 想把 2²⁵⁶ 枚举一遍要多久?

预计耗时

10^56
10^49
宇宙寿命的倍数10^38 ×

宇宙诞生约 1.38×10¹⁰ 年。即使最极端的算力假设, 枚举 2²⁵⁶ 也要 10^38 个宇宙寿命

BTC 的"底气"不是法律、不是机构、不是审计——
2²⁵⁶ 这个数本身。


🎬 收尾

回看清单

8 项全部 ✅。原来 BTC 就是这张表的产物:

◆ The Eight Functions of a Bank

01
验证你是你
数字签名
02
记录账本
交易历史
03
防止双花
签名 + nonce
04
决定记账权
PoW 算力
05
账本一致性
最长链共识
06
防篡改
哈希链
07
激励诚实
区块奖励
08
钱的表示
UTXO

BTC 的本质 = 用密码学 + 经济学替换信任机构

诚实承认代价

替换不是没代价的。BTC 失去了:

BTC 用这些代价换来了:抗审查、无许可、全球可用。值不值得,看你解决什么问题。

前瞻:BTC 之后呢?

课后作业

  1. 装一个 BTC 钱包(推荐 BlueWalletSparrow
  2. Signet 测试网领一点 sBTC
  3. 给同学转一笔,用 explorer 查这笔交易
  4. 在 explorer 找到一个区块,识别五元组的每个字段

进一步阅读