当前位置: 首页 > article >正文

Bitcoin---P2SH;P2SH举例;P2SH的局限性

文章目录

  • 1. 摘要
  • 2. P2SH举例
  • 3. P2SH局限性

1. 摘要

Pay-to-Script-Hash (P2SH) 交易输出的开发是为了简化更复杂和功能性脚本的使用,就像需要提供相应签名才能解锁的支付脚本(即 P2PKH 脚本)一样简单。为了轻松使用此类兑换脚本,P2SH 输出使用兑换脚本<兑换脚本哈希> 的哈希,它本质上将计算开销从包含此 P2SH 输出的交易转移到在其输入中引用此 P2SH 输出的交易。通过封装兑换脚本哈希(较小)而不是完整兑换脚本(较大),P2SH 减少了区块链和 UTXO 集的存储要求。要使用 P2SH 交易输出,解锁脚本需要包含兑换脚本和满足解锁条件的签名。当且仅当解锁脚本中的兑换脚本<兑换脚本>能够与锁定脚本中的兑换脚本 <兑换脚本哈希>的哈希值匹配时,比特币客户端软件堆栈才会无错误地执行组合验证脚本。

2. P2SH举例

我们考虑一个兑换脚本的例子,该脚本需要提供至少 2 个与指定的 5 个公钥 PubKey1、…、PubKey5 相对应的签名才能解锁付款,如图下图所示。我们比较了使用和不使用 P2SH 脚本的此兑换脚本的组合验证脚本。不使用 P2SH 脚本时,锁定脚本包含兑换脚本“2 PubKey1 … PubKey5 5 OP_CHECKMULTISIG”,表示需要来自五个公钥的两个签名才能满足解锁条件,解锁脚本包含两个提供的签名 <Sig1> <Sig2>。使用 P2SH 脚本时,锁定脚本包含兑换脚本的哈希值 <Redeem Script hash >和另外两个操作码,用于在解锁时验证兑换脚本的哈希值是否正确;解锁脚本包含两个提供的签名 <Sig1> <Sig2>以及兑换脚本。除了将兑换脚本(相对较大)封装到交易输出中之外,P2SH 脚本还将兑换脚本哈希(相对较小)封装到交易输出中,从而将存储负担从创建输出的人转移到使用输出的人。因此,使用 P2SH 脚本可以节省用于存储区块链和 UTXO 集的空间。要使请添加图片描述
用 P2SH 交易输出,解锁脚本需要包含兑换脚本和满足解锁条件的签名。当且仅当解锁脚本中的兑换脚本 <兑换脚本>能够与锁定脚本中的兑换脚本 <兑换脚本哈希>的哈希值匹配时,比特币客户端软件堆栈才会无错误地执行组合验证脚本。

3. P2SH局限性

在Bitcoin的P2SH交易输出中,当支出条件需要多个签名时,解锁脚本(即见证数据)的大小会随着签名者的数量增加。这是因为锁定脚本只包含赎回脚本的哈希值<赎回脚本哈希>,而多个签名和赎回脚本<赎回脚本>则包含在解锁脚本中。实际上,一个P2SH赎回脚本最多可以包含15个用于多重签名验证的公钥。这个限制基于以下原因:

  • OP_CHECKMULTISIG操作码设计用于验证最多15个公钥。这个设计平衡了脚本执行的效率和可靠性,同时支持在多重签名交易中合理数量的签名。
  • Bitcoin对每个交易的总大小有限制,最大为1MB。考虑到每个公钥大约占用33字节,每个签名大约占用72字节,带有15个签名和相应公钥的解锁脚本接近这个最大限制。

http://www.kler.cn/a/413658.html

相关文章:

  • 如何在Python中进行数学建模?
  • web博客系统的自动化测试
  • 英语知识网站开发:Spring Boot框架应用
  • Android按键点击事件三种实现方法
  • 【AI】Sklearn
  • Brain.js 用于浏览器的 GPU 加速神经网络
  • 走出“ICU”,小鹏汽车低价回血
  • 速盾:ddos防御手段哪种比较好?高防cdn怎么样?
  • spring声明式事务源码详解
  • springboot+redis+lua脚本实现滑动窗口限流
  • 追加docker已运行容器添加或修改端口映射方法
  • 可视化绘图技巧100篇基础篇(十)-堆叠条形图(stacked bar)(二)
  • Unity-Lightmap入门篇
  • Mongodb入门到放弃
  • vue3 开发利器——unplugin-auto-import
  • React Hooks中use的细节
  • 【探寻密码的奥秘】-001:解开密码的神秘面纱
  • Spring MVC:原理、配置与基础应用详解
  • 【人工智能】Python常用库-Scikit-learn常用方法教程
  • 泷羽sec学习打卡-shell命令2
  • 【webrtc】 mediasoup中m77的IntervalBudget及其在AlrDetector的应用
  • Day3 苍穹外卖项目 公共字段自动填充(AOP)、文件上传、新增菜品、菜品分页查询、删除菜品、修改菜品
  • 【linux】手搓线程池
  • 彻底理解微服务的作用和解决方案
  • JS听到了替罪的回响
  • Flink 之 Window 机制详解(上):基础概念与分类