Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
113 0 0
简介
+ T* A, q. _9 Q  i: h2 F3 v; w交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。
* T3 r+ Q: I$ n" D1 x/ Z' A3 ^类型
4 z, ]* o% b  R& f0 t交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
5 L9 F! _+ |! JGeneration TX
+ I4 N$ m) l9 V每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。. b2 U. d3 p% x: g0 O1 O8 ~
Script Hash TX9 s2 l8 c" s+ u4 c( s5 N0 Q3 h
该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。7 k6 U: c5 u$ Y, d' ?" {
Pubkey Hash TX1 x% }% n, }" ]& ~9 M$ [/ I
该类是最常见的交易类型,由N个输入、M个输出构成。( R7 [5 l! U% ^- Q6 I
数据结构
6 `' c$ h3 r( i5 L# l交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。/ D- s# w* d5 |! }' G1 U2 U8 R
5 [5 a4 I- s# N
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。4 ~7 A8 n) a) |
( ~# y; U  f8 Q1 y$ X
若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。& b" H1 @. p% k' z% B* Q' b
示例7 j# X5 l; w6 M/ J0 R3 w; M
为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
/ A/ b0 j' G" e9 ]- l8 b4 s& Q# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           / H: w$ C7 e% d/ i
{
1 Y' m' |1 j4 L' M; V4 ]$ x    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",7 E4 G- N( a) ]$ Z. [
    "confirmations" : 144667,
" _, T: G8 Y- i6 u    "size" : 1536,: j) y0 x3 Y' G* l" X7 w
    "height" : 116219,
3 I; f4 c4 m" A- e6 Z7 n; ]0 I    "version" : 1,, i* l) r1 W2 v: h- Q/ r+ B: M
    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",: ?2 r- f8 H/ Y$ J9 @8 F
    "tx" : [
3 n3 l0 ]$ k9 W) @& t        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
4 V7 _$ p9 F/ Q, G1 z/ `        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",
, R) H1 S9 ]: I7 K9 N2 S6 o/ N        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
" Z1 J$ n) e# ^  C2 O% A+ L        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
& J3 v5 E- Z5 T6 ]7 }; d, ?        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"$ e( ?, P; {8 e6 O+ @1 _, x, A4 }
    ],
  ?" X9 R. r8 a* Z* u7 q7 Q1 z6 J  ?    "time" : 1301705313,5 R7 w( A# l, N* M5 w
    "nonce" : 1826107553,
9 l5 Y" H8 u5 C6 H3 z& G    "bits" : "1b00f339",
  [- D$ W# F% L2 }- @- C    "difficulty" : 68977.78463021,
4 ]3 q! s3 U9 K9 y# m, t& n* h( P    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",3 U) d8 d5 P1 u; S; L3 ]4 z
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"
" F9 ~6 e0 v0 R  E+ }}
, v, q$ x9 ~( q, A! K+ m1 i该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:
+ R  Y" C3 A6 @& F& h6 k# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
' u, q0 c" t4 z$ |# D8 g2 W{
$ a- z3 N7 V- a$ ~2 |; Q/ X5 }    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",' f+ }0 e6 s: H8 W2 q
    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
4 ]" I* E/ G; S* e# g" e    "version" : 1,
% K6 g% W1 f& [8 Y! f* h    "locktime" : 0,
5 L$ P2 ^# V; {+ B6 t    "vin" : [, O' I& b# {0 {- A3 H
        {
  m6 c7 E& Q  e( _9 i: q6 s            "coinbase" : "0439f3001b0134",
; o5 d7 g  X. k( d0 u) S            "sequence" : 4294967295- u& }/ E& n4 g
        }
! K% p2 u+ g, ?# `; n    ],( |8 d; T# ]4 k( Z0 }, T: }
    "vout" : [2 g9 H3 B* l! Q" G# H
        {+ S; U( N- Q; z1 @% z4 @
            "value" : 50.01000000,1 S( w; O! q' ?! [
            "n" : 0,% u* S% s' Z- H& `& O
            "scriptPubKey" : {
8 I2 p& D: C( W2 R9 f/ ]; F                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
: ~4 ?9 q7 x$ M) g                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",1 u& a& j7 W, y0 u
                "reqSigs" : 1,& @3 r4 l8 m, L- B+ B* V- P
                "type" : "pubkey",
7 N7 `! c8 R/ h7 [                "addresses" : [# T. T, }: F/ V
                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"7 V2 Q! o3 A4 p/ k$ B
                ]0 S/ A0 e' x5 W
            }  J6 m; g' V5 u$ ]: {
        }
& {: F8 W" {1 {  ~0 J    ],
0 q8 x/ y: C: Z* P4 a7 r: @    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
! [0 j% K( i7 {4 W- W& b. K    "confirmations" : 145029,
4 B" a7 f* a5 p0 u5 H. G    "time" : 1301705313,
3 F3 W9 w/ ~* g' s3 T    "blocktime" : 1301705313; n: g6 I! A; u4 o
}
4 x; j1 Q' d  hGeneration TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:+ v$ E' Y+ w, o0 |+ d+ J
"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
  Y$ |+ |4 x$ G- U9 H- W将该段16进制转换为ASCII字符,就是那段著名的创世块留言:2 L& J% S4 x8 t7 D
The Times 03/Jan/2009 Chancellor on brink of second bailout for banks; J* K; S2 _% s6 K6 ?+ s
接下来展示的是一个三个输入、两个输出的普通交易:
/ v  B% O+ R6 J6 i0 M0 g7 r9 l# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
6 O0 C/ e3 P9 n, V# U{7 H- b' I# z$ ^# L$ T
    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",
, c0 e# d9 s# }) @$ _    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
8 j) e1 w. l, E6 x0 g8 z9 _    "version" : 1,+ Z. O. n; ?4 k5 H' u- Q# r
    "locktime" : 0,
5 K, e% l+ G& C- G  u5 P    "vin" : [$ P: K8 x, ~1 W' V6 D. ^- n
        {& b5 D0 B( f' ~6 x9 J. M  o
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",/ O' d: m' t, F' _
            "vout" : 0,
9 {; [4 z6 `- x' \- R8 ?            "scriptSig" : {0 J: f* C' k9 R( b
                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
* v$ C" c/ V4 p3 ]                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"' ?+ d& Y0 T$ c: f$ c+ w& G
            },1 l) ~. X6 V5 G6 b3 s
            "sequence" : 4294967295
& X. v2 g0 n2 ]        },9 o% p3 p! T$ S: M3 a
        {; \: Y9 f! \5 K* k7 J
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",6 T' y+ n; n  ^" ?
            "vout" : 1,; g1 |. ~/ x8 }2 A" h: H
            "scriptSig" : {
+ c6 p6 z. K: B; W! K                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",) e; c9 h* u2 q3 d+ W# {; b
                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"( y8 @) w5 v7 d2 N& k# J
            },
- ~' V! H8 D$ q: _            "sequence" : 4294967295! f  A- [8 u- A- y7 Q# v, s$ h" U
        },) o; s2 Y5 y. J$ r' a' {3 |0 E) G
        {5 ]& }! w* h+ Z3 y; f
            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
2 e5 U: U' o. R5 v( D- E            "vout" : 1,
* H/ ~: T, _5 Y4 k0 K) q; \: v            "scriptSig" : {
4 `3 z3 I3 A/ [% e* @/ U& \" n                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",
# }6 P1 {( g9 m8 b                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"; m7 Z8 [' O$ G: u6 J: E$ J$ j
            },
0 r' ^6 W2 I# G  x4 \3 C            "sequence" : 4294967295
1 U# a. j6 W) g' |* F6 g. M: S( e        }$ L! r; L' O9 l8 }' V
    ],' _7 h2 Z; f5 G! t1 J2 m& b
    "vout" : [: V$ I" y% K+ P9 d  _$ L4 E7 B
        {" G/ |' i( O3 _& ?& n7 V# M
            "value" : 0.84000000,; }2 M$ _3 R& Q6 e8 A6 O
            "n" : 0,3 E# n  k/ {8 I+ |- ~7 \$ e
            "scriptPubKey" : {# d$ Y. e9 k1 w# {
                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",3 E  e+ {: c7 d
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",) u1 e" y, J  I  q
                "reqSigs" : 1,' ?: j- R2 ^$ q
                "type" : "pubkeyhash",
4 b7 O) o) b, k& k& H/ S! x8 l                "addresses" : [
: X3 h7 ]; o! b: U9 b8 j7 }& i" ~                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"" z: Y: G3 K/ f- |; r
                ]" h9 p4 T: ]( R& S. i3 h
            }
5 F1 t0 e% {& c; j        },
3 m# k% f, A7 L' [5 O        {
9 u, k5 ?$ W  c' E            "value" : 156.83000000,3 V# ?5 U1 f7 d  o( z
            "n" : 1,+ j8 ^( [" B- p) N5 @* H' }
            "scriptPubKey" : {
' t3 M, \! E" S3 W- i* _                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",4 Q. J; @; i& d' g
                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",( c. @6 a6 F& F- O3 p6 z1 X) D
                "reqSigs" : 1,1 J/ H3 C% x3 K& J/ |
                "type" : "pubkeyhash",
% |) X8 p: n) V! R6 j: M                "addresses" : [
( O/ Y8 T6 S1 J8 ~  S* O5 `( T                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"
5 j5 ^) U+ P6 C+ |" E                ]
3 P: E: [1 A4 t6 M8 W1 A            }
% j9 k/ ?; B! b        }
5 w1 n$ F! R/ c' O  Z( h" I    ],
# v/ `4 m; @6 `  j" L    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",7 X" A; U) t  i6 w* j5 v5 k8 E
    "confirmations" : 147751,
# p) j3 n% {+ v5 I    "time" : 1301705313,4 p+ I, L, B) z! J  M& R4 O
    "blocktime" : 1301705313
" F% t" |8 E5 y" |3 J}
" ~* z# _* B& Y7 I: Y字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):
* f$ U0 D& h3 ]01000000   // 版本号,UINT32
0 g) G* A" s9 [- O/ f03         // Tx输入数量,变长INT。3个输入。6 T7 `3 }" U5 g! ]' O
/*** 第一组Input Tx ***/+ z* z& }6 g8 n
// Tx Hash,固定32字节) {) b! I: s3 W3 r  {
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7& r8 E9 e$ `4 ~7 N5 A9 p
00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节
3 w$ C( U' K' _* {: T9 O# I8a        // 签名的长度, 0x8A = 138字节
2 Y2 e5 E/ p6 Y* c// 138字节长度的签名,含有两个部分:公钥+签名
4 i) a0 [% \  U, ~1 G" @6 l( z47       // 签名长度,0x47 = 71字节
9 [* A. G: S2 N$ I3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af010 D( Y# w1 o6 R, H
41       // 公钥长度,0x41 = 65字节0 B, s, A  ~# U
048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe; M  o- l" N' ~6 [8 w  M
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
, @) c! }+ Z6 T; p. G5 m/*** 第二组Input Tx。与上同理,省略分解 ***// a% H& O* ^% O7 I# i; e& A% U
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff$ l# d5 t- L) g8 g7 ]2 X. t
/*** 第三组Input Tx ***/
- {$ M9 l, M% T9 ?1 U) Lc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff8 F; M$ y) `7 j# z
02  // Tx输出数量,变长INT。两个输出。6 B( y. [$ o/ c7 m0 h( K
/*** 第一组输出 ***/
' d8 U: D1 z( _, {00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi- ]- ^1 `6 e  c) r6 k! n' A+ U; q
19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成
3 ?* }1 ~& N/ O2 L& u// 目标地址6 ~# r8 B& F1 S5 {3 N! _
// 0x76 -> OP_DUP(stack ops)8 m+ _: E2 Q4 Y& B
// 0xa9 -> OP_HASH160(crypto)3 D2 m0 r, I/ f. F
// 0x14 -> 长度,0x14 = 20字节
5 Z/ F: h/ b4 g  I" b$ `76 a9 14
* r5 L2 n# J+ n1 @+ K// 地址的HASH160值,20字节
: n4 l/ n# [: u" Y5 K634228c26cf40a02a05db93f2f98b768a8e0e61b
, E* l& Q5 f+ p, t// 0x88 -> OP_EQUALVERIFY(bit logic)
) A) H; q: L' R, K) K% H) j: n// 0xac -> OP_CHECKSIG(crypto)
* E8 \- t2 s/ W& O- K6 c' w) A88 ac
7 o' X! U, p( Y/*** 第二组输出 ***/; c2 Z; X4 [) B& @* o$ B
c096c7a603000000
! j0 b3 u; @* f19
1 d2 c; o* {- V* V3 j76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac' b  q/ j6 a( S
00000000  // lock_time,UINT32,固定4字节" B4 t; G$ y0 H
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。' e1 v+ g* ~% O) T
即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。7 Y2 c* A; n5 H' ^+ w
& X# W$ T6 ^$ f) ]7 V
qq20131027-22 K7 n, Q) Q8 \  _3 A+ N
交易签名
% F3 ~1 z8 ^; f  c3 y签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。) t8 n# Y) h3 r, f9 c
签名类型' P7 ~+ I5 d7 J  d; ]  \- `6 I
由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。9 ~  E9 _' Z2 M  n
SIGHASH_ALL# K% w9 J8 P. d, i) N
该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。0 V! _! n8 J3 j: F# V' b0 V1 t
SIGHASH_NONE  X. D9 i7 Q& F$ R* C
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
0 l+ K# Y6 R$ @4 C1 P' h8 kSIGHASH_SINGLE
/ K; B& u& J9 k) g8 Q该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。
, ^" H1 z" g6 S! m$ b& S转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5