File tree 10 files changed +554
-9
lines changed
docs/blockchain/bitcoin-basics/transaction
i18n/zh-CN/docusaurus-plugin-content-docs/current/blockchain/bitcoin-basics/transaction
10 files changed +554
-9
lines changed Load Diff This file was deleted.
Original file line number Diff line number Diff line change 1
1
---
2
2
sidebar_position : 8
3
3
---
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 number Diff line number Diff line change 1
1
---
2
2
sidebar_position : 5
3
3
---
4
+
4
5
# 交易手续费率
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
+ 交易手续费率是比特币交易中影响交易确认速度的关键因素。通过计算交易大小和确定总手续费,用户可以计算合适的手续费率。了解影响手续费率的因素和如何选择合适的费率,有助于优化交易成本和确认速度。
Original file line number Diff line number Diff line change 2
2
sidebar_position : 2
3
3
---
4
4
# Input(交易输入)
5
+ 介绍交易输入的数据结构及其作用。
5
6
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 number Diff line number Diff line change 1
1
---
2
2
sidebar_position : 4
3
3
---
4
+
4
5
# Lock Time(时间锁)
5
6
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)是比特币交易中用于控制交易确认时间的关键字段。它通过设置绝对或相对的时间或区块高度,提供了延迟执行交易和增强灵活性的功能。理解时间锁的工作原理和应用场景,有助于深入掌握比特币交易机制及其在去中心化系统中的应用。
Original file line number Diff line number Diff line change 2
2
sidebar_position : 3
3
3
---
4
4
# Output(交易输出)
5
+ 介绍交易输出的数据结构及其作用。
5
6
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
+ 交易输出是比特币交易中的关键组成部分,定义了比特币的接收方和数量。通过锁定脚本,交易输出确保比特币只能被合法的接收方使用。了解交易输出的结构和作用,有助于深入理解比特币交易的工作原理和安全机制。
You can’t perform that action at this time.
0 commit comments