P2SH和MultiSig多重签名是一回事吗?或者说BIP11和BIP16有什么区别?

作者:hellobtcworld

发布时间:2014年6月4日

网络来源:新浪微博

笔记1–多签名交易和P2SH

一.在bitcoin bips历史上先有M-of-N Transaction(bip-11),然后才有Pay To Script Hash(bip-16)(简称P2SH),首先记住顺序很重要

二.P2SH的含义

1.比特币的关键是认证,A发送给B,B必须提供相关证明才可以发送币给C。

2.刚开始的时候,认证是通过私钥,B提供对应地址的私钥的签名信息来表明币属于自己所有

认证方法如下

A->B : scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

B->C :scriptSig: <签名> <公钥>

认证是通过栈来实现的,先把scriptSig压栈,然后取scriptPubKey中元素,是数据就压栈,是操作符就执行对应操作,具体过程参见(https://en.bitcoin.it/wiki/Script#Standard_Transaction_to_Bitcoin_address_.28pay-to-pubkey-hash.29)

3.上述方法简称P2PK(pay to public key)

4.然后Gavin Andresen在bip16提出一种P2SH(pay to Script Hash)方法,主要目的有两个,一是容许发送者构造丰富的交易类型,二是将字节从A->B的output转移到B->C的input(A->B的output script中将是固定长度)

理解这类交易类似先参见(https://en.bitcoin.it/wiki/Script#Transaction_puzzle)介绍

scriptPubKey: OP_HASH 6fe28c0ab6f1b372c1a6 OP_EQUAL

我们可以理解成解数学中的难题,hash(x) = 6fe28c0ab6f1b372c1a6 我们只是提供一个x满足这个条件,就可以证明我可以花费这笔钱了。

P2SH也是类似

scriptPubKey: OP_HASH160 3fe28c0ab6f1b372c1a6 OP_EQUAL

这里3fe28c0ab6f1b372c1a6不是简单的一个数字的hash,而是一段script的hash(简称redeemScript)

scriptPubKey:OP_HASH160 hash(redeemScript) OP_EQUAL

我们可以理解成只要你提供了一段script,它的二进制hash和目标匹配,那么你就可以花费这笔钱了

三.多重签名的实现

按照一中提到的说明顺序,其实比特币中实现多重签名有两种方法

a.原始的方法(bip-11)

scriptPubKey : m {pubkey}…{pubkey} n OP_CHECKMULTISIG

scriptSig : OP_0 …signatures…

实例:https://blockchain.info/tx/09dd94f2c85262173da87a745a459007bb1eed6eeb6bfa238a0cd91a16cf7790

b.用P2SH来实现

首先说明P2SH的认证过程

scriptSig: [signature] {[pubkey] OP_CHECKSIG}

scriptPubKey: OP_HASH160 [20-byte-hash of {[pubkey] OP_CHECKSIG} ] OP_EQUAL

这里{[pubkey] OP_CHECKSIG}就是我们提到redeemScript代码

它的栈认证过程和之前稍有不同

栈内容变化如下

[signature],

[signature], {[pubkey] OP_CHECKSIG}

[signature], {[pubkey] OP_CHECKSIG}, OP_HASH160

[signature], hash160({[pubkey] OP_CHECKSIG}) ;保存的是hash的结果

[signature], hash160({[pubkey] OP_CHECKSIG}), [20-byte-hash of {[pubkey] OP_CHECKSIG} ]

[signature], hash160({[pubkey] OP_CHECKSIG}), [20-byte-hash of {[pubkey] OP_CHECKSIG} ], OP_EQUAL

[signature], [pubkey] OP_CHECKSIG (看到没有,就是这里,需要将redeemScript重新压栈)

以下的执行过程就和a中相同了

实例https://blockchain.info/tx/3c9018e8d5615c306d72397f8f5eef44308c98fb576a88e030c25456b4f3a7ac

总结

1.首先P2SH和MultiSig是完全不同两码事,很多文章将P2SH表述成MultiSig,这是不恰当的

只不过现在可以用P2SH来实现MultiSig,好像前不久刚测试成功了

2.比特币的关键是认证,刚开始中本聪提供用私钥认证,后来人发明了用hash(redeemScript)认证.

3.P2SH丰富了交易类似,简单易扩展

相关文章:

发表评论