用过硬件钱包多签套装的人多半见过这样一串字符:m/48'/0'/0'/2'/0/5。它比单签钱包常见的 m/84'/0'/0'/0/5 多出一层,多数教程只告诉你「这是多签专用路径」,却说不清多出来的那位数字管什么。管这件事的标准是 BIP-48《Multi-Script Hierarchy for Multi-Sig Wallets》,作者 Fontaine,2020 年 12 月 16 日立项,状态 Deployed。它的定位很特别:不是发明新路径,而是把行业里已经普遍运行的 m/48 惯例追认成文。文档在兼容性一节写得很直白——不少钱包早就在用 m/48 派生多签账户,本标准刻意不做任何破坏性修改,已经支持的钱包不需要为合规改代码。
完整路径长这样:m / purpose' / coin_type' / account' / script_type' / change / address_index,六层,撇号表示硬派生。逐层读:purpose 固定为 48 撇,宣告这个子树按本协议使用,这是 BIP-43 的思路——44 代表普通多账户分层,45、49、84、86 各代表一种地址方案,48 专供多签。coin_type 是网络代号,0 主网、1 测试网,防止同一条种子在不同网络上开出相同地址。account 把密钥空间切成互不混币的身份单元,从 0 开始顺序编号,用途与 BIP-44 完全相同。真正的特色在第四层 script_type:1 撇代表嵌套隔离见证(P2SH-P2WSH),2 撇代表原生隔离见证(P2WSH),文档建议钱包默认采用 2 撇即 m/48'/0'/0'/2';更妙的是这一层为将来的脚本类型留了空位,新寻址方案出现时直接取新编号,不用再立一份新 BIP。第五层 change 是 BIP-44 熟悉的老面孔,0 对外收款、1 找零,用公开派生;第六层 address_index 顺序编号地址,同样公开派生。
协议还有条容易忽略但影响很重的硬性要求:支持 BIP-48 的钱包必须同时支持 BIP-67 的确定性公钥排序——多签脚本里的公钥按约定顺序(字典序)排列,这样同一组参与者、同样的门限,无论钥匙在谁手里排列,最终得到的多签地址和脚本完全一致。多签协作最怕的就是六个人各排各的序、开出六个不同的地址,排序规则把这个乱局一次性钉死。对照着看三个近亲的分工就清楚了:BIP-44 管单签钱包的多账户结构;BIP-45 管早期 P2SH 多签的单一共享分支(m/45' 下不分子类型,每个签名者各管一条编号分支);BIP-48 则是给多签加上「脚本类型可选、账户可分、地址可数」的完整货架结构,把多签当成一种可以无限扩展的账户家族来设计。
为什么脚本类型值得单占一层?因为多签钱包的升级压力恰恰在这里。2017 年前后多签普遍走 P2SH-P2WSH,地址以 3 开头,兼容老系统;纯原生 P2WSH 更省费、地址以 bc1 开头。一个托管服务同时运营两代产品时,如果两代共用同一棵密钥树,同一批私钥在两种脚本下派生出的地址如何隔离、恢复时怎么不扫漏,全是麻烦。把脚本类型放进派生路径的固定一位,两套体系天然分枝、互不污染,日后加 Taproot 多签(BIP-86 思路延伸)也只是再登记一个编号。
常见误区有三条。第一,把 48 读成「48 家协作方」之类的数量含义:它只是 purpose 编号,与门限、人数无关。第二,混淆 BIP-48 与 BIP-44 的地址:同一条助记词在 44、49、84、86、48 五条 purpose 下是五棵互不相交的密钥子树,用错 purpose 导入钱包会显示余额为零,钱并没有丢,换对路径就回来了。第三,以为撇号数量可以随意:文档规定 purpose、coin、account、script 四层必须硬派生,change 与 index 用公开派生,顺序与硬软都是标准的一部分,自创变体等于自创钱包,恢复时可能谁也扫不到你。
快速问答。问:多签钱包恢复时为什么常要「扫描到某个空地址数为止」?答:BIP-48 与 BIP-44 一样用公开派生的地址序列,钱包无法预知你用到第几个,只能按传统扫描窗口逐个派生尝试,扫到足够多连续未使用的地址才停。问:script_type 会出现 0 吗?答:现行标准只登记 1 撇与 2 撇两种,未来脚本类型按可扩展原则另行编号,不要凭想象猜编号含义。问:它与描述符钱包什么关系?答:派生路径解决「钥匙住在树哪一格」,描述符(BIP-380 系列)解决「这格钥匙拼成什么脚本」,现代多签流程常常两者并用。
风险提示:本文为钱包机制科普,不构成投资建议;导入任何多签配置前确认 purpose 与脚本类型编号,路径写错虽不丢币,但可能让你误判余额与地址归属。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。