進階
交易結構
詳細解析比特幣交易的完整結構,包括輸入、輸出、見證數據和交易 ID。
25 分鐘
交易概覽
比特幣交易是一個數據結構,描述了比特幣價值的轉移。每筆交易消費一個或多個 UTXO 作為輸入, 並創建新的 UTXO 作為輸出。交易被包含在區塊中,並通過工作量證明永久記錄在區塊鏈上。
交易結構
一筆比特幣交易包含以下主要部分:
Transaction {
version: 4 bytes
marker: 1 byte (0x00, SegWit only)
flag: 1 byte (0x01, SegWit only)
input_count: VarInt
inputs: TxIn[]
output_count: VarInt
outputs: TxOut[]
witness: Witness[] (SegWit only)
locktime: 4 bytes
}
版本號 (Version)
4 個字節,表示交易版本。版本 1 是最初的交易格式,版本 2 添加了相對時間鎖定支持(BIP-68)。
輸入 (Inputs)
每個輸入引用一個之前的 UTXO:
TxIn {
prev_txid: 32 bytes // 引用的交易 ID
prev_vout: 4 bytes // 輸出索引
script_sig: VarBytes // 解鎖腳本(傳統)
sequence: 4 bytes // 序列號
}
輸出 (Outputs)
每個輸出定義了新的 UTXO:
TxOut {
value: 8 bytes // 金額(satoshis)
script_pubkey: VarBytes // 鎖定腳本
}
見證數據 (Witness)
SegWit 交易將簽名和公鑰移到見證區域。這解決了交易延展性問題, 並且見證數據在計算區塊權重時有折扣。
鎖定時間 (Locktime)
4 個字節,定義交易可以被包含在區塊中的最早時間。如果值小於 5 億, 表示區塊高度;否則表示 Unix 時間戳。
交易 ID
比特幣有兩種交易 ID:
- TXID 傳統交易 ID,對整個交易(不含見證)進行雙重 SHA256 哈希
- WTXID 見證交易 ID,包含見證數據的哈希(SegWit 交易)
常見交易類型
P2PKH (Pay to Public Key Hash)
傳統地址格式(以 1 開頭)。腳本要求提供公鑰和簽名,公鑰的哈希必須匹配。
P2SH (Pay to Script Hash)
腳本哈希地址(以 3 開頭)。允許複雜的花費條件,如多重簽名。
P2WPKH (Pay to Witness Public Key Hash)
原生 SegWit 地址(以 bc1q 開頭)。簽名在見證區域,費用更低。
P2TR (Pay to Taproot)
Taproot 地址(以 bc1p 開頭)。支持 Schnorr 簽名和 MAST,隱私性更好。
交易費用
交易費用 = 輸入總額 - 輸出總額。費用由礦工收取,用於激勵他們將交易包含在區塊中。 費用通常以 sat/vB(每虛擬字節多少聰)表示。
重要提醒
如果你沒有創建找零輸出,差額全部會變成交易費用!這是一個常見的錯誤, 可能導致損失大量比特幣。
延伸閱讀
已複製連結