ariard/bips 的bips/bip-merklesub.mediawiki,提交版本号为ddb77158a8309f307faaaf643830e4d0f07b90d3

  • ariard
  • 发布于 2025-04-28 12:34
  • 阅读 21

该BIP提出了一种新的脚本操作码OP_MERKLESUB,用于Taproot输出,旨在解决多方链下协议中的资金提取问题。通过允许在消费交易的输出中继承已花费merkle树的修改版本,解决了与参与者数量相关的复杂性问题,并增强了vaults的安全性。

跳到内容

ariard/ bips Public

forked from bitcoin/bips

折叠文件树

文件

ddb7715

搜索此仓库

/

bip-merklesub.mediawiki

复制路径

BlameMore 文件操作

BlameMore 文件操作

最近提交

历史

历史

查看此文件的提交历史。

102 行 (83 loc) · 5.84 KB

/

bip-merklesub.mediawiki

顶部

文件元数据和控件

  • 预览

  • 代码

  • Blame

102 行 (83 loc) · 5.84 KB

Raw

复制原始文件

下载原始文件

目录

编辑和原始操作

  BIP: XXX
  Layer: Consensus (soft fork)
  Title: OP\_MERKLESUB
  Author:
  Comments-Summary: No comments yet.  # 暂无评论。
  Comments-URI:
  Status: Draft
  Type: Standards Track
  Created: 2021-11-02
  License: BSD-3-Clause
  Requires: BIP118, SIGHASH\_GROUP
## 目录<br>固定链接: 目录<br>- 摘要<br>- 动机<br>- 规范<br>- 安全性<br>- 版权<br>- 部署

摘要

固定链接: 摘要

本BIP描述了用于 Taproot 输出的一种新的脚本解释器操作。 它允许强制花费给定的 Taproot UTXO 只能发生在一个输出中,对于该输出,其 scriptPubKey 以某种方式从正在花费的 scriptPubKey 中导出,这种方式由这个新的操作预先定义。 这种灵活性使得构建高级的链下协议成为可能,例如支付池或金库。

动机

固定链接: 动机

链下协议的安全性依赖于参与者在协议生命周期的任何时刻,无需交易对手的合作即可提取余额的能力。这种提取是通过在链上发布一个预签名交易来进行的,该交易的发生也终止了协议。

如果这种行为对于双方的链下协议来说不是问题,因为一旦一个交易对手退出,就没有兴趣继续操作,但对于多方链下协议(例如通道工厂)来说,这个问题就更大了。这些构造存在容错问题,即一个交易对手的链上提取会影响所有剩余交易对手的使用。 一旦链下状态在链上确认,应该为每个参与者创建一个或多个提取 utxo。如果他们中的一部分人愿意保持链下协议的活跃状态,他们必须将生成的 utxo 重新花费到一个新的共享 utxo 中。这个新的 utxo 作为预签名交易链的新根。

支付池构造提出通过在 Taproot Merkle树中编码所有参与者的提取能力来解决这个分区问题。每个 tapscript 叶子都附带一个预签名的提取交易,该交易将余额发送到提取参与者的地址,并将资金提交回一个统一的 utxo 中。由于必须预见到所有可能的提取序列组合,因此这种机制存在阶乘复杂性,参与者数量越多,复杂度越高。必须覆盖所有可能的状态和转换,因此签名生成时间是阶乘级的,交易存储是阶乘级的,签名交换轮次也是阶乘级的。

本提案引入了一种新的脚本解释器扩展 OP\_MERKLESUB,以有效地解决这种阶乘复杂性。这种阶乘复杂性通过三个向量表现出来:父交易 ID、输出金额的状态和Merkle树的状态。虽然 BIP 118 SIGHASH\_ANYPREVOUTSIGHASH\_GROUP 正在消除对前两个向量的依赖,但 OP\_MERKLESUB 丢弃了最后一个向量。通过允许将已花费的Merkle树的修改版本继承到花费交易的输出上,提取交易不必了解先前提取交易的序列。只要相应的叶子仍然存在于已花费的树中,已花费的交易就是有效的。

此外,允许也继承已花费的内部密钥的修改版本,可以实现在提取序列中保留密钥路径花费。这样,即使在一部分人退出后,并且无需他们的合作,剩余在链下协议实例中的交易对手仍然可以使用此密钥路径花费。

该原语对于金库来说具有独立的意义,可以实现更强大的利益相关者策略。

规范

固定链接: 规范

本 BIP 将操作码 NOP4 重新定义为所有脚本类型的 OP\_MERKLESUB

以下规则适用于 OP\_MERKLESUB

  • 如果堆栈上的元素少于 2 个,则脚本必须失败并立即终止。
  • 从堆栈中弹出 更新公钥(顶部元素)。
    • 如果公钥不是 32 字节,则脚本必须失败并立即终止。
  • 从堆栈中弹出 CScriptNum output_pos(从顶部开始的第二个元素)。
    • 如果 output_pos 小于 0,则脚本必须失败并立即终止。
  • 控制块的位 1 被解释为内部公钥 奇偶校验位
  • 仅限 x 的内部公钥转换为 64 字节的公钥,其奇偶性由 奇偶校验位 决定。
  • 从内部公钥中减去 更新公钥,结果被解释为 修改后的内部公钥 I
  • BIP 341 控制块 的第一个节点被解释为新的 tapleaf 哈希
  • 如果 output_pos 大于花费交易中的输出数量,则脚本必须失败并立即终止。
  • 如果 output_pos 不是 SegWit 输出,则脚本必须失败并立即终止。
  • 花费交易中位置 output_pos 的输出被解释为 目标输出
    • 如果 目标输出 不是 witness 版本 1 输出,则脚本必须失败并立即终止。
  • 新的Merkle根 ttapleaf 哈希 和 BIP 341 中定义的 控制块 重新计算。
  • Q = I + int(t)G,如 BIP 341 中定义的那样。
  • 如果 目标输出 witness 程序不等于 Q,则脚本必须失败并立即终止。

安全性

固定链接: 安全性

待办事项

版权

固定链接: 版权

本文档根据 3-clause BSD 许可证获得许可。

部署

固定链接: 部署

为了原型设计的简单性,目前的代碼将 OP\_MERKLESUB 实现为硬分叉。实际上,未升级的节点无法在调整中包含内部公钥奇偶校验位,因此无法验证与升级后的节点兼容的 Taproot 承诺。OP\_MERKLESUB 的软分叉版本应该是可行的,其中内部奇偶校验位作为 Taproot 承诺之上的一个额外调整来提交,这对未升级的节点是透明的。

  • 原文链接: github.com/ariard/bips/b...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ariard
ariard
江湖只有他的大名,没有他的介绍。