BTC和 ETH 生态多签对比
1. 比特币(BTC)多签验证机制
实现方式
BTC 多签通常使用 n-of-m 结构。比如 2-3 多签代表 3 个参与者中至少 2 个签名才有效。
多签通过脚本语言(Bitcoin Script)描述,主要采用
OP_CHECKMULTISIG
操作码。常用的 P2SH(Pay to Script Hash) 地址用于多签。
校验流程(举例:2-3 多签)
设定多签脚本
2 <PubKey1> <PubKey2> <PubKey3> 3 OP_CHECKMULTISIG
锁定交易输出,将资金发送到上述脚本哈希(P2SH)。
构造花费交易,需要至少 2 个私钥签名。解锁脚本如下:
OP_0 <SignatureA> <SignatureB>
第一个
OP_0
用于兼容历史脚本 bug。<SignatureA>
、<SignatureB>
分别由私钥1/2/3 的签名组成。
节点校验多签
按脚本规则检查签名数量和有效性。
只要存在任意 2 个对应公钥的有效签名,多签验证通过,交易生效。
2. 以太坊(ETH)多签验证机制
实现方式
以太坊原生并不直接支持“多签地址”,多签通常通过智能合约实现。
常见多签合约有 Gnosis Safe、Parity多签等。
结构和规则可以高度自定义(m-of-n、多权重、多轮审批等)
校验流程(举例:2-3 多签)
部署多签合约
设定 3 个 owner 地址和门限门槛(2 签名通过)。
发起交易流程
A、B、C 账户中的任2个提交对交易的签名(有时为消息签名,有时通过调用函数如
confirmTransaction()
)。
合约校验
合约检查:当前交易的 confirm 数是否 >= 2。
校验签名是否为设置在合约中的 owner 的签名。
条件满足则合约自动执行转账或其他操作。
3. 对比总结
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 多签:基于合约,规则灵活,校验逻辑可无限扩展。