Miniscript:让 Bitcoin 的花费条件可读、可分析、可组合
一种结构化语言,把多签、时间锁、哈希锁等花费条件,从晦涩的操作码中解放出来。
ScriptWise 是一个用真实场景带你读懂 Miniscript 的学习站点——从一段策略描述,到可运行的 Bitcoin Script。
Playground 建议在桌面端打开以获得完整体验。
OP_DUP <Alice> OP_CHECKSIGVERIFYOP_IF<Bob> OP_CHECKSIGOP_ELSE4320 OP_CSVOP_ENDIF
它有什么意义
你想给家人留一笔比特币,万一你不在了他们能拿到吗?
你想做 2-of-3 多签,但其中一把钥匙丢了怎么办?
你想让一个第三方托管你的资产,但保留紧急回收权?
每一种场景,背后都对应着一类花费条件
每个地址背后,都有一段脚本
比特币地址不只是一串字符——它对应着一段脚本,定义了「谁能花费这笔资金」。
单一签名
OP_DUP OP_HASH160
<PubKeyHash>
OP_EQUALVERIFY OP_CHECKSIG一把私钥,即可花费。
bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq
多重签名(2-of-3)
OP_2
<PubKey1>
<PubKey2>
<PubKey3>
OP_3 OP_CHECKMULTISIG三把钥匙中,任意两把即可花费。
bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3
Bitcoin Script 的复杂性
上面那段脚本只是最朴素的两个例子。一旦你尝试表达更有意思的花费条件,就会撞上 Bitcoin Script 的四个限制。
低级抽象
基于操作码和栈,读一段脚本要在脑子里逐行追踪栈状态。即使是 2-of-3 多签,裸脚本也像一串神秘符号。
容易出错
一个字节偏差、一个分支错位就可能锁死资金;也没有简单的办法在链下静态验证"这段脚本一定能被花费"。
难以组合
脚本无法像函数那样被拆成可复用的小块再拼起来。加一个新条件,往往意味着重新设计整段脚本。
难以分析
脚本大小、见证开销、花费路径……都得手工推导,没有标准工具能自动回答"这段脚本到底表达了什么"。
认识 Miniscript
Bitcoin Script 的表达力已经够用,真正的瓶颈在于"怎么写"。Miniscript 不改变比特币,只是创新了一种编写比特币脚本的方法。
Miniscript 是什么
Miniscript,一种可编译、可验证、可组合的中间语言。
如果说 Bitcoin Script 是汇编,Miniscript 就是它的高级语言——不改动底层共识,只改写"怎么写"。它不是新的共识规则,也不是新的虚拟机——链上执行的仍然是 Bitcoin Script。它只是在你写脚本、工具分析脚本时,插入了这一层。
Policy
你怎么想
用人类可读的方式描述"谁能花"。支持任意组合逻辑,无需担心编译后的有效性。
or(pk(Alice), and(pk(Bob), older(144)))要么 Alice 一人签;要么 Bob 签且区块高度过了 144。
Miniscript
工具怎么分析
Policy 与 Bitcoin Script 之间的桥梁。每个表达式具有明确类型,可由工具自动验证、分析和优化。
or_d(pk(Alice), and_v(v:pk(Bob), older(144)))Policy 编译后的标准形式,每个节点都带有类型与属性。
Bitcoin Script
链上怎么执行
最终提交到区块链的操作码序列。由 Miniscript 编译生成,无需手写。
OP_DUP <Alice> OP_CHECKSIGVERIFY OP_IFDUP OP_NOTIF <Bob> OP_CHECKSIG OP_ENDIF链上节点按现有共识规则逐条执行这些操作码。
Miniscript 带来了什么
结构即语义,一眼读懂
Bitcoin Script
OP_2 <pk1> <pk2> <pk3>
OP_3 OP_CHECKMULTISIGMiniscript Policy
thresh(2,
pk(Alice),
pk(Bob),
pk(Charlie)
)同样是表达 2-of-3 多签名脚本。右边的 Miniscript 脚本显式表达 “阈值” 条件且阈值为 2 ;左边的脚本则必须先理解堆栈和操作码语义才能读懂。
像积木一样组合,像工具一样分析
基础条件
组合结果
or(
and(pk(Alice), pk(Bob)),
and(pk(Bob), older(1000))
)独立的基础单元
签名(pk)、时间锁(older)、哈希锁(sha256),每一个都是独立条件,任意嵌套组合都合法。
嵌套不会变差
无论组合多深,编译器都会找到最小等价的 Bitcoin Script。
结构化 = 可分析
工具能自动回答"这段脚本有哪些花费路径、每条路径开销多大"——详情请见本网站 Playground。
一次编写,任意钱包还原
Descriptor(Output Descriptor)把 Miniscript 与具体的密钥、派生路径打包成一个可携式格式。钱包据此生成地址、构造交易,不同钱包之间可以无缝导入导出——你的花费规则不再被单一软件绑定。
钱包 A
设计花费策略
Output Descriptor
wsh(andor(pk(Alice),pk(Bob),and_v(v:pk(Recovery),older(10000))))标准格式,包含完整策略信息
钱包 B
完整还原策略
你的花费规则属于你自己,不再被单一钱包软件绑定。
应用场景
从 Policy 到最终脚本:实时查看真实应用场景的完整编译演化过程。
已支持 Miniscript 的钱包
以下钱包已原生支持 Miniscript,可用于管理复杂的花费条件。
常见问题
关于 Miniscript 最常被问到的几个问题。
使用 Miniscript 需要 Bitcoin 软分叉吗?+
Miniscript 现在能用吗,还是处于实验阶段?+
Miniscript 安全吗?我可以用它管理真实资金吗?+
我必须懂底层 Bitcoin Script 才能用 Miniscript 吗?+
Miniscript 与 Output Descriptor 是什么关系?+
ScriptWise 是 Miniscript 的官方网站吗?+
准备好自己设计了吗?
在 Playground 里用可视化画布搭建策略,实时看到 Policy、Miniscript 与花费路径。
Playground 建议在桌面端打开以获得完整体验。