本文档是 BIP-0341 的修改版本,描述了 Elements 中 Taproot 输出使用的签名哈希。其中与 BIP-0341 不同的地方用 NEW 标明。此外,BIP 341 和 342 中的四个标记哈希标签 TapLeaf、TapBranch、TapTweak 和 TapSighash 都带有后缀 /elements
。
ElementsProject/ elements Public
master
搜索此仓库
/
复制路径
Blame更多文件操作
Blame更多文件操作
doc: fix SigMsg
length in taproot sighash
2021年7月1日
cca8224 · 2021年7月1日
打开提交详情
65 行 (52 行代码) · 7.27 KB
/
顶部
预览
代码
Blame
65 行 (52 行代码) · 7.27 KB
复制原始文件
下载原始文件
轮廓
编辑和原始操作
本文档是 BIP-0341 的修改副本,其中描述了 Elements 中用于 Taproot 输出的签名哈希。 与 BIP-0341 不同的项目用 NEW 表示。
除了本文档中的更改外,BIP 341 和 342 中的四个标记哈希标签 TapLeaf、TapBranch、TapTweak 和 TapSighash 都带有后缀 /elements
。
Permalink: Common signature message
函数 SigMsg(hash_type, ext_flag) 计算作为字节数组签名的消息。它也隐式地是花费交易和它花费的输出的函数,但这些没有列出以保持符号简单。
参数 hash_type 是一个 8 位无符号值。重用了来自传统脚本系统的 SIGHASH
编码,包括 SIGHASH_ALL
、SIGHASH_NONE
、SIGHASH_SINGLE
和 SIGHASH_ANYONECANPAY
,加上默认的 hash_type 值 0x00,它导致像 SIGHASH_ALL
一样对整个交易进行签名。以下限制适用,如果违反,会导致验证失败:
使用 SIGHASH_SINGLE
而没有“相应的输出”(一个与被验证输入具有相同索引的输出)。
NEW 如果正在考虑的输入是一个 pegin 输入,则字段 nAsset、nValue 和 scriptPubKey(如果它们出现)取自 pegin witness 数据。使用的资产是侧链上的资产 ID,而不是父链上的资产 ID(如果有)。
NEW 签名哈希之前添加的 epoch 字段完全删除。 如果 elements 中的 taproot 签名哈希有新的更新,他们将会使用新的 tagged hashes 来代替增加 epochs。
参数 ext_flag 是范围在 0-127 之间的整数,用于指示(在消息中)在消息末尾添加了扩展。
如果参数采用可接受的值,则消息是以下数据的连接,按顺序排列(每个项目的大小以字节为单位列出)。2、4 或 8 字节的数值以小端编码。
SIGHASH_ANYONECANPAY
:SIGHASH_NONE
或 SIGHASH_SINGLE
:CTxOut
格式的所有输出的序列化的 SHA256。CTxOutWitness
格式的所有输出见证(范围证明和防伪证明)的序列化的 SHA256。SIGHASH_ANYONECANPAY
:COutPoint
(32 字节哈希 + 4 字节小端),其中输出索引不包括 outpoint flags。CTxOut
中的脚本。它的大小始终为 35 字节。SIGHASH_ANYONECANPAY
:SIGHASH_SINGLE
:CTxOut
格式的相应输出的 SHA256。CTxOutWitness
格式的相应输出见证(范围证明和防伪证明)的序列化的 SHA256。SigMsg() 的总长度对于 ANYONECANPAY
sighash 为 257--442 字节,对于非 ANYONECANPAY
sighash 为 366 字节,并且对于 SIGHASH_NONE
sighash,这两个数字都减少了 64 字节,如果存在 annex,则增加 32 字节。 请注意,这不包括诸如 sha_prevouts 之类的子哈希的大小,这些子哈希可能会在同一交易的签名之间缓存。
- 原文链接: github.com/ElementsProje...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!