From aad8691449d80ee4dd166efa8ff659dac3003f74 Mon Sep 17 00:00:00 2001 From: KaKeimei Date: Sat, 29 Jun 2024 16:58:41 +0900 Subject: [PATCH] finish transaction section --- .../bitcoin-basics/transaction/utxo.md | 4 - .../transaction/confirmations.md | 37 ++++++- .../bitcoin-basics/transaction/fee.md | 71 ++++++++++++++ .../bitcoin-basics/transaction/input.md | 67 +++++++++++++ .../bitcoin-basics/transaction/lock-time.md | 76 ++++++++++++++ .../bitcoin-basics/transaction/output.md | 79 +++++++++++++++ .../transaction/prioritised-transaction.md | 62 ++++++++++++ .../bitcoin-basics/transaction/size.md | 98 +++++++++++++++++++ .../bitcoin-basics/transaction/utxo.md | 4 - .../bitcoin-basics/transaction/version.md | 65 ++++++++++++ 10 files changed, 554 insertions(+), 9 deletions(-) delete mode 100644 docs/blockchain/bitcoin-basics/transaction/utxo.md delete mode 100644 i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/utxo.md diff --git a/docs/blockchain/bitcoin-basics/transaction/utxo.md b/docs/blockchain/bitcoin-basics/transaction/utxo.md deleted file mode 100644 index 7225e9f..0000000 --- a/docs/blockchain/bitcoin-basics/transaction/utxo.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -sidebar_position: 7 ---- -# Utxo diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/confirmations.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/confirmations.md index cdbecb8..d1088f1 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/confirmations.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/confirmations.md @@ -1,4 +1,39 @@ --- sidebar_position: 8 --- -# 交易确认数 + +# 交易确认数 + +介绍比特币交易确认数的概念及其重要性。 + +## 什么是交易确认数 + +交易确认数(Confirmations)是指一笔比特币交易被包含在区块中后,区块链上又增加了多少个区块。每新增一个区块,确认数增加1。确认数是衡量交易在区块链上被认可和不可篡改的程度。 + +## 交易确认数的作用 + +### 1. 增强交易安全性 + +确认数越多,交易被篡改的可能性越低。通常,6次确认被认为是安全的,意味着交易几乎不可逆。 + +### 2. 确定交易有效性 + +确认数提供了对交易有效性的信任度。较少确认数的交易可能被逆转,因此商家和用户通常会等待一定数量的确认以确保交易的可靠性。 + +### 3. 防止双花攻击 + +通过等待多次确认,可以有效防止双花攻击,即同一笔比特币被多次使用。 + +## 如何查询交易确认数 + +使用比特币核心客户端的命令行接口(CLI)也可以查询交易确认数。 + +```bash +mvc-cli gettransaction +``` + +返回的结果中包含"confirmations"字段,表示该交易的确认数。 + +## 总结 + +交易确认数是衡量比特币交易被认可和不可篡改的重要指标。了解确认数的作用和如何查询,有助于确保交易的安全性和可靠性。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/fee.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/fee.md index 092ba5e..8099358 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/fee.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/fee.md @@ -1,4 +1,75 @@ --- sidebar_position: 5 --- + # 交易手续费率 + +介绍比特币交易手续费率,如何计算。 + +## 什么是交易手续费率 + +比特币交易手续费率是指用户为确认交易而支付的费用与交易大小(以字节为单位)之比。它通常以聪/字节(satoshis/byte)表示。手续费率直接影响交易被矿工确认的优先级,较高的手续费率通常会导致交易更快被确认。 + +## 交易手续费率的计算 + +### 1. 计算交易大小 + +交易大小指的是交易数据的总字节数。比特币交易由输入、输出和其他字段组成,每个字段的大小不同。可以使用比特币钱包或在线工具来计算交易大小。 + +#### 示例 + +假设有一个比特币交易如下: + +- 输入:148字节 +- 输出:34字节 +- 其他字段:10字节 + +总交易大小 = 148 + 34 + 10 = 192字节 + +### 2. 确定总手续费 + +总手续费是用户愿意为确认交易而支付的总金额,单位为聪(satoshis)。 + +#### 示例 + +假设用户愿意支付的总手续费为19,200聪。 + +### 3. 计算手续费率 + +手续费率 = 总手续费 / 交易大小 + +#### 示例 + +手续费率 = 19,200聪 / 192字节 = 100聪/字节 + +## 影响手续费率的因素 + +### 1. 网络拥堵 + +当比特币网络拥堵时,未确认交易积压较多,用户需要支付更高的手续费率以获得优先确认。 + +### 2. 交易大小 + +较大的交易需要更多的字节数,因此即使总手续费相同,交易大小不同的交易其手续费率也会不同。 + +### 3. 矿工偏好 + +矿工通常优先处理手续费率较高的交易,因此用户在高流量时期支付更高的手续费率以确保交易被迅速确认。 + +## 如何选择合适的手续费率 + +### 1. 使用钱包推荐 + +大多数比特币钱包会根据当前网络状况推荐合适的手续费率。用户可以选择默认推荐值或手动调整。 + +### 2. 在线工具和资源 + +用户可以使用在线资源,如比特币手续费估算器,查看当前网络的建议手续费率。 + +### 3. 自定义设置 + +对于时间敏感的交易,可以选择较高的手续费率以确保快速确认;对于不急于确认的交易,可以选择较低的手续费率,节省成本。 + +## 总结 + +交易手续费率是比特币交易中影响交易确认速度的关键因素。通过计算交易大小和确定总手续费,用户可以计算合适的手续费率。了解影响手续费率的因素和如何选择合适的费率,有助于优化交易成本和确认速度。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/input.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/input.md index 63ad0a1..612f7d3 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/input.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/input.md @@ -2,4 +2,71 @@ sidebar_position: 2 --- # Input(交易输入) +介绍交易输入的数据结构及其作用。 +## 什么是交易输入 + +比特币交易的输入(Transaction Input,简称“vin”)是指一个交易使用了之前交易输出(Transaction Output,简称“vout”)中的资金。每笔比特币交易的输入字段指定了资金的来源,即它引用了之前某笔交易的输出,并提供了解锁这些资金所需的信息。 + +## 交易输入字段的结构 + +每个交易输入包含以下几个关键字段: + +### 1. 前交易哈希(previous transaction hash) + +这是一个32字节的哈希值,表示被引用的之前交易的ID。这个字段确定了资金的来源交易。 + +### 2. 前输出索引(previous output index) + +这是一个4字节的整数,表示被引用的之前交易中输出的索引位置。由于一笔交易可以有多个输出,这个索引用于定位具体的输出。 + +### 3. 解锁脚本(scriptSig) + +解锁脚本是一个可变长度的字段,用于解锁之前交易输出的锁定脚本。通常包含签名和公钥,验证这笔交易的合法性。 + +### 4. 序列号(sequence number) + +这是一个4字节的字段,用于相对时间锁定和交易替换。该字段在一些高级用例中起作用,比如BIP 68中描述的相对时间锁定。 + +## 示例 + +以下是一个比特币交易输入的示例,使用JSON格式表示: + +```json +"vin": [ + { + "txid": "previous_transaction_id", + "vout": 0, + "scriptSig": { + "asm": "3045022100... 02b463...", + "hex": "483045022100..." + }, + "sequence": 4294967295 + } +] +``` + +在这个示例中: + +- **txid** 表示之前交易的ID。 +- **vout** 是之前交易中输出的索引位置。 +- **scriptSig** 包含了解锁脚本的详细信息。 +- **sequence** 是序列号,用于高级交易控制。 + +## 交易输入的作用 + +### 1. 确定资金来源 + +交易输入通过引用之前交易的输出来确定资金的来源,确保所有比特币交易都是有来源的。 + +### 2. 验证交易合法性 + +通过解锁脚本,交易输入验证了交易发起者对引用资金的控制权。只有提供正确的签名和公钥,才能解锁并使用之前交易的输出。 + +### 3. 实现高级功能 + +序列号字段和解锁脚本的组合允许实现相对时间锁定、交易替换等高级功能,增强了比特币交易的灵活性和功能性。 + +## 总结 + +交易输入是比特币交易中至关重要的组成部分,它确定了资金的来源并验证了交易的合法性。理解交易输入的结构和作用,有助于深入掌握比特币交易的工作原理和安全机制。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/lock-time.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/lock-time.md index 1cbc852..70054e8 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/lock-time.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/lock-time.md @@ -1,5 +1,81 @@ --- sidebar_position: 4 --- + # Lock Time(时间锁) +介绍时间锁字段的概念。 + +## 什么是时间锁(LockTime) + +时间锁(LockTime)是比特币交易中的一个字段,用于设置交易何时可以被加入区块链。它通过指定一个时间点或区块高度,规定交易在达到该条件前不能被确认。LockTime字段位于交易数据结构的末尾,使用4字节表示。 + +## 时间锁的作用 + +### 1. 延迟交易 + +时间锁允许创建在未来某个时间或区块高度后才会被确认的交易。它适用于需要延迟执行的交易场景。 + +### 2. 增强灵活性 + +时间锁为交易的执行时间提供了灵活性,允许用户设置交易在特定时间或事件发生后才生效。这在支付计划和合约执行中尤为有用。 + +## 时间锁的类型 + +### 1. 绝对时间锁(Absolute LockTime) + +绝对时间锁指定一个具体的时间点或区块高度。在交易创建时,LockTime字段设置为该时间点或区块高度。交易只能在网络时间超过指定时间或区块高度后被矿工打包确认。 + +### 2. 相对时间锁(Relative LockTime) + +相对时间锁通过BIP 68引入,允许交易输入设置一个相对时间锁定,要求交易在前一个交易确认后经过一定时间或区块数才可被确认。相对时间锁使得更复杂的支付方案和智能合约成为可能。 + +## 时间锁的实现 + +### 1. 设置时间锁 + +时间锁可以通过设置交易的LockTime字段实现。LockTime可以设置为特定的UNIX时间戳(秒)或区块高度: + +- 小于500,000,000的值表示区块高度。 +- 大于等于500,000,000的值表示UNIX时间戳。 + +### 2. 验证时间锁 + +在交易验证过程中,节点会检查当前区块高度或网络时间是否满足LockTime条件。只有当条件满足时,交易才会被确认并加入区块。 + +### 示例 + +以下是一个设置LockTime的交易示例: + +```json +{ + "txid": "exampletxid", + "version": 2, + "locktime": 500000, + // 表示在区块高度500000之后才能被确认 + "vin": [ + ... + ], + "vout": [ + ... + ] +} +``` + +## 时间锁的应用场景 + +### 1. 延迟支付 + +时间锁可以用于设置延迟支付场景,例如分期付款或定期支付。 + +### 2. 安全保障 + +在双花攻击防护中,通过时间锁可以确保资金在一定时间内不可用,从而提供额外的安全保障。 + +### 3. 智能合约 + +时间锁在智能合约中起到了关键作用,允许设计更加复杂的交易和支付方案,如时间锁定合约和多重签名合约。 + +## 总结 + +时间锁(LockTime)是比特币交易中用于控制交易确认时间的关键字段。它通过设置绝对或相对的时间或区块高度,提供了延迟执行交易和增强灵活性的功能。理解时间锁的工作原理和应用场景,有助于深入掌握比特币交易机制及其在去中心化系统中的应用。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/output.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/output.md index 5d9d9a1..150672b 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/output.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/output.md @@ -2,4 +2,83 @@ sidebar_position: 3 --- # Output(交易输出) +介绍交易输出的数据结构及其作用。 +## 什么是交易输出 + +比特币交易的输出(Transaction Output,简称“vout”)是指比特币交易中包含的付款目标及其金额。每个输出定义了接收方和他们将收到的比特币数量。 + +## 交易输出字段的结构 + +每个交易输出包含以下几个关键字段: + +### 1. 数量(value) + +这是一个8字节的整数,表示该输出的比特币数量,单位是聪(Satoshi)。1比特币等于100,000,000聪。 + +### 2. 锁定脚本(scriptPubKey) + +锁定脚本是一个可变长度的字段,定义了如何解锁和使用这个输出。通常是接收方的公钥哈希(P2PKH)或其他复杂的脚本。 + +### 示例 + +以下是一个比特币交易输出的示例,使用JSON格式表示: + +```json +"vout": [ + { + "value": 0.01500000, + "n": 0, + "scriptPubKey": { + "asm": "OP_DUP OP_HASH160 89abcdef... OP_EQUALVERIFY OP_CHECKSIG", + "hex": "76a91489abcdef...", + "reqSigs": 1, + "type": "pubkeyhash", + "addresses": [ + "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" + ] + } + } +] +``` + +在这个示例中: + +- **value** 表示接收方将收到的比特币数量。 +- **scriptPubKey** 包含了锁定脚本的详细信息。 +- **n** 是输出的索引位置。 +- **reqSigs** 表示解锁这个输出所需的最少签名数量。 +- **type** 指定了锁定脚本的类型(如P2PKH)。 +- **addresses** 是接收方的比特币地址。 + +## 交易输出的作用 + +### 1. 指定接收方 + +交易输出定义了比特币的接收方,确保比特币被正确转移到预定的目标地址。 + +### 2. 锁定和解锁机制 + +通过锁定脚本,交易输出可以设置复杂的条件来控制比特币的使用。只有满足这些条件,才能解锁并使用这些比特币。 + +### 3. 多重签名支持 + +交易输出可以支持多重签名,通过`reqSigs`字段指定解锁比特币所需的签名数量,提高了交易的安全性。 + +## 交易输出的类型 + +### 1. Pay-to-PubKeyHash (P2PKH) + +最常见的输出类型,锁定脚本包含接收方的公钥哈希,解锁时需要提供对应的公钥和签名。 + +### 2. Pay-to-Script-Hash (P2SH) + +输出被锁定到一个哈希值对应的脚本,解锁时需要提供能生成该哈希值的脚本和相应的输入。 + +### 3. 多重签名输出 + +要求多个签名来解锁比特币,通常用于需要多方共同签署的交易。 + +## 总结 + +交易输出是比特币交易中的关键组成部分,定义了比特币的接收方和数量。通过锁定脚本,交易输出确保比特币只能被合法的接收方使用。了解交易输出的结构和作用,有助于深入理解比特币交易的工作原理和安全机制。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/prioritised-transaction.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/prioritised-transaction.md index b39b192..c531752 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/prioritised-transaction.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/prioritised-transaction.md @@ -1,4 +1,66 @@ --- sidebar_position: 9 --- + # 提升交易优先级(RBF CPFP) + +介绍如何提高交易的优先级。 + +## 如何提高交易的优先级 + +比特币交易的优先级决定了交易在网络中被确认的速度。以下是提高交易优先级的几种方法: + +### 1. 提高交易手续费 + +最直接的方法是支付较高的交易手续费。矿工优先处理手续费率(聪/字节)较高的交易。 + +### 2. 使用Replace-by-Fee(RBF)机制 + +RBF机制允许用户通过提交一笔相同的交易但附带更高手续费来替换原交易,从而提高新交易的优先级。 + +### 3. 使用Child-Pays-For-Parent(CPFP)机制 + +CPFP机制允许用户通过创建一笔新交易,使用未确认交易的输出作为输入,并设置高手续费来促进原交易和新交易一起被确认。 + +## RBF机制详解 + +### 什么是RBF机制 + +RBF(Replace-by-Fee)机制允许用户通过发送一笔更高手续费的交易来替换已经广播但未确认的交易。 + +### 优点 + +- **灵活性**:用户可以调整手续费以适应网络拥堵情况。 +- **加速确认**:通过增加手续费,提高交易被矿工优先处理的可能性。 + +### 缺点 + +- **商家不接受**:一些商家可能不接受RBF交易,因为在交易确认之前,存在被替换的风险。 +- **复杂性**:需要钱包软件支持RBF功能,并且用户需要了解如何使用。 + +## CPFP机制详解 + +### 什么是CPFP机制 + +CPFP(Child-Pays-For-Parent)机制允许用户通过创建一笔使用未确认交易输出的新交易,并支付高手续费,以促进原交易和新交易一起被确认。 + +### 优点 + +- **双重确认**:同时确认父交易和子交易,提高整体交易的确认速度。 +- **商家友好**:商家更愿意接受CPFP交易,因为支付方可以主动提高交易优先级。 + +### 缺点 + +- **额外成本**:需要支付额外的手续费来加速交易确认。 +- **复杂性**:用户需要理解如何创建子交易,并设置适当的手续费率。 + +## 优缺点对比 + +| 机制 | 优点 | 缺点 | +|------|-----------|---------------------| +| RBF | 灵活性高;加速确认 | 一些商家不接受;需要钱包支持;使用复杂 | +| CPFP | 双重确认;商家友好 | 额外手续费;使用复杂 | + +## 总结 + +提高比特币交易优先级的主要方法是支付更高的手续费,利用RBF和CPFP机制也可以有效提升交易确认速度。RBF提供了灵活性,但可能不被一些商家接受;CPFP虽然成本更高,但更商家友好。理解这些机制及其优缺点,有助于用户根据具体情况选择合适的方法,加速交易确认。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/size.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/size.md index 559480b..12bc54c 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/size.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/size.md @@ -1,4 +1,102 @@ --- sidebar_position: 6 --- + # 交易体积 + +介绍如何计算交易的体积,用来确定交易的手续费。 + +交易体积通常以字节为单位,通过计算交易的输入、输出和其他字段的大小来确定。 + +## 交易体积的组成部分 + +比特币交易由以下部分组成: + +### 1. 版本号 + +- 大小:4字节 +- 作用:指示交易格式和协议版本。 + +### 2. 输入计数器 + +- 大小:1-9字节(可变长度整数) +- 作用:指示交易中包含的输入数量。 + +### 3. 输入 + +每个输入由以下字段组成: + +- **前交易哈希**(previous transaction hash):32字节 +- **前输出索引**(previous output index):4字节 +- **解锁脚本长度**(scriptSig length):1-9字节(可变长度整数) +- **解锁脚本**(scriptSig):通常为107字节(签名和公钥的典型大小) +- **序列号**(sequence):4字节 + +### 4. 输出计数器 + +- 大小:1-9字节(可变长度整数) +- 作用:指示交易中包含的输出数量。 + +### 5. 输出 + +每个输出由以下字段组成: + +- **数量**(value):8字节 +- **锁定脚本长度**(scriptPubKey length):1-9字节(可变长度整数) +- **锁定脚本**(scriptPubKey):通常为25字节(P2PKH的典型大小) + +### 6. 锁定时间(LockTime) + +- 大小:4字节 +- 作用:指定交易可以被加入区块链的时间或区块高度。 + +## 计算交易体积的步骤 + +### 1. 计算固定字段的大小 + +- 版本号:4字节 +- 锁定时间:4字节 + +### 2. 计算输入和输出计数器的大小 + +假设我们有n个输入和m个输出,输入计数器和输出计数器的大小取决于n和m的值,通常为1字节。 + +### 3. 计算所有输入的大小 + +每个输入的大小为: + +```plaintext +前交易哈希(32字节) + 前输出索引(4字节) + 解锁脚本长度(1-9字节) + 解锁脚本(约107字节) + 序列号(4字节) +``` + +### 4. 计算所有输出的大小 + +每个输出的大小为: + +```plaintext +数量(8字节) + 锁定脚本长度(1-9字节) + 锁定脚本(约25字节) +``` + +### 5. 计算总交易体积 + +将上述部分的大小相加,得到交易的总体积。 + +## 示例 + +假设有一个交易,包含2个输入和2个输出: + +- 版本号:4字节 +- 输入计数器:1字节 +- 每个输入:148字节 +- 输出计数器:1字节 +- 每个输出:34字节 +- 锁定时间:4字节 + +计算: + +```plaintext +总体积 = 4(版本号) + 1(输入计数器) + 2*148(输入) + 1(输出计数器) + 2*34(输出) + 4(锁定时间) +总体积 = 4 + 1 + 296 + 1 + 68 + 4 = 374字节 +``` + +通过以上步骤,可以准确计算比特币交易的体积。这对于设置合适的手续费和确保交易快速确认非常重要。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/utxo.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/utxo.md deleted file mode 100644 index 3128209..0000000 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/utxo.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -sidebar_position: 7 ---- -# UTXO(未花费交易输出) diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/version.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/version.md index dfed304..83e6af0 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/version.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/version.md @@ -3,3 +3,68 @@ sidebar_position: 1 --- # Version(交易版本号) +介绍比特币交易版本号字段。 + +## 什么是交易的版本号 + +交易的版本号(Transaction Version Number)是比特币交易数据结构中的一个字段,用于表示交易格式和规则的版本。它定义了交易的结构,并为协议的升级和新特性的引入提供支持。 + +## 版本号的作用 + +### 1. 定义交易格式 + +版本号指示交易的格式和解释方式。例如,不同版本的交易可能在输入、输出或脚本语法上有所不同。矿工和节点根据版本号解析和验证交易。 + +### 2. 支持协议升级 + +通过版本号,比特币协议可以逐步引入新特性和改进。例如,隔离见证(SegWit)是通过提高版本号来实现的。旧版本的节点可以继续处理旧格式的交易,而新版本的节点可以理解和处理新格式的交易。 + +### 3. 向后兼容 + +版本号允许新特性在不破坏旧特性或交易的情况下被引入。节点可以根据版本号选择性地处理交易,从而实现向后兼容。 + +## 版本号的取值 + +比特币交易的版本号是一个4字节的整数,当前使用的版本号主要有: + +- **版本1**:最初的交易版本,自比特币创始以来使用。 +- **版本2**:引入CHECKSEQUENCEVERIFY(BIP 68和BIP 112),支持相对时间锁定。 +- **版本10**:MVC专用,支持[MetaTxid](../../mvc-improvements/meta-txid.md)计算。 + +## 获取交易版本号 + +使用比特币核心客户端,可以通过命令行接口(CLI)获取交易的详细信息,包括版本号。 + +### 获取交易详细信息 + +```bash +mvc-cli getrawtransaction 1 +``` + +该命令返回的JSON数据中包含交易的版本号。 + +## 示例 + +假设我们有一个交易ID为``的交易,使用上述命令获取详细信息,结果如下: + +```json +{ + "txid": "", + "version": 2, + "locktime": 0, + "vin": [...], + "vout": [...] +} +``` + +上述示例中,"version"字段显示为2,表示该交易使用了版本2的格式和规则。 + +## 版本号的演变 + +比特币交易版本号的演变反映了协议的逐步改进和扩展。例如,BIP 68和BIP 112引入了相对时间锁定功能,并通过提高版本号来实现。未来的协议升级可能会进一步提高版本号,引入更多新特性和改进。 + +在MVC网络中,版本号10用于支持MetaTxid计算,为交易的验证和处理提供了新的功能。 + +## 总结 + +交易的版本号是比特币交易数据结构中的关键字段,用于定义交易的格式和支持协议升级。通过版本号的演变,比特币协议可以逐步引入新特性,同时保持向后兼容性。了解交易版本号的作用和获取方法,有助于深入理解比特币交易的结构和协议的演变。