Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
116 0 0
简介  J& D& O. E9 v
交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。
1 _) D2 u$ K  P8 C& A! k+ |类型
- `3 m; u+ K8 C' x. t& p; a) l, A交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
0 m/ V: f  C' J% m: `  f( j/ A8 OGeneration TX
5 v$ t4 `1 b0 y  v4 u# [, s每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
! L, w5 {  H6 ^$ ^2 zScript Hash TX
. g, H9 F" \# Q0 \; n' ^. d0 V该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。+ d* ~2 q0 W3 s, \! ^
Pubkey Hash TX
2 R; l& n7 q" i& K该类是最常见的交易类型,由N个输入、M个输出构成。
6 j, h9 A6 \: ~* p5 W- {) K: C5 _数据结构
: I9 s" t3 q' |8 G) N- C4 M交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。+ A2 E+ j) g- Z6 P2 `! U
1 _  V9 C) K# z2 G6 x9 k0 f
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。: H9 V9 ~" t- E* T7 u* Q: b

' K6 q6 i5 Z7 z. Q; L若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
: x: z) o- P' Z1 Z* a" h& _+ {示例
& Q6 O: O3 X' ?2 S' G3 d( J3 H为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
2 }$ `6 B, i. O& m# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           3 q7 c% y4 ?$ c
{7 R1 ?& U& x- J  }+ ]2 t, j
    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
1 I5 u& K; P, `' r8 M' L    "confirmations" : 144667,1 I9 A4 Q. m) }' ^0 c$ H" c( _
    "size" : 1536,
& l. {; Y3 g. D; L) c- _    "height" : 116219,6 b7 o( m" t9 _. p9 n3 i
    "version" : 1,
( r9 t, V4 v, c9 @    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",% a! f. y9 i5 S" h3 y+ H
    "tx" : [
+ N3 A, ?& n4 h# g- D' \; L        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",( C3 S- q4 l  O/ f; H" \9 g
        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",$ @% f2 q2 t* t
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
, z' X! h- h3 D8 W2 j2 G* Y        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",( O+ N0 q+ s1 U4 r, ^2 B$ R
        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
4 ^! S7 b+ X  b0 z    ],* y0 Y" K6 s) O# [& B
    "time" : 1301705313,' W; ^+ {1 K5 ]7 L1 F% M+ X  d
    "nonce" : 1826107553,1 @3 Z: V" u, i' A2 }
    "bits" : "1b00f339",
  ?- h& w8 H& B    "difficulty" : 68977.78463021,7 a$ m; A+ l' |% P
    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",& j3 d" u# k# }7 \
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"1 t5 |9 |# {6 L! U* ^; g
}* N9 d, `1 ]* }$ Q% H
该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:' G1 x, p0 S$ I% R
# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
$ f. S# N5 t% O{
, N$ s( F* z! @, f$ Y5 l    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",
4 M+ X6 s- ~0 |( E0 H- J' D. o8 K, T' H    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
1 f* H* W! M  p0 k+ P1 w1 ~5 T; W/ z    "version" : 1,
; a( B4 w2 ?  N  Q    "locktime" : 0,  s  g& `+ y3 c4 y
    "vin" : [  j2 U+ K4 W* \' w( D+ Q
        {3 H# o! Q6 n: A7 i: @) p
            "coinbase" : "0439f3001b0134",
; v! ~$ W( m) k( }3 {5 _            "sequence" : 4294967295
% M% `7 {; b+ ?5 Y! l        }; v& W7 m* F) j( G
    ],
7 X, G9 _5 q2 u) U/ m# N    "vout" : [1 N& g- ~9 U& U  F2 a+ e, i
        {
. ~  j( M: K2 H& u! J            "value" : 50.01000000,. C) |3 w8 f0 S0 j3 ]9 N
            "n" : 0,; z* ]  D2 L$ [8 E0 q
            "scriptPubKey" : {
( C/ _  r4 W( V# \/ x                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
) u6 S) N1 F& X7 T0 l+ A  z3 B* L  b                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",, @9 d. y6 j; D
                "reqSigs" : 1," K# c% N! k( J
                "type" : "pubkey",
! _9 b* s0 W1 x# Q$ t- O5 N! x                "addresses" : [) O  ]/ g" f( l
                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"" p* Y0 g' X7 F: b: X0 X
                ]
2 \  ~9 g# v1 W( z3 O& ^            }% w& p' d7 d4 S' I- ~0 _: s; o
        }
9 U! i7 S4 K3 H3 j) z, F( W    ],4 u5 l7 k6 e1 t( E7 l
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
* C: o1 N* s" @+ K    "confirmations" : 145029,
# B$ O- j' q" B) Z    "time" : 1301705313,
/ d# g8 {$ e4 V& |) R  ]    "blocktime" : 1301705313% E+ \: C  U& u. G9 S  W% S
}
7 }. f$ F7 I+ k# E9 fGeneration TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:
  \% h1 [; v) C) O+ @0 _"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"& Z$ x1 R$ c5 k# M
将该段16进制转换为ASCII字符,就是那段著名的创世块留言:
2 @& L  k5 E0 b2 bThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks$ a5 X8 H9 P4 q( I
接下来展示的是一个三个输入、两个输出的普通交易:. v8 J( M; G/ p4 ?
# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
' t& a8 a3 _* T& V* S* u{
! p5 E. T  L+ L    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",
# h9 I6 _' I3 O# n$ U    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
  i# _( _, Y. t) r0 U    "version" : 1,  e( s5 X$ D. w( m9 e3 Q! M
    "locktime" : 0,, a7 N$ O" c6 v6 U) D
    "vin" : [
" l) f# Y) L4 r        {! e$ F# q. T/ Q' r% }7 I
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
+ \3 u* i7 D2 c! @0 `# _0 s            "vout" : 0,0 u0 g$ U  a8 u5 r* z: S
            "scriptSig" : {
0 C8 d) p2 E: z% ^                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
- _/ I9 ^, F4 K* D/ z- Q                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"8 |% K" _) Q7 f+ e6 w3 z) X& V
            },$ f: x) T9 o8 h) p; U% J6 X
            "sequence" : 4294967295
. N8 E0 N, w" a8 ?        },4 r6 s$ X8 D. K5 |" _
        {; ]" Q3 P+ {' `1 ]
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
$ G7 z9 p+ }1 Z4 I  ~            "vout" : 1,  C9 v8 [4 N9 n2 ~. j
            "scriptSig" : {
6 Q/ [9 j. {% B                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
7 N3 m: t; l8 ~0 V" }. f                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"
7 O: f7 i, i0 Z& p* b4 g            },
1 b5 T; M2 ~# S0 v% @            "sequence" : 4294967295* }- N* ~  a5 W$ y, ^. m
        },
5 k( d& [) z9 C4 h$ [) u1 c        {
1 v/ j, K0 M9 ^& q/ n" E3 K( J            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",! [0 V' H* ^! D9 p' o& V
            "vout" : 1,
% q% \1 l/ Z3 j2 f- f& g! D7 H            "scriptSig" : {
& v. {" y( ]. [; p" o6 ]                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",
- U$ ?, D2 m6 u+ U                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f". g: D! \" s5 b/ L
            },1 |% Q& N! h9 W# e$ Y- f6 r
            "sequence" : 4294967295
' |5 V3 `" h) K" X% D/ c        }- p1 U& S' Y0 h2 q
    ],
; K1 f, K7 u$ @, L: _    "vout" : [& q% \4 y2 j. x. A
        {1 ~5 G, p* `$ d9 F& g/ J( x
            "value" : 0.84000000,
/ E- b$ \/ C6 B1 W* b; _/ _! j            "n" : 0,/ o+ v4 j# n  c: O) Y, }+ {4 M
            "scriptPubKey" : {! k7 E. Y% z( u7 k0 }, j
                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",
3 A$ b2 i+ N5 B9 u3 _3 i                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",/ P! {4 ^2 A/ X* P
                "reqSigs" : 1,5 s! {  `# c7 x
                "type" : "pubkeyhash",% M; K9 f6 _) n) W/ W
                "addresses" : [/ C* y* m, {6 t1 d* O/ c4 }
                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"
# }7 T' k! u' ]' r$ g  r/ U                ]+ H" E9 C" v) A* W6 l/ z& i
            }5 u$ b! c5 G( [
        },
# f7 ~0 s0 R9 L* P; b6 {7 c. [$ c        {2 J* k. t1 O+ l- G( Y* c( m
            "value" : 156.83000000,. Q! o/ z) g. F# V/ F, u) b4 W
            "n" : 1,9 x7 [: a" w; y. o# r3 g+ u
            "scriptPubKey" : {
. M) b; U; I  B% z# Z% P                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",' y* w1 `2 h+ u2 o
                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",, o! n$ p* `+ A$ }6 J% N- `' @$ `
                "reqSigs" : 1,
& ^% O* g! [2 Y9 j' y* T/ E" T0 N6 A& g                "type" : "pubkeyhash",
3 y0 g4 R- Y7 b% v5 }                "addresses" : [' [- ~  ~3 t5 d2 ], v' @' W
                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"+ N4 G$ Q* V& u! S
                ]
8 U1 a% S* d% A% o3 {( P, c" Y            }
4 N: h. b, N( C0 @. J2 _: Q( q        }/ b5 B1 O5 g, ?; K1 }
    ],
6 R+ g9 X$ ~2 [" _4 _' F4 b    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
( _6 b) H% C0 ?8 a    "confirmations" : 147751,
3 ^; R' a2 n  x! x; Y    "time" : 1301705313,7 o2 q1 u- U9 ]& d6 c8 p
    "blocktime" : 1301705313
( ?; k& Y' f; d}  w  x; ^7 T4 C/ j- p
字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):
  Y7 p" X) Y  f4 |0 n01000000   // 版本号,UINT32
0 X9 X* V" e* N. N" s8 l1 p6 n03         // Tx输入数量,变长INT。3个输入。& {  [" {/ y" S* B
/*** 第一组Input Tx ***/
& A+ K7 H9 a7 s& q9 `+ J// Tx Hash,固定32字节
5 s8 A; h9 P4 C6 g) jc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
1 P  K+ j% _! |7 _: m# E00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节9 {3 [' i7 m3 {( }7 L( r2 m
8a        // 签名的长度, 0x8A = 138字节
3 L+ e; E# P  c// 138字节长度的签名,含有两个部分:公钥+签名, d) Z' S  I( I3 E7 \
47       // 签名长度,0x47 = 71字节
6 B1 J  N; W4 ~+ b7 m1 K0 C& M: t. K3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af013 j/ X- l  M* g6 z
41       // 公钥长度,0x41 = 65字节8 E8 r% V' E' V/ Y
048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe
- x! s* U: u- m& offffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
* g6 z$ K9 h; Q$ m$ G) H* ^6 D/*** 第二组Input Tx。与上同理,省略分解 ***/6 t" W' a& O, B
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
1 X9 J2 ^. @+ q8 ]+ ?/*** 第三组Input Tx ***/, b2 ?7 a+ [% o9 D) _
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
" q7 [2 ]( k. ^. |5 I/ ]+ B02  // Tx输出数量,变长INT。两个输出。  w3 A( P8 n- H0 l9 Z3 y1 V. B
/*** 第一组输出 ***/
0 f0 _% }/ K9 q% u, {* g' I00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi) a6 Z- s; Q" I: `
19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成! N, t# d% h. w" @( x2 ?6 E
// 目标地址
/ C, g3 _. ?3 D+ d' t$ L% ]// 0x76 -> OP_DUP(stack ops): {1 s/ E0 e' Z9 n. e; p' I
// 0xa9 -> OP_HASH160(crypto)% g; P* i& c3 d0 G9 d+ o" C
// 0x14 -> 长度,0x14 = 20字节
& y" w% b; A! R76 a9 14
* l" ^( I& U* G: R// 地址的HASH160值,20字节2 N" }% @% P& m1 n/ @4 J! y% E
634228c26cf40a02a05db93f2f98b768a8e0e61b * e: P( j  u. ?; n3 S4 b/ V
// 0x88 -> OP_EQUALVERIFY(bit logic)
8 \0 H2 L, m0 y9 a4 n; c// 0xac -> OP_CHECKSIG(crypto)
$ n/ l. O& z# D% k88 ac
3 b" i# C1 r7 L; d5 i/*** 第二组输出 ***/" d, I) F1 o& D
c096c7a6030000009 _+ j, k( ]% P, q' D
19* l  c4 i' J& e" z
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac% D3 r" z* b  S9 C7 o
00000000  // lock_time,UINT32,固定4字节
0 v& o+ d; S0 R/ O- dTx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。7 M8 Z9 {4 }' @* U' S, N7 x/ P0 M
即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。0 U% d& q& a0 [4 H2 H* P* p
9 K. M5 l( K/ H* m* O. x0 D5 q# A
qq20131027-2# l2 k% g- V# \
交易签名; T- p5 @$ E6 a5 A/ R5 f' r
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。
9 r/ v5 ~8 s% W) R签名类型( F) E/ L! ~1 G( c
由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。+ H3 |  H$ Q; x0 s. p
SIGHASH_ALL
* o8 g4 d4 {) Y6 w$ a( d该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。: D' q: ~9 t1 d) }4 U9 E0 z% ?
SIGHASH_NONE
7 B- @/ R  M' M该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
5 ]  Q3 Q) i" k9 B# hSIGHASH_SINGLE
5 P; {7 g3 p1 v8 i: p; B- G该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。+ H6 J) Y9 M! x8 I: T
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5