生產交易(生成)
每個區塊對應壹個生產tx,沒有輸入交易,挖掘出來的新幣是所有幣的來源。
復合地址事務(腳本哈希)
這種交易的接收地址不是通常意義上的地址,而是壹個復合地址,從3開始,需要幾對公私鑰才能生成壹個復合地址,可以在生成過程中指定。幾對公私鑰簽名後,就可以消費這個地址的比特幣了。
公鑰哈希(公鑰哈希)
這種類型是最常見的事務類型,由n個輸入和m個輸出組成。
輸入輸出可以簡單理解為:輸入發錢的地址,輸出收錢的地址。
數據結構
領域
數據類型
字段長度
字段描述
versionuint32_t
4版本號事務數據結構tx_in countvar_int1+輸入事務數tx_intx_in[]41+輸入事務數組,每個輸入=41字節。
Tx_out countvar_int1+輸出地址個數tx_outtx_out[]9+輸入地址數組,每個輸入=9字節lock_timeuint32_t4。
Lock_time是壹個多含義字段,表示事務在塊的某個高度之前或某個時間點之前被鎖定,不能包含在塊中。
價值
意義
0立即生效。500000000表示塊的高度,在此之前它被鎖定(無效)= 500000000表示Unix時間戳,在此之前它被鎖定(無效)。
如果該事務的所有輸入事務的序列字段是INT32的最大值(0xffffffff),則lock_time字段被忽略。否則,事務將不會被包含在塊中,直到它達到塊的高度或達到某個時刻。
例子
為了便於論證,我們讀取了較早的塊體數據,以116219塊體的高度為例。
# ~ bitcoind get block 00000000000007 c 639 F2 CB 23 e 4606 a 1d 022 fa 4206353 b 9d 92 e 99 f 5144 BD 74611
{
hash:000000000000007 c 639 F2 CB 23 e 4606 a 1d 022 fa 4206353 b 9d 92 e 99 f 5144 BD 74611,
確認:144667,
尺寸:1536,
身高:116219,
版本:1,
merkleroot:587 fefd 748 f 899 f 84 d0fa 1d8a 3876 fdb 406 a4 bb 8 f 54 a 31445 CB 72564701 daea 6,
發送:[
be 8 f 08d 7 f 519 EB 863 a 68 cf 292 ca 51 dbab 7 c 9 b 49 f 50 a 96d 13 F2 db 32 e 432 db 363 e,
a 387039 ECA 66297 ba 51 e F2 da 3c 8 a 0 fc 745 BCB 51 e 20 ed 9505 cc 6762 be 037 bb,
2bd 83162 e 264 abf 59 f 9124 ca 517050065 F8 c8 eed 2 a 21 fbf 85d 454 ee 4 E0 E4 c 267,
028 cfae 228 f 8 a 4 b 0 CAE e9 c 566 BD 41 aed 36 BCD 237 CDC 0 EB 18f 0331d 1e 87111743,
3a 06b 6615756 DC 3363 a 8567 fbfa 8 Fe 978 EEO ba 06 EB 33 FD 844886 a0f 01149 ad 62
],
時間:1301705313,
隨機數:1826107553,
位:1b00f339,
難度:68538+0,
previousblockhash:00000000000010d 549135 EB 39 BD 3 BBB 1047 df8e 1512357216 E8 a 85 c 57 a 1 efb FB,
nextblockhash:000000000000 e 9 FCC 59 a 6850 f 64 a 94476 a 30 f 5 Fe 35d 6d 8 C4 B4 ce 0 b 1b 04103 a 77
}
這個塊中有五個事務,第壹個是Generation TX,所以解析出來看看具體內容:
# ~ bitcoind getraw transaction be 8 f 08d 7 f 519 EB 863 a 68 cf 292 ca 51 dbab 7 c 9 b 49 f 50 a 96d 13 F2 db 32 e 432 db 363 e 1
{
十六進制:01000000010000000000000000000000000000000000000000000 ffffffff 070439 f 3001b 0134 ffffffffff 065444
txid:be 8 f 08d 7 f 519 EB 863 a 68 cf 292 ca 51 dbab 7 c 9 b 49 f 50 a 96d 13 F2 db 32 e 432 db 363 e,
版本:1,
鎖定時間:0,
車輛識別號:[
{
coin base:0439 f 3001b 0134,
序列:4294967295
}
],
vout : [
{
值:50.01000000,
n : 0,
scriptPubKey : {
ASM:045 B3 AAA 284d 169 C5 AE 2d 20 d0b 0673468 ed 3506 aa 8 FEA 5976 ea caf 1ff 304456 f 6522 fbce 1a 646 a 24005 b 8b8e 771f 564 ca 6 c 03 e 484 a 1c 394 BF 964
十六進制:41045 B3 AAA 284d 169 C5 ae2d 20 d0b 0673468 ed 3506 aa 8 FEA 5976 eacaf 1ff 304456 f 6522 fbce 1 a 646 a 24005 b 8 b 8 e 771 a 671 f 564 ca 6 c 03 e 484 a 65438+1
reqSigs : 1,
類型:pubkey,
地址:[
1 lgztvotj 6 quncurmbuajkwwqzxkqndn
]
}
}
],
block hash:00000000000007 c 639 F2 CB 23 e 4606 a 1d 022 fa 4206353 b 9d 92 e 99 f 5144 BD 74611,
確認:145029,
時間:1301705313,
封鎖時間:1301705313
}123456789101112131415161718192021222324252627282930313233343536373 839404142434445464748495051525354555657
生成TX的輸入不是事務,而是帶有coinbase字段的結構。這個字段的值是挖這個塊的人填寫的,這是壹種“特權”:信息可以寫入貨幣系統(大家都喜歡用系統中的數據結構字段名來命名站點,比如區塊鏈、coinbase,這些詞的後綴域名都被搶註了)。中本聰在比特幣第壹筆交易中寫的coinbase值是:
coin base:04 ffff 00104455468652054696d 65732030332 f 4a 616e2f 32303039204368616e 63656 c6f 72206 f 6e 206272696 E6 b 206 f 6666207365633
把這壹段16轉換成ASCII字符,就是創世區塊著名的消息:
泰晤士報2009年1月3日財政大臣處於第二次銀行救助的邊緣
接下來是壹個有三個輸入和兩個輸出的普通事務:
# ~ bitcoind getraw transaction 028 cfae 228 f 8 a 4 b 0 CAE e9 c 566 BD 41 aed 36 BCD 237 CDC 0 EB 18f 0331d 1e 87111743 1
{
十六進制:0100000003 c 9 f 3 b 07 ebf ca 68 FD 1a 6339d 0808 fbb 013c 90 c 6095 fc 939010103489 ab 70000000008 a 47304022055 BAC 185438
txid:028 cfae 228 f 8 a 4 b 0 CAE e9 c 566 BD 41 aed 36 BCD 237 CDC 0 EB 18f 0331d 1e 87111743,
版本:1,
鎖定時間:0,
車輛識別號:[
{
txid:b79a 4803014177 ea 0139 c 95 f 09 c 6903 c 01 bb 8 f 80d 039631 AFD 68 cabf 7 EB 0 F3 c 9,
vout : 0,
scriptSig : {
ASM:3044022055 BAC 1856 ecbc 377 DD 5 e 869 b 1a 84 ed 1d 5228 c 987 b 098 c 095030 c 12431a4d 5249022055523130 a 9d 0af 5 fc 27828 ABA 43 b 464 EC b 655
十六進制:473044022055 BAC 1856 ecbc 377 DD 5 e 869 b 1a 84 ed 1d 5228 c 987 b 098 c 095030 c 12431a4d 5249022055523130 a 9d 0 af 5 fc 27828 ABA 43 b 464 ECB 6
},
序列:4294967295
},
{
txid:b79a 4803014177 ea 0139 c 95 f 09 c 6903 c 01 bb 8 f 80d 039631 AFD 68 cabf 7 EB 0 F3 c 9,
vout : 1,
scriptSig : {
ASM:304402206 b 993231 adec 55 e 6085 e 75 f 7 DC 5 ca 6 c 19e 42 e 744 CD 60 abaff 957 b 1 c 352 B3 ef 9 a 0222022 a 22 FEC 37 DFA 2c 646 c 78d 9 a 0753d 56 CB 4393 e 8d 0 b 22 DC 580 ef 1 aa 6 cccef 2。
十六進制:47304402206 b 993231 adec 55 e 6085 e 75 f 7 DC 5 ca 6 c 19 e 42 e 744 CD 60 abaff 957 b 1 c 352 B3 ef 9 a 0222022 a 22 FEC 37 DFA 2c 646 c 78d 9 a 0753d 56 CB 4393 e 8d 0 b 22 DC 580 ef 1 aa 6 cccef。
},
序列:4294967295
},
{
txid:da 30 b 272 FB 73d 78108 ff 80 DD 1ac 2 f 76419533 af 79 ad 06 a5 B3 c 70 fc 4a 62086 c 9,
vout : 1,
scriptSig : {
ASM:3045022040 a5d 957 e 087 ed 61e80f 110 bcaf 49017b 5317c 257711 a6 CBC 54 d6b 98 B6 a 8563 f 02210865448
十六進制:483045022040 a5d 957 e 087 ed 61e80f 110 bcaf 4901b 5317c 257711 a6 CBC 54 d6b 98 B6 a 8563 f 0221008658
},
序列:4294967295
}
],
vout : [
{
值:0.84000000,
n : 0,
scriptPubKey : {
ASM:OP _ DUP OP _ hash 160 634228 c 26 cf 40 a 02 a 05 db 93 F2 f 98 b 768 a 8 E0 e 61b OP _ equal verify OP _ check SIG,
十六進制:76a 914634228 c 26 cf 40 a 02 a 05 db 93 F2 f 98 b 768 A8 E0 e 61 b 88 AC,
reqSigs : 1,
類型:pubkeyhash,
地址:[
1 a3q 9 pdtr 4h 8 wpvyb 8 svpinppt 8 znbhy 8h
]
}
},
{
值:156.83000000,
n : 1,
scriptPubKey : {
ASM:OP _ DUP OP _ hash 160 7514080 ab 2 fcac 0764 de 3a 77d 10cb 790 c 71c 74 C2 OP _ equal verify OP _ check SIG,
十六進制:76a 9147514080 ab 2 fcac 0764 de 3a 77d 10cb 790 c 71c 74c 288 AC,
reqSigs : 1,
類型:pubkeyhash,
地址:[
1bg 44 fzsoteyterykc 1x hz8 facwykhgvq 8
]
}
}
],
block hash:00000000000007 c 639 F2 CB 23 e 4606 a 1d 022 fa 4206353 b 9d 92 e 99 f 5144 BD 74611,
確認:147751,
時間:1301705313,
封鎖時間:1301705313
}123456789101112131415161718192021222324252627282930313233343536373 8394041424344454647484950515253545556575859606162636465666768
字段hex記錄所有相關信息,後面是hex解析的各種字段信息。下面我們把十六進制的內容壹個壹個分解壹下(從上面可以直接看到十六進制):
01000000 //版本號,UINT32
03 // Tx輸入量,可變長度INT。三個輸入。
/* * *第壹組輸入Tx ***/
// Tx哈希,固定32字節
c 9 F3 b 07 ebf ca 68 FD 1a 6339d 0808 fbb 013c 90 c 6095 fc 93901ea 77410103489 ab 7
000000000//Tx consumed位於正向事務的第0個輸出,UINT32,固定為4個字節。
8a //簽名長度,0x8A = 138字節。
// 138字節長簽名,包含兩部分:公鑰+簽名。
47 //簽名長度,0x47 = 71字節。
3044022055 BAC 1856 ecbc 377 dd5 e 869 b 1a 84 ed 1d 5228 c 987 b 098 c 095030 c 12431a4d 5249022055523130 a 9d 0a F5 fc 27828 ABA 43 b 464 ECB 65438
41 //公鑰長度,0x41 = 65字節。
048 aefd 78 BBA 80 e 2d 1686225 b 755 da CEA 890 c9ca 1be 10ec 98173d 7d 5 F2 fefbbf 881a6e 918f 3 b 051f 8 AAAA aa3 FCC 18 bbf 65097 ce 8d 30 da 7 e 5 e 5 ef 88
Ffffffff //序列,0xffffffff = 4294967295,UINT32,固定4字節。
/* * *第二組輸入Tx。按照與上面相同的方式,分解* * */
c 9 F3 b 07 ebf ca 68 FD 1a 6339d 0808 fbb 013c 90 c 6095 fc 93901ea 77410103489 ab 701000008 a 47304402206 b 993231 adec 55 e 6085 e 75 f
/* * *第三組InputTx * * *
c 98620 a 6 c 40 fc 7 B3 a 506 ad 79 af 339541762 facd 1 DD 80 ff 0881d 773 FB 72 b 230 da 010000008 b 483045022040 a5d 957 e 087 ed 61 e 80 f 1165438
02 // Tx輸出數量,可變長度INT。兩個輸出。
/* * *第壹組輸出* * *
00bd 01050000000//貨幣值輸出,UINT64,8字節。字節順序需要反過來,~ = 0x 00000000501bd 00 = 840000000 Satoshi。
19 //輸出目的地