文章

BTC和 ETH 生态多签对比

1. 比特币(BTC)多签验证机制

实现方式

  • BTC 多签通常使用 n-of-m 结构。比如 2-3 多签代表 3 个参与者中至少 2 个签名才有效。

  • 多签通过脚本语言(Bitcoin Script)描述,主要采用 OP_CHECKMULTISIG 操作码。

  • 常用的 P2SH(Pay to Script Hash) 地址用于多签。

校验流程(举例:2-3 多签)

  1. 设定多签脚本

    2 <PubKey1> <PubKey2> <PubKey3> 3 OP_CHECKMULTISIG
    
  2. 锁定交易输出,将资金发送到上述脚本哈希(P2SH)。

  3. 构造花费交易,需要至少 2 个私钥签名。解锁脚本如下:

    OP_0 <SignatureA> <SignatureB>
    
    • 第一个 OP_0 用于兼容历史脚本 bug。

    • <SignatureA><SignatureB> 分别由私钥1/2/3 的签名组成。

  4. 节点校验多签

    • 按脚本规则检查签名数量和有效性。

    • 只要存在任意 2 个对应公钥的有效签名,多签验证通过,交易生效。


2. 以太坊(ETH)多签验证机制

实现方式

  • 以太坊原生并不直接支持“多签地址”,多签通常通过智能合约实现

  • 常见多签合约有 Gnosis Safe、Parity多签等。

  • 结构和规则可以高度自定义(m-of-n、多权重、多轮审批等)

校验流程(举例:2-3 多签)

  1. 部署多签合约

    • 设定 3 个 owner 地址和门限门槛(2 签名通过)。

  2. 发起交易流程

    • A、B、C 账户中的任2个提交对交易的签名(有时为消息签名,有时通过调用函数如 confirmTransaction())。

  3. 合约校验

    • 合约检查:当前交易的 confirm 数是否 >= 2。

    • 校验签名是否为设置在合约中的 owner 的签名。

    • 条件满足则合约自动执行转账或其他操作。


3. 对比总结

特性

比特币(BTC)多签

以太坊(ETH)多签

实现方式

基于 UTXO 脚本,原生支持

通过智能合约实现,非原生字段

地址类型

P2SH 多签地址

多签合约地址(普通合约地址)

签名校验

脚本层校验,多签逻辑写死于协议

合约代码灵活校验,可自定义多签逻辑

灵活性

较固定(m-of-n),不支持自定义逻辑

高度可自定义(可带权重、审批流程等)

隐私性

非常见的多签易于识别(脚本暴露公钥数)

合约可实现更多复杂的交互,不直接暴露全部 owner

安全性

协议级校验,安全性高,依赖于比特币共识

合约代码安全性依赖于代码本身,出现过多签合约漏洞(如Parity事故)


4. 实际举例

比特币多签校验举例

// 脚本预定义 [2 <pub1> <pub2> <pub3> 3 OP_CHECKMULTISIG]
// 支付时解锁脚本: [OP_0 <sig1> <sig2>]

比特币全节点自动按脚本规则(输入公钥和签名)校验签名满足门限即可。

以太坊多签校验举例(Gnosis Safe)

  • A 发起转账 proposal

  • B 和 C 分别签名确认(链下或链上调用 confirm)

  • 合约内部isConfirmed(transactionId)检查签名数达到2,并匹配owner列表,交易执行。


5. 总结性一句话

  • BTC 多签:协议原生校验,基于脚本,简单但不灵活。

  • ETH 多签:基于合约,规则灵活,校验逻辑可无限扩展。

许可协议:  CC BY 4.0