Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
198 0 0
简介
" h' F! Y+ o% O$ ~+ _! x交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。
% W/ r+ |0 D. Q类型
2 _0 `: ]3 d3 ~# ]7 f9 y交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。% d. s: g8 k) a( l
Generation TX
) {0 H7 r: o. s9 L* x. V, U每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。8 S  _0 R/ x/ E$ \
Script Hash TX/ Y4 _/ G7 Y& ]1 h- C, X7 x
该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
, c; o; ^% [/ [# x+ c" k9 b- FPubkey Hash TX* v& Y. ~$ K0 }" J- g  y
该类是最常见的交易类型,由N个输入、M个输出构成。
! T2 t. C) A/ ?) }6 j数据结构
6 a$ A. B: k6 K9 v交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。4 ~$ P' _3 ~: Y$ j$ H, ]

6 z6 g& g/ ^+ n# a* U, [lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。3 x3 B& u. c' m2 k! h- z7 Z: y, {

. q- z5 J' b7 d( b6 h+ ~+ i若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
# G1 Y: j9 }3 ]1 H, |1 O0 J) j示例" u. I& i0 Q5 f9 w: s0 s+ t
为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。4 N: |* v" ^5 Z5 i9 y6 O
# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           
& }) [6 N1 Q- O: s/ ?{
' _" {  y* U/ Z! G    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
$ Y% Z% L. o; ~  \2 J    "confirmations" : 144667,8 ]- O! P' f. @+ D  T! Z
    "size" : 1536,
7 D5 E0 ]. }( l    "height" : 116219,
" {2 L3 r& ]* a5 W& T# D# t6 l    "version" : 1,
; @% J; g% h& r9 m    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",
# O' Z+ y; f* [0 k! V9 ^' x    "tx" : [5 ^. e9 h% B; c* i  p
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
8 x: g; A, f# ]- G        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",
7 L/ T$ x! h, u! i% v        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
) G# h9 F8 m# R7 K- ?- J+ p        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",: R, {9 B% j( E5 u, A
        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
" [" S7 z2 X  v: l& e& y7 @' Q    ],
& G( k0 {( y: ]) E    "time" : 1301705313,
* r2 q$ _0 V" l/ g    "nonce" : 1826107553,
3 e7 H& I; i/ U- J) n2 H( Z    "bits" : "1b00f339",
5 d9 q1 z  f1 O& w* f6 |    "difficulty" : 68977.78463021,
7 ^1 W7 t6 B0 p' B8 ?    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",
3 G0 d" A: I) l5 I    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"
* U8 \4 O" Y0 ?* h8 Y3 ^9 {! J0 ~}( E/ U+ u" t) M) X/ z
该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:& ?! l& p2 p- j) j7 F' I
# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
' W! d2 ]. W$ y9 y. n; _2 r7 H) L{+ \; M: f6 s! W" H, V& C# ~* q
    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",, m& X: p3 ~0 r$ k2 n
    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
" e4 D8 e9 ~5 {+ v    "version" : 1,
( }4 u8 Z" [; ]) u: R    "locktime" : 0,
9 E5 I! c* n; k' S0 K: G' q; ^# ~6 w    "vin" : [
' C4 U$ r3 N! z" u+ h. x, Q        {4 l' M$ c! n8 W% K' t
            "coinbase" : "0439f3001b0134",
3 G6 T& g' k5 u# N& O            "sequence" : 4294967295% B' \' ^  e2 m! w( V# g
        }! r9 m: }7 ?& ~+ V
    ],
6 R" U3 J, S7 b! D- f; G    "vout" : [$ L, m+ Q7 V$ [! Z& ]+ G% B
        {
# \& `; U* C7 p, @- V/ M            "value" : 50.01000000,
. m6 t8 O4 J9 f            "n" : 0,# Y( t  t& u8 H& _4 R( f: W
            "scriptPubKey" : {
& b6 S' r/ S, S9 a                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
8 |6 j0 T# A) [* y2 D8 N* N1 H                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",9 b9 L- x8 X0 a' N+ e+ K; g7 h
                "reqSigs" : 1,
% }$ o  }- ?+ v. {. i                "type" : "pubkey",
4 x; G, V5 X8 o+ N1 \                "addresses" : [) ~1 G7 K: A) ]; U
                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"
+ r* u* P4 w& r6 a+ U3 ]                ]6 i; t5 @# w7 B# _
            }0 F" D* _( {( i* {  B9 z: U) W5 H
        }
4 U' B  \9 {2 w: c0 k  \7 O' d    ],
4 c, O- @2 `+ i9 q    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",) P' U  Z9 Z4 v2 n9 x  ?
    "confirmations" : 145029,# i& V7 E( p1 L$ b( h( M  t
    "time" : 1301705313,  Z# ]) Q/ U/ r- j' X: f; v
    "blocktime" : 1301705313
9 o/ U; Y! d$ V3 F  D}
9 v* ~+ R5 N& o8 `5 h% s% ?Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:
3 y! _* F+ k0 Y( E$ O* L"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73": P9 `4 Y' v, E7 K. v; \+ m/ K
将该段16进制转换为ASCII字符,就是那段著名的创世块留言:6 R, k& {7 K; |1 L6 Y! H' A
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks% |4 m5 G6 L* a# R) K4 |2 r
接下来展示的是一个三个输入、两个输出的普通交易:3 ]/ B! Q. \" {
# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
) J* H' d8 V/ t+ F2 S# a{
' s. `1 J- t: V) k    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",
. ]( v% q) C$ e7 U9 N    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
0 v  B' r! ?0 [4 t7 A    "version" : 1,* m' O4 v, S( c! d  m
    "locktime" : 0,: ~( q( s; o$ @+ u: Y3 @) W) \3 B
    "vin" : [
( t, \3 f' u2 b% T4 j        {2 e  S3 i7 R  S0 f& m
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",- Z3 a4 @2 ]$ f/ ~) |; v; W1 d9 A
            "vout" : 0,
! }  o& c) H  V2 s            "scriptSig" : {) W% t+ n# E" k
                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",* c; j( j3 s6 a* S5 @* B5 s( {1 e
                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
# q. h* D2 c# j. N2 E1 H, g6 K8 n8 p            },8 Q$ N$ k& c- q3 h6 g9 c* ^
            "sequence" : 4294967295
& t8 P& c0 d/ A% b# B$ S/ P        },
  M. m5 m+ l6 V& R6 j        {. f7 W: m2 [* C3 F7 Z, L. P
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",( M" P0 [+ c8 g/ X
            "vout" : 1,
  X3 W7 z4 i- I7 A% _; ?3 U            "scriptSig" : {$ K$ ?9 D, J9 O
                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
& n2 k1 b" t' @' P" B                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"0 k' n1 ?( o- H$ t
            },
: o2 h- `8 Y" I5 y            "sequence" : 4294967295
+ j6 j9 N6 f; V3 n        },$ m, F$ x5 s7 u' S, v
        {
* Q, b6 h, S9 u            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
" ^/ H/ |2 b/ q9 c4 ^! O* n            "vout" : 1,% I) G: U$ C/ z* d6 i# v* c! w  E
            "scriptSig" : {; F, V) m" K/ P6 {
                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",0 Z- @* a  ~1 J, n* ~0 r
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
6 K, x; u* D- t( V: Z0 G4 _            },
( J$ H. @# g1 i8 {            "sequence" : 4294967295
: x  t" d3 |' c& R3 C$ V5 z3 s        }( r+ K# c* X; `1 u& E
    ],
! @. C/ A3 C( o# R( H* E; F- ?    "vout" : [
5 |; p- ]; l% V7 E        {+ E4 ]% w6 X+ }3 |/ h
            "value" : 0.84000000,
% z& K$ Z1 D* x, t1 z3 K, V' b            "n" : 0,
- S6 o2 \$ Y# b            "scriptPubKey" : {
$ R+ f& G, A0 c: w2 b# t+ m5 }; a                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",- x- ^9 f9 v5 E% `
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",2 X' X4 o6 q0 G# L% e1 ?
                "reqSigs" : 1,+ L' u$ L- r& v9 s
                "type" : "pubkeyhash",6 K/ B3 A$ ?3 Q5 C4 J; v& R! d
                "addresses" : [
& I6 C# q8 A# f% n# i; N                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"' L# n" p0 ]1 y1 q
                ]) B- `1 _( Y) }" o
            }
, t( ?9 R4 h9 M$ g) y        },
  R% P1 U2 G# b) X        {
& p+ O, B, z; h# K            "value" : 156.83000000,# P+ O" Y: w9 }$ K& Z5 m
            "n" : 1,
$ n, D/ f  h! _1 @& r8 N4 B            "scriptPubKey" : {
, A( v  x1 q: m4 k# j& @                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",
0 |' X6 \& ~* ]; M                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",8 v3 H5 u; p: a* |$ _
                "reqSigs" : 1,
( _; p  p$ `, E" w- d- M9 D                "type" : "pubkeyhash",' |* J0 e* O/ @, n- S
                "addresses" : [, J2 T% r: F8 U+ @/ {: F
                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"9 U% x7 K+ {! S  Z: p
                ]! q& z! ~3 O+ c5 ]3 z4 L
            }
% V/ G9 e% B# j5 P! y        }
3 F% a% q- n( D3 a    ],
2 q2 N/ q2 U% I. m" g# ~    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",9 i5 p% V) v  w9 Q
    "confirmations" : 147751,
- F0 d; x$ X- j" u    "time" : 1301705313,
% T* J! m7 _7 H, f' C    "blocktime" : 1301705313
. ~" P# [  {0 M}
% e& Z5 ^% E3 e- R1 k字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):) P. x& {2 z0 b& P3 V0 @/ |
01000000   // 版本号,UINT324 S: r% a2 K. Z
03         // Tx输入数量,变长INT。3个输入。5 `6 Z# o4 N9 H* b6 ^! E2 V
/*** 第一组Input Tx ***/
4 G) @8 x' Z& _) E// Tx Hash,固定32字节
  b# Q  X$ }- l) h5 k; U4 sc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7  Z0 m2 S1 O4 l, G8 _$ G
00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节
# ~) y. D+ t0 l  ?# S( N8a        // 签名的长度, 0x8A = 138字节9 x3 A3 K7 }  o8 H
// 138字节长度的签名,含有两个部分:公钥+签名6 f6 C7 `" }* ]
47       // 签名长度,0x47 = 71字节
+ t" C7 y; a- x8 G3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01$ L# V: y' }4 }& I  K. H
41       // 公钥长度,0x41 = 65字节
) O" y3 a. f$ {048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe) G6 }8 X% Q* |2 X' F
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节. F1 O% M" a1 |- j3 c
/*** 第二组Input Tx。与上同理,省略分解 ***/4 \" R5 ~& t  ~+ O0 b, ?
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff) a& }/ m9 s* G6 t! e# z8 n
/*** 第三组Input Tx ***/. Z; f& c5 m. w. s' m
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff* c) X' d6 _: N" U
02  // Tx输出数量,变长INT。两个输出。
5 s; T6 p) ?, c( e/*** 第一组输出 ***/
7 a) ^& L$ Z7 t! K3 r7 F, Z00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi
! r4 s8 B* w2 Q4 ~1 G, p; |4 |19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成
" z  q* m, v( V) m, r+ ?* W// 目标地址
, ^6 C- `6 F0 P// 0x76 -> OP_DUP(stack ops)
0 e0 @7 b/ Z$ x// 0xa9 -> OP_HASH160(crypto)
' R' Q7 k1 [/ T, ~! d// 0x14 -> 长度,0x14 = 20字节
  z$ ]- Y1 p5 f: H( A76 a9 14
  S6 y, w3 J4 ]// 地址的HASH160值,20字节
5 ~- A4 n" \% O! C$ c0 y& r634228c26cf40a02a05db93f2f98b768a8e0e61b , F! A# W' h- u6 h6 O2 y
// 0x88 -> OP_EQUALVERIFY(bit logic)
- s1 {4 O6 d4 k// 0xac -> OP_CHECKSIG(crypto)
6 g" A6 D/ [* y88 ac
4 z. p9 F: \! U7 d# ?/*** 第二组输出 ***/
+ |4 Y. X: _. w" |- E0 t1 cc096c7a6030000008 d& s0 a( i; b
193 K1 I) ]& U9 t" r. y% _$ K- a
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac
3 B3 Z* D0 y$ t' a6 Q2 j  g7 q00000000  // lock_time,UINT32,固定4字节* ~5 v! A* \' z0 Q; G
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。
+ N3 a3 N1 j( y5 O即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
3 \7 R4 W" P& T) B5 ]; V
4 _+ J9 w. A% E, Mqq20131027-2, M9 n; H3 b7 h
交易签名, ~7 D' }7 R( j: c7 b1 J& [
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。
) k* a5 H  L- w9 ], M3 J签名类型
. e, ^4 N/ h: L) L$ E由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。
5 Z( m+ u( v  J& G3 }0 ZSIGHASH_ALL2 L: D1 Y0 k: B+ j" Y8 x
该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。2 T3 E/ u8 G+ @/ @6 s# R
SIGHASH_NONE2 a3 W5 \* P/ x1 j1 E- K
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
% X' S( D" m& n9 ASIGHASH_SINGLE  {+ w$ g, J# x; G( r  E; d# W7 v+ y
该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。. Y1 @9 T; ~5 P4 ]5 w
转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5