该BIP (Bitcoin Improvement Proposal) 定义了用于传播交易和区块的新消息和序列化格式,这些交易和区块提交给隔离见证结构。它详细说明了交易和区块的序列化格式更新,节点如何通过服务位来声明对见证的支持,以及如何计算包含见证数据的新哈希。此外,还定义了新的inv类型,用于在getdata请求中获取见证交易和区块。
forked from bitcoin/bips
vault
搜索此仓库
/
复制路径
BlameMore file actions
BlameMore file actions
Change "inefficinent" => "inefficient" in BIP 144
Aug 23, 2017
bf85f30 · Aug 23, 2017
Open commit details
View commit history for this file.
127 lines (102 loc) · 5.19 KB
/
顶部
预览
代码
Blame
127 lines (102 loc) · 5.19 KB
Copy raw file
Download raw file
Outline
Edit and raw actions
BIP: 144
Layer: Peer Services
Title: Segregated Witness (Peer Services)
Author: Eric Lombrozo <elombrozo@gmail.com>
Pieter Wuille <pieter.wuille@gmail.com>
Comments-Summary: No comments yet.
Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0144
Status: Draft
Type: Standards Track
Created: 2016-01-08
License: PD
## Table of Contents<br>Permalink: Table of Contents<br>- Abstract<br>- Motivation<br>- Specification <br> - Serialization<br> - Handshake<br> - Hashes<br> - Relay<br>- Credits<br>- Reference Implementation<br>- Copyright |
此 BIP 定义了新的消息和序列化格式,用于传播提交到隔离见证结构的交易和区块。
除了定义见证结构并要求在未来的区块中进行提交(BIP141 - 共识 segwit BIP)之外,还必须定义新的机制,以允许节点声明对隔离见证的支持,并中继见证结构并从其他节点请求它们,而不会破坏与旧节点的兼容性。
向点对点协议添加了一种新的 tx 消息序列化格式。
序列化具有以下结构:
字段大小 | 名称 | 类型 | 描述 |
---|---|---|---|
4 | version | int32_t | 交易数据格式版本 |
1 | marker | char | 必须为零 |
1 | flag | char | 必须为非零 |
1+ | txin_count | var_int | 交易输入数量 |
41+ | txins | txin[] | 一个或多个交易输入的列表 |
1+ | txout_count | var_int | 交易输出数量 |
9+ | txouts | txouts[] | 一个或多个交易输出的列表 |
1+ | script_witnesses | script_witnesses[] | 作为序列化字节数组的见证结构 |
4 | lock_time | uint32_t | 区块号或时间戳,直到交易被锁定 |
支持此 BIP 的解析器将能够区分旧的序列化格式(没有见证)和这个格式。 marker 字节设置为零,以便此结构永远不会在不支持此 BIP 的解析器中解析为有效的交易。如果解析成功,则此类交易将不包含输入和单个输出。
如果见证为空,则应使用旧的序列化格式。
目前,唯一支持的见证对象类型是脚本见证,它由字节数组堆栈组成。它被编码为一个 var_int 项目计数,后跟每个编码为 var_int 长度的项目,后跟一个字节字符串。每个 txin 都有自己的脚本见证。脚本见证的数量没有明确编码,因为它由 txin_count 暗示。空脚本见证被编码为零字节。脚本见证的顺序与关联的 txin 的顺序相同。
节点将使用以下服务位来表明它可以提供见证
NODE_WITNESS = (1 << 3)
在交易默克尔树和 txin 输出点中使用的交易哈希始终使用旧的非见证序列化计算。
添加了对包含见证数据的新哈希的支持,该哈希是从新的见证序列化计算得出的。(请注意,具有空见证的交易始终使用旧的序列化,因此,它们具有与普通哈希相等的见证哈希。)
添加了新的 inv 类型 MSG_WITNESS_TX (0x40000001, or (1<<30)+MSG_TX) 和 MSG_WITNESS_BLOCK (0x40000002, or (1<<30)+MSG_BLOCK) ,仅用于 getdata。库存消息本身仍然只使用 MSG_TX 和 MSG_BLOCK,类似于 MSG_FILTERED_BLOCK。进一步的 inv 类型 MSG_FILTERED_WITNESS_BLOCK (0x40000003, or (1<<30)+MSG_FILTERED_BLOCK) 被保留供将来使用。
MSG_WITNESS_TX getdata 请求应使用非见证序列化的哈希。节点应使用 tx 消息进行响应,如果见证结构为非空,则应使用见证序列化。
MSG_WITNESS_BLOCK 请求将返回一个区块消息,其中包含使用见证序列化具有见证的交易。
特别感谢 Gregory Maxwell 提出了此 BIP 中的许多想法,并感谢 Luke-Jr 弄清楚了如何将其部署为软分叉。
Permalink: Reference Implementation
本文档置于公共领域。
- 原文链接: github.com/jl2012/bips/b...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!