区块链入门

更新时间:2019-04-12 13:54:47

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

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

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

l CHECKMULTISIG 执行中的bug

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

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

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

首先,CHECKMULTISIG 弹出最上面的项目,这是N。然后它弹出N 个项目,这是可以签名的公钥。在这个例子中,公钥A,B 和C.然后,它弹出一个项目,即M,仲裁。这里M = 2。此时, CHECKMULTISIG应弹出最终的M 个项目,这些是签名,并查看它们是否有效。

然而,不幸的是,实施中的错误导致CHECKMULTISIG 再弹出一个项目。检查签名时,不考虑额外的项目,因此它对CHECKMULTISIG 本身没有直接影响。但是,必须存在额外的值,因为如果不存在,则当CHECKMULTISIG 尝试弹出空堆栈时,会导致堆栈错误和脚本失败。因为额外的项目被忽略,它可以是任何东西,但通常使用0。因为这个bug 成为共识规则的一部分,所以现在它必须永远被复制。因此,正确的脚本验证将如下所示:

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

这样解锁脚本就不是下面的:

<Signature B> <Signature C>

而是:

0 <Signature B> <Signature C>

从现在开始,如果你看到一个multisig 解锁脚本,你应该期望看到一个额外的0开始,其唯一的目的是解决一个bug,意外地成为一个共识规则的解决方法。

即保证例子中有3 个私钥签名对应3 个公钥用于检查多重签名,从而保证脚本不产生bug。

2 、 P2SH

P2SH在2012 年被作为一种新型、强大、且能大大简化复杂交易脚本的交易类型而引入。为进一步解释P2SH 的必要性,让我们先看一个实际的例子。

Mohammed,一个迪拜的电子产品进口商。Mohammed的公司采用比特币多重签名作为其公司会计账簿记账要求。多重签名脚本是比特币高级脚本最为常见的运用之一,是一种具有相当大影响力的脚本。针对所有的顾客支付,Mohammed 的公司要求采用多重签名交易。基于多重签名机制,顾客的任何支付都需要至少两个签名才能解锁,一个来自Mohammed,另一个来自其合伙人或拥有备份钥匙的代理人。这样的多重签名机制能为公司治理提供管控便利,同时也能有效防范盗窃、挪用和遗失。最终的脚本非常长:

2<Mohammed's Public Key> <Partner1 Public Key> <Partner2 Public Key>

<Partner3 Public Key> <Attorney Public Key> 5 OP_C HECKMULTISIG 虽然多重签名十分强大,但其使用起来还是多有不便。基于之前的脚本,Mohammed 必须在客户付款前将该脚本发送给每一位客户,而每一位顾客也必须使用特制的能产生客户交易脚本的比特币钱包软件,每位顾客还得学会如何利用脚本来完成交易。

此外,由于脚本可能包含特别长的公钥,最终的交易脚本可能是最初交易脚本长度的5 倍之多。额外长度的脚本将给客户造成费用负担。最后,一个长的交易脚本将一直记录在所有节点的随机存储器的UTXO 集中,直到该笔资金被使用。采用这种复杂输出脚本使得在实际交易中变得困难重重。

P2SH正是为了解决这一实际难题而被引入的,它旨在使复杂脚本的运用能与直接向比特币地址支付一样简单。在P2SH 支付中,复杂的锁定脚本被电子指纹所取代,电子指纹是指密码学中的哈希值。

当一笔交易试图支付UTXO 时,要解锁支付脚本,它必须含有与哈希相匹配的脚本。P2SH 的含义是,向与该哈希匹配的脚本支付,当输出被支付时,该脚本将在后续呈现。

在P2SH 交易中,锁定脚本由哈希运算后的20 字节的散列值取代,被称为赎回脚本。因为它在系统中是在赎回时出现而不是以锁定脚本模式出现。

下表列示了P2SH 脚本。 ![P2SH 脚本]

从表中可以看出,对于P2SH,详细描述了输出的条件的复杂脚本不会在锁定脚本中显示。

相反,只有它的散列值在锁定脚本中呈现,并且兑换脚本本身稍后呈现,作为解锁脚本在输出花费时的一部分。这使得给矿工的交易费用从发送方转移到收款方,复杂的计算工作也从从发送方转移到收款方。

一笔P2SH 交易运用锁定脚本将输出与哈希关联,而不是与前面特别长的脚本所关联。使用的锁定脚本为:

HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e EQUAL

正如你所看到的,这个脚本比前面的长脚本简短多了。取代“向该5 个多重签名脚本支付”,这个P2SH 等同于“向含该哈希的脚本支付”。顾客在向Mohammed 公司支付时,只需在其支付指令中纳入这个非常简短的锁定脚本即可。当Mohammed想要花费这笔UTXO 时,附上原始赎回脚本和必要的解锁签名即可,如:

<Sig1> <Sig2> <2 PK1 PK2 PK3 PK4 PK5 5 CHECKMULTISIG>

两个脚本经由两步实现组合。首先,将赎回脚本与锁定脚本比对以确认其与哈希是否匹配:

<2 PK1 PK2 PK3 PK4 PK5 5 CHECKMULTISIG> HASH160 <redeem scriptHash> EQUAL

假如赎回脚本与哈希匹配,解锁脚本会被执行以释放赎回脚本:

<Sig1> <Sig2> 2 PK1 PK2 PK3 PK4 PK5 5 CHECKMULTISIG

###3、 P2WSH  

P2WSH是支持隔离见证类型的P2SH, 我们先介绍隔离见证的概念。

隔离见证是比特币的一种结构性调整,旨在将见证数据部分从一笔交易的scriptSig字段移出至一个伴随交易的单独的见证数据结构。客户端请求交易数据时可以选择要或不要该部分伴随的见证数据。

隔离见证由以下BIPs 定义:

BIP-141 隔离见证的主要定义

BIP-143 版本0 见证程序的交易签名验证

BIP-144 对等服务——新的网络消息和序列化格式

BIP-145 隔离见证的getblocktemplate 升级

l    为什幺需要隔离见证?

隔离见证是一个将在多方面产生影响的结构性调整——可扩展性、安全性、经济刺激以及比特币整体性能:

l 交易延展性

将见证移出交易后,用作标识符的交易哈希不在包含见证数据。因为见证数据是交易中唯一可被第三方修改的部分,移除它的同时也移除了交易延展性攻击的机会。通过隔离见证,交易变得对任何人都不可变,这极大地提高了许多其它依赖于高级比特币交易架构的协议的

可执行性。比如支付通道、跨连交易和闪电网络。

l 脚本版本管理

在引入隔离见证脚本后,类似于交易和区块都有其版本号,每一个锁定脚本前也都有了一个脚本版本号。脚本版本号的条件允许脚本语言用一种向后兼容的方式升级,以引入新的脚本操作数、语法或语义。非破坏性升级脚本语言的能力将极大地加快比特币的创新速度。

l 网络和存储扩展

见证数据通常是交易总体积的重要贡献者。更复杂的脚本通常非常大,比如那些用于多重签名或支付通道的脚本。有时候这些脚本占据了一笔交易的大部分空间。通过将见证数据移出交易,隔离见证提升了比特币的可扩展性。节点能够在验证签名后去除见证数据,或在作简单支付验证时整个忽略它。见证数据不需要被发送至所有节点,也不需要被所有节点存储在硬盘中。

l 签名验证优化

隔离见证升级签名函数减少了算法的计算复杂性。引入隔离见证前,用于生成签名的算法需要大量的哈希操作,这些操作与交易的大小成正比。在O中关于签名操作数量方面,数据哈希计算增加,在所有节点验证签名上引入了大量计算负担。引入隔离见证后,算法更改减少了O的复杂性。

l 离线签名改进

隔离见证签名包含了在被签名的哈希散列中,每个输入所引用的值。在此之前,一个离线签名装置,比如硬件钱包,必须在签署交易前验证每一个输入的数量。这通常是通过大量的数据流来完成的,这些数据是关于以前的交易被引用作为输入的。由于该数量现在是已签名的承诺哈希散列的一部分,因此离线装置不需要以前的交易。如果数量不匹配,则签名无效。

在P2PSH例子中,穆罕默德的公司使用了P2SH 来表达一个多重签名脚本。对穆罕默德的公司的支付被编码成一个这样的锁定脚本:

P2SH 输出脚本示例:

HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e EQUAL

这个P2SH 脚本引用了一个赎回脚本的哈希值,该脚本定义了一个“2 of 3”的多重签名需求来使用资金。为了使用该输出,穆罕默德的公司将提供这个赎回脚本,以及满足该赎回脚本所需的签名,所有这些都在交易输出中:

显示一个P2SH 输出被使用的解码交易:

[...]“Vin” : ["txid": "abcdef12345...","vout": 0, "scriptSig": “<SigA> <SigB> <2 PubA PubB PubC PubD PubE 5 CHECKMULTISIG>”,]

现在,让我们看看整个示例如何升级成为隔离见证。如果穆罕默德的客户使用的是一个隔离见证兼容的钱包,他们就会付款,创建一个“支付给脚本哈希”输出,看起来就像这样:

P2WSH 输出脚本示例:

0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73

再一次,就像P2WPKH 的例子一样,你可以看到,隔离见证等同脚本要简单得多,省略了各种你在P2SH 脚本中见到的脚本操作符。相反,隔离见证程序仅包含两个推送到堆栈的值:一个见证版本和一个32 字节的赎回脚本的哈希值。

提示当P2SH 使用20 字节的RIPEMD160) 哈希值时,P2WSH 见证程序使用了一个32 字节的SHA256哈希值。在选择哈希算法时,这一差异是有意为之,被用于通过哈希值长度来区分两种类型的见证程序,并为P2WSH提供更强的安全性。

穆罕默德的公司可以通过提供正确的赎回脚本和足够的签名满足并花出P2WSH输出。作为见证数据的一部分,赎回脚本和签名被隔离在此支出交易之外。在交易输入内部,穆罕默德的钱包会放置一个空的scriptSig:

显示了一个P2WSH 输出被用隔离见证数据花出的解码交易:

[...]“Vin” : ["txid": "abcdef12345...","vout": 0, "scriptSig":“”,][...]“witness”: “<SigA> <SigB> <2 PubA PubB PubC PubD PubE 5 CHECKMULTISIG>”[…]

我们可以看到见证数据被放置到Witness中,而scriptSig为空。

节点能够在验证签名后去除该见证数据,或在作简单支付验证时整个忽略它。见证数据不需要被发送至所有节点,也不需要被所有节点存储在硬盘中。

4、总结

**多重签名**十分强大,但是复杂的锁定脚本数据量很大,但其使用起来还是多有不便。

**P2SH**正是为了解决这一实际难题而被引入的,它旨在使复杂脚本的运用能与直接向比特币地址支付一样简单。在P2SH 支付中,复杂的锁定脚本被哈希值所取代。

**P2SH**的解锁脚本通常是交易总体积的重要贡献者,更复杂的脚本通常非常大,比如那些用于多重签名或支付通道的脚本。

**P2WSH**通过将解锁脚本(见证数据)移出交易提升了比特币的可扩展性,同时提高了区块容量并降低了交易手续费。

5、 参考文献 《精通比特币》

---


遂宁银行谋上市 沱牌舍得集团为二股东

日前,遂宁银行股份有限公司广安分行在四川省广安市广安区正式开业。这意味着,遂宁银行的业务覆盖范围从此前的成都、遂宁、绵阳、资阳、德阳等地进一步向四川东北部拓展,基本完成了在四川中心城市及川东北经济区的布局。

值得注意的是,遂宁银行相关负责人透露,该行正着力实施上市计划。这也是继泸州银行去年底登陆港股市场之后,又一家总部位于地级市的川籍城商行传出谋划上市的消息。

无独有偶,不论是泸州银行还是遂宁银行,两者皆有酒企股东的背景。泸州老窖(000568)集团有限责任公司是泸州银行的第一大股东;而截至去年末,四川沱牌舍得(600702)集团有限公司直接持有遂宁银行12.39%股权,在该行前十大股东中排名第二。

3家股东持股超10%

从城市信用社到股份制商业银行,遂宁银行至今已有30余年发展历史。

公开资料显示,遂宁银行前身为遂宁市城市信用社,于2001年8月由射洪县城市信用社、遂宁涪江城市信用社和金龙城市信用社合并成立。2008年1月,遂宁市城市信用社改制为遂宁市商业银行股份有限公司。2016年12月,遂宁市商业银行股份有限公司经监管批准,更名为遂宁银行股份有限公司。

根据《遂宁银行2019年度同业存单发行计划》,自成立至今,遂宁银行经历了多次股权变更,截至2018年末,该行股东总户数为20户,总股本约30.03亿股,其中国家股占比1.81%,法人股占比98.19%。直接持股比例在10%以上的股东有3家,分别是四川城世建设工程集团有限公司、四川沱牌舍得集团有限公司、遂宁市富邦产业有限公司。

而在遂宁银行前3大股东中,四川沱牌舍得集团有限公司是上市公司舍得酒业的控股股东。2018年度,舍得酒业实现营业收入22.12亿元,同比增长35.02%,实现净利润3.73亿元,同比增长162.40%。

除了通过舍得酒业经营酒类业务外,沱牌集团还通过各子公司开展电力开发、医药、文化投资、包装制品、投资管理等业务。遂宁银行则是沱牌集团参股投资的公司。

无独有偶的是,去年在港股上市的另一川籍城商行——泸州银行也有酒企股东的背景。2018年12月,泸州银行正式在香港联交所挂牌上市,成为西部地区地级市中首家上市银行。泸州银行上市前,泸州老窖集团直接持有该行约19.88%股权,并通过上市公司泸州老窖(000568,SZ)间接持有该行约2.21%股权。

去年净利润4.38亿

2018年7月,联合资信评估有限公司出具《遂宁银行股份有限公司2018年主体跟踪信用评级报告》,确定维持遂宁银行主体长期信用等级为AA,评级展望为稳定。

评级报告显示,遂宁市地处成渝经济圈核心经济带,是重庆、成都、绵阳三大城市和川南、川东北地区的结合点,是东进重庆、西入四川的第一门户。近年来培育锂电、天然气、机电、电子信息四大主导产业。遂宁银行业务集中在遂宁市,其与遂宁市各级政府和各企事业单位建立了良好的业务合作关系,在区域内具有较强竞争力。截至2017年末,在当地金融机构中,遂宁银行存贷款规模均位居第一位。

但上述评级报告也提到,2017年以来,遂宁银行通过发行同业存单等方式加大同业资金融入力度,市场融入资金占比大幅上升;为提高资金运用效率,同业业务规模及投资资产规模均快速增长。另一方面,遂宁银行市场融入资金占比较高,持有较大规模的信托和资管计划投资,在强监管以及MPA考核的背景下,面临一定的业务结构调整压力。

《遂宁银行2019年度同业存单发行计划》显示,2018年,该行同业存单发行额度为160亿元,全年累计成功发行同业存单93期,累计金额258.36亿元。2019年,该行同业存单发行额度为100亿元。

在这份计划中,遂宁银行还披露了该行2018年主要财务数据和指标。去年遂宁银行负债规模出现下降,资产规模也有所缩水。截至2018年底,其总资产达500.98亿元,同比下降88.60亿元,降幅15.03%。总负债为454.67亿元,同比下降91.66亿元,降幅16.78%。所有者权益为46.31亿元,同比上升3.06亿元,增幅7.08%。

从经营情况看,2018年,遂宁银行完成营业收入11.34亿元,同比上升6.58%;实现净利润4.38亿元,同比下降15.93%。截至2018年底,该行不良贷款率为1.72%,拨备覆盖率为150.90%,资本充足率为14.61%。

 股指期货不能只关注一个市场

  股指期货期间,投资产物越发富厚,产物布局将越发庞大,危害特性与传统股票市场也将呈现明显差别。这对投资者而言,既意味着宏大的时机,也提出了更为严厉的挑衅。因而,在新情况下,投资者必要实时调解投资思绪,并细致参悟,起首从生理上做好以下三方面预备。
  股指期货推出前,我国市场并无真正保守型投资种类,最保守的投资者也仅仅是将资金全部投入到ST等绩差股罢了。一旦股指期货推出后,这种情况将会产生质的变革,要是把全部资金投入到股指期货中,投资者将撬动十倍于现有资金的资产范围,其丧失也将是10倍范围于已往的情况。
  不克不及只存眷一个市场
  金融衍生品固然标的于股票和股指等现货产物,但由于运转机制、投资者范例和投资计谋的明显差别,金融衍生品和现货产物生意业务历程所展现的信息,具有本身奇特的特性。因而,在股指期货期间,无论是到场股票,照旧到场股指期货,抑或同时到场两个市场,要是投资者仅仅存眷单一资产范例的信息,将无法片面解读整个市场的变革。
  股指期货的代价走势、未平仓合约数、生意业务量和持仓量等信息,从差别正面反应了投资者对股票市场变革的果断,而影响股票市场的微观经济信息和根本面信息,又是股指期货运转的底子。投资者必需同时存眷两个乃至更多市场的形态,精确明白它们之间信息的展现作用。
  你能蒙受多大危害
  金融期货衍生品的推出,预示了可供投资者设置装备摆设资产范例呈现了庞大的打破。在这种新情况下,投资者所面对的资产危害范例呈现了庞大分解,你必需对原有的本身危害讨厌水平和危害负担本领重新做出果断。
  现在,市场中大少数投资者均将大部门资产投入在股票上,从实际上,可以以为这些投资者是危害偏好型。要是凭据股票期间的危害偏好进入股指期货衍生品期间,且不做出实时调解的话,投资者的高危害偏好肯定招致过多设置装备摆设凌驾股票多倍危害的股指期货,此类设置装备摆设的效果会招致少量投资者孕育产生巨额丧失。
  别的,股指期货生意业务中所触及的实际较股票更为庞大,投资者必需在到场股指期货之前,不停提拔对股指期货的了解,深入明白股指期货的种种生意业务计谋。这也是证监会实行多轮天下性的股指期货教诲的目标地点。
  不要为了设置装备摆设而设置装备摆设
  资产范例越来越多,怎样设置装备摆设现有的资金,必需同时分身资金范围和投资目标两方面要素。在资产范例的选择中,最忌“为设置装备摆设资产而设置装备摆设”。股指期货一旦推出,并不料味着投资者肯定要在其资产设置装备摆设中设置装备摆设该类资产,凭据外洋结论,大部门投资者的资产设置装备摆设中并不包罗衍生品范例,而是将高收益的渣滓债券大概新兴市场股票作为高危害设置装备摆设。
  设置装备摆设资产范例的选择是一种艺术性和技能性的联合。
 

相关热词搜索:脚本签名

超跌补涨最好的方向可能是它

招商证券:券公司在金融体系内扮演角色进一步加强