Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
199 0 0
简介
: s  O" g, L4 B! O* _" @& F交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。0 W; U, u1 Y: T7 N5 T# P
类型
" X! g$ ?$ f; x$ {: a0 D交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。3 }) t4 X6 i1 v: m
Generation TX
6 {% ]! b9 [) P8 O( q每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
. V* D" g. H3 M7 N! S3 N1 UScript Hash TX0 Q, I0 \  h, P; u4 W& r
该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
1 X3 i0 o( Q1 j- h" uPubkey Hash TX) I8 i0 o) Q4 Z: \8 q
该类是最常见的交易类型,由N个输入、M个输出构成。
/ ?$ W3 x8 O, {: q! c9 g数据结构
" I3 O! T9 P) a$ H) A* G交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。) x# Y" \: k  v, O/ b
; e6 u5 i2 A/ u5 n' Q
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。
4 N! D% ^" s+ E3 t
* n, x3 U' s- |( I1 h; J! M若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
9 i  |$ E+ }$ y- S示例$ C& c5 g' m. m$ e) z6 v8 E
为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
! Y3 \8 D3 y; M6 _+ I, T# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           ( {* a7 G  O9 p% c* g
{
! N' e7 [% h5 a: p( P    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
" x/ V" F9 Z/ {/ z! G3 l    "confirmations" : 144667,6 ?$ h# ~" Q/ H/ {/ V$ e# b; V
    "size" : 1536,
- B7 H8 J' K' J2 W0 ?5 q3 T' L    "height" : 116219,
+ }7 F8 ?" i! f    "version" : 1,
( x5 l' a+ ~% q7 U    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",' H- Q4 x- w7 `( u( z$ a6 x8 @
    "tx" : [! u! j- J, g* N% V1 n1 S  U
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
% v- {) c% I) P. l) I* p% N( f        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",& w' S: N& P1 K! h
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
6 }# I+ R- r' A5 x        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
( y6 W: U+ ?% |5 d% r! D        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62": l% h) M, \$ P0 c! ^% j- u3 m
    ],
* O/ Y8 I% N; A    "time" : 1301705313,. k5 D# }+ u9 @$ m( L$ K' s
    "nonce" : 1826107553,
7 a( _  X/ E: k' u; i; ^% m' m    "bits" : "1b00f339",
% M! S& N2 u) }& ]5 A    "difficulty" : 68977.78463021,
6 E3 v# Y- B" T    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",0 V; @" n: E! s5 G/ _+ a( l+ m! D
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"( k; f% [# @) g8 g' M
}' |* f0 K! f! o& _% p$ M; |
该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:
( |0 h, F5 M+ S8 W/ M# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
0 K: [1 E2 w( Y  Q+ S. R& q{# B9 B/ e- i7 q+ L& a* Q
    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",
0 a1 S! ?& {  e% |/ ^* p) T! L    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
8 r3 x) {/ W6 H4 l% v    "version" : 1,/ }0 G2 Q+ L+ j9 {6 H) F2 n! ?' B
    "locktime" : 0,, E5 n$ L6 J1 q% f1 j& c& B1 Y
    "vin" : [
# W0 W3 s0 J, u- B        {
; n+ o% @) O" j            "coinbase" : "0439f3001b0134",
+ t* a) p; x  U! ]+ M0 Y  n            "sequence" : 4294967295! w+ d- J( ?- ~' B! p2 {- C3 Q" a
        }2 P7 ^0 i, V; S0 @& f+ E
    ],
9 p/ O. Y" P, A/ u6 l: R    "vout" : [
& x  d6 p' x! v: h, p3 Z  d        {0 Z+ t3 W1 Q5 W' q
            "value" : 50.01000000,
  v" P9 n0 w. I% @% T- X            "n" : 0," t. B/ }: M  p, K) g- g1 G5 u3 n
            "scriptPubKey" : {& ^& Y% F/ M" @) l
                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",6 _8 q9 z+ u/ D, }6 v7 k4 w
                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",  V* q" G6 u/ B) K
                "reqSigs" : 1,; [, m# g7 V* m6 @
                "type" : "pubkey"," w! `$ q1 R) L0 d
                "addresses" : [) x/ _! i  t1 j( j: o+ Z
                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"% h4 ~9 D2 f3 [1 k1 ^* o2 F7 ~
                ]0 B" c! N0 G0 X2 p
            }) b+ }0 h. D0 N$ p/ ?
        }
' }$ `/ X" e% l+ e* N% N1 i" \    ],$ @$ T  e) l5 M- d! i  c$ v# a5 ?
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",9 Y" I2 p0 \: e% r
    "confirmations" : 145029,
8 ~# I# Z: n: h1 u6 `    "time" : 1301705313,( u9 _( H# i( A' `! H
    "blocktime" : 1301705313
2 M- R/ E) y* ]' {1 g5 Z' [3 o}
$ f% S4 j. I+ }4 P: z( wGeneration TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:
5 A/ S$ [, E4 j  g"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
  p4 }1 g. r0 A2 k' W$ L+ p. y- [将该段16进制转换为ASCII字符,就是那段著名的创世块留言:
8 {* J& Z* P9 z/ d  TThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks& k# l8 ]0 _% }( S8 H! U
接下来展示的是一个三个输入、两个输出的普通交易:
, _! f; w- P: Q5 x% ^  Y# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
; A5 K3 }/ v) s$ W; S/ {{
, |& s4 {6 x  O1 H! g    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",, |- E; [6 K$ s; R( M
    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
! B( ]* z! ^  _* D. o$ \    "version" : 1,
* I, C; J$ q4 }, U8 a    "locktime" : 0,- q* J7 u' b* V! S
    "vin" : [
' e% X+ r9 `. E8 _$ [        {; }- {! ]# y0 i1 _
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",4 f$ [" n4 D$ z; j; ~' \
            "vout" : 0,
( H, _8 _! W! ~' Q            "scriptSig" : {; @1 n0 c  V+ R  D2 a! x
                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
" v; T: S6 X4 T# t" A9 u                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
2 R0 M  r8 ?; s            },6 }+ C1 \3 I! B* V4 f+ |" N5 a
            "sequence" : 4294967295
( p+ ^. a4 \  G3 ]& z        },$ w0 m2 {7 f! z, |, S  [- S
        {1 T5 h) S, s7 k  ?, b- }
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",3 ]$ S- \* s) ?9 F! q
            "vout" : 1,) s+ x. U+ k3 }* _- m% O  e
            "scriptSig" : {
0 A& M) p  @5 P9 e                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
! P5 ]2 m& u* c' U/ f: B' s                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a": a$ E5 T6 x4 T' w6 Y6 Y. f( K
            },
' @) p- I+ v# \( a$ D            "sequence" : 4294967295% x4 \) }7 H8 o, g% K
        },( i$ @2 M% q" x; l* F# I2 D% M
        {
4 }! [& T8 U8 \1 R) ?+ P8 u( ]            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
! ]9 v& [0 V) @            "vout" : 1,
3 V' [4 T- w7 x% f            "scriptSig" : {" o+ ^8 W5 Z( m5 D
                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",1 J; j1 I; r- }7 ?
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
4 U# Z' C+ l9 _" m            },8 k# y3 z* b( H) o9 Z% t
            "sequence" : 4294967295/ n+ R; L0 e! S2 [
        }
1 @* c2 n, d7 z! Q: [& I8 n    ],$ |5 n; k+ h9 R5 U3 Z) l2 e
    "vout" : [7 t; l6 f  w, f
        {
1 v* u; O; I  [# ^* G9 f            "value" : 0.84000000,
2 H6 _: R" e' q; t7 t3 @3 T            "n" : 0,
& [' a( w4 U3 f  d4 U            "scriptPubKey" : {" H5 k4 c4 \1 J6 M8 K+ f2 U# O
                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",
* l" g- {3 M7 a                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",
. C8 S5 L! u3 B. G. Z" X; V                "reqSigs" : 1,6 u& Z7 Y3 U, u6 j
                "type" : "pubkeyhash",+ R6 q$ V6 d+ ^4 v
                "addresses" : [
/ ~9 O8 M3 H4 n7 y% v                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"6 ?2 b2 }! A* T9 E  G
                ]
0 B* J7 p% ^' k' l: J            }. ?, B' D  ]" F+ n
        },+ Q4 p! |1 q* w; W* T* A
        {
! y6 _% m" d; a: ?& q+ [            "value" : 156.83000000,  f6 @. ?9 d; \
            "n" : 1,
  ]( W# C3 [) q9 Z3 L/ P; w& W            "scriptPubKey" : {4 w$ u4 @+ M8 o1 g0 {! {  F
                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",$ }' z8 N" J# M; \$ \7 C7 p9 J
                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",
' O* D- \5 L  d" e5 i: C6 \                "reqSigs" : 1,
8 Z  S/ X1 g8 J9 }                "type" : "pubkeyhash",
6 L/ {- A# q- H6 c4 ~) |  u/ i5 `' B9 ^, D                "addresses" : [
) W4 a0 V7 D+ \                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"6 x! h2 u- Z6 ~
                ]
# }7 r- I4 W% q            }
$ a( M( f5 g' |9 H        }
3 S' H. S5 E. l5 Z: U/ Q- h! }    ],$ u# Z2 y9 @4 y# O# l$ B+ G4 V' |
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
2 @, U- ]. p/ ]$ k    "confirmations" : 147751,
( S1 E3 y, x- m0 {! u7 ?    "time" : 1301705313,# ~* s2 s' O& d( p* J2 O5 P
    "blocktime" : 1301705313
3 F9 n5 I& U# L8 O0 B4 k6 W2 N}8 r6 k3 v' P/ ^: k
字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):7 B6 |/ w4 A# d$ c  M/ P
01000000   // 版本号,UINT32
* f) u5 a# u) H. b0 Z* V3 x03         // Tx输入数量,变长INT。3个输入。1 ]6 i6 l( n4 t9 k- u
/*** 第一组Input Tx ***/0 u9 D0 q8 |: G& o# u* C
// Tx Hash,固定32字节6 i4 Y! Y; A" q) {' q, x
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
2 ]1 _0 n+ i2 i: U: ^1 O00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节3 v* z1 P+ V  W! K
8a        // 签名的长度, 0x8A = 138字节9 J2 l% r4 s: i3 Z; d. M
// 138字节长度的签名,含有两个部分:公钥+签名# c) \8 D. v) p9 x7 `) f
47       // 签名长度,0x47 = 71字节
5 P0 j8 l+ u3 |3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01- s. J) Z* q  q( t" M3 I
41       // 公钥长度,0x41 = 65字节! Z$ D: O1 Y' W8 s& t- K% p9 m3 ?
048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe! A/ {7 x+ M' Z" m2 k# H
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
! w4 ^! r- A1 t* E# W/ k( ?/*** 第二组Input Tx。与上同理,省略分解 ***/1 @, j, {$ L! S
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
! |5 _) T; K3 G/*** 第三组Input Tx ***/- C5 H7 w: g$ ^) \! x
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
) m/ H( N/ [! q* }7 I% J. B% v. r02  // Tx输出数量,变长INT。两个输出。
2 p3 V% G6 f0 V7 T. I2 {7 r/ \/*** 第一组输出 ***/, V( ~( T2 s- q! k
00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi
+ j2 Q2 z  O# F/ y5 M) h( v19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成/ z* C8 E' F! G  l
// 目标地址) L% J5 d( S0 r  A- n. k( e
// 0x76 -> OP_DUP(stack ops)' m3 R/ \/ g2 S) h) g7 m9 n
// 0xa9 -> OP_HASH160(crypto)
+ |% n2 d( b/ N5 J9 Y' S5 U4 w) Y" Z// 0x14 -> 长度,0x14 = 20字节; P& Q6 ?: t" X: f
76 a9 14
3 u1 t& S: }4 {: G) V6 L9 I// 地址的HASH160值,20字节
7 x( h7 P; c& r8 Y; H634228c26cf40a02a05db93f2f98b768a8e0e61b 9 v' g, x' c9 l
// 0x88 -> OP_EQUALVERIFY(bit logic)
8 G$ S1 ^" x/ R- C8 I- Z) @8 K) g// 0xac -> OP_CHECKSIG(crypto)! }2 d+ o; h' \5 o2 k
88 ac! y1 `2 Q9 _# T. e" Z0 I' ~
/*** 第二组输出 ***/
$ J0 y* E: R! L6 q  H8 Ec096c7a603000000
! H5 a+ X; I  R& w19
( n/ P$ z) x0 ?3 {76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac
8 f  d4 x2 H, F00000000  // lock_time,UINT32,固定4字节' l& X: v* I$ g8 r) j
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。
' Q2 B& j5 z# ~0 v  T: [即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
: p$ w# N) _/ H  l( g" t5 l+ F# t7 Q1 f+ X
qq20131027-28 {" I0 P# y! P; X1 T+ L, `2 h9 e3 c
交易签名
& [8 N$ [0 N$ T( Y0 I签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。
/ W# h' ~% ~+ ~0 a# E  ?3 v签名类型0 d+ L& y; @. M& D& p' t
由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。( P, U/ I6 P+ {: e) s& a
SIGHASH_ALL6 n9 c6 x; z/ R, [8 J( @
该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。+ i% \" b1 j7 Q6 \3 M) R+ [7 T
SIGHASH_NONE+ q3 g, s' p- k: b# b& I
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。& P! Z0 W! ?3 b, U5 F* D6 t' z
SIGHASH_SINGLE5 ?, W- j8 c- r
该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。
  u4 z3 o+ O* y- v' a! F转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5