🎬 开场
故事 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
Lehman Brothers 破产
BTC 创世块
Pizza Day · 10,000 BTC
BTC/BCH 分叉
第 4 次减半
前章 · 中心化账本
在拆解 BTC 之前,先看清楚我们要拆解的是什么。
银行做的事
银行账本是一个中心化系统。所有用户的余额都存在一个权威机构(银行)那里——只有银行能记账。
◆ Centralized Topology
所有信任都汇向银行。一处失效 → 全部失效。
这种设计简单有效,但有几个隐含假设:
- 所有人都信任银行
- 银行始终在线
- 银行不作恶、不出错
- 银行的数据库永远不丢
如果其中任何一个失效,整个系统失效。
试一下
下面是一个简化的银行账本模拟。Alice 给 Bob 转账——但每笔都必须经过银行。
◆ Centralized Ledger · How a Bank Works
Accounts
awaiting tx
Send Money
Bank Log
(no transactions yet)
银行是唯一能写账本的一方。所有人必须信任它——它离线,整个系统停摆。
注意几件事:
- 没有银行你转不了账(试试 “Bank Offline”)
- 银行决定哪些交易能通过
- 整个系统的命门就在那一个 BANK 方块里
想把它变成”公开透明的去中心化系统”,至少要做到哪 8 件事?
抛开”信任银行”这一条,看上面那个 BANK 方块到底在替我们做什么——其实远不止”记余额”。如果要把它拆掉、改成谁都能验证的开放系统,下面这 8 件事一件都不能少:
◆ The Eight Functions of a Bank
接下来 80 分钟,我们把它们一项一项替换掉。每完成一项,右上角清单就 ✓ 一项——整门课走完时,BTC 就在你眼前被”组装”出来了。
密码学预备 · 哈希
进入正式替换之前,需要先掌握一个工具:哈希函数。它会出现在后面几乎所有模块里。
什么是哈希
哈希函数把”任意长度的输入”压缩成”固定长度的输出”。SHA-256 是 BTC 用的那一个。
◆ Hash · The Black Box
- 01确定性同样的输入 → 同样的输出
- 02雪崩效应改 1 字符 → 输出几乎全变
- 03单向性从输出反推输入 = 几乎不可能
- 04抗碰撞找两个不同输入产生同一输出 = 几乎不可能
试一下
◆ SHA-256 · Avalanche
6cabdb6b53060a1961f7cceede7e07022505a83870fadb64f9699074150f033e
改一个字符 → 输出几乎全变(雪崩效应)
哈希函数有 4 个对去中心化系统至关重要的性质:
- 确定性 — 账本谁来算都得同一个结果 → 所有人能独立验证
- 雪崩效应 — 改 1 字节就能被察觉 → 防篡改的基础
- 单向性 — 你不能”反算”出来 → PoW 必须靠暴力搜索
- 抗碰撞 — 找两个不同输入产生同一输出几乎不可能 → 安全保证
记住这 4 个性质——后面每个模块都会用到。
模块 A — 替换”身份验证”
线索追问
银行靠”第三方记得你是谁”。没了第三方,需要一种”只有你自己持有就能证明身份”的东西。
→ 答案:一对相互绑定的数字——一个绝对私密,另一个可以公开。这一对就是”非对称密钥”。
Step 1 · 先认识私钥和公钥
在讲怎么”签名”之前,先看清楚这两个东西到底是什么:
关键直觉:
- 私钥
sk就是一个随机的大整数——没有什么神秘成分,你在脑子里掷 256 次硬币写下来就是一个合法的 BTC 私钥 - 公钥
pk是从 sk 用椭圆曲线算出来的,唯一对应这把私钥 - 想公开身份 → 把 pk 给别人 · 想证明身份 → 用 sk 签字
- 这一对绑定且不可反推——所有后续操作(签名 / 地址 / 交易授权)都建立在这条不对称之上
但”不可反推”这个说法听起来抽象。下面这个模拟器把它做成可以亲眼看见的事——按下按钮,让一个超级攻击者以每秒 5000 万次的速度去猜目标公钥对应的私钥:
按 ▶ start guessing 跑几秒钟看看进度条——它永远停在 0。这就是 2²⁵⁶ 在视觉上的意义。
Step 2 · 用它们做签名 / 验证
有了密钥对,再加两个操作就够替换”身份验证”了:
- Sign(sk, message) → signature · 用私钥给一条消息盖戳
- Verify(pk, message, signature) → true / false · 拿到 pk 的任何人都能独立验证
数字签名的本质:用私钥对消息的哈希做一次密码学运算——这就是为什么”哈希”要先讲。
◆ Digital Signature · Flow
持有 sk = 能签字 = 是账户主人。 任何人都能用 pk 验证,但只有 sk 能签出有效签名。
下面是完整的可交互演示——改消息、换密钥对、勾”tamper”看签名失败的瞬间:
真实事件锚
- James Howells 硬盘(2013,威尔士填埋场):英国程序员丢了存着 8000 BTC 私钥的硬盘进垃圾场,至今仍在向地方政府申请挖整个填埋场。私钥即一切。
- Mt.Gox 倒闭(2014):交易所私钥保管不善,85 万 BTC 被盗,这家曾占全球 70% 交易量的平台从此消失。
模块 B — 替换”账本记录 + 防双花”
线索追问 1:账本怎么记?
银行账本存余额——这是”状态视角”。但状态需要权威维护。
去中心化方案:把”存状态”变成”存事实”——存交易历史,余额由历史推导。
◆ State vs. History · Two Mental Models
State View
状态:余额表
- Alice
- 80
- Bob
- 70
- Carol
- 0
◇ 状态是"当前的快照" — 必须有权威机构维护
Fact View
事实:交易历史
- 01mint → Alice: 100
- 02mint → Bob: 50
- 03Alice → Bob: 20
◇ 事实是"发生过的所有事" — 任何人都能验证
左边的余额,是右边历史推导出来的——这是去中心化的关键转换。
为什么这样更去中心化?因为事实任何人都能验证。这是从中心化到去中心化的第一个核心思维跃迁。
BTC 上的事实交易长什么样
上面的演示用文字写”Alice → Bob: 20”。真实的 BTC 链上长得更具象一点——每条事实都是一对:转账描述 + 签名。
◆ BTC Transactions · what facts look like
Block #840000
◇ 每笔"事实"就是一行:谁转给谁多少 + 签名。
◇ 链上账本就是这样一行一行积累的——不存余额,只存事实。
◇ 但如果有人把这一行复制再发一遍呢?这是签名解决不了的——下一节我们引入 nonce。
这就是链上账本的最小单位。谁转给谁多少 + 签名证明这是本人发的——一条事实压缩成一行。
线索追问 2:怎么防止交易被原样复制?
签名挡住”伪造”,但挡不住重放——攻击者把你已经签好的整条 tx 抓下来,再发一次。
◆ Replay Attack · Nonce 怎么挡住它
✗ 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
◇ 看 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
投票就能记账?
一个 Eve 制造 6 个假身份 → 投票被她包揽
PoW · 1 cpu 1 vote
投票要花真钱
想多投票 → 多花算力。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 倍。
- 难计算:必须暴力试 nonce(哈希的单向性决定)
- 易验证:算一次 hash 就能验证别人的工作
◆ Proof-of-Work · Mine a Block
≈ 216 = 65,536
<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。
→ 解法:最长链共识——大家都跟随累积算力最大的那条。短链会被丢弃。
真实事件锚
- 2017 BTC vs BCH 分叉——共识破裂的真实样子。
- 2018 Bitcoin Gold 51% 攻击(损失 ~$18M)——验证了”算力够大就能改账本”。
模块 D — 替换”防篡改”
线索追问
PoW 选出了当前账本。过去账本怎么防止被偷偷改?
如果有人想往历史里插一笔”自己凭空多 100 BTC”,怎么办?
三层防御
- 打包成区块:一批交易绑在一起
- 链式哈希:每个区块包含上一个的哈希——改一处后面全断(哈希的雪崩效应在这里发挥关键作用)
- PoW 累积:改一个旧区块要重做后面所有 PoW(算力上不可能)
下面用 4 步把”为什么改一处会破坏整条链”拆开演示:① 单块结构 → ② 双块如何连接 → ③ 篡改后哪里失配 → ④ 多块级联失效。
◆ Tamper-Proof Chain · Walk Through
Step 1 / 4
① 一个区块包含什么?
一个最简区块 = data(内容) + prev_hash(上一区块的 hash) + hash(前两者算出来的指纹)。
data
prev_hash
00000000000000…000000
hash
c0eb42784be69e…7beb69
hash = sha256(prev_hash + "|" + data)
◇ 试着改一下 data 框 → hash 字段(橙色)立刻变。
◇ 含义:区块的 hash 是它内容的指纹。
◆ Block Header · Anatomy
- 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 验一笔交易
◇ 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
验证方式:拿出本地最新区块的 hash,直接对比 → 这一块能接上你的链
验证方式:本地算一次 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
Outputs
◇ 矿工的钱不是显式 fee 字段,是 Σin − Σ(bob + change) 的差额
Transaction-Level Checks
验证方式:在本地 UTXO 集合里查找这个 UTXO id → 存在 ⇒ 这笔钱确实"在"
验证方式: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
Bob
Carol
Local UTXO Set · 节点本地的数据结构
{ #a91 → Alice 7 BTC #c2d → Alice 3 BTC #e44 → Bob 2 BTC #f88 → Carol 4 BTC}
◇ 节点把每笔交易解释成"删除某些 UTXO + 增加某些 UTXO"的状态转换。
◇ 整块处理完后,UTXO 集合稳定到新状态 → 下一笔交易来时,直接查这个集合就能判断 UTXO 是否存在、是否未花。
◇ 全网每个诚实节点都做同样的更新 → 每个节点的 UTXO 集合都一致 → 这就是"账本一致性"的底层实现。
这就是”账本”在节点内部的样子——不是余额表,而是不断演化的 UTXO 集合。
模块 E — 替换”激励”
线索追问
PoW 要烧电,矿工凭什么愿意烧?凭什么愿意诚实?
经济学闭环
◆ The Economic Loop
矿工诚实 → 系统有价值 → 奖励有价值 → 更愿诚实。攻击系统 = 砸自己饭碗。
矿工的收益(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
value
价值 · 多少钱
owner
所有者 · 公钥哈希
source
来源 · 哪笔交易第几个 output
◇ 花钱 = 把整张 UTXO 消耗掉,产生新的 output UTXO(包括给自己的找零)。
◆ Two Mental Models
BTC
UTXO Model
- 钱是离散的“数字现金”
- 每张可追溯到铸币
- 验证只需看 UTXO 集合
- 花钱要消耗整张 → 找零
ETH · 银行
Account Model
- 钱是全局余额数字
- 无来源追溯
- 验证需要全局状态
- 更接近“银行账户”直觉
◆ UTXO · Build a Transaction
Alice · click to select
Transaction
Σ in = bob + change + miner。BTC 没有显式 fee 字段——剩余即矿工费。
⚠ outputs > inputs · 凭空印钱
Bob
If Account Model
呼应模块 B:UTXO 和”用交易历史代替余额”是同一个哲学的两种表达——存事实,不存状态。
真实事件锚
中本聪的早期地址至今持有 ~110 万 BTC——这些 UTXO 从未被花过。它们就在那里,谁都拿不走。
看看真链上 · explorer 实地考察
◆ See it on a real explorer · mempool.space
opens in new tab
创世块
10,000 BTC → 2 张披萨
当前链顶最新区块
◇ 这些是真实的链上记录——任何人都能验证。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 的锁与钥匙
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²⁵⁶ · 安全的根基
2256≈1.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 标度)
◇ Brute Force · 想把 2²⁵⁶ 枚举一遍要多久?
预计耗时
宇宙诞生约 1.38×10¹⁰ 年。即使最极端的算力假设, 枚举 2²⁵⁶ 也要 10^38 个宇宙寿命。
BTC 的"底气"不是法律、不是机构、不是审计——
是 2²⁵⁶ 这个数本身。
🎬 收尾
回看清单
8 项全部 ✅。原来 BTC 就是这张表的产物:
◆ The Eight Functions of a Bank
BTC 的本质 = 用密码学 + 经济学替换信任机构。
诚实承认代价
替换不是没代价的。BTC 失去了:
- 可逆性 — 转账打错地址,钱永远找不回(银行能调单)
- 速度 — ~10 min 出块,几个确认才安全(信用卡 1 秒清算)
- 客户服务 — 没有客服热线
- 合规接口 — 没有 AML / KYC 内建支持
BTC 用这些代价换来了:抗审查、无许可、全球可用。值不值得,看你解决什么问题。
前瞻:BTC 之后呢?
- Bitcoin Script — BTC 其实是可编程的,只是脚本能力很有限(条件锁、多签、时间锁)
- Ordinals / BRC-20(2023)— 让 BTC 也能存 NFT 和发币
- 下节课 — ETH 把可编程性彻底打开,智能合约登场
课后作业
- 装一个 BTC 钱包(推荐 BlueWallet 或 Sparrow)
- 在 Signet 测试网领一点 sBTC
- 给同学转一笔,用 explorer 查这笔交易
- 在 explorer 找到一个区块,识别五元组的每个字段
进一步阅读
- Learn me a bitcoin — 最好的 BTC 可视化教材
- Mastering Bitcoin — Andreas Antonopoulos
- Bitcoin 白皮书 — 9 页,研究生应该读原文