createmultisig:地址可以比钱包先存在 图 1
createmultisig:地址可以比钱包先存在 · 图 1

先造地址,后管钥匙

公司出纳想申请一个需要三人签名才能花款的收款地址,但此刻既没集齐三位签名人的设备,也不该让任何人的私钥进系统。比特币核心的 createmultisig 正好覆盖这种”地址先行”的需求:它是纯计算,接收几个公钥和阈值 N,输出对应的脚本和地址。节点不需要持有其中任何私钥,也不需要存在这个钱包——公钥只是参数。同样的输入在任何一台干净机器上都会得到同一个地址,这给了”谁都能复核地址”一个可执行的含义:每一方各自跑一遍同样的公钥列表,比对地址字符串,一致才对外公布收款信息。

createmultisig:地址可以比钱包先存在 图 2
createmultisig:地址可以比钱包先存在 · 图 2

redeemScript 是这份地址的出生证明

调用返回里除了地址,还有兑现脚本(旧式 P2SH 形态下通常以 redeemScript 字段出现)。这个脚本必须马上归档:将来花这笔钱时,每一方都要为交易提供”脚本本体加满足它的签名”,脚本一旦丢失,地址里的资金就失去了被合法解锁的说明书。它同样需要和地址一起放进变更流程——脚本与地址一一对应,脚本列表顺序、阈值、公钥集合任何一项不同,生成的就是另一个地址。多方合作里最常见的事故不是丢脚本,而是对不上脚本:有人重新生成了顺序不同但公钥相同的一版,以为”反正一样”,结果地址变了,钱打错门。

与 addmultisigaddress 的分工

addmultisigaddress 是面向”自己参与签名”的场景:它会把脚本写进当前钱包,让钱包把相关地址纳入监控并参与签名流程;本节点也顺带变成签名方之一。createmultisig 则完全不动任何钱包,适合审计、预览、验证他人给出的地址这类旁观场景。两者输入相近,用途正交:先旁观、后参与是稳妥流程。

参与方的密钥边界

多签的安全不是”三份密钥放一起更安全”这么简单:任何一份私钥泄露都只是达到阈值的一部分,攻击者还需要其余签名;反过来,任何一份私钥丢失也让签名能力永久缺一角。因此每个签名方都要按自托管最高标准备份自己的密钥;阈值设置(比如 2-of-3 还是 3-of-5)要在”单点作恶”与”单点故障”之间想清楚,没有通用正确答案。参与签名时,每方核对的内容至少包括:这笔交易的总输入、总输出、找零归属和手续费——多签只是门槛机制,不会替你自动审交易,拿到别的软件给的 PSBT 时更要逐字段核对,盲目点签名的风险由签字的人承担。

落地清单

  • 阈值、公钥列表、生成命令写进审批单,归档时附带生成用的节点版本与时间。
  • redeemScript 与地址同时入库,多处备份。
  • 收款前:每方各自离线重算一遍地址。
  • 花费时:用 PSBT 逐方签名,签名方核对交易全貌。 本文不构成投资建议。

见证时代的多签形态

值得补充的是,多签并非只有 P2SH 这一种落法。隔离见证之后,多签可以包在见证脚本里,交易体积和费率结构都与旧式不同;再往后,Taproot 让多签可以表现为一条更简洁的输出脚本。createmultisig 这类基础工具的输出形态与版本相关,较新版本还会同时给出对应的描述符(descriptor)字符串——多方协作时把描述符一并归档,恢复时比只存 redeemScript 更可靠,因为描述符完整记录了脚本结构、阈值与公钥顺序。给新团队落地多签时建议直接采用较新的脚本形态:同样的安全语义,更低的长期手续费,而且与主流钱包生态的兼容性已经相当成熟。旧式 P2SH 多签仍然有效,但新建协作地址没有理由为兼容十年前的生态支付额外体积。无论哪种形态,前面关于”脚本与地址一一对应、归档即出生证明”的原则不变。