笔记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丰富了交易类似,简单易扩展 |