该BIP提出了一种新的脚本操作码OP_MERKLESUB,用于Taproot输出,旨在解决多方链下协议中的资金提取问题。通过允许在消费交易的输出中继承已花费merkle树的修改版本,解决了与参与者数量相关的复杂性问题,并增强了vaults的安全性。
forked from bitcoin/bips
ddb7715
搜索此仓库
/
复制路径
BlameMore 文件操作
BlameMore 文件操作
102 行 (83 loc) · 5.84 KB
/
顶部
预览
代码
Blame
102 行 (83 loc) · 5.84 KB
复制原始文件
下载原始文件
目录
编辑和原始操作
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\_ANYPREVOUT
和 SIGHASH\_GROUP
正在消除对前两个向量的依赖,但 OP\_MERKLESUB
丢弃了最后一个向量。通过允许将已花费的Merkle树的修改版本继承到花费交易的输出上,提取交易不必了解先前提取交易的序列。只要相应的叶子仍然存在于已花费的树中,已花费的交易就是有效的。
此外,允许也继承已花费的内部密钥的修改版本,可以实现在提取序列中保留密钥路径花费。这样,即使在一部分人退出后,并且无需他们的合作,剩余在链下协议实例中的交易对手仍然可以使用此密钥路径花费。
该原语对于金库来说具有独立的意义,可以实现更强大的利益相关者策略。
本 BIP 将操作码 NOP4 重新定义为所有脚本类型的 OP\_MERKLESUB
。
以下规则适用于 OP\_MERKLESUB
。
CScriptNum
output_pos
(从顶部开始的第二个元素)。
output_pos
小于 0,则脚本必须失败并立即终止。output_pos
大于花费交易中的输出数量,则脚本必须失败并立即终止。output_pos
不是 SegWit 输出,则脚本必须失败并立即终止。output_pos
的输出被解释为 目标输出。
待办事项
本文档根据 3-clause BSD 许可证获得许可。
为了原型设计的简单性,目前的代碼将 OP\_MERKLESUB 实现为硬分叉。实际上,未升级的节点无法在调整中包含内部公钥奇偶校验位,因此无法验证与升级后的节点兼容的 Taproot 承诺。OP\_MERKLESUB 的软分叉版本应该是可行的,其中内部奇偶校验位作为 Taproot 承诺之上的一个额外调整来提交,这对未升级的节点是透明的。
- 原文链接: github.com/ariard/bips/b...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!