一文读懂P2SH和P2WSH

P2SH和P2WSH是比特币交易的高级脚本,能够构建复杂条件的智能合约交易。

首先,我们将看看多重签名脚本。接下来,我们介绍最常见的交易脚本P2SH,即Pay-to-Script-Hash支付给脚本哈希, 它打开了一个复杂脚本的整个世界。最后我们介绍P2WSH,即Pay-to-Witness-Script-Hash支付给见证脚本哈希, P2WSH的结构性调整对比特币交易产生了多方面的影响。

 

1 、多重签名

多重签名脚本设置了一个条件,其中N 个公钥被记录在脚本中,并且至少有M 个必须提供签名来解锁资金。这也称为M-N 方案,其中N 是密钥的总数,M 是验证所需的签名的数量。例如,2/3 的多重签名是三个公钥被列为潜在签名人,至少有2 个有效的签名才能花费资金。此时,标准多重签名脚本限制在最多15 个列出的公钥,这意味着您可以从1 到15 之间的多重签名或该范围内的任何组合执行任何操作。在本书发布之前,限制15 个已列出d 的密钥可能会被解除,因此请检查isStandard()函数以查看当前网络接受的内容。

设置M-N 多重签名条件的锁定脚本的一般形式是:

M <Public Key 1> <Public Key 2> ... <Public Key N> N CHECKMULTISIG

M 是花费输出所需的签名的数量,N 是列出的公钥的总数。设置2 到3 多重签名条件的锁定脚本如下所示:

2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG

上述锁定脚本可由含有签名和公钥的脚本予以解锁: 或者由3 个存档公钥中的任意2 个相一致的私钥签名组合予以解锁。两个脚本组合将形成一个验证脚本:

<Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG

当执行时,只有当未解锁版脚本与解锁脚本设置条件相匹配时,组合脚本才显示得到结果为真(Ture)。

上述例子中相应的设置条件即为:未解锁脚本是否含有3 个公钥中的任意2 个相对应的私钥的有效签名。

l CHECKMULTISIG 执行中的bug

CHECKMULTISIG 的执行中有一个bug,需要一些轻微的解决方法。当CHECKMULTISIG 执行时,它应该消耗堆栈(stack) 上的M + N + 2 个项目作为参数。然而,由于该错误,CHECKMULTISIG 将弹出(pop)超出预期的额外值或一个值。

我们来看看这个更详细的/使用以前的/验证示例:

<Signature B> <Signature C> 2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG

首先,CHECKMULTISIG 弹出最上面的项目,这是N(在这个例子中N 是“3”)。然后它弹出N 个项目,这是可以签名的公钥。在这个例子中,公钥A,B 和C.然后,它弹出一个

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值