Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
115 0 0
简介/ n4 X8 X8 t- l
交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。; K0 k; F$ j2 x1 [8 q/ v
类型
  }) s" u- B0 X: Q+ y交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。( d, N! D1 ~+ A( Y* u7 I5 T
Generation TX
" t( l) T" f; f4 g% ^* w" r, {每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。' [: S2 I0 U) s: `
Script Hash TX
7 E, w3 {4 Z, V该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
- _6 O7 m2 N$ Y" x; L: ~Pubkey Hash TX4 M3 t4 B8 T( ?6 `1 }; c1 @4 D& \
该类是最常见的交易类型,由N个输入、M个输出构成。
. ~% K# u' A4 J9 D4 l( \数据结构
7 A. p6 X2 w2 @$ b交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。6 G* r# M- W7 f, n
6 Y, a" }7 W- X8 N, t
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。/ R7 c1 [  z0 g% M( a8 G4 y3 X
# ~; `5 V3 h3 d+ i2 k, f, M; n
若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。4 B( K5 t# }- l  i0 _
示例
" _0 e3 ^) Y* h6 L为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。& \9 ^9 ]( g/ X( ~( a8 T. v% n/ z
# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           
* x( ~4 y2 k% C* ?8 {{0 {. Z" l/ u$ c2 Y0 G) p/ i$ {; V
    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",) N1 {5 d9 U& _$ E/ i8 e
    "confirmations" : 144667,0 M! q: c6 b/ O' `2 A
    "size" : 1536,
$ h( J" E% {6 |* D9 u  y' C    "height" : 116219,0 t+ ^6 V" M3 {  n- q, H& M8 r
    "version" : 1,
" z* P% R# {* K8 q  i1 w. l    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",
0 `& z" S  i" Q. l    "tx" : [+ ~/ J) H. X1 O2 c' `! B
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
$ y3 t7 L7 [: m+ w  n        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",  x% H+ z# t+ _* Z% O
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",7 g1 T6 [& S* J% |3 j3 M1 h
        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
" O1 r" @+ g% v! |7 z" E" ?! X" L5 [        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
8 E+ q; }3 l8 [  N9 a) n    ],
4 N, a" t# E6 s    "time" : 1301705313,8 N2 {1 _$ m( z: J+ U
    "nonce" : 1826107553,5 c" ^, T& u# H' u. L, Z/ ^
    "bits" : "1b00f339",; a" G8 `3 b" |/ l; W3 _
    "difficulty" : 68977.78463021,3 v" s* k" t9 J5 h2 u
    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",
% N0 N! R; [: ~/ }1 L1 @    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"
* N% }( B! O7 w- x- N/ e}
8 f# _6 A, O$ {! @该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:0 Y! Z' b" I" E
# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 10 h0 b: A+ s9 f1 W3 ~
{
/ J9 s7 g; t% U5 L7 u4 L    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",. K" j) ?. h% m! |4 G
    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",; [* o+ d1 }2 \+ {
    "version" : 1,
0 Y9 q6 _% _: Z# x    "locktime" : 0,
0 I, F: H; @7 v7 X% l; K: i    "vin" : [( e, V# s6 R- s: T0 n& }6 F3 i
        {( T4 N2 k% v' j, x3 ?8 f$ e: R
            "coinbase" : "0439f3001b0134",1 ]# W& y7 D3 x2 O1 V3 |) t
            "sequence" : 4294967295  V) e5 j5 ^# v% l, W# [' n4 w
        }
, ^4 u2 V/ l7 j' W& o+ x  E    ],6 m! K8 N4 s/ T8 H
    "vout" : [
4 h' G) ^  A% m  a9 w0 J# U        {6 a: h  q5 s& R5 h4 d
            "value" : 50.01000000,4 L& H' n8 f/ b  W# Q( @( E  v6 l+ Q
            "n" : 0,2 h' h3 k* @# m+ Q2 h/ X+ S
            "scriptPubKey" : {
4 E3 K' B9 D: k+ m* `                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
2 q0 @) f0 C- |3 J& s                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",
; d: k( d+ q: g8 Q                "reqSigs" : 1,* p1 `6 a8 a" A- t& m
                "type" : "pubkey",8 S0 n8 R1 D+ G& B& _3 O  i
                "addresses" : [
! i3 I2 K/ X0 S2 ~                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"
/ x3 Z1 O8 t0 W! r& f- B) J                ]1 z$ K! R: r- Q  c5 u& i9 `% w
            }. p6 Y$ f) s1 N# s/ B
        }
/ X& p6 \& ^' U3 L    ],
( F2 N; _$ M+ Y1 K- |" r6 K: B% V; s    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",1 \/ p6 d) W: Q
    "confirmations" : 145029,% [2 j( I' m  i
    "time" : 1301705313,
. G3 V  M; S# J  y. m5 j2 k    "blocktime" : 1301705313
& ]0 d9 C* o  l}5 S$ J) r, }% t" @" Z
Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:- i- D5 R; ~2 g4 ?+ v; k1 m2 C
"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
) i. y  v& Q2 g6 D8 o9 z! g将该段16进制转换为ASCII字符,就是那段著名的创世块留言:
' Z) o3 l% X; E5 YThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks
* w* N' K5 F4 b  V接下来展示的是一个三个输入、两个输出的普通交易:. ?' V9 ~# `5 t; `6 C% K
# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 13 c  Y/ E  M2 @  N4 R
{: F& M4 k7 k/ p  x- r
    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",: G* q! F2 m! o6 H/ a
    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
4 y- ?# f$ D8 c# I( d* E- T    "version" : 1,
2 S& g" h4 J; u7 S; X! O1 C8 o, r    "locktime" : 0,, E( j& e. C" D4 R3 S# r
    "vin" : [2 x$ D) }; S; H/ f8 o& R, \" L  [
        {' d! N+ \8 {7 F5 k. M$ t8 t  q
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
7 n# _* u7 v/ d( T( G            "vout" : 0,
! f" X# K% g& [3 S            "scriptSig" : {
& Z; r3 a9 L- j6 E* q                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",9 ~7 R* _: K9 ]' \! B- B
                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
9 @. i( ]5 b6 }- Q2 z# b  L            },
4 X# k" t+ y. [& E! e( L            "sequence" : 4294967295) m. \6 J2 Y+ n0 c" K( [
        },7 S; C+ ]& M. z; n) k+ N- d* a3 G( C
        {8 V4 A( J5 \9 S: G% m
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",# J( g9 y" J1 I4 p# E" R  ~
            "vout" : 1,
0 z# i4 L# @& u) F# [/ U% K: l            "scriptSig" : {
, H- B; [% h1 k$ n4 I- K& L                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
. l0 ?6 K1 Z" e9 z- u                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"8 i8 w' r1 G! e' V0 M" Y) C5 V4 h
            },
) D$ ]% J8 g' A0 |- I2 G; O& D            "sequence" : 4294967295
$ T% ]% e9 y% g  u" a        },
! }( F9 b- Z; c' \        {
5 P1 `# Y  _" a4 Q$ Z$ `2 P% U" c            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",8 j# t8 u8 I4 n/ Z0 g: _
            "vout" : 1,' b2 }, T9 @/ U, S
            "scriptSig" : {2 p" `3 L( u+ c: \% j0 p! E) O' ]7 b! k# w
                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",0 N4 W4 L# C" P+ K. g; f
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"8 E6 w+ Y6 D( Q
            },
$ M* b2 G' G+ J3 b            "sequence" : 4294967295
5 E9 D$ [0 `4 }, n8 J        }4 M' q3 L! J- g. X3 z+ K9 _
    ],
! j2 |: z1 U+ }+ I    "vout" : [
3 Q" K3 b5 ?# K% h8 T        {
  R) K; f' I# ?8 ^+ h- _* b& ]6 T            "value" : 0.84000000,3 v9 ~( M0 Z0 X, V& R$ `
            "n" : 0,
+ L' [, d0 L3 X, k  }            "scriptPubKey" : {$ _5 W+ z* Y2 J& o+ X
                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",' L4 T- x, t) B+ m7 \% ^
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",9 z4 c' j& Z/ l- m7 {; P* u$ z
                "reqSigs" : 1,
% S: s5 t; b* Q5 T7 m. i                "type" : "pubkeyhash",/ a' F( }8 W6 A* T! f" c7 ?8 H' j( D
                "addresses" : [' ~3 S1 p2 s# i6 M1 n1 b, W9 ?' P
                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"9 i9 E5 ]* O# }# Y
                ]5 j& D/ L$ M9 i
            }  X! @4 u: B; r( @1 `
        },9 ?  O6 T6 j  l1 r- n; c
        {; W# Z) r0 J3 b( `/ V
            "value" : 156.83000000,
) T0 u9 j! ^: A6 j% H/ J5 X: X            "n" : 1,% S/ q8 W0 E4 J
            "scriptPubKey" : {+ T- s( b" Y1 Z& `
                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",
( v4 f  j9 L. I3 v9 I5 m                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",4 n3 U- c' s% m  V
                "reqSigs" : 1,7 Z  e# A( ?! l5 g' ]( P
                "type" : "pubkeyhash",
; u, n8 H! R7 G  h                "addresses" : [
% T( P8 [/ ^1 I) ~$ E. y+ q: z                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"
( S& a, {- C0 Q3 L2 E% K$ C" C                ]3 j; i' r! A! R* e+ b
            }
5 ?! I/ X! c) ~8 ]        }
" n5 D! y7 {9 f' ?* j+ u    ],8 O! j9 D- H  V5 u2 Y
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
0 `/ s; A  U* P* B( S( Y, x6 O    "confirmations" : 147751,! g$ D( Z) ~" x' v# I. ?( O: ]8 t9 @- R& R
    "time" : 1301705313,7 ^$ h2 c% o+ n1 [/ z" O
    "blocktime" : 1301705313
0 D; |9 ?. F+ a}+ b% b. m! D' A" C
字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):2 d. W. \( c0 s4 f
01000000   // 版本号,UINT32
* M/ v& G, L$ Y0 H4 l& Z03         // Tx输入数量,变长INT。3个输入。/ b. U, m$ J) B" P5 ~
/*** 第一组Input Tx ***/
* V2 [; b' M/ d; W, c4 |// Tx Hash,固定32字节
7 T; j! u8 @9 B0 Y4 ?: {0 Lc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab74 e& N2 W2 Z  j/ X
00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节4 k3 R8 d  t% ^5 n. N
8a        // 签名的长度, 0x8A = 138字节# N9 l) T! k3 ?% p: @, k# `) y5 y! W  W
// 138字节长度的签名,含有两个部分:公钥+签名
7 ]( V6 e- e+ i; t* l47       // 签名长度,0x47 = 71字节
5 ^1 e5 t# B, q, m8 n3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01
" R# k+ M7 n3 Y2 u' ^41       // 公钥长度,0x41 = 65字节
6 _- W% |6 f) `+ I, z1 G& k048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe
- U  ^. i( E; w" yffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
  j9 V3 A5 S1 G; f. \9 y  v/*** 第二组Input Tx。与上同理,省略分解 ***/% _: b3 b; D( x( G. f
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff. S# U) _. I  K6 [; |9 d
/*** 第三组Input Tx ***/: F! E6 h, H. x) ?/ K
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
$ N* E# ]' _# K: }: g  x02  // Tx输出数量,变长INT。两个输出。) b3 }: P# \0 y( w, ], C( s* ]
/*** 第一组输出 ***/
. w" {3 \2 x8 r) }00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi
! ?2 h7 C3 Q9 D# y" ], s19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成, }( p( N6 p( E1 a
// 目标地址
) \5 j# e" U' r// 0x76 -> OP_DUP(stack ops)! b. y+ }' h7 U+ z
// 0xa9 -> OP_HASH160(crypto): C$ k, ~7 v3 _. F
// 0x14 -> 长度,0x14 = 20字节/ X1 s0 F& c8 ?/ S: F. a6 A
76 a9 14
/ Z0 a$ z3 X$ R7 u// 地址的HASH160值,20字节/ G$ g! O! ?* k- N3 ~% `
634228c26cf40a02a05db93f2f98b768a8e0e61b   F& i6 e, ~6 K+ ]7 H. }
// 0x88 -> OP_EQUALVERIFY(bit logic)8 s! M. n  d( u8 H% Z/ ~$ F
// 0xac -> OP_CHECKSIG(crypto)
& ?( |. ^% u+ R3 I4 X3 w& F' W88 ac! e5 v. F6 F4 V3 v) e2 I
/*** 第二组输出 ***/
4 s( J3 _, i! @$ Y1 h. K. fc096c7a6030000005 W' e# c+ K+ \( S9 F
19
" c8 Q) b  Q% h1 E- M& e& x76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac
2 E" C8 `# Q- k* J% M( i0 D00000000  // lock_time,UINT32,固定4字节5 Q: B+ g& \* b; l) D; A# P
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。
, ~. B! X9 g9 n; E/ V5 |* G即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。- H. K8 `& q$ }7 A4 M5 _
4 Y8 _" j5 z2 X& P' O
qq20131027-2, |* H8 D' a5 p8 l7 h* Q7 q
交易签名! ]6 ?$ g1 u# \' z9 ~/ H
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。7 R, C4 h% ], G1 _3 A
签名类型
% u6 F& S$ I& ^; Q1 _+ l由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。
  H* t) m; o0 O& LSIGHASH_ALL. I% v9 P7 _6 [
该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。. g) i9 A/ |9 p! v) P
SIGHASH_NONE
+ y  T) g/ ~0 C: h( @( s3 Y- m- ~该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
4 A# q+ k" v7 [SIGHASH_SINGLE
' n, p- A% b7 K) q2 c该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。8 w/ V/ P6 k& e1 l# G
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5