Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
114 0 0
简介
0 P; b% z% Z2 [. J# L" N1 F交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。6 Q, z3 p0 z# a/ m6 Z' [: W2 x
类型
! R$ j8 s+ j% q交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
9 |5 e# M* v4 `3 V, s6 ?Generation TX
3 }2 l9 I5 `# G1 ~2 C5 ~, a7 |& U0 K每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
! c3 l) R0 f' i% |+ _+ c" nScript Hash TX, Q% V1 @8 r$ }: {5 C* C7 i: e
该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。: ]1 G" M& j2 }& L) ]
Pubkey Hash TX5 Q# O8 ~$ z8 }0 ^
该类是最常见的交易类型,由N个输入、M个输出构成。; J$ B: Q  _8 k/ W* F' t. V+ w
数据结构$ I5 L0 b% A7 V  ?& @
交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。) u' L9 X# [- r- i) R5 ~
+ E6 v% G0 P6 u
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。
3 M5 k! S# [6 k8 H2 N0 D: w$ i* T3 ~- ]8 u) c# W- [. J) u- c
若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
" t" y) a! {: Q6 R2 a示例1 y' g/ b+ z' b/ K' r5 c0 Z
为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
! `- N( P: _- y5 G1 Q# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           : ?% p2 X1 W$ W  L2 ?
{, u0 v0 ~2 C% z8 W8 h& T
    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
8 b+ a! e, @8 f/ ?2 z( `4 A    "confirmations" : 144667,
" J5 M) }/ \* A% ?    "size" : 1536,
) b; W* h$ c) Z" C    "height" : 116219,
* p( j/ f3 P# s2 P! s    "version" : 1,
' E& y! x# q7 v& G! K    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",
% n) N- {! g# ~    "tx" : [
- [- k% ]7 g6 T9 q( A, h( K        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",0 y+ j7 k4 c2 y3 R
        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",: D0 ~' q5 Z; e( H
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",* D# p" n0 o( e  J' q% ?4 p8 v8 y
        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
2 D! k# g9 K; n5 w: r        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"/ d% A4 @; Y. i+ r) t  |8 _
    ],
, p8 ^2 {# a- G  B2 Q* ~    "time" : 1301705313,
' ~" f1 X# w6 i8 M- H    "nonce" : 1826107553,
* \. O. ]! w0 q    "bits" : "1b00f339",
' b: U5 E6 U. h; C& e/ Z    "difficulty" : 68977.78463021,
! c) K5 z- K% Z* I    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",$ u5 f* h$ q  ~
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"8 N* j/ z6 I/ k4 ^3 L/ K9 i
}
' }% w* Y4 V! [9 Y该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:
6 J/ a. J0 @+ |, W% i9 p' q# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
) `' K0 Z' W5 k' Q# J{
+ C# Y4 A( e, l4 R/ E    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",7 q. Y  N# x7 W' f* M, k! _
    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",) t, U2 ^% M. G* P8 W
    "version" : 1,! J# R' d5 w$ i5 [6 U
    "locktime" : 0,9 m( `- f" D/ \8 j; Y1 Z, |
    "vin" : [4 Z7 Z: I% Q3 W! ]$ _
        {, ^) p* }) t7 k# ^) J% ~2 p# Y* F/ @% L
            "coinbase" : "0439f3001b0134",
% A) y1 P$ G% T; `3 z7 k            "sequence" : 4294967295
1 E2 j; q1 L: t8 I        }5 ?5 n! h: Z# P3 t- E
    ],( D) P# ^2 v# B2 ]
    "vout" : [% [# O) n- `& _% T
        {8 e% C: {, J$ o8 I% _3 ?) q
            "value" : 50.01000000,
( ~( c& d) O% x7 g" W            "n" : 0,
, C* L$ z$ E$ [' w# `0 n8 ]            "scriptPubKey" : {
. E7 z" ]1 @5 T2 b5 @' n+ @  n" V                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
4 v% G- V: I6 ^( l  F3 p                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",2 i( _- K% C2 M
                "reqSigs" : 1,
" k4 v9 n, r$ n& [+ w* A                "type" : "pubkey",) b& H3 a8 L$ I3 S# h
                "addresses" : [3 O; |' m  ]& q% a4 X
                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"
7 {+ f* V5 v% R+ u+ v* ^1 c                ], z# v8 z1 M3 J- Q' w5 W
            }
4 ]& C# {3 P2 Y+ B* m        }  {$ f+ _5 Y5 e/ K& R1 Z1 U6 h- b
    ],
( `5 o5 y( n7 t4 E- U8 x8 X: |    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
( ]2 S- g! {7 R. Q$ R3 @( v( ?    "confirmations" : 145029,
! y! d0 N! h/ S    "time" : 1301705313,
, d( {+ r* F. m$ M2 \    "blocktime" : 1301705313
/ S$ `( N6 b* ]1 l7 Y( a9 ^}+ {7 @+ y6 d, O& k6 R
Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:+ L5 n) ~/ _8 z
"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"2 H5 C7 {; T  L7 o
将该段16进制转换为ASCII字符,就是那段著名的创世块留言:( f2 z8 f" E. f
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks3 j7 b2 `& R; J5 s4 B+ G
接下来展示的是一个三个输入、两个输出的普通交易:$ ?9 t: g9 b+ B! ^$ ^* E. o9 I. e
# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
0 C8 o. f3 \4 m{$ z2 [- C3 E/ |- o3 W" t7 K
    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",
4 O& r1 q. f- Q6 [    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
1 l- z+ ]7 n8 K4 ?" a    "version" : 1,
* P9 v& R7 h4 u5 g    "locktime" : 0,% O5 H: i" S8 L0 ^( C# f, `% j
    "vin" : [
" G3 I( }) l; F1 P  o0 B: ?        {
! R' R9 G$ f1 j) W) ]6 {8 d+ }2 [            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",( }! G6 U% L4 l# ^* E0 Z5 J, |
            "vout" : 0,
! s" {% @6 i, H1 N            "scriptSig" : {
) W8 o% z$ j" s                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
; y0 x$ e3 q' e                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"5 G% I8 F7 B4 U  [  y! c
            },' g. p) F  S% ^, {/ L
            "sequence" : 4294967295
# F) K7 [+ Q! q3 y; ^$ e/ g        },
6 @0 c8 R# y9 i6 Z5 ~, Q3 m4 a+ [        {
( B! j% S" z0 u" u7 F            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
5 e( K5 Q8 W* k" z8 D* M            "vout" : 1,
7 k" Q. e8 H3 O9 U6 P            "scriptSig" : {# P% j/ \" f! i& i
                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",& p, S* J1 r. J* ^& X' f5 H
                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"9 V' L8 ~9 d7 V% A# @) s
            },- C* L# Z' P3 J/ f
            "sequence" : 4294967295
; N/ O5 P/ H; ?' {' d* m        },! M8 Q7 }, N, v0 R9 c, |& h0 U
        {& [3 H. V8 s: P& m
            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
0 b% k9 s$ P( [4 I( p2 ~: s            "vout" : 1,
5 W; E8 E0 B; B& w7 E            "scriptSig" : {
; Q) \* ?1 i' [+ L& f! Q5 {                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",
; _: I6 \, R' Z, s: g( X( x                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
& W3 K# Z/ k  Z  Z5 J" N. U1 Z            },
3 R) E  i. O1 x6 p% s' ]( ]            "sequence" : 4294967295$ F3 B1 R0 h7 b: O( O6 g
        }
5 z& |5 U6 d0 ]! j, u+ R3 _    ],& s& q4 Z' Z) d: _- J6 v3 ^: \0 x
    "vout" : [9 `5 Q8 \- m3 q1 G( o$ U5 q
        {
+ n$ ?( ^! J/ R            "value" : 0.84000000,
% D! m" t  W8 N0 T+ t) y( ^+ C            "n" : 0,8 p2 m4 o1 x  P) i( Q& }
            "scriptPubKey" : {
2 m( \' O3 g, l. w1 b* p                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",! v$ k( s& @: P2 o: d$ p0 s+ p; |
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",* L3 r4 [8 H% p" J: ?& q: g
                "reqSigs" : 1,/ O( [9 P' p/ a) `4 n/ D2 k/ \
                "type" : "pubkeyhash",' x: Y2 Z) M: I; r+ x" I* M
                "addresses" : [8 o/ Y. m8 e/ @: ^" u1 B6 s+ ~
                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"" i! d% {" V, A
                ]
" M9 E4 T; c9 ?! S- m1 K; q            }1 D: l/ }( r+ I
        },
4 i! `! u0 S0 a0 P        {# D' C) F: Y; V! M& q% z! _
            "value" : 156.83000000,
1 z9 E) ~  i" I2 u) C! l            "n" : 1,
  q. f: Q/ w; B7 \# Q/ Z- a            "scriptPubKey" : {7 L7 W* A$ c3 ~
                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",# s+ H. a! f% M
                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",
3 X+ t- b& V! @& y                "reqSigs" : 1,2 E4 G6 B- u8 ]$ |: N
                "type" : "pubkeyhash",+ @0 |1 m; _3 H" T
                "addresses" : [
/ z! T: D3 Y9 G* y" `                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"
/ j5 Z4 y4 n1 |$ ?                ]
1 Y( @5 a) B  ~! ~            }
9 j. p' V9 L+ k8 q& N        }2 h/ n) g8 M+ s& M' R2 Y# u
    ],6 E8 {- M2 q6 C( J6 p
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
/ }6 N" S- y) E' F) p" G- k/ b0 P    "confirmations" : 147751,  f* K% X4 h" Z
    "time" : 1301705313,
7 n/ F+ U; v& V9 M6 k: ?$ O    "blocktime" : 13017053135 {5 Q5 S, N1 {8 V, Y
}" |& t' Z4 l% A- e9 h- P
字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):
* e# O( `% Q+ l, h3 [01000000   // 版本号,UINT32
* j$ K. L+ }% z/ _8 r03         // Tx输入数量,变长INT。3个输入。
& T5 _+ c; R* A/*** 第一组Input Tx ***/
* w. `4 G4 t7 E' `* O// Tx Hash,固定32字节( G* }  y3 m' E% i1 \4 G
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
, ]7 B! \% _' _& _' X9 Y! L00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节/ L# q' [6 Z, i# r
8a        // 签名的长度, 0x8A = 138字节8 [) E" s' d/ J$ }4 a! V5 w% l8 h% K
// 138字节长度的签名,含有两个部分:公钥+签名
0 Y- ~% J. {& C) ]! V5 z5 o47       // 签名长度,0x47 = 71字节
( q+ U( t- m$ m& V$ x" t0 [4 V: _3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01
) s+ v1 ~0 r9 O5 X8 z# B41       // 公钥长度,0x41 = 65字节
: f: \$ }, W  `2 c) W' e+ a% S. r: G048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe8 l6 B) f0 |+ M' w$ H& {3 m. H
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
- j' @# t* q) ~9 |/ D) R/*** 第二组Input Tx。与上同理,省略分解 ***/
1 O. j8 _/ P8 [- F3 X4 P  Wc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
! ^$ x$ R4 g( d4 V6 v' z: ]. V  b/*** 第三组Input Tx ***/$ j* t9 Q+ X8 _  q8 V- K% D% M
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
- R0 u2 ~; X# o02  // Tx输出数量,变长INT。两个输出。
) G" S: `. u1 B" P. w+ G  S/*** 第一组输出 ***/$ O" l/ f3 q/ C9 }4 Q: {4 p
00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi- s5 r4 k& S( M
19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成/ H( A( @* N' h. |; E0 Z6 E
// 目标地址
$ N  k0 ^% }' Q/ q- j2 ~4 L# Q// 0x76 -> OP_DUP(stack ops)
# y  \  p  q# H. B// 0xa9 -> OP_HASH160(crypto)6 M( w2 ?7 ]" Z* U+ L
// 0x14 -> 长度,0x14 = 20字节
* t% c/ |" h- e, k76 a9 14
2 ^& O! g  K5 W// 地址的HASH160值,20字节
' _) |4 L+ Q6 l7 C* m- Q634228c26cf40a02a05db93f2f98b768a8e0e61b , V+ L  b' Y$ v
// 0x88 -> OP_EQUALVERIFY(bit logic)
0 c+ b' H$ @0 p& b. r- F// 0xac -> OP_CHECKSIG(crypto)
3 }; b7 M$ W! [& \% e7 {$ Z$ F1 q88 ac
, e" X; T! y( E) m! Z3 j! Q1 _/*** 第二组输出 ***/
, S2 a* a) i$ F6 Tc096c7a603000000
7 K3 z) l8 R+ q6 e! Q199 m$ T, K2 V- g7 Y+ g1 t
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac
$ N; B- L( w7 B' |00000000  // lock_time,UINT32,固定4字节+ S+ x/ A4 X/ V
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。
+ D) q6 \2 {4 z# Q+ `  m0 k$ A) K4 O即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
4 T# d9 r) y( @8 M6 R; g* J2 t# o
4 B5 w/ j+ ]$ L  s" a) wqq20131027-2
  b" Z. n! o4 K# `5 M& J2 \交易签名
2 V: J( P# _' R签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。! O: W# n- @  _4 v/ n6 ~5 M& H
签名类型
% `# q* q% w& \由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。
: |2 v" W6 l: h# RSIGHASH_ALL
+ v9 F+ x  \9 r该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。7 W% L0 f8 r9 Q' n/ e1 n
SIGHASH_NONE- v5 d) u% _4 D+ \5 n% [
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
! A2 u+ `- ]1 K% T6 t' A& u. O4 `SIGHASH_SINGLE
4 D4 a) b! D2 e8 L0 h1 {: l该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。) R8 e- t* C% z) w% c# d+ `
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5