作者: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丰富了交易类似,简单易扩展
相关文章:
- 比特币中P2SH(pay-to-script-hash)多重签名的锁定脚本和解锁脚本
- 比特币多重签名技术的应用场景
- 比特币锁定脚本及地址解析(p2pkh p2sh p2wpkh p2wsh p2sh-p2wpkh p2sh-p2wsh格式)
- 多重签名与多方计算:哪个更安全?
- 比特币改进协议BIP16:Pay to Script Hash(P2SH)
- 隔离验证钱包开发指南
- 比特币隔离见证交易格式解析(Segregated witness)
- 比特币锁定脚本带来的“坑”——真正掌握比特币的是“锁定脚本”,而不是私钥
- 区块链学习笔记——一些交易脚本(P2PK、P2PKH、P2MS、P2SH)及作业回顾
- BTC地址与交易原理大剖析:是谁控制了比特币,是你?还是钱包?