附录 A · 纸条游戏(动手版)
《签名能看见什么》的实体玩具 —— 和孩子一起玩
验收标准:孩子能玩明白,这本书就写成了。 这是一套用纸、剪刀、笔就能做出来的游戏。一根"交易纸条" + 一个"按手印"的动作, 就能把全书的 sighash、covenant、看不见邻座、那堵墙,全玩出来。 比喻负责上手,第四节「知识卡」负责教真名字(ALL/NONE/SINGLE…)—— 玩完就学,不全靠比喻。 中文为主(陪孩子玩用),方括号里是书里的学名(成书时英文版照此重画)。
一、先做零件(一次性,二十分钟手工)
零件 1 · 交易纸条 [the transaction strip / sighash preimage]
一根长纸条,从左到右画 4 个格子,每格写上大字 + 小图:
┌─────────┬──────────────┬──────────────┬─────────┐
│ 📅 第几版 │ 🙋 谁出钱 │ 🎁 钱给谁 │ ⏰ 等多久 │
│ [version]│ [inputs/输入] │ [outputs/输出]│[locktime]│
├─────────┼──────────────┼──────────────┼─────────┤
│ 2 │ 小王、小李 │ 给🍜餐厅 8块 │ 马上 │
└─────────┴──────────────┴──────────────┴─────────┘
这根纸条,就是"这笔买卖到底是怎么回事"的全部信息。多做几根空白的。 进阶:🙋和🎁其实都是"一串"(好几个人出钱、好几个地址收钱)。玩到第四节矩阵时,把这两格各画成几行。
零件 2 · 硬币卡 [coins / UTXO]
小卡片,画一枚币,写上有多少钱、谁的,角上留一个回形针口(待会儿夹"纸条")。
┌──────────┐
│ 🪙 ×5 │
│ 小王的 │
│ 📎 │
└──────────┘
零件 3 · 爸爸的纸条 [covenant / 盟约]
更小的卡片,用回形针夹在硬币卡上。写一句这枚币只能怎么花:
[普通] 「我只能去 🍜 餐厅」
[递归] 「我只能去 🍜,而且下一手也得夹一张和我一样的条」 ← 第四章那张狠纸条
零件 4 · 眼罩 [sighash flag 的物理身体] ★换掉了原来的"盖板"
几张小布片 / 小窗帘,刚好蒙住纸条上一个格子。 按手印时,蒙住"你不看"的格子——蒙住 = 我没看见 = 这格签完还能随便改,我也不赖账。
为什么是"蒙眼"不是"盖章":这本书叫《签名能看见什么》,核心就是"看见"。 "盖章"在生活里是"我认这个",跟游戏里"放手"打架;"蒙眼"才对——看得见的我才认,蒙住的我管不着。
零件 5 · 手印卡 [signature / 签名] ★全游戏的心脏
一叠空白小卡。签名 = 在这张卡上抄下你睁眼看见的格子。底下留一行签名 + 一个手印位(蘸点印泥按个指印最香,孩子最爱这一下)。
┌─────────────────────────┐
│ 我认下这几格: │
│ 📅2 │ 😑 │ 🎁给🍜8块 │ ⏰马上 │ ← 😑 = 这格我当时蒙着,没看
│ ─────────────────────── │
│ 签名:小王 指印:[👍] │
└─────────────────────────┘
零件 6 · 碗 [钱池 · the pool] ★扛起"边际"
中间摆一个碗(或画个圈写"💰钱碗")。硬币卡先倒进碗里,账单再从碗里取钱。一进碗,谁的币是谁的就分不清了——这只碗,就是"账单只记菜价、不记谁出的"那条边际的身体。
二、核心动作:怎么"按手印" [signing]
这是整套游戏唯一要学会的动作,学会它,后面全是变着花样玩。
按手印(签名)三步:
- 蒙:把你不看的格子,蒙上眼罩。
- 抄:把睁眼看见的每一格,照原样抄到手印卡上(蒙着的画个 😑)。
- 按:写名字,按指印。——这张手印卡,就是你的签名。
验手印(谁都能验):
- 看交易现在长什么样,当初蒙住的格继续蒙着、不比;睁眼看过的格,一格一格对。
- 全对 → ✅ 手印有效,这笔买卖算数。
- 有一格变了 → ❌ 手印对不上,作废!("你赖账!"——孩子最爱抓这个)
一句话给孩子:你按手印认下的,是你当时看得见的那几格。改了你看过的 → 作废;改了你蒙住的 → 你管不着。
三、七关游戏(照书的顺序,难度往上爬)
🍽️ 第 0 关 · 一顿饭 [第一章]
摆:桌上两枚硬币卡(小王🪙×5、小李🪙×3),中间一根纸条,🎁那格写"给🍜餐厅 8块"。 玩:要这笔买卖成立,两个人都得按手印。少一个手印 → 这单买不成。 啊哈:钱不是谁规定怎么动的,是所有人点头(按手印)才动。
🥣 第 0.5 关 · 一个碗 [边际 · 输入池化]
摆:小王🪙×5、小李🪙×3,全倒进中间那个碗。账单🎁那格写"给🍜 8块"。 玩:问孩子——"这道🍜,是谁的钱付的?" 让他从碗里指出来。指不出来:五块三块倒一块儿,分不清了。 再问:"能在账单上加一行'这道菜必须是小李出的'吗?" 翻遍账单——没有这一栏。账单只写"菜多少钱、给谁",不写"谁出的"。 啊哈:账单的粒度,到"这道菜八块"就到头了;再往细——谁出的——账单上没有,链上也没有。 钱进了碗,就藏住了自己的来路。 (钩子:这"分不清",第 7 关那堵墙会再用一次;而"钱在碗里藏住来路",是另一个大题目——隐私 / 混币——的种子。)
🔍 第 1 关 · 看全单 [第二章 · SIGHASH_ALL]
玩:小王按手印时一格都不蒙,整根纸条全抄进手印卡。 捣乱:趁人不注意,把🎁那格偷偷改成"给隔壁小明 8块"。 验手印:手印卡写的是🍜,现在变小明了 → ❌ 抓到!作废。 啊哈:你把整张单子都看了、都认了,那谁也别想偷改。
🙈 第 2 关 · 蒙住一格 [第二章 · ANYONECANPAY / SINGLE]
玩 A:小王按手印时蒙住"🙋谁出钱"那格(画 😑)。签完,又跑来个小李要一起出钱,往"谁出钱"里加了名字。 验手印:那格当初是 😑、本来就没看 → ✅ 照样有效! 啊哈:你没看"谁出钱",那别人加进来你当然管不着。(这就是众筹的玩法。)
玩 B(吓人的一关,SINGLE 空行 bug):让小王把所有格子都蒙住去按手印——手印卡上全是 😑,等于按了张白卡。 捣乱:谁都能照着白卡再按一张一模一样的 → 把小王的钱拿走。 啊哈:啥都不看就按手印 = 按了张白条,谁都能拿你的钱。 看得越少,越危险。
📜 第 3 关 · 爸爸的纸条 [第三章 · covenant]
摆:给小王那枚币夹上爸爸的纸条「我只能去 🍜」。 玩:想把🎁那格写成"给 🎮 游戏厅" → 纸条管理员(找个人当裁判)摇头:不行!写"给 🍜" → 通过。 啊哈:这枚币从一进口袋就背着规矩,不是你想去哪就去哪。
🔁 第 4 关 · 纸条传给下一手 [第四章 · 递归 / CTV]
摆:硬币卡上预先拓好一个"🎁该长啥样"的手印(提前把去向抄死在币上)。 玩:想花这枚币,你的"🎁钱给谁"那格必须和币上预拓的手印一模一样,否则花不动。再夹上递归纸条「下一手也得带我这张条」。 啊哈:爸爸的规矩能一手一手传下去——钱流到哪,条贴到哪。 (注意:这一关全程只在"比手印",根本没按签名手印——对应书里"CTV 靠 hash 对不对,不靠签名"。)
🙉 第 5 关 · 你看得见邻座的纸条吗? [第五章 · ★转折]
摆:小王、小李各拿自己的币,爸爸的纸条扣过来盖住 / 藏到小屏风后面。规矩:不许看别人的纸条! 但中间那张共同账单(🎁钱给谁)大家都看得见。 玩:小王想确认"小李这枚币也是干净的、也背着正经纸条" → 他做不到,因为他看不见小李扣着的那张条。 啊哈:在这个游戏里,你只能看自己的纸条,抬头只看得见中间的账单,看不见邻座手里攥着的条。 ——这就是全书的转折。
✍️ 第 6 关 · 手抄纸条 [第六章 · CSFS+CAT,手搓内省]
玩:既然不许偷看,那就让小李把自己纸条上的字一句一句念出来、摆一排"抄字卡"在桌上;小王照着抄到自己的手印卡上,自己核对签名对不对。
啊哈:虽然不能直接看,但只要对方肯把内容摆出来,我就能亲手抄一遍、自己验。
——绕一圈,居然真能核! (这就是 CSFS+CAT 的 parity:链上真做过,TxID
2f3451…。)
诚实小提醒(给大一点的孩子):小李得把整张条都念出来摆桌上,桌子会很挤(见证更大)——抄出来的是"一样的效果",不是凭空长了双能直接看穿的眼睛。
🧱 第 7 关 · 墙 [第八章 · ★结局,separation 定理]
玩:小王想立一条新规矩——「我的币要花,桌上就必须同时有小李的币也在花」(共同买单)。他挽起袖子用第 6 关的老办法:让人把字摆桌上、我抄、我验。 做不出来。 为什么?让孩子亲眼看见:
摆两桌买卖:A 桌有小李的币,B 桌没有小李的币。其余一切都一样。 小王按手印,只能抄他看得见的格子。可"小李在不在场"这件事,不在他抄的那几格里。 于是——两桌按出来的手印卡,长得一模一样! 把两张手印卡并排放给孩子看:一模一样。 小王分不出哪桌是哪桌 → 他没法只放行有小李那桌、拦住没小李那桌 → 规矩立不起来。
啊哈(带着高兴讲,别沮丧):你只能认你看得见的东西;看不见的,你按出来的手印对它毫无反应,所以你永远拿它没办法。 这不是笨,这是墙——而且那个厉害的 CTV 也翻不过这堵墙。 (两张一模一样的手印卡 = 不可区分 = separation 定理的孩子版,也就是第八章「墙」。)
回声:还记得第 0.5 关那个碗吗?倒进去就分不清谁的钱——那是这堵墙更早的一块砖。看不见,有时是因为那东西压根不在账上。
🧒 收尾 · 把尺子给孩子 [第九章]
玩完七关,问孩子一句:「外面大人吵的,是不是就是'纸条到底能不能写得更细、让我们多看见一点'?」 能点头,他就拿到了这本书唯一想给的东西——一把尺子:碰到任何新玩法,就问"它让签名多看见了什么?因此能多管住什么?"
四、★ 知识卡:真正的 sighash 矩阵(玩完了,学真名)
玩具是比喻,底下是真东西。把刚才玩的,对上比特币里的真名字——这一节别全靠比喻,把知识教到位。
两个旋钮(蒙/看 → 真名):
| 旋钮 | 蒙 / 看(玩具) | 真名(比特币) |
|---|---|---|
| 🙋 进 · 谁出钱 | 都看 / 只看我这份 | 认所有输入 / ANYONECANPAY |
| 🎁 出 · 钱给谁 | 都看 / 全蒙 / 只看我那行 | ALL / NONE / SINGLE |
进 2 档 × 出 3 档 = 6 种,就是真实 sighash flag 的全部。
★ 可视化:把旋钮拧进矩阵(每格自带"看/蒙花样",一眼看清 6 种怎么来的)
图例 ● = 看见(认下,改了作废) ○ = 蒙住(放手,改了我也认)
进 = 谁出钱[别人, 我] —— 我永远 ●(蒙不掉自己正在花的那枚币)
出 = 钱给谁[一串收款行]
进旋钮 2 档: ●● 都看 │ ○● 只看我(ANYONECANPAY)
出旋钮 3 档: ●●● 都看 ALL │ ○○○ 全蒙 NONE │ ○●○ 只看我那行 SINGLE
进 = 行,出 = 列,两个旋钮一停,落在哪个交叉格 = 那个 flag。
| 进 ↓ \ 出 → | 都看 ●●● ALL |
全蒙 ○○○ NONE |
只看我那行 ○●○ SINGLE |
|---|---|---|---|
都看 ●●(默认) |
① ALL 整单钉死〔请客〕 |
② NONE 钱去哪随便〔空白支票〕 |
③ SINGLE 只认我那行收款 |
只看我 ○●(+ANYONECANPAY) |
④ ALL|AC 众筹 |
⑤ NONE|AC 最松 |
⑥ SINGLE|AC 铭文原子交换 |
读法:每格 = 左边那行的进花样(●●或○●)× 上面那列的出花样(●●●/○○○/○●○)。 拧进旋钮 = 上下换行;拧出旋钮 = 左右换列。 6 格 = 旋钮所有能停的位置,不多不少—— 这也是为什么是 6 不是随便蒙的 16:旋钮只有几个档位,拧不到档与档中间。
一句一种:
- ① ALL — 啥都不蒙:整笔钉死,动一格作废。日常默认(请客)。
- ② NONE — 蒙住"钱给谁"全部:出钱阵容钉死,钱去哪随便。空白支票,危险,少用。
- ③ SINGLE — 只看对着我那行收款:我那行 + 出钱阵容钉死,别的收款行随便加。⚠️ 没有对着我的那行时 → "按白条" bug(第 2 关玩 B)。
- ④ ALL|ANYONECANPAY — 蒙住"还有谁出钱":别人能凑进来,但目标去向不变。众筹 / 凑份子。
- ⑤ NONE|ANYONECANPAY — 两头蒙到只剩"我这份":最松,几乎啥都没认。罕见。
- ⑥ SINGLE|ANYONECANPAY — 只看我的货进 + 我的钱出:只锁自己那个角,买家填其余。铭文原子交换。
哪一关玩的是哪一格:
- 第 1 关 = ① SIGHASH_ALL
- 第 2 关玩 A = ④ ALL|ANYONECANPAY(众筹)
- 第 2 关玩 B = ③ SINGLE 的空行 bug(按白条)
- (待加)第 8 关 = ⑥ SINGLE|ANYONECANPAY(铭文原子交换;需把🎁拆成多行)
为什么"进"只有 2 档、"出"却有 3 档?(进 2 × 出 3 的根因) 你按手印是为了授权"花你这枚币",手印天生钉在"你这个输入"上——你不可能一边花这枚币、一边蒙住它说"我不认"。所以进那头最少也得看"我自己这份",没有"全蒙输入"这一档,只剩"都看 / 只看我"两档。出那头没这个钉子,所以能多出一档"全蒙"(NONE)。
两条规律,记住就通:
- 越往右下,蒙得越多 = 越松 = 留给别人填的越多(① 最紧 → ⑤ 最松)。
- "只看我那一行"是把两头统一起来的齿轮:进那头叫 ANYONECANPAY(只看我自己,没别的可挑),出那头叫 SINGLE(一串收款里挑对着我那行)——⑥ 铭文交换就是两头同时拨到它。
这张 2×3,就是 Aaron 最早问"sighash 的格子算原创吗"那张矩阵的底座;纸条游戏和论文里那张图,是同一张桌子。
五、给爸爸的小抄(一页速查)
| 书里的词 | 纸条游戏里的东西 | 一句话 |
|---|---|---|
| sighash 纸带 | 交易纸条(4 格) | 这笔买卖的全部信息 |
| 边际 / 账单粒度 | 碗(硬币倒进去分不清) | 账单只记菜价、不记谁出的;细不到那儿 |
| 签名 | 按手印(抄下看得见的格子) | 你认下了你看见的 |
| sighash flag | 眼罩(蒙住不看的格) | 你选择看多少;蒙住=放手 |
| SIGHASH_ALL | 一格不蒙 | 整单都认,谁都改不了 |
| ANYONECANPAY | 蒙住"谁出钱" | 别人能加入(众筹) |
| SINGLE | 只看对着我那行收款 | 我那行钉死,别行随便加 |
| NONE | 蒙住"钱给谁"全部 | 钱去哪随便(空白支票) |
| SINGLE 空行 bug | 蒙到没有自己那行 = 按白条 | 啥都不看,钱被拿走 |
| covenant | 爸爸的纸条(夹币上) | 钱背着规矩 |
| 递归 covenant / CTV | 币上预拓的去向手印 | 规矩传下一手;只比手印不签名 |
| cross-input introspection | 扣过来的邻座纸条 | 看不见邻座的条 |
| CSFS+CAT 手抄 | 念出来 → 抄字卡 → 自己抄进手印卡 | 绕一圈也能核 |
| 铭文原子交换 | 两头都只看自己那一角(货进+钱出) | SINGLE|ANYONECANPAY |
| 那堵墙 / separation | 两桌按出一模一样的手印卡 | 看不见的,永远管不着 |
六、待补(成书时)
- 把上面的纸条 / 硬币 / 眼罩 / 手印卡画成可直接打印剪裁的一页 PDF(现在是手绘示意,你今晚先手画就能玩)。
- 🎁 拆成多行 + 加第 8 关「一手交画一手交钱」(铭文原子交换 = SINGLE|ANYONECANPAY),把第四节矩阵的 ⑥ 也变成可玩。
- 英文版 Appendix A 照此重画(字段学名已在方括号里给好)。
- 第 4、7 关可拍几张实拍照放进书里,当"小孩都能玩"的证据。
纸条游戏 v0.3 · 2026-06-27 · 眼罩替换盖板 + 增「真矩阵知识卡」+
旋钮拧进矩阵的可视化(每格自带 ●○ 看/蒙花样)。配套
MANUSCRIPT_CN.md 各章。验收线:孩子玩明白 =
写成功。