Skip to content

Commit aad8691

Browse files
committed
finish transaction section
1 parent a541dda commit aad8691

File tree

10 files changed

+554
-9
lines changed

10 files changed

+554
-9
lines changed

docs/blockchain/bitcoin-basics/transaction/utxo.md

-4
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,39 @@
11
---
22
sidebar_position: 8
33
---
4-
# 交易确认数
4+
5+
# 交易确认数
6+
7+
介绍比特币交易确认数的概念及其重要性。
8+
9+
## 什么是交易确认数
10+
11+
交易确认数(Confirmations)是指一笔比特币交易被包含在区块中后,区块链上又增加了多少个区块。每新增一个区块,确认数增加1。确认数是衡量交易在区块链上被认可和不可篡改的程度。
12+
13+
## 交易确认数的作用
14+
15+
### 1. 增强交易安全性
16+
17+
确认数越多,交易被篡改的可能性越低。通常,6次确认被认为是安全的,意味着交易几乎不可逆。
18+
19+
### 2. 确定交易有效性
20+
21+
确认数提供了对交易有效性的信任度。较少确认数的交易可能被逆转,因此商家和用户通常会等待一定数量的确认以确保交易的可靠性。
22+
23+
### 3. 防止双花攻击
24+
25+
通过等待多次确认,可以有效防止双花攻击,即同一笔比特币被多次使用。
26+
27+
## 如何查询交易确认数
28+
29+
使用比特币核心客户端的命令行接口(CLI)也可以查询交易确认数。
30+
31+
```bash
32+
mvc-cli gettransaction <txid>
33+
```
34+
35+
返回的结果中包含"confirmations"字段,表示该交易的确认数。
36+
37+
## 总结
38+
39+
交易确认数是衡量比特币交易被认可和不可篡改的重要指标。了解确认数的作用和如何查询,有助于确保交易的安全性和可靠性。
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,75 @@
11
---
22
sidebar_position: 5
33
---
4+
45
# 交易手续费率
6+
7+
介绍比特币交易手续费率,如何计算。
8+
9+
## 什么是交易手续费率
10+
11+
比特币交易手续费率是指用户为确认交易而支付的费用与交易大小(以字节为单位)之比。它通常以聪/字节(satoshis/byte)表示。手续费率直接影响交易被矿工确认的优先级,较高的手续费率通常会导致交易更快被确认。
12+
13+
## 交易手续费率的计算
14+
15+
### 1. 计算交易大小
16+
17+
交易大小指的是交易数据的总字节数。比特币交易由输入、输出和其他字段组成,每个字段的大小不同。可以使用比特币钱包或在线工具来计算交易大小。
18+
19+
#### 示例
20+
21+
假设有一个比特币交易如下:
22+
23+
- 输入:148字节
24+
- 输出:34字节
25+
- 其他字段:10字节
26+
27+
总交易大小 = 148 + 34 + 10 = 192字节
28+
29+
### 2. 确定总手续费
30+
31+
总手续费是用户愿意为确认交易而支付的总金额,单位为聪(satoshis)。
32+
33+
#### 示例
34+
35+
假设用户愿意支付的总手续费为19,200聪。
36+
37+
### 3. 计算手续费率
38+
39+
手续费率 = 总手续费 / 交易大小
40+
41+
#### 示例
42+
43+
手续费率 = 19,200聪 / 192字节 = 100聪/字节
44+
45+
## 影响手续费率的因素
46+
47+
### 1. 网络拥堵
48+
49+
当比特币网络拥堵时,未确认交易积压较多,用户需要支付更高的手续费率以获得优先确认。
50+
51+
### 2. 交易大小
52+
53+
较大的交易需要更多的字节数,因此即使总手续费相同,交易大小不同的交易其手续费率也会不同。
54+
55+
### 3. 矿工偏好
56+
57+
矿工通常优先处理手续费率较高的交易,因此用户在高流量时期支付更高的手续费率以确保交易被迅速确认。
58+
59+
## 如何选择合适的手续费率
60+
61+
### 1. 使用钱包推荐
62+
63+
大多数比特币钱包会根据当前网络状况推荐合适的手续费率。用户可以选择默认推荐值或手动调整。
64+
65+
### 2. 在线工具和资源
66+
67+
用户可以使用在线资源,如比特币手续费估算器,查看当前网络的建议手续费率。
68+
69+
### 3. 自定义设置
70+
71+
对于时间敏感的交易,可以选择较高的手续费率以确保快速确认;对于不急于确认的交易,可以选择较低的手续费率,节省成本。
72+
73+
## 总结
74+
75+
交易手续费率是比特币交易中影响交易确认速度的关键因素。通过计算交易大小和确定总手续费,用户可以计算合适的手续费率。了解影响手续费率的因素和如何选择合适的费率,有助于优化交易成本和确认速度。

i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/input.md

+67
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,71 @@
22
sidebar_position: 2
33
---
44
# Input(交易输入)
5+
介绍交易输入的数据结构及其作用。
56

7+
## 什么是交易输入
8+
9+
比特币交易的输入(Transaction Input,简称“vin”)是指一个交易使用了之前交易输出(Transaction Output,简称“vout”)中的资金。每笔比特币交易的输入字段指定了资金的来源,即它引用了之前某笔交易的输出,并提供了解锁这些资金所需的信息。
10+
11+
## 交易输入字段的结构
12+
13+
每个交易输入包含以下几个关键字段:
14+
15+
### 1. 前交易哈希(previous transaction hash)
16+
17+
这是一个32字节的哈希值,表示被引用的之前交易的ID。这个字段确定了资金的来源交易。
18+
19+
### 2. 前输出索引(previous output index)
20+
21+
这是一个4字节的整数,表示被引用的之前交易中输出的索引位置。由于一笔交易可以有多个输出,这个索引用于定位具体的输出。
22+
23+
### 3. 解锁脚本(scriptSig)
24+
25+
解锁脚本是一个可变长度的字段,用于解锁之前交易输出的锁定脚本。通常包含签名和公钥,验证这笔交易的合法性。
26+
27+
### 4. 序列号(sequence number)
28+
29+
这是一个4字节的字段,用于相对时间锁定和交易替换。该字段在一些高级用例中起作用,比如BIP 68中描述的相对时间锁定。
30+
31+
## 示例
32+
33+
以下是一个比特币交易输入的示例,使用JSON格式表示:
34+
35+
```json
36+
"vin": [
37+
{
38+
"txid": "previous_transaction_id",
39+
"vout": 0,
40+
"scriptSig": {
41+
"asm": "3045022100... 02b463...",
42+
"hex": "483045022100..."
43+
},
44+
"sequence": 4294967295
45+
}
46+
]
47+
```
48+
49+
在这个示例中:
50+
51+
- **txid** 表示之前交易的ID。
52+
- **vout** 是之前交易中输出的索引位置。
53+
- **scriptSig** 包含了解锁脚本的详细信息。
54+
- **sequence** 是序列号,用于高级交易控制。
55+
56+
## 交易输入的作用
57+
58+
### 1. 确定资金来源
59+
60+
交易输入通过引用之前交易的输出来确定资金的来源,确保所有比特币交易都是有来源的。
61+
62+
### 2. 验证交易合法性
63+
64+
通过解锁脚本,交易输入验证了交易发起者对引用资金的控制权。只有提供正确的签名和公钥,才能解锁并使用之前交易的输出。
65+
66+
### 3. 实现高级功能
67+
68+
序列号字段和解锁脚本的组合允许实现相对时间锁定、交易替换等高级功能,增强了比特币交易的灵活性和功能性。
69+
70+
## 总结
71+
72+
交易输入是比特币交易中至关重要的组成部分,它确定了资金的来源并验证了交易的合法性。理解交易输入的结构和作用,有助于深入掌握比特币交易的工作原理和安全机制。
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,81 @@
11
---
22
sidebar_position: 4
33
---
4+
45
# Lock Time(时间锁)
56

7+
介绍时间锁字段的概念。
8+
9+
## 什么是时间锁(LockTime)
10+
11+
时间锁(LockTime)是比特币交易中的一个字段,用于设置交易何时可以被加入区块链。它通过指定一个时间点或区块高度,规定交易在达到该条件前不能被确认。LockTime字段位于交易数据结构的末尾,使用4字节表示。
12+
13+
## 时间锁的作用
14+
15+
### 1. 延迟交易
16+
17+
时间锁允许创建在未来某个时间或区块高度后才会被确认的交易。它适用于需要延迟执行的交易场景。
18+
19+
### 2. 增强灵活性
20+
21+
时间锁为交易的执行时间提供了灵活性,允许用户设置交易在特定时间或事件发生后才生效。这在支付计划和合约执行中尤为有用。
22+
23+
## 时间锁的类型
24+
25+
### 1. 绝对时间锁(Absolute LockTime)
26+
27+
绝对时间锁指定一个具体的时间点或区块高度。在交易创建时,LockTime字段设置为该时间点或区块高度。交易只能在网络时间超过指定时间或区块高度后被矿工打包确认。
28+
29+
### 2. 相对时间锁(Relative LockTime)
30+
31+
相对时间锁通过BIP 68引入,允许交易输入设置一个相对时间锁定,要求交易在前一个交易确认后经过一定时间或区块数才可被确认。相对时间锁使得更复杂的支付方案和智能合约成为可能。
32+
33+
## 时间锁的实现
34+
35+
### 1. 设置时间锁
36+
37+
时间锁可以通过设置交易的LockTime字段实现。LockTime可以设置为特定的UNIX时间戳(秒)或区块高度:
38+
39+
- 小于500,000,000的值表示区块高度。
40+
- 大于等于500,000,000的值表示UNIX时间戳。
41+
42+
### 2. 验证时间锁
43+
44+
在交易验证过程中,节点会检查当前区块高度或网络时间是否满足LockTime条件。只有当条件满足时,交易才会被确认并加入区块。
45+
46+
### 示例
47+
48+
以下是一个设置LockTime的交易示例:
49+
50+
```json
51+
{
52+
"txid": "exampletxid",
53+
"version": 2,
54+
"locktime": 500000,
55+
// 表示在区块高度500000之后才能被确认
56+
"vin": [
57+
...
58+
],
59+
"vout": [
60+
...
61+
]
62+
}
63+
```
64+
65+
## 时间锁的应用场景
66+
67+
### 1. 延迟支付
68+
69+
时间锁可以用于设置延迟支付场景,例如分期付款或定期支付。
70+
71+
### 2. 安全保障
72+
73+
在双花攻击防护中,通过时间锁可以确保资金在一定时间内不可用,从而提供额外的安全保障。
74+
75+
### 3. 智能合约
76+
77+
时间锁在智能合约中起到了关键作用,允许设计更加复杂的交易和支付方案,如时间锁定合约和多重签名合约。
78+
79+
## 总结
80+
81+
时间锁(LockTime)是比特币交易中用于控制交易确认时间的关键字段。它通过设置绝对或相对的时间或区块高度,提供了延迟执行交易和增强灵活性的功能。理解时间锁的工作原理和应用场景,有助于深入掌握比特币交易机制及其在去中心化系统中的应用。

i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction/output.md

+79
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,83 @@
22
sidebar_position: 3
33
---
44
# Output(交易输出)
5+
介绍交易输出的数据结构及其作用。
56

7+
## 什么是交易输出
8+
9+
比特币交易的输出(Transaction Output,简称“vout”)是指比特币交易中包含的付款目标及其金额。每个输出定义了接收方和他们将收到的比特币数量。
10+
11+
## 交易输出字段的结构
12+
13+
每个交易输出包含以下几个关键字段:
14+
15+
### 1. 数量(value)
16+
17+
这是一个8字节的整数,表示该输出的比特币数量,单位是聪(Satoshi)。1比特币等于100,000,000聪。
18+
19+
### 2. 锁定脚本(scriptPubKey)
20+
21+
锁定脚本是一个可变长度的字段,定义了如何解锁和使用这个输出。通常是接收方的公钥哈希(P2PKH)或其他复杂的脚本。
22+
23+
### 示例
24+
25+
以下是一个比特币交易输出的示例,使用JSON格式表示:
26+
27+
```json
28+
"vout": [
29+
{
30+
"value": 0.01500000,
31+
"n": 0,
32+
"scriptPubKey": {
33+
"asm": "OP_DUP OP_HASH160 89abcdef... OP_EQUALVERIFY OP_CHECKSIG",
34+
"hex": "76a91489abcdef...",
35+
"reqSigs": 1,
36+
"type": "pubkeyhash",
37+
"addresses": [
38+
"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
39+
]
40+
}
41+
}
42+
]
43+
```
44+
45+
在这个示例中:
46+
47+
- **value** 表示接收方将收到的比特币数量。
48+
- **scriptPubKey** 包含了锁定脚本的详细信息。
49+
- **n** 是输出的索引位置。
50+
- **reqSigs** 表示解锁这个输出所需的最少签名数量。
51+
- **type** 指定了锁定脚本的类型(如P2PKH)。
52+
- **addresses** 是接收方的比特币地址。
53+
54+
## 交易输出的作用
55+
56+
### 1. 指定接收方
57+
58+
交易输出定义了比特币的接收方,确保比特币被正确转移到预定的目标地址。
59+
60+
### 2. 锁定和解锁机制
61+
62+
通过锁定脚本,交易输出可以设置复杂的条件来控制比特币的使用。只有满足这些条件,才能解锁并使用这些比特币。
63+
64+
### 3. 多重签名支持
65+
66+
交易输出可以支持多重签名,通过`reqSigs`字段指定解锁比特币所需的签名数量,提高了交易的安全性。
67+
68+
## 交易输出的类型
69+
70+
### 1. Pay-to-PubKeyHash (P2PKH)
71+
72+
最常见的输出类型,锁定脚本包含接收方的公钥哈希,解锁时需要提供对应的公钥和签名。
73+
74+
### 2. Pay-to-Script-Hash (P2SH)
75+
76+
输出被锁定到一个哈希值对应的脚本,解锁时需要提供能生成该哈希值的脚本和相应的输入。
77+
78+
### 3. 多重签名输出
79+
80+
要求多个签名来解锁比特币,通常用于需要多方共同签署的交易。
81+
82+
## 总结
83+
84+
交易输出是比特币交易中的关键组成部分,定义了比特币的接收方和数量。通过锁定脚本,交易输出确保比特币只能被合法的接收方使用。了解交易输出的结构和作用,有助于深入理解比特币交易的工作原理和安全机制。

0 commit comments

Comments
 (0)