Miniscript 不是新 opcode、consensus rule 或通用编程语言。它是人类 spending policy 与具体 Bitcoin Script 之间的中间层,通常嵌入 wsh() 或 Taproot output descriptor。
Miniscript 只结构化 Bitcoin Script 中用于签名、hashlocks、timelocks 及其组合的选定子集。它不改变 consensus,也不增加 opcode;资金由最终 Script 保护,Miniscript 是软件可编译或识别的可分析表示。
Spending policy 表达人类意图,例如“A,或 144 个区块后由 B”。Compiler 选择具体 Miniscript,再翻译为 Bitcoin Script。Output Descriptor 还把 script 与密钥、derivation、网络和 checksum 绑定,例如 wsh(...)。
pk()、older()、after()、sha256()、and_v()、or_d()、thresh() 具有精确定义。v: 等 wrappers 改变类型或行为。B、V、K、W 类型约束 stack 接口,使不兼容表达式无法组合。
Satisfaction 是使分支为真的 witness;dissatisfaction 是组合 AND、OR、threshold 所需的规范假值。通用 signer 按可用签名、preimages 与 timelocks 选路。Miniscript 不生成 private key,也不能绕过缺失条件。
after(n) 使用绝对 nLockTime,older(n) 按 BIP 68 使用相对 nSequence。基于区块高度与时间的 locks 必须兼容,交易字段也须正确;最终由 consensus Bitcoin Script 而非 policy 文本验证。
静态分析可限制 Script 与 witness 大小、操作数、signature checks、stack elements,以及不同 satisfaction 路径成本。结论取决于 P2WSH 或 Tapscript 环境,并须满足 consensus 与 standardness 资源限制。
类型正确保证安全组合,不代表 custody policy 本身明智。Malleability 分析判断第三方能否在不破坏条件时改变有效 satisfaction。保证依赖明确假设,例如双方拥有相同 hash preimages;重复密钥也可能被禁止。
同一 policy 可编译成多个等价 Miniscript,Script 与 witness 大小各异。Compiler 按 cost model 优化;9@ 等权重只是概率提示,不是 consensus rule。不同编译通常产生不同 Script 和地址。
在 descriptor wallet 中,Miniscript 位于 wsh() 或 Taproot script path,并带 key origins。PSBT 可向 signers 传递交易与 derivation 数据,但设备必须支持相应 descriptor 与 policy。请在屏幕核对密钥、threshold、timelocks 和意外分支。
保存精确的带 checksum descriptor、key map、derivation paths、网络、receive/change 分支、range 与 scan birthday。运行 parser/analyzer,派生多个地址,并在 regtest 或 signet 测试每条 satisfaction。入金前验证 watch-only recovery 与签名。 资料来源: BIP 379 — Miniscript; Miniscript Reference — Specification and Analyzer; Bitcoin Core — Output Descriptors; Bitcoin Core 24.0 — Miniscript Support; BIP 388 — Wallet Policies for Descriptor Wallets.
要获得更完整的理解,请将本词条与以下词条结合阅读: Bitcoin Script, Output Descriptor, Multisig, 安德鲁·波尔斯特拉, Timelock, Bitcoin. 反向关联还来自: Output Descriptor, 比特币脚本操作码, Dead Man’s Switch, 彼得·维勒.