Bitcoin Miniscript是什么? 图 1
Bitcoin Miniscript是什么? · 图 1

Bitcoin Miniscript不是新的共识脚本语言,也不会改变比特币节点验证交易的方式。它是现有Script片段的结构化子集,让钱包能分析“哪些签名和时间条件可以花费”“最坏需要多大见证”等问题。

四层对象不要混在一起

最上层policy描述人的意图,例如“日常由A和B共同签名,超过某个时间后由恢复钥匙C签名”。钱包把policy编译为满足约束的Miniscript;Miniscript再编码成实际Script;descriptor把脚本、密钥来源、派生路径和校验信息组织成可导入的钱包描述。

层级回答的问题是否直接上链
policy想允许哪些花费条件
Miniscript怎样用可分析片段表达条件
descriptor哪类输出、哪些密钥与脚本
Script / witness节点实际执行什么

类型系统解决什么

任意Script组合可能在栈类型、分支行为或资源限制上产生难以分析的结果。Miniscript为片段赋予类型和属性,只允许满足组合规则的表达。钱包因此可以推导某条路径需要哪些签名、是否存在时间锁、是否可能提前失败,以及不同满足方式的见证大小。

这不等于“通过类型检查就安全”。密钥托管、备份、硬件钱包展示、时间锁高度和脚本树设计仍由用户负责;编译后的脚本最终接受共识规则验证。

一项策略可能有多条满足路径

假设策略允许“主钥匙立即签名”或“达到某区块高度后恢复钥匙签名”。在高度到达前,钱包只能选择主路径;到达后,两条路径都可能满足。钱包可根据可用签名、时间条件和费用选择路径,同时要避免泄露不必要的备用条件。

若放进Taproot脚本树,未使用叶子通常不会公开;实际走脚本路径时会披露该叶子及控制块。若所有参与者能协作走密钥路径,链上表现可能更紧凑,但协作协议又有自己的交互和备份要求。

导入descriptor前检查什么

确认网络与地址类型,检查密钥是原始公钥还是带来源指纹和派生路径的扩展密钥;核对通配符分支是否区分收款与找零;重新计算descriptor checksum;确认钱包支持相同Miniscript与Taproot能力。只导入watch-only descriptor不会获得私钥,但仍会暴露地址集合和余额隐私。

Miniscript最适合把复杂脚本变成可审计的工程对象,而不是让普通用户手写高风险策略。恢复方案应先在测试网络演练,记录时间锁单位、密钥位置和钱包版本。

编译前先定义你要满足的条件

Miniscript策略可以表达签名、哈希原像、相对时间锁和绝对时间锁的组合,编译器再选择满足目标脚本类型的表达。比如“主钥匙立即花费,或备份钥匙在90天后花费”不仅涉及两把公钥,还要明确时间锁使用区块还是时间单位、CSV序列值以及分支权重。

描述符中的校验和只用于发现文本抄写错误,不保护私钥。上线前要用独立实现解析描述符,枚举各条满足路径,估算最坏见证重量并在目标网络做恢复演练。只验证日常分支而不验证延时恢复分支,会把真正需要的灾备能力留到事故发生时才测试。

时间锁语义可参考nLockTime、CLTV与CSV,Taproot披露边界见两种花费路径,扩展密钥隐私见BIP32派生