转载

了解复杂的交易类型,能帮助你更好的理解,什么是“可编程加密货币”。

付款到多重签名

如果你看过OP_CHECKMULTISIG操作码的说明,你会发现:交易允许我们将 UTXO 锁定到 NN 字节

如果一个公司使用多签收款,他必须提前把脚本内容发送给所有客户。同时还要求他的客户,能使用特制的“钱包”软件,生成包含复杂脚本的交易,完成支付。并且,这个锁定脚本的内容非常长。

大多数比特币交易都包含交易费,这是对“维护比特币网络安全的人”的一种激励和补偿。

你现在需要知道,应付交易费的多少,只与交易数据序列化后的大小有关,而与这笔交易转移价值的多少无关

所以 old-style multisig 还需要交易付款方,支付更多的交易费。

付款到脚本哈希

复杂的支付脚本功能强大,但在使用时有诸多不便,因为付款方需要了解锁定脚本(由收款方定义)的全部细节。

为了避免这种问题,BIP-16 提案引入了全新的交易类型,允许我们将 UTXO 锁定到一个脚本的哈希(数据指纹)上。

如果锁定脚本中关联的是某个脚本的哈希

复制

OP_HASH160 [脚本的哈希] OP_EQUAL

我们称这笔交易,是一笔付款到脚本哈希(P2SH,Pay to Script Hash)的交易。

P2SH 的含义是,向与该哈希匹配的脚本支付,这个脚本被称为赎回脚本(Redeem Script),其内容将在之后,在消费这个 UTXO 时呈现。

When a transaction attempting to spend the UTXO is presented later, it must contain the script that matches the hash, in addition to the unlocking script. In simple terms, P2SH means “pay to a script matching this hash, a script that will be presented later when this output is spent.”

支付时需要提供的解锁脚本,形如

复制

[参数1] [参数2] ... [参数X] [赎回脚本的内容]

验证分两部分,先计算赎回脚本的哈希,看它是否跟锁定脚本中的脚本哈希一致。

复制

[赎回脚本的内容] OP_HASH160 [脚本的哈希] OP_EQUAL

如果一致,再执行解锁脚本。

复制

[参数1] [参数2] ... [参数X] [赎回脚本的内容]

有点不太好理解。

交易d957651a876addc3a4e836c0f55d3e288230c9622f7062a9c1d963480768726e是一笔 P2SH,有 2 个输出。

第一个输出,被锁定到一个脚本哈希上,值为8bd55244e4f86fb631e908f8cd9d9084e6744ad1

这个 UTXO 在交易536749e6a0cb146287ec1ceffe50a65c3760d794aacb40367239cb3f332c6ba5中消费,是这笔交易的第一个输入,提供的解锁脚本为

解码一下。

复制

03045022100cd2eff6b93874c822c5496a2fd660f3f0a09e8dc40e504b14a5fbd38bcfff4db02205df3ad1e6a28e762b471012ee0b1e067cb39bbe4a3494c1144b157ccef25bc71[ALL]3045022100ea4631ed3e9ae30f4faaa17b396398b30959bd119558349e4aa40ecb75856c0e0220684be10d059339533d225cd21e75079dc771e10ebe8f0358db3ec18763e34f22[ALL]522102429adbb84a4a0f14b31c14f4927418207bcef7f70eb97b1caed49160733bff6921026ce3c7280d473b7a9eab8fe76219687deb646c1619ad18902d19dc3148e7f8ae2103e051dd3573daa05964487c93fe5a5b37b76fe94729c8c2b372845f5d85e0722c53ae

是如下的形式。

复制

0 [签名1] [签名2] [赎回脚本的内容]

赎回脚本为

复制

522102429adbb84a4a0f14b31c14f4927418207bcef7f70eb97b1caed49160733bff6921026ce3c7280d473b7a9eab8fe76219687deb646c1619ad18902d19dc3148e7f8ae2103e051dd3573daa05964487c93fe5a5b37b76fe94729c8c2b372845f5d85e0722c53ae

你可以用这个工具,计算赎回脚本 HASH160 的值,看看是不是8bd55244e4f86fb631e908f8cd9d9084e6744ad1

对照操作码说明书,翻译赎回脚本的内容。

复制

52  <== 221  <== 接下来的0x21字节是数据02429adbb84a4a0f14b31c14f4927418207bcef7f70eb97b1caed49160733bff69  <== 33字节的数据21  <== 接下来的0x21字节是数据026ce3c7280d473b7a9eab8fe76219687deb646c1619ad18902d19dc3148e7f8ae  <== 33字节的数据21  <== 接下来的0x21字节是数据03e051dd3573daa05964487c93fe5a5b37b76fe94729c8c2b372845f5d85e0722c  <== 33字节的数据53  <== 3ae  <== OP_CHECKMULTISIG

是不是有点眼熟?这个赎回脚本,正是

复制

2 [公钥1] [公钥2] [公钥3] 3 OP_CHECKMULTISIG

解码后的解锁脚本为

复制

 0 [签名1] [签名2]  2 [公钥1] [公钥2] [公钥3] 3 OP_CHECKMULTISIG

|<------参数----->|<-----------------赎回脚本------------------>|

你能看到,

A P2SH transaction locks the output to this hash instead of the longer redeem script

P2SH 将输出锁定到脚本哈希,而不是锁定到特别长的具体脚本。

Instead of “pay to this 5-key multisignature script,” the P2SH equivalent transaction is “pay to a script with this hash.”

用 P2SH 实现多签,只需要告诉付款方赎回脚本的哈希,取代“向 N 个多重签名的具体脚本支付”,等同于“向有该哈希值的脚本支付”。

P2SH 让付款到复杂脚本变得跟 P2PKH 一样简单。

  • 向付款方提供脚本哈希,就像 P2PKH 需要公钥哈希一样
  • 赎回脚本的内容,从锁定脚本转移到了解锁脚本中,更多的交易费也从发送方转移到收款方

目前网络中的大部分 P2SH 交易都是多签交易,但 P2SH 拥有更广泛的可能性,你可以在 P2SH 的赎回脚本中充分发挥想象力。

One more thing

P2PK、P2PKH、old-style multisig 和 P2SH 都是网络支持的标准交易类型。

需要注意的是,考虑到安全因素,比特币网络默认只传播(relay)这些标准交易。

Note that there is a small number of standard script forms that are relayed from node to node; non-standard scripts are accepted if they are in a block, but nodes will not relay them.

在尝试交易脚本的无限可能前,你应该先读一读源码中的 policy 部分。

参考

  • 精通比特币(第二版)译文 原文
  • Bitcoin - multisig Scripts
  • The state of Bitcoin multisig
  • Multi Sig Use Cases
  • Pay to script hash
  • Bitcoin multisig the hard way: Understanding raw P2SH multisig transactions
  • p2sh.info – Latest stats on Bitcoin transaction types
  • P2SH outputs statistics
  • P2SH repartition by type
  • bitcore library API #Script
  • Script

multisg P2SH相关推荐

  1. 一文读懂P2SH和P2WSH

    P2SH和P2WSH是比特币交易的高级脚本,能够构建复杂条件的智能合约交易. 首先,我们将看看多重签名脚本.接下来,我们介绍最常见的交易脚本P2SH,即Pay-to-Script-Hash支付给脚本哈 ...

  2. 区块链重要基础知识7-1——标准脚本P2PKH、P2SH

    这里主要用于补充区块链重要基础知识7--比特币的运行机制中标准协议P2SH的说明 五大标准脚本分别为P2PKH.P2PK.MS(限15个密钥).P2SH和OP_Return. 这里主要介绍P2PKH. ...

  3. 区块链学习笔记——一些交易脚本(P2PK、P2PKH、P2MS、P2SH)及作业回顾

    写在前面 这篇博客主要总结一下之前做过的区块链作业中的一些有趣的东西. 实验环境搭建 按照老师的要求以及助教给的一些问题的解决方案.把python从3.8装回3.7再装回3.6,好像都没什么用.在py ...

  4. 多重签名地址和P2SH

    目前,P2SH实现的功能大多是多重签名地址脚本,就像其名称所暗示的,底层脚本要求超过一个的签名来证明所有权并花费资金.比特币多重签名功能的设计要求在N个密钥中,至少需要提供M个签名(被称为" ...

  5. P2PK、P2PKH、P2SH、P2WPKH、P2WSH解析

    P2PK.P2PKH.P2SH.P2WPKH.P2WSH解析 直接贴代码吧: // payToPubKeyHashScript creates a new script to pay a transa ...

  6. 比特币脚本及交易分析 - 智能合约雏形

    最新内容会更新在主站深入浅出区块链社区 原文链接:比特币脚本及交易分析 - 智能合约雏形 大家都有转过账,每笔交易是这样的:张三账上减¥200,李四账上加¥200. 在比特币区块链中,交易不是这么简单 ...

  7. 是什么限制了区块链技术的应用?

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 2017年已经匆匆离去,回顾过去一整年,似乎区块链应用一直处于隐忍未发的状态,很多项目的落地已处于验证阶段,万众期待的爆 ...

  8. gossip 区块链_比特币奇葩8问:为何区块620826比区块620825早1秒诞生?

    写在前面: 关于比特币,我们有时会遇到一些难以理解的技术问题,例如"新区块比旧区块早1秒诞生"."同一时间不同全节点的大小不同"等奇葩现象,对于这些问题,就需要 ...

  9. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

最新文章

  1. 一起学nRF51xx 17 -  lpcomp
  2. 曙光服务器2008系统,在中科曙光I620-G20服務器上安裝Windows 2008 R2 系統步驟
  3. 一些软件设计的原则【转】——本来想自己总结,结果发现个更全的,
  4. boost::graph模块使用breadth_first_search()实现GGCL算法的测试程序
  5. 2018年9月份GitHub上最热门的Python项目
  6. 搭建K8s集群(kubeadm方式)-操作系统初始化
  7. 开启未来十年的编码技术之门
  8. 小团队前端部署演化之路
  9. php 异常 重试,Python中异常重试的解决方案详解
  10. 修改Maven本地仓库的位置 方法
  11. Nanachi发布:基于 React 的多端小程序转译框架
  12. Java主要处理哪些类型的异常_Java技术高效处理异常有哪些呢?
  13. height:calc(100% - 10px)的用法(垂直居中) - 布局篇
  14. 一种基于局部线性嵌入的半监督方法——半监督局部线性嵌入(SSLLE),MATLAB程序代码
  15. S71200PLC程序博图V14 西门子博图编写
  16. ASO|几个ASO优化方案解析(下)
  17. 【面试官说实现一个顺序表,但听到要求后我沉默了】
  18. leetcode 1114
  19. 【报错记录】MybatisPlus报Mapped Statements collection does not contain value for...
  20. react antd design columns 配置解析

热门文章

  1. 无公网IP,使用ZeroTier免费内网穿透
  2. 波利亚polya定理的学习(解决涂色问题)
  3. Day517.索引优化与查询优化 -mysql
  4. mysql cte 表不存在_MySQL8的新特性CTE
  5. 计算机课程文档,计算机专业课程设置
  6. 外网访问postgresql设置
  7. 2022第五届“泰迪杯”数据分析技能赛-B题-银行客户忠诚度分析(下)
  8. 中国水声通信市场运营状况调研及投资前景分析报告2022年版
  9. js点击下拉菜单申请a3_js下拉菜单语言选项简单实现
  10. 【电力】问:GIS系统在线监测系统有哪些?作用是什么?