Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
112 0 0
简介, E1 ~0 z9 s. z4 {; t' A/ A
交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。# p. t3 l9 t2 j4 e
类型  g3 x% v# k' c- l3 j8 W
交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
0 f& Q( P% A' p5 p7 F0 V1 j( `* }9 qGeneration TX
% G4 M$ t" T% s1 S* J% O, N# @每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
: l: V+ }. G) T& {9 g+ G) MScript Hash TX
2 k2 J( y& |! [2 p0 p, ?' j3 v该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
' h0 k  f+ Y3 I& N8 qPubkey Hash TX4 G* {0 X5 Q( J; G
该类是最常见的交易类型,由N个输入、M个输出构成。2 b; ]1 I1 b0 k7 x5 t
数据结构4 H8 Z5 @% b' _
交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。
) [, W. y' z- P. r# W  P3 r% C
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。- q# n" \1 U  Z# [7 g" _' n

8 C& G* S2 c8 {  B若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
& [+ h; t0 r1 p$ R示例
! T5 T+ f/ p' w$ u+ V" @为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。, c* O$ r+ b! w  H, V" M
# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           ; s$ b( G% n: i# s5 ~
{
) Q$ n$ l- N, J* C    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
5 m6 M( P7 I) O9 s    "confirmations" : 144667,
) _  \- e; {, z& `% h, I# h; s    "size" : 1536," ~& A: Y) P4 T3 P4 v9 h4 b
    "height" : 116219,
$ D% ], R) J+ ?' N& L/ \4 p# l    "version" : 1,
$ z- J( }- J/ W2 Q: r9 q8 m    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",
/ Q9 h) I! S& T9 n    "tx" : [4 A: `3 f% C- b3 l. W' d# @
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
4 f% q6 g  o" D4 E% c' ^& `        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",+ Z, {% }, {& |$ J
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
4 ]* n5 u. u$ H( X        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
5 w% O, B: o7 y' ]5 f: p, E        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"  Z' m# ]8 c: q: b* F, W
    ],3 `# S% Z! C  n! F6 D, I. b
    "time" : 1301705313,& R; Y2 c- M; ], }" g( q4 ]
    "nonce" : 1826107553,
6 Y& V4 N/ m" A  D    "bits" : "1b00f339",
; e7 V. q0 e. I+ f8 Q6 _    "difficulty" : 68977.78463021,  m4 Q1 Q) U' d# J
    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",
) n* n9 o: F1 P5 c3 R: F: a" N    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"
. n- V. }4 c6 m7 t( o( }/ A9 b1 F}
/ E" ?1 V; j# `/ Z6 L1 `该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:+ ]8 X  `1 k4 L  r
# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
  O/ S. V4 a4 h& j{
* b2 D) f  C! Q: k# r6 c; O; Z& O    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",
# u4 H- m1 C0 S8 W! H! _. Z, P. h5 l    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",! H, X; R$ R  N% j, {/ n" r
    "version" : 1,, B* i3 n; w; F3 ^
    "locktime" : 0,! k2 b- r* e% {1 D, z$ P
    "vin" : [
, Q# M8 o$ P3 M5 D; B- [        {3 y- \9 W8 T; ~$ K
            "coinbase" : "0439f3001b0134",  z, B" ]" U- @! `+ A8 \1 R8 @
            "sequence" : 4294967295
/ [/ d+ x# `, l) r  u        }, v6 z. |7 s: D) ^* F, o4 a7 ~+ a
    ]," u0 M) j! s; o. u& P- R$ e
    "vout" : [
7 f5 y. V! E- \$ s" f* Y; ]        {
. k. s  h$ J4 _+ O            "value" : 50.01000000,: w: {. \/ r) ?5 w
            "n" : 0,
6 `6 Y+ F  B9 ?, \3 L" J            "scriptPubKey" : {1 E1 k$ B1 X. w9 |1 ~3 _3 m
                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG"," T+ _1 X* J  p# F" K2 n* e  ?
                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",. c: z! m! ?6 D" J! g9 `1 q
                "reqSigs" : 1,
4 n" R+ v, C3 ?/ p                "type" : "pubkey",0 Q; |- h5 C# q6 @# _7 C% v9 @
                "addresses" : [
6 l+ I- c* R/ d$ R                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"  e& q! w8 x. _# k! M$ B' J" c
                ]
0 Y' Y+ Q9 Y4 o& V3 k" z            }
, y) t5 A( i* W( y( P# P        }3 o; P2 \- b' J5 b0 y4 p
    ],0 g- b" |$ C- E" F
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
4 a' q/ f9 q8 ?4 r/ j    "confirmations" : 145029,7 S; m- e8 J/ b, ]( i
    "time" : 1301705313,1 K0 u7 ]$ r/ o: I+ |. @
    "blocktime" : 1301705313
1 u5 P0 _! D2 E) `3 Z}0 c# j! `: L2 J3 `1 v
Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:
8 Z& f1 B0 K0 B1 C"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
6 X2 ^9 `, w3 m* i: W+ Z将该段16进制转换为ASCII字符,就是那段著名的创世块留言:7 b/ m% V5 |8 E
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks' k7 G2 Q' o& _3 \; G
接下来展示的是一个三个输入、两个输出的普通交易:
) T- n- B% h% r' Y! g  M# ^# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 14 k# t8 E6 [4 k3 i3 H$ R
{
. Z& s' y3 G8 x4 f    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",
2 f7 [: ^+ F1 Y2 A4 j    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",+ m0 }! p: W: Q7 d
    "version" : 1,2 _; _2 j. z- X  p& H
    "locktime" : 0,( s% t# z; m: ?" o% k
    "vin" : [& A! s6 A8 }3 b/ P/ `5 m
        {+ l0 I" v) o1 H- D4 R  I$ M
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",( g- V$ n" T; W1 d9 p
            "vout" : 0,
8 U. f0 S8 p$ g+ g8 y* X            "scriptSig" : {
5 p" p: u' D9 w4 G+ `" T                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",7 |2 ], T6 M3 ?  \( S5 B$ y$ ?
                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
4 F* e* [( a" w* z2 T/ K1 W2 t& A            },; l7 p& `; W/ t  J
            "sequence" : 42949672955 b! ?8 m; k( ], Z0 G, z
        },& Z3 }. g: Y) G) `6 ?) [
        {; N: p" l- W1 F2 Z0 f5 A# _
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",4 T. i2 Y. R. {' ^% J. \% M- J! a% B
            "vout" : 1,( F& ]+ G( P0 @$ h/ I  C/ J2 w
            "scriptSig" : {
% Z0 y1 z4 K% [9 l4 L                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
0 ~( E& A$ U* J1 X# Q' j: n. L" V                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"
5 ]! a$ r0 P6 Q! s            },' A+ U  |7 c: O. Z
            "sequence" : 42949672954 d3 h/ N& n; Y# Y3 O, H0 q
        },
  m' O; j% l7 W        {% @6 M) F8 i1 i% Y8 I4 p1 i2 n/ ]
            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
1 |$ o1 M9 O* T% [7 a7 W+ U7 x            "vout" : 1,  Q  m$ N: p* u, l
            "scriptSig" : {1 t" o# S1 x- t7 M6 J
                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",$ r3 R  R6 ~. i) n4 |9 f2 {
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
, K8 e3 g. T6 m% l. t4 T% ]& P            },5 H$ h0 d3 H& p% F" f" M
            "sequence" : 4294967295
* b6 }( d6 p/ g        }1 \* A% q4 e" Y  g
    ],% f( t0 p& [4 s  I
    "vout" : [3 s3 r- T; Y- ?9 |2 i
        {  D) b; u* F# P" P' y( w
            "value" : 0.84000000,* {$ i- x4 A/ n5 N4 _: w
            "n" : 0,2 ~( R+ H" k; v; L2 d. q$ h+ U
            "scriptPubKey" : {
0 y% F; {# O, R  ~                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",6 F$ d$ S- l1 j( C, j4 X
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",; G* ]6 H, K- w# P4 F9 Y6 ?% K
                "reqSigs" : 1,' H# B- v* q" x
                "type" : "pubkeyhash",
2 l) D" W- _" F4 l2 m" |! M                "addresses" : [
3 a) I5 h+ I. `% M                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"$ ^, s+ r6 ?; o4 }3 z! w4 n5 s) g
                ]
' ~$ y; B& N% p7 m& a' d8 P            }6 t8 U1 t* c# P8 _2 f
        },! u( `7 k% G% w4 Z' ~
        {
4 \+ P7 \! f1 K            "value" : 156.83000000,
& Z' E  ^% u" u8 ~* P            "n" : 1,
7 a# K- u5 ~; O            "scriptPubKey" : {
) Z" Q9 l+ @2 p9 ^& }% ^& u                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG"," v, s+ H: h& o/ Q$ A5 K+ J5 W2 u
                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",
& c/ G! l) V3 N+ [- t5 u7 v                "reqSigs" : 1,  J" S, v6 L% I0 v3 P
                "type" : "pubkeyhash",4 l$ X$ c( {" \; W
                "addresses" : [
7 [0 y) Q( @+ P* G                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8": N; c* m" h  F. R! Z
                ]% ^; W; T) e$ {8 N  a. R, l7 h
            }
) z1 ~: Q! c) [6 m5 R        }
) v* |9 }% u' `' z, M0 U    ],, `# S; a" ]# ?9 U  s
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
% v% J. B; _& R, i; U    "confirmations" : 147751,
4 N* c/ ?/ Z+ q2 h  {/ e3 h    "time" : 1301705313,
! u5 b7 f# m5 o' O& H' N    "blocktime" : 1301705313
/ `6 m  d1 d" m4 [1 e* ?0 Z  S}
4 T: _0 J: D. ~7 ?8 O% H7 ~/ @0 q字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):
- w. [. T( t2 z$ d; p2 D/ i& B01000000   // 版本号,UINT323 R( s. m! D' P. M2 y% w
03         // Tx输入数量,变长INT。3个输入。
# E# X; C" F6 {5 e/*** 第一组Input Tx ***/8 T8 J( q5 w6 B( t4 p: D$ ~
// Tx Hash,固定32字节; G" e; H6 V# X* w: b; Y  s
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
( u. H) [& z+ K5 L" {* j2 T' o00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节2 L3 T/ a6 S: C3 ?
8a        // 签名的长度, 0x8A = 138字节
* T. y* G$ N# b9 G6 X' P( U# i# V// 138字节长度的签名,含有两个部分:公钥+签名: O! y0 F1 S. L$ o- L6 o5 \" H7 S
47       // 签名长度,0x47 = 71字节  t/ Q6 _1 a1 X) b+ s2 g0 Z5 o
3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01# [* G) v# J4 u2 O9 G
41       // 公钥长度,0x41 = 65字节
; M* t6 m$ C; l6 x8 ?* f/ [& V048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe) w+ J  @# K1 q' O  D" e1 i% J  ]
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
" U6 r* a8 q, G/ z4 E1 ?& p; h/*** 第二组Input Tx。与上同理,省略分解 ***/0 X% B2 k4 C" D" U7 K8 T) v1 Z
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff, z" L2 ]* R% [1 s0 a8 T
/*** 第三组Input Tx ***/) r0 A& t8 ~/ F2 F7 t5 ]9 S
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
. V  y' |- \# ]/ k! [7 B$ K02  // Tx输出数量,变长INT。两个输出。4 o8 v6 F% \8 k8 _
/*** 第一组输出 ***/
& X1 F& D, J7 m3 h5 A! `3 d00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi
) v' L9 u4 H2 G8 x: P2 Z; f0 u7 a19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成4 Z& ?: P* s4 i  d: k; t
// 目标地址
* I0 `0 m; E" l; c1 ]6 W% P' }// 0x76 -> OP_DUP(stack ops)
, @% O; o" v" _% y// 0xa9 -> OP_HASH160(crypto)
5 i. m7 a) `+ F; [: y! O// 0x14 -> 长度,0x14 = 20字节  C1 P0 N; V8 ?/ M3 O- u
76 a9 14 ( W, B% H/ R4 _4 F) O
// 地址的HASH160值,20字节
. H' g9 f6 m0 x: F" o634228c26cf40a02a05db93f2f98b768a8e0e61b # S' E6 _; h5 z) x# N% \" S
// 0x88 -> OP_EQUALVERIFY(bit logic)4 M4 c2 \- |' V4 T9 Q
// 0xac -> OP_CHECKSIG(crypto), E5 ]* Q) f6 ?
88 ac
7 H0 a8 f! V- a4 M/*** 第二组输出 ***/
6 V+ \8 ~" y: b$ dc096c7a603000000; q3 z/ r$ ~: A0 z: Z: G% m
19
8 X9 G/ G) b- F+ l8 I) `1 a& ~5 F76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac/ s/ q5 C% v. a& O7 H% h( f
00000000  // lock_time,UINT32,固定4字节
5 ], T) {0 |* B8 @- k, c# r! J3 T# CTx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。& p3 f4 O2 W: P+ w; b4 b
即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
, e5 ^7 F  j3 I2 {0 G6 n* L: V& i' b- [" Y3 @8 T4 j
qq20131027-26 r5 L0 z* i! j( O) ]) W
交易签名( b: X% F4 ?* t2 _9 `
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。1 ~4 }; U3 [" D% ]
签名类型, {* t" X- ~: U) {5 |: _
由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。1 Y" S2 ^; Z) J( @- X
SIGHASH_ALL
+ Y! L% M. N9 [7 d该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。
' _/ H( P3 Q# Z! w7 LSIGHASH_NONE
' |; N$ J! n( e7 I3 i! q6 f% M; i该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。8 j3 c; `& |& K5 j5 I/ C5 H; r
SIGHASH_SINGLE
1 F: j7 ~9 S2 }该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。  ~! ]; H0 s' k7 e/ N6 O, Y
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5