文章

BTC 多签校验过程

一、比特币多签校验——核心思路

比特币链上多签主要依靠脚本系统(Bitcoin Script)实现。节点验证交易时,是逐步“跑脚本”,只有脚本最终返回为真,资金才允许花出。

多签(如2-of-3)校验流程概括如下:

  1. 锁定脚本设置多签方案(如:需要3个公钥中的2个签名)。

  2. 花费时提供相应数量签名与原始多签脚本(赎回脚本)

  3. 节点执行解锁脚本和锁定脚本,逐个校验签名与公钥是否匹配且满足阈值。


二、链上校验流程详细解析

P2SH(pay-to-script-hash)多签为例,说明校验步骤:

1. 多签锁定(比特币被锁定时)

设3个公钥、公钥分别是A/B/C,需要2签才行,脚本长这样:

2 <PubKeyA> <PubKeyB> <PubKeyC> 3 OP_CHECKMULTISIG

系统不直接把这些内容作为地址,而是对整个脚本哈希,生成P2SH地址,等资金花出时再公开。


2. 交易花费(花比特币时)

(1)解锁脚本内容

花出时,需提交:

  • 足够数量的签名(如签名A和签名C)

  • 原始多签赎回脚本(即刚才那段完整Script)

解锁脚本如下:

<空值> <签名A> <签名C> <赎回脚本>

注意:OP_CHECKMULTISIG历史原因需最前面加“空值”


(2)节点执行校验过程

节点在校验UTXO花费时会做什么?

  1. 拼接脚本,依次运行

    • 先跑解锁脚本堆栈(把签名推到栈上)

    • 再执行锁定脚本/赎回脚本

  2. 重新哈希赎回脚本,对比地址锁定哈希

    • 检查你提交的赎回脚本是否确实是该P2SH地址所对应的脚本

  3. 执行赎回脚本内容

    • 执行2 <PubKeyA> <PubKeyB> <PubKeyC> 3 OP_CHECKMULTISIG

    • 对照你提交的签名,验证至少2个签名是否可由这3个公钥中的任意2个解开当前这笔交易

  4. 签名逐一校验

    • 系统会确保每个签名与提供的公钥一一对应、且签名必须有效

    • 达到要求数量(2个有效签名),即脚本执行结果为真,花费成功


三、例子直观说明

假设:

  • 三人持有的钱包P2SH

  • Alice/Bob/Carol三公钥

  • 赎回脚本要求2-of-3

花费交易里:

输入1:
    ScriptSig:
        0
        <Alice签名>
        <Carol签名>
        <2 <AlicePub> <BobPub> <CarolPub> 3 OP_CHECKMULTISIG>
    ScriptPubKey:
        OP_HASH160 <20字节hash> OP_EQUAL  (P2SH)

节点校验过程:

  1. 用ScriptSig和ScriptPubKey联合,还原出P2SH里锁住的条件

  2. 还原出完整赎回脚本

  3. 校验提供的“2个签名”是否能解锁脚本中的3个公钥之一

  4. 若脚本顺利执行通过,则本UTXO花费合法


四、要点归纳

  • 链上校验本质是复现你设置的多签条件

  • 节点对“你花币时提供的赎回脚本和签名”进行哈希验证和脚本执行,确认确实满足M-of-N规则。

  • 所有规则、哪几个签名可以联手、用的是哪些公钥,最终都在链上公开且验算。


五、简单记忆

  • “多签链上校验,逐个签名过公钥,数量达标才放币。”

许可协议:  CC BY 4.0