Bitcoin Miniscript

Miniscript:让 Bitcoin 的花费条件可读、可分析、可组合

一种结构化语言,把多签、时间锁、哈希锁等花费条件,从晦涩的操作码中解放出来。

ScriptWise 是一个用真实场景带你读懂 Miniscript 的学习站点——从一段策略描述,到可运行的 Bitcoin Script。

Playground 建议在桌面端打开以获得完整体验。

P2WSH
↓ compiles to
OP_DUP <Alice> OP_CHECKSIGVERIFY
OP_IF
<Bob> OP_CHECKSIG
OP_ELSE
4320 OP_CSV
OP_ENDIF
示例:编译过程示意
Alice + Bob 共同签名
Alice + 等待 30 天

它有什么意义

你想给家人留一笔比特币,万一你不在了他们能拿到吗?

你想做 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_CHECKMULTISIG

Miniscript Policy

thresh(2,
  pk(Alice),
  pk(Bob),
  pk(Charlie)
)

同样是表达 2-of-3 多签名脚本。右边的 Miniscript 脚本显式表达 “阈值” 条件且阈值为 2 ;左边的脚本则必须先理解堆栈和操作码语义才能读懂。

可组合性

像积木一样组合,像工具一样分析

基础条件

pk(Alice)older(1000)pk(Bob)
自由组合

组合结果

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 到最终脚本:实时查看真实应用场景的完整编译演化过程。

多重签名(2-of-3)

上手一试

使用场景

三个参与者中任意两个签名即可花费

应用类型

多重签名钱包

真实案例

比特币基金、交易所冷钱包、DAO 财库

优势

灵活的门槛配置(2-of-3、3-of-5 等)

Layer 1: Policy

thresh(2, pk(Alice), pk(Bob), pk(Charlie))
编译 ↓

Layer 2: Miniscript

multi(2, Alice, Bob, Charlie)
编译 ↓

Layer 3: Bitcoin Script

[B] OP_NOTIF [C] OP_NOTIF OP_2 OP_ROT [A] [B] [C] OP_3 OP_CHECKMULTISIG OP_ELSE [A] OP_CHECKSIG OP_ENDIF OP_ELSE [B] OP_CHECKSIG OP_ENDIF
生态支持

已支持 Miniscript 的钱包

以下钱包已原生支持 Miniscript,可用于管理复杂的花费条件。

软件钱包
Bitcoin CoreBitcoin CoreLianaLianaNunchukNunchukBitcoin KeeperBitcoin KeeperMyCitadelMyCitadel
硬件钱包
LedgerLedgerColdcardColdcardJadeJadeSpecter-DIYSpecter-DIYKruxKruxBitBox02BitBox02TAPSIGNERTAPSIGNER

常见问题

关于 Miniscript 最常被问到的几个问题。

使用 Miniscript 需要 Bitcoin 软分叉吗?+
Miniscript 编译产生的是合法的 Bitcoin Script,链上节点按现有规则执行,不引入任何共识层变更。
Miniscript 现在能用吗,还是处于实验阶段?+
已经可以用。Bitcoin Core 24.0 起原生支持 Miniscript Descriptor,Liana、Nunchuk、Bitcoin Keeper 等钱包也已将其作为正式功能。
Miniscript 安全吗?我可以用它管理真实资金吗?+
Miniscript 的类型系统在编译期就能排除一类"链上无法被花费"的错误,且每个节点的可花费性、见证大小都可形式化分析。但任何复杂花费条件在投入真实资金前,都建议在 testnet/signet 上充分演练。
我必须懂底层 Bitcoin Script 才能用 Miniscript 吗?+
不需要。日常使用 Policy 这一层就够了——你描述"谁能花、什么时候花",编译器负责生成对应的 Bitcoin Script。底层细节是工具与钱包的事。
Miniscript 与 Output Descriptor 是什么关系?+
Miniscript 描述的是"花费条件的结构";Descriptor 在此基础上加上具体的密钥与派生路径,是钱包用来生成地址、构造交易的完整描述。可以理解为:Descriptor = Miniscript + 钥匙信息。
ScriptWise 是 Miniscript 的官方网站吗?+
不是。ScriptWise 是一个由社区个人维护的学习站点,目标是用真实场景帮助更多人理解 Miniscript。Miniscript 的规范与参考实现请以官方仓库为准。

准备好自己设计了吗?

在 Playground 里用可视化画布搭建策略,实时看到 Policy、Miniscript 与花费路径。

Playground 建议在桌面端打开以获得完整体验。

ScriptWise — 场景优先、以花费路径为中心的 Bitcoin Miniscript 教学实验室。

© 2026 ScriptWise. All rights reserved.

ScriptWise — Bitcoin 花费条件教学实验室