Skip to content

Commit

Permalink
finish transaction section
Browse files Browse the repository at this point in the history
  • Loading branch information
KaKeimei committed Jun 29, 2024
1 parent a541dda commit aad8691
Show file tree
Hide file tree
Showing 10 changed files with 554 additions and 9 deletions.
4 changes: 0 additions & 4 deletions docs/blockchain/bitcoin-basics/transaction/utxo.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,39 @@
---
sidebar_position: 8
---
# 交易确认数

# 交易确认数

介绍比特币交易确认数的概念及其重要性。

## 什么是交易确认数

交易确认数(Confirmations)是指一笔比特币交易被包含在区块中后,区块链上又增加了多少个区块。每新增一个区块,确认数增加1。确认数是衡量交易在区块链上被认可和不可篡改的程度。

## 交易确认数的作用

### 1. 增强交易安全性

确认数越多,交易被篡改的可能性越低。通常,6次确认被认为是安全的,意味着交易几乎不可逆。

### 2. 确定交易有效性

确认数提供了对交易有效性的信任度。较少确认数的交易可能被逆转,因此商家和用户通常会等待一定数量的确认以确保交易的可靠性。

### 3. 防止双花攻击

通过等待多次确认,可以有效防止双花攻击,即同一笔比特币被多次使用。

## 如何查询交易确认数

使用比特币核心客户端的命令行接口(CLI)也可以查询交易确认数。

```bash
mvc-cli gettransaction <txid>
```

返回的结果中包含"confirmations"字段,表示该交易的确认数。

## 总结

交易确认数是衡量比特币交易被认可和不可篡改的重要指标。了解确认数的作用和如何查询,有助于确保交易的安全性和可靠性。
Original file line number Diff line number Diff line change
@@ -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. 自定义设置

对于时间敏感的交易,可以选择较高的手续费率以确保快速确认;对于不急于确认的交易,可以选择较低的手续费率,节省成本。

## 总结

交易手续费率是比特币交易中影响交易确认速度的关键因素。通过计算交易大小和确定总手续费,用户可以计算合适的手续费率。了解影响手续费率的因素和如何选择合适的费率,有助于优化交易成本和确认速度。
Original file line number Diff line number Diff line change
Expand Up @@ -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. 实现高级功能

序列号字段和解锁脚本的组合允许实现相对时间锁定、交易替换等高级功能,增强了比特币交易的灵活性和功能性。

## 总结

交易输入是比特币交易中至关重要的组成部分,它确定了资金的来源并验证了交易的合法性。理解交易输入的结构和作用,有助于深入掌握比特币交易的工作原理和安全机制。
Original file line number Diff line number Diff line change
@@ -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)是比特币交易中用于控制交易确认时间的关键字段。它通过设置绝对或相对的时间或区块高度,提供了延迟执行交易和增强灵活性的功能。理解时间锁的工作原理和应用场景,有助于深入掌握比特币交易机制及其在去中心化系统中的应用。
Original file line number Diff line number Diff line change
Expand Up @@ -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. 多重签名输出

要求多个签名来解锁比特币,通常用于需要多方共同签署的交易。

## 总结

交易输出是比特币交易中的关键组成部分,定义了比特币的接收方和数量。通过锁定脚本,交易输出确保比特币只能被合法的接收方使用。了解交易输出的结构和作用,有助于深入理解比特币交易的工作原理和安全机制。
Loading

0 comments on commit aad8691

Please sign in to comment.