Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
117 0 0
简介
+ B- B' e$ r( u0 i! _6 P) `交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。
1 S7 \7 j- Y! U& r类型" P4 L% Q6 o8 |
交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。* R. N( q( a7 K5 L  u! l
Generation TX8 t9 b, h! r* B( H' P+ ]
每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
0 H1 @7 t  e. d% @$ p, fScript Hash TX! ~8 Z9 `! E. n2 B' i2 }0 m
该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。5 D1 h9 @  c+ V9 A& y) P
Pubkey Hash TX
1 }1 A1 R5 C  {1 O0 I2 s该类是最常见的交易类型,由N个输入、M个输出构成。& y4 D" h( J! E& ^: m
数据结构
9 b1 q# ?9 o* {交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。& A0 }8 m% h* U7 p. x
, A8 D9 q/ E# q( I4 H
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。7 \! ~4 c) @7 g! k* q: Q+ }

" p2 \+ F  a6 ^) Q4 {( z+ s- C若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
+ P$ {- J. [4 H4 F示例
9 F% q- p: [; k% n) p# z2 n为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
# p$ P3 y) C; ~4 u+ E# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           
0 V( s' i# N5 B" @9 E/ Z{2 X7 G0 b  w# o' a& w
    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",7 q# ^5 s8 H7 t! u" r: e, ?
    "confirmations" : 144667,
# J9 k! D& s8 N- n$ m0 _    "size" : 1536,, r9 F% f. {' S1 q8 Q& F- v+ w
    "height" : 116219,. y% f- [: {/ Z6 i
    "version" : 1,
% n0 N  P8 b: w' [9 Y9 X    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",
" c* I7 z  U! h$ c2 u    "tx" : [& H$ Z( L+ g0 q/ r1 d/ x
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
  R) P8 c. K8 D4 D* Q( w        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",
6 G- W3 v: K+ R$ i/ |& [! X9 A        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
9 ]7 ?2 u) \6 W        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
( Q2 o$ n0 V9 f0 r6 e( n        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
! T5 T6 }( p& H; I# c- Q, X3 X    ],9 f* h1 u3 M9 a! ]
    "time" : 1301705313,
- {7 K" ]# Z+ c- S2 Z9 @  E    "nonce" : 1826107553,
. A5 o% z4 n/ |' K0 D: |/ s    "bits" : "1b00f339",; `9 w- ]( J; N) V0 M" X
    "difficulty" : 68977.78463021,
6 E# T. O7 a) `% g    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",
* q" I: [2 B! c+ v    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"# D( O0 l/ o6 H
}- V3 ^" R' y" g" N
该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:
& S" A. s  C; V# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1( L6 N' g5 p( I% o  k7 X
{* }: R& A& t1 Q. ]# Q
    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",, R$ ]- S6 |. ]
    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",) ^' \; Y" `, t( O* Z
    "version" : 1,/ I5 ^. i/ f/ ^' V9 l3 \  K1 x) T
    "locktime" : 0,
1 G0 c- G/ o$ S& p# |: }4 S    "vin" : [9 t2 C, c! |8 [# T4 u0 y& {' W
        {, Z' c" K+ F1 Y7 C- b  T( H) b, P
            "coinbase" : "0439f3001b0134",
" @* B& c! N) n! ~            "sequence" : 4294967295  _3 n7 G) E! o( ~, ?
        }& J" l  m  S- `* s' X! Y, U
    ],
  j' W3 y: \( y& ~3 _; K8 [    "vout" : [
0 |. x) H' l& ~4 N; \8 f' D        {
5 E: I4 M# I% c' B6 H            "value" : 50.01000000,. A2 i" j. ^5 F* A1 p6 j
            "n" : 0,
. E: P2 E3 X' U+ p            "scriptPubKey" : {
! D% r  C! k' Z2 R6 ~+ k                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",# S/ B  z, j. _' g4 Q) L9 ?# A* U
                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",2 e2 U4 U7 R+ Z+ A  u/ A& h  \# z$ H
                "reqSigs" : 1,/ J8 d, j  d  n' Y7 ~$ B
                "type" : "pubkey",
. ?. i  f1 K! Z2 f9 ~  v                "addresses" : [; K7 @! B- v* Q: F( E; g
                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"! h% J3 S2 Z1 O
                ]0 z1 L( }9 d' O8 |# _4 _
            }
7 F; c# s" Z  R& I4 i, p6 F        }5 W* R5 d+ G, X
    ],
- W0 E3 D# F, V0 Z3 _    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
8 j8 Y  I* B$ k" c8 e. T0 v- S    "confirmations" : 145029,
; I; s  }' B5 y/ P$ n    "time" : 1301705313,
) z# n5 |5 ?& @9 ~# o' N4 @    "blocktime" : 1301705313/ F$ j/ P+ k7 A" \" I; d
}
+ [6 m3 ^* r& }3 Z3 k/ n4 u/ nGeneration TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:# X0 u0 k; {) Y
"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
7 z. k2 [: e+ m9 C- N& h1 l1 t9 m将该段16进制转换为ASCII字符,就是那段著名的创世块留言:
+ C, j) V1 i& B" h% BThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks
% X# f3 @7 f% f# ?+ y6 Z) e接下来展示的是一个三个输入、两个输出的普通交易:* T' ]; T$ q9 w- ~1 V7 ]7 P
# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 14 S6 W& N3 i' f) E% C2 x1 F; ^
{3 P- N% F! r8 h6 p( }- q- y
    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",% k9 O2 ~: o7 A1 v
    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
2 S# I! I& P& b5 Z    "version" : 1,
/ ^" n& l6 W4 m0 k; D) |* L3 L    "locktime" : 0,
" U' A; D* B+ o( s7 Y    "vin" : [
/ f  B) g' D7 s- X! c( M) N) i        {1 k2 q$ C/ g9 H, K, ^
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
. R+ c% r" P# L6 X            "vout" : 0,
7 |: b# P& Z" i2 P" X6 E8 k- f            "scriptSig" : {
* q  o' Q; {6 w) S/ ]" s. L                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
; I  ~& }8 X% f, ?3 ^' U                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
1 F* O/ b0 {- p8 T2 B1 v8 }            },7 o% |. u' Q" m# m1 Y' T0 L- F) h
            "sequence" : 42949672954 v7 J* ~6 m& T6 W0 W2 L0 `
        },
/ j) O8 }$ f: D8 s1 j        {
3 I# `$ n: f1 _            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",. w6 q! e4 M7 v& x+ x/ F% \
            "vout" : 1,
' b! X4 m. ?& Q+ r- M            "scriptSig" : {
, }8 v) b% [7 B* z% R                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
- q- n1 I! @" \7 M* l                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"6 c3 G1 }  t5 Q! ~
            },
3 u5 A1 S% K: l, F! [            "sequence" : 4294967295# `4 a; _. h0 z* Q5 |: s
        },
, ?8 R6 ^8 X5 M( P- C4 n        {
- D9 ^# F2 c8 S' M$ H- x/ B) h            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",3 K* V2 A9 a' `6 a8 T2 g
            "vout" : 1,8 j" |" W7 ]' S- F) M1 d
            "scriptSig" : {
8 g, o9 N/ v; t& t, j% v                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",* o0 n6 {  q' C, Z  L
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
. b3 B9 V0 L$ L- U: V            },
" N0 D# @9 P4 b+ P; [* o- M8 [$ _            "sequence" : 4294967295
% Z' b) H/ Q  `/ H        }, q5 m2 H& U8 k( f
    ],! k' i1 e# E: e% q3 s4 G  H6 ?/ x6 Q
    "vout" : [
0 z& T% _+ }( n; g6 V        {. M1 A9 D3 u  l- b' j
            "value" : 0.84000000,
( l& X& L; X3 D& e            "n" : 0,0 a- E; t4 N8 I2 p5 j
            "scriptPubKey" : {
+ q% y" k9 ^! d9 W: Z4 I                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",
; o) ^0 m+ g9 A5 I; u                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",
" y$ b5 q$ h+ m$ Y! R# T0 U                "reqSigs" : 1,& h; g' }- U6 r' a* y( ~4 |
                "type" : "pubkeyhash",
5 U) [. h  K: z( T                "addresses" : [9 m/ {* ^5 }5 B6 Y
                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h") K4 f+ S; O5 e0 L0 N
                ]/ C& ^0 F* b+ U  L, G( ]
            }
4 g  j. f. K& T' ~& k. q4 D5 h        },
# U% q6 Y0 h  ^1 s        {# A# u$ w/ d; n; W+ ~3 _6 v
            "value" : 156.83000000,
) `$ b3 L1 G+ e9 c0 D( x( `% u            "n" : 1,
6 L+ b7 U+ O! J4 Q) a& x- |# t            "scriptPubKey" : {5 o0 \' m, x/ y0 t- i/ @& h
                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",
$ \9 J7 O; B& m0 O7 G9 f, B' @                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",
' {' X5 J( e% i5 w                "reqSigs" : 1,( J1 j% H+ S7 ]: q! ~2 u
                "type" : "pubkeyhash",
% r3 U  @8 k% Z- u2 f                "addresses" : [! b# }# ]+ A4 u2 w& G! A: Q% G! g
                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"1 f( }) p' Z' n) h/ R
                ]
' w9 S. E0 ]' ]& E6 g% |            }9 L4 `5 k& b6 q" M/ I, E
        }, v; a0 r6 X0 n- a% d' B
    ],
2 P8 s. G  o; e/ ~    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",: ?3 Z8 \8 g2 S
    "confirmations" : 147751,6 R' I5 \1 a# O. q& K
    "time" : 1301705313,' B- @% g$ ~5 S# M8 y7 ~/ K+ z
    "blocktime" : 13017053137 T1 ]- M( Z9 i5 W( F* E. f3 r# X6 L, N
}- X# i9 Q- }5 P+ e5 |
字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):
0 v0 j9 P! o$ t! H; ^. _) m; `01000000   // 版本号,UINT32
5 Y0 z6 G1 k( F# R03         // Tx输入数量,变长INT。3个输入。' O, w% {  N" w8 Q( U. K+ B
/*** 第一组Input Tx ***/
8 [+ T  x7 ~3 O* q$ h9 }0 n% b  F// Tx Hash,固定32字节
1 W% W0 O2 M* i4 B6 qc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
" M* a5 m& m# |6 S& W00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节4 y9 ]4 W7 t$ [) }; p; k
8a        // 签名的长度, 0x8A = 138字节
4 j, l; s3 y/ `8 D9 Q// 138字节长度的签名,含有两个部分:公钥+签名6 u5 q8 l) q2 @1 I* O- b
47       // 签名长度,0x47 = 71字节  M3 g& S( H4 S5 o5 Y- U
3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01
1 K3 D* _8 M" e7 ?. z6 p8 o) `41       // 公钥长度,0x41 = 65字节
, O& U( c& f7 T) L048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe- f3 {" ?* u8 n0 ^& I- f
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
& ?* G, J) h( D0 n! p& R0 {* x+ X/*** 第二组Input Tx。与上同理,省略分解 ***/: `7 F! |# M; P! Y" w1 Q. i
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
( B) I9 {. i" T; H: N2 t* R/*** 第三组Input Tx ***/) N/ D* @4 j: O# V8 c
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
8 ?# l1 I/ f+ U& g02  // Tx输出数量,变长INT。两个输出。
3 C- _) q  E, L$ ]/*** 第一组输出 ***/
4 ~  ]# g$ S. b! v00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi
9 D+ L$ i  _( @5 O19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成* ?( o  Q" Z  ]) L7 h
// 目标地址
2 [, g4 ~) v5 U/ v9 L5 l// 0x76 -> OP_DUP(stack ops)8 r2 n5 R; Z! s4 K8 f: e
// 0xa9 -> OP_HASH160(crypto)
/ X: W/ n4 r  U7 f$ [! \9 I  X// 0x14 -> 长度,0x14 = 20字节) ^0 g7 f& O  U  H" \9 H  `) s
76 a9 14 $ F9 S: D4 \$ N( R/ p" T* a0 W" \
// 地址的HASH160值,20字节& F" h( d6 Q! M' B* d: M) [
634228c26cf40a02a05db93f2f98b768a8e0e61b 2 K( ^9 ^; z; {# r4 C8 f  c8 f
// 0x88 -> OP_EQUALVERIFY(bit logic)& d5 r4 n- q% G0 Y) o0 k, O; i
// 0xac -> OP_CHECKSIG(crypto)
# V* d7 B3 ^! `1 V& r7 J88 ac
9 N/ m5 A5 Z( \1 o, c; V4 Y/*** 第二组输出 ***/" V/ f5 N. ~: y8 H. C
c096c7a6030000005 h! C7 [( P8 X8 E0 U( S
19. D5 A, V0 _; t+ R" A( w7 p
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac% g) Z% ?1 ?8 P+ a
00000000  // lock_time,UINT32,固定4字节
9 S8 v3 u* k& M; M4 Y  l# _- PTx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。
$ B8 T5 D' H, `0 O即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
) w3 e7 o) h7 g: ]! X) n0 L4 m9 S; t
qq20131027-2( O+ b# a) e; M1 I0 e1 c. ~
交易签名/ _: ^4 p1 {$ r
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。5 H$ u  V+ U& x! p4 }  Q4 v/ n6 W
签名类型
5 E8 h& p! [( [0 W6 R由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。' {1 B  A9 w+ ~$ a# D
SIGHASH_ALL
0 w0 _/ |  h5 h3 B' Z' o该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。
$ i0 ^  e6 B$ K7 A* n! j! oSIGHASH_NONE
9 h% a  I# k" E5 Z/ r9 H$ V1 ~该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
/ v- V# ]) x  _1 w7 PSIGHASH_SINGLE
; Y# W7 @, p4 x7 ^% K" B$ C( b6 @该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。( ^/ _# y- C" F  _" @2 d
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5