Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
204 0 0
简介
6 q' `9 \' ~% o9 W. T交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。
& p& f1 N+ G3 e. X- V! `: l' B类型, _3 {* E  D6 `# q1 J5 ]
交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
2 b2 d; ~9 `, m6 Q4 W# rGeneration TX) [  X) ]% ~/ Q" k6 W; S- _/ J% Y
每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。/ ^$ s% Z: f4 z# e/ s8 A  |
Script Hash TX
. }# j6 m8 [7 j5 T5 S  T# C) I该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
1 E6 t+ v' V2 pPubkey Hash TX" V% W  N6 @% ?
该类是最常见的交易类型,由N个输入、M个输出构成。& G: B' H4 q) {& c5 D) K
数据结构
) @3 F( ]7 e0 _! H& }) {- A  s7 [" X交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。
2 s  P, a+ s: ~  M0 a: Q
/ [$ J! W  }0 Ilock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。9 A" w* G* k! K2 T7 i9 q

; A# u" @! I2 ~/ ~" C8 U若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。" O7 A9 [3 t0 H# E0 |
示例; B. O% }- a2 ~% m8 ^# T
为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。2 h7 q1 D* `: W1 R0 _9 m- G
# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           " F6 H  o9 k4 }
{
' C3 G$ [; \  Q- S' a' c3 ^& X+ {    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
. K$ r' g7 M  N6 D9 n9 I: V    "confirmations" : 144667,) t" ~' j, j1 {* `3 K
    "size" : 1536,
# p3 ~* I+ A5 [4 U' o7 i    "height" : 116219,
, L4 ~6 X# U6 e; W2 Z! x/ Y    "version" : 1,
, V4 A' D& |8 B: q6 R6 o  i    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",) h( t. o! a. O/ |  S
    "tx" : [: j/ x' C: u* S3 m0 O( @/ |
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",& ]3 z: ^) R# ^4 V  O5 z
        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",
0 Q, G$ y; z0 ~8 @9 J/ i, u* s        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
. i! o; F( f, G$ U7 M1 I8 R        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
) V% h3 H8 f0 }: Q  }        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
3 R. I5 I5 @. L  o& `    ],
1 ~! [! g3 d. a; S6 y' ^    "time" : 1301705313,
! s- l8 F' d5 m4 B    "nonce" : 1826107553,
; M" M& j5 H- u) i, J& S7 w    "bits" : "1b00f339",
4 ?. H% f2 n4 I- h- C' z$ b9 O: t1 q1 ]    "difficulty" : 68977.78463021,
, ^$ U* i+ p1 _, n/ X8 ~    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",# n1 ]0 f; B$ \' j2 r. Q
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"
8 D- P$ U% G. l# g3 L! N0 r}
) M3 W' m/ W  ^" e4 u该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:% U8 r. N& j3 c9 {
# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 15 R8 @" E1 D* ]
{) X& B9 ?+ ^0 Z( _8 A
    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",
! ^) d( A( A& x- f7 t9 c    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
% n. M1 Y6 I+ o- @    "version" : 1,
1 `: X" L% j% {# J4 B1 c5 p    "locktime" : 0,. j/ Q* j5 Z; l2 ~5 |: R
    "vin" : [7 `- L+ H' c$ e  H8 F: n+ F6 v
        {, Z- R$ k/ v8 M" N
            "coinbase" : "0439f3001b0134",
7 P! ~) O7 P; `/ }, }, [1 l            "sequence" : 4294967295
" q& h% x& N; z  L        }
# R0 E7 ?% C; N/ D& R' c% G/ n    ],4 S6 e' Z2 i4 i0 z. F% a
    "vout" : [# w* s  b( e2 {, `* ?/ r8 U4 \; ~& L
        {7 j4 T- u4 L$ R; I
            "value" : 50.01000000,, _; _8 _$ e/ m5 p# `) ]. D! A
            "n" : 0,
4 z; z5 ?% w  C# B1 R: Q& c            "scriptPubKey" : {" A5 Q* K! {( J5 |+ M" R4 h
                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",# Q+ h) V, o" p  K  d- Y7 H2 |+ ~
                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",
0 d# J8 u+ \6 @( w+ Y                "reqSigs" : 1,
+ f) f' l2 p, f- i. u$ n- v* r* L8 |                "type" : "pubkey",
: o! f$ r. L4 r- X; @7 g' E; M                "addresses" : [
, w, U4 z8 ^% e% L                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"5 H1 U2 g+ l/ b
                ]8 S: N( P) p% @, x
            }
, C) ]8 n6 m+ G( S7 u) E* k5 P8 u        }
5 j% [6 i9 [+ {) b1 z* F  O: A    ],! P; u* w' d% `' ?4 L* ]  h
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",/ h$ h7 Q! I) T4 A4 k5 k9 h' x
    "confirmations" : 145029,$ z1 {" D' I1 T
    "time" : 1301705313,
, D/ k. J  s4 W0 k7 Y; n* W    "blocktime" : 1301705313
6 t1 r( O1 R, o( j}4 M. r1 {2 B/ `* t$ C- M
Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:* B& |5 d  B( I5 Z+ ?
"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"1 U5 y; t# V; a+ B+ V
将该段16进制转换为ASCII字符,就是那段著名的创世块留言:, w. C4 F+ ~1 w$ H- U2 N9 l4 n
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks+ w8 U6 h" G3 T+ L7 Y, X' Y; j
接下来展示的是一个三个输入、两个输出的普通交易:
8 J1 [9 ?0 `9 T# i6 ~- y# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
1 W; P) r# e4 K$ T0 q{
) U$ C! I6 k6 O. c0 M    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",
! R! D! L) q& L- i3 Y# M+ o    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
0 n# Z. ]2 U, m" w    "version" : 1,/ b3 l3 ]  G" I: @: ]/ r- ~
    "locktime" : 0,2 ^3 Q: k# f2 Z3 v; |# T& R, x
    "vin" : [/ c1 Z2 B3 Q4 G) c! o6 Y
        {, x  r0 X( ?) x3 h" V! d0 V2 V
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",, H! R1 k# f; j/ Q
            "vout" : 0,
- Y2 [' {# |: }: q$ r+ Z* ~            "scriptSig" : {
5 R, }2 J2 r% w) M                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",7 `# S6 B+ g# G1 h. ~9 t) _9 ^
                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
' J9 J5 C. i0 n* f" [5 Q            },
5 `# @8 x2 t, o* _& C- L            "sequence" : 42949672950 m' ]; p: s0 T8 j8 G& `) K7 H
        },
  b( S6 n! W; e9 D; k6 u3 b) O% |4 u        {
* d" a6 r4 r: f* N            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
- k/ |) s1 T2 @+ Z( z            "vout" : 1,2 R! e6 z8 R/ b5 z, M5 W7 |
            "scriptSig" : {  w2 ^2 s8 |9 z/ w' \
                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
4 Q2 C& X, Y4 N) e- P1 I                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"8 k: a9 U: R3 W1 I4 w3 W, s
            },
. f) m5 d4 [7 P4 v; |            "sequence" : 42949672959 D; c$ r! j% {; B5 c. A" J
        },7 h; r. o' C4 M* B7 G% d
        {# m" G2 B6 b6 c7 v; E6 v2 Z; `" F
            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
7 x! d" V6 i' g. J0 u" ^- P8 i            "vout" : 1,
/ ]! J8 B% C4 I3 @$ G' Z            "scriptSig" : {4 K0 F" U( Z* F. R% n+ j7 D' j
                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",5 k! p) Z1 ?  G
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
4 T4 h6 b; p/ ]            },
0 C* `3 k/ d8 {- k4 ~% Y; p2 h            "sequence" : 42949672957 j% X8 T8 _5 n' w4 B3 r
        }; g5 @: b6 m! s5 T0 x$ u7 x" p
    ],4 ^! j- I8 D! f+ \) G! S( |! r
    "vout" : [
) @1 p% G6 m6 s3 |        {- d6 Z- c; L( h+ `. D+ B* x# M8 X
            "value" : 0.84000000,
& X5 V* @1 A5 R, [  L9 z$ [            "n" : 0,
$ ~. a7 P" N  L% B' l% y            "scriptPubKey" : {! q' ?" u8 w) l* x+ |1 x
                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",
9 z# j( U1 M6 O9 E# k: W                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",1 ?7 v5 S5 B' y! U2 m4 u3 ]
                "reqSigs" : 1,
, a4 j" G  H( C* z                "type" : "pubkeyhash",
+ }5 s% f! w4 ~1 G                "addresses" : [, N" q$ D8 V7 ^. J; `. A. T- b! F' j+ {
                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"* i0 ?% d& z1 K% a% `; |# M" Z4 o
                ]1 y* N. X% ~: N
            }
7 `8 r5 n& f0 m! R* t        },
8 n: a9 b+ A: f: u9 ~0 ?+ _* R        {
( q3 i) |( Q+ v( q            "value" : 156.83000000,1 P& [! b& a: T6 B
            "n" : 1,$ i$ L8 A1 c$ s. I! a' U# h' k
            "scriptPubKey" : {. B7 n+ R' G* P1 i
                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",) L/ e( E! M8 \, I$ X$ Q# A! U
                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",( T& s$ p4 p" G, a( d" w7 j
                "reqSigs" : 1,
; F6 G( y9 F+ V& W                "type" : "pubkeyhash",. }# e) W+ T7 u  }- g3 Q
                "addresses" : [
- _% @# T* U" N. R                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8". P% s1 Q/ m/ F* i# d! G( ~
                ]
' G1 c% _$ T# @0 }0 C            }( }) S; g* g4 U* _# B+ k' g) N! Z
        }5 ?* A! \$ z8 r$ z4 ]+ ?  Z
    ],- @' `: `* w  }# q0 P
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",% t9 e3 i  N0 Q0 R5 C9 o7 J4 U
    "confirmations" : 147751,2 f2 `8 |) x" u
    "time" : 1301705313,
# t0 H% N  A' n    "blocktime" : 1301705313
2 U1 z5 g# N/ l# T}
8 }! q+ g2 H9 ?/ f+ d字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):1 |/ U' B. F$ ]5 p% g( k
01000000   // 版本号,UINT32& }: a, Y6 Q) V) [: j
03         // Tx输入数量,变长INT。3个输入。
" s) ?: M9 l  V) Y9 F/*** 第一组Input Tx ***/
) z5 ?4 s0 o( D4 e4 n- T1 @// Tx Hash,固定32字节
' ~. j% F) @" X! ]8 B/ Hc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7: Q( Z# g/ J( S' b& \
00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节
. m% P8 _) s6 O" v$ S1 ~8a        // 签名的长度, 0x8A = 138字节
* B5 Z) p* S6 [8 W: e// 138字节长度的签名,含有两个部分:公钥+签名
9 C$ b! l- U8 ~; d: W: F47       // 签名长度,0x47 = 71字节
+ S; D* \/ C# Z9 B* x3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01& F7 k( M$ m2 m
41       // 公钥长度,0x41 = 65字节
2 k! q' G$ b: L( ]048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe6 ~: \, }- O" @2 i' v& X; Q
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
. X+ M  O% Y/ i/*** 第二组Input Tx。与上同理,省略分解 ***/
7 C. F$ r% H  e1 @7 P" ec9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
. _5 v* ^0 L" Z8 R' i7 ~/*** 第三组Input Tx ***/
/ ]7 S( L9 @: T* s. \2 G" S! E5 f, gc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff1 m- ?4 N. x' P& r; P$ Z
02  // Tx输出数量,变长INT。两个输出。/ {/ y* A( {2 `9 X1 c
/*** 第一组输出 ***/
; g6 {8 }" \1 E7 H. ]00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi; m( F: S$ f/ q7 j. O
19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成1 D8 `) |, o  D: h( z1 z/ B
// 目标地址$ Y9 L5 C' M; }! T" l
// 0x76 -> OP_DUP(stack ops)
$ m4 W; f% X& o# a// 0xa9 -> OP_HASH160(crypto)
6 O( _& ~) s  I9 X( Y6 B3 D// 0x14 -> 长度,0x14 = 20字节
. i0 N  M9 I) f76 a9 14 4 _" c; ^1 z, y( F! F( O
// 地址的HASH160值,20字节/ d9 _: t: Y2 `' ]! N
634228c26cf40a02a05db93f2f98b768a8e0e61b
4 R: ?4 d6 R# H4 ]  W% l// 0x88 -> OP_EQUALVERIFY(bit logic)
3 P# J& T/ i2 N" }& ~; T// 0xac -> OP_CHECKSIG(crypto)
1 i8 ~* ~; H: @" F2 e) R" A* ]88 ac
1 D3 p  R  G3 a/*** 第二组输出 ***/6 y/ z5 r( X9 u* x* U
c096c7a603000000
& h$ i0 d3 ]' Z$ {" C8 U6 D19
* e6 o7 u* G6 i76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac
5 l9 D4 n, g0 g4 T$ c8 C00000000  // lock_time,UINT32,固定4字节
! Q* B: [8 a$ c( wTx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。1 i- o2 m' |6 M2 `! z& M
即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
( @% F" T. [6 H; }+ q% `7 R  w. j' Z
qq20131027-23 P* `4 B. _, B) z
交易签名
# o" F9 z! {7 o  K% |# t1 c: ^签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。
2 z" T. n4 _# G; y- [签名类型: N1 M4 h0 o2 k1 c  u
由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。
" F1 z: A3 n% K6 FSIGHASH_ALL* H& L, I+ r  c
该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。
( b3 X3 s) ^2 V+ Q: y1 L' [SIGHASH_NONE( i, K1 I  U0 a- Q6 ^
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。5 @7 e; {$ o6 j: _  c
SIGHASH_SINGLE" j  S+ g% ^6 ~/ }* J% Z( X6 T: O
该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。1 W& E5 z. y9 g4 D/ L# N
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5