20
未解决

P2SH和MultiSig多重签名是一回事吗?

btce 副船长 发布在 问答/互助
 11122  4
P2SH和MultiSig多重签名是一回事吗?或者说BIP11和BIP16有什么区别?

帖子标签: P2SH 多重签名
  • 正序
  • 最新
只看帖主 楼层直达
  • a904572661 船员 2015-09-30 15:05:30 只看该作者 沙发
    说的是具体哪种代码,太模糊不好回答
  • gladpay 副船长 2015-09-30 15:14:25 只看该作者 板凳
    多签名交易和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 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丰富了交易类似,简单易扩展
    赏金别给我,我只是搬运工:http://weibo.com/p/1001603717539489276167
  • bincoin 海盗王 2015-10-01 21:39:06 来自App 只看该作者 地板
    我也学习了哈
  • wangyisong72 副船长 2015-10-01 21:46:20 只看该作者 5楼
    这种东西总是让人弄不懂
登录 账号发表你的看法,还没有账号?立即免费 注册