P2SH(Pay-to-Script-Hash)地址是以 3 开头的比特币地址,它锁定的不是某把公钥,而是一段脚本的哈希。花费时,花费者要交出这段脚本并满足它写明的条件,比如三把密钥里任意两把签名。P2SH 于 2012 年启用,主要用于多签钱包和包装隔离见证。
P2SH 解决了什么问题?
在 P2SH 之前,多签也能实现,但付款方必须把完整的多签脚本写进交易输出,包括所有公钥。这意味着付款方要为收款方的复杂脚本多付手续费,而且没有一个简短的地址可以交给对方。
P2SH 把脚本压缩成 20 字节的哈希放进地址里,付款方像对普通地址一样转账就行,脚本的成本和复杂度转到了花费时的收款方身上。
P2SH 地址是怎样被花费的?
被哈希的那段脚本叫“赎回脚本”。花费时,交易要同时提供赎回脚本和满足它的数据,比如足够数量的签名。节点先检查赎回脚本的哈希是否和地址一致,再执行脚本验证签名。
所以在第一次花费之前,外人只看得到一个哈希,分辨不出这是多签还是其他脚本;花费之后,脚本内容就全部公开在链上了。想知道一个地址是不是多签,可以从它花费过的交易里看赎回脚本,这也是判断钱包是不是多签的一种方法。
P2SH 有哪些用途?
最主要的用途是多签,比如 2-of-3 或 3-of-5 的企业钱包和托管方案。第二个用途是包装隔离见证:隔离见证刚上线时,很多钱包和交易所还不认识 bc1 地址,把隔离见证脚本放进 P2SH 里,就能用老系统认识的 3 开头地址收款,同时享受部分手续费折扣。
现在新的多签方案更多使用原生隔离见证的 P2WSH 地址。它把脚本哈希从 20 字节加长到 32 字节,提高了多方场景下的抗碰撞安全性,手续费也更低。
企业使用 P2SH 多签要注意什么?
最容易被忽略的风险是备份。要花费 P2SH 地址上的钱,必须拿出完整的赎回脚本,也就是全部公钥、它们的顺序和门限。如果只备份了各自的私钥,却丢了其他签名人的公钥或钱包配置,即使凑够签名也无法花费。
此外,多签的签名人数量和结构写死在脚本里,更换签名人就要生成新地址并迁移资金。这是多签与 MPC 钱包的一个重要区别。
结语
P2SH 把复杂的花费条件压缩成一个普通的 3 开头地址,让多签和隔离见证得以普及。使用它的企业要妥善备份赎回脚本,并意识到更换签名人需要迁移地址。Safeheron 的 MPC 钱包即服务为企业提供 MPC 密钥管理和策略引擎。
想在不迁移地址的前提下调整审批人和门限?