Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
236 0 0
简介4 v$ ?8 D: J8 r- M0 @% m4 Y
交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。3 v; s$ S* M) {9 c4 R8 }0 g
类型$ }; a' _5 _  ]; D# Q! c, v6 C# F; g0 F
交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
1 ?4 Y7 w5 ?$ }$ h/ lGeneration TX
  _' `2 t+ H8 x% M+ w! w每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。! e% Y, H& _. p) V6 s
Script Hash TX
1 Y3 M3 U. g" W+ D; i8 ?# m该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
- {! p3 [+ o+ [) b/ qPubkey Hash TX3 n% E* o8 ~; y3 u
该类是最常见的交易类型,由N个输入、M个输出构成。
  H+ a' k, Z* w, O/ K7 y数据结构4 V$ a5 |+ e% s
交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。
5 g; {4 Q2 {. K7 z
( Z3 w2 _" J3 N( Llock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。  Y; e/ ?1 n% W0 \2 a3 Q

$ k- M8 y; F2 P  k+ w& p若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
* ^5 D: _" t+ [; j! _示例
; i9 A# G6 f, n为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
# S4 ~! `+ A. k" _$ X8 \# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           * x6 ~) n5 t. ?0 W) F
{
% B9 I3 K) q" p$ C( F# z/ M    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",5 Q& v" p0 H0 a
    "confirmations" : 144667,0 `! Z6 S2 Z" A
    "size" : 1536,& q/ A/ ~- `( C$ n
    "height" : 116219,, e+ @$ d6 Y& Z( h2 V' l3 _
    "version" : 1,
) u$ K. w% r4 |0 b- M    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",0 n: V, `# u) P2 N7 p
    "tx" : [9 r' i( n- }5 q$ F
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",, l9 w% {+ {1 u) g2 b0 Y( p
        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",; M8 H7 S! S9 a  w
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
7 R" E- \# z" i        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",' q* a7 B9 J# H9 \+ p
        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
+ {: a2 [1 @9 f' {  g! o    ],, U& _7 N# k. X) u9 x
    "time" : 1301705313,+ `# Q/ }/ d% x4 g* j+ H6 L& O3 s
    "nonce" : 1826107553,
5 v/ p3 k! v6 C! V0 C& `8 A) C  }, i    "bits" : "1b00f339",
' T$ e  Y+ h$ q6 }) ]' z9 L    "difficulty" : 68977.78463021,
' V. M5 s* r/ ?6 K8 Z    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",$ L1 J) q. `! X6 Q
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"5 y. ^& S' ]$ R, P+ |
}
& z! @. |' H0 Q3 Z: s5 p9 ~该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:
* V1 k( B# V) j- {. g0 g  I* B2 o# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
/ w1 I  _) `* o2 j{
/ o' t1 M; F% {( e8 C& B    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",
6 Y- d. O2 x  i; W6 x; \  N/ |2 R    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
: f0 W/ P) C& f! a  Q1 j    "version" : 1,. {' t- H' x9 ~0 {/ Y/ g; q
    "locktime" : 0,6 b4 @8 n$ e8 }; c  X9 |) k
    "vin" : [' M. W! u8 t5 c" y
        {6 X$ S1 z" m0 S+ a6 D- W+ ?9 R
            "coinbase" : "0439f3001b0134",6 Z! s8 \* D+ O9 W2 i
            "sequence" : 4294967295
6 s6 S! R& x  @: ?( c& ?* S        }& |/ a7 {9 p+ Q
    ],
5 [7 L( a" A3 h" X: J; T1 F4 B" C    "vout" : [6 T  S3 W4 _2 f) Q
        {& R+ ]3 U, d- ~
            "value" : 50.01000000,
/ z3 X* N& T6 J" F( f+ _6 v            "n" : 0,7 R% z8 c8 J4 |" P
            "scriptPubKey" : {
  S* C0 G. y6 }% H0 i                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",* i' x" Y3 B% R- z. H
                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",
! V. H+ q' a! Z: X% K8 j8 u                "reqSigs" : 1,
9 Z. @$ \$ h1 I                "type" : "pubkey",
+ a. ?8 G6 `3 j, I; A# J; @                "addresses" : [
, e8 u0 q( Z( m% N1 E# J8 l                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"8 G! n0 U' x* V4 F  d2 m
                ]
; K0 t9 s0 C5 S2 r            }
) s/ v! E+ ~+ A2 ?0 k. _        }
+ o. L' K, a  \( Q5 L0 O# @    ],9 h, B7 `' n" y
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",& d' [: N  Q% V+ V! S
    "confirmations" : 145029,' `/ N) c9 e6 z6 L
    "time" : 1301705313,2 }+ h: \( C3 O' x" \
    "blocktime" : 1301705313
; L2 S2 ^" ?3 j}6 u0 r2 y5 f8 u+ H- C2 A  m; L
Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:
, o/ U! n' D7 q"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
7 x+ ~2 K% |, h# d4 }将该段16进制转换为ASCII字符,就是那段著名的创世块留言:
/ L- ?+ U; y5 ?" ~The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
1 I. q5 L+ M# o8 d4 Z( l: p! J+ f" G接下来展示的是一个三个输入、两个输出的普通交易:
% d9 y/ j0 ]& f& w2 J/ V  I# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1% j1 E& w% ~* }' Q/ r2 Q: Q
{3 ^( k- o) x* H, u
    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",6 r- v7 o5 B+ y" M
    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
: ^- ^9 R; R9 I% d) S& ~8 z( l$ F    "version" : 1,* V' K+ w& d0 m5 j4 G/ e2 P3 b8 o
    "locktime" : 0,5 o& Q9 P9 N" ?! [' }* M5 n
    "vin" : [& P8 Z, w$ o1 d! R' W- v' f
        {* Y3 S" J4 L$ |; x( X$ v2 x! t6 W. S
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
2 F& a$ F! e5 ^( D# n            "vout" : 0,
3 V( ]6 H- l9 u2 d9 T! M            "scriptSig" : {
- @- L: i& x+ g9 K& H# `                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
  A$ M! |) Q+ _6 j" G5 Q                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
8 O3 B( I* ~$ @8 I            },
6 X% p; Z) S- L+ Y0 M0 ]7 ?7 r            "sequence" : 4294967295! U6 @+ g4 R. I, o0 d
        },
+ ~; D* i+ ?$ L' r        {9 K. I" i8 g) s, w8 N# f
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",8 {1 ]; U0 [# Y* S3 V, t
            "vout" : 1,8 z" ^! B2 ]$ x" m$ x+ q# _
            "scriptSig" : {5 I) v; K" [8 G" z0 Q
                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
4 _# y: e8 ~/ q                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"
$ W0 P6 Q: [: w! }( t            },
7 Y* A& N1 v% G! ^2 v/ E/ k9 v            "sequence" : 4294967295
2 p9 N0 A4 j# K( z* L& \        },! |0 U# e  x0 m7 m# D6 m$ [
        {
) [$ ^' O/ h2 \3 @9 N0 M4 _            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
1 U$ G! X$ i& A: R2 ^0 p            "vout" : 1,1 l5 n+ S, k1 r7 N7 |$ ]
            "scriptSig" : {
/ u* G  Q8 u) f' B0 {" c* O                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",8 g9 j& g' O% T/ a" O
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
" W4 C' ^* I* F: I; o7 I" r( u# d            },$ A0 c% n1 h: i+ P& e+ o
            "sequence" : 4294967295# w0 w( A; `/ ]
        }( G5 K3 Z4 `8 @: ?, d  [
    ],
: y( [( U% w+ G    "vout" : [' z, P1 C/ B! S2 u8 V' t$ R
        {; p, _8 K* @7 m9 n, i" z2 ^: w
            "value" : 0.84000000,
0 Y; J( a8 E  b            "n" : 0,6 J! L% I2 {1 {1 [$ N% ~9 e* a, B
            "scriptPubKey" : {/ W* n/ V9 @# W* e' _, w
                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",  F% v- P" g+ s2 Y
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",
9 r% \7 C* L7 ^                "reqSigs" : 1,  \7 H$ w8 b' S, k' l
                "type" : "pubkeyhash",
$ P2 `" _' s% f                "addresses" : [
! N% i% E8 }  `6 h                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"$ |. Y) K% E% f' |! x
                ]1 y  [3 E" y% ]# }% C- R) t2 B# b  {9 O  h
            }
* r9 t# z2 @  f' y7 R7 I) G- D. J        },
* j3 R! @2 K3 x  P, Y        {5 K8 o' S0 ]( Y! g2 M; N. S
            "value" : 156.83000000,
3 o$ O- E. s$ B1 G. S# k' X7 Q0 ?            "n" : 1,, L* u$ y2 X5 Y# ]* o
            "scriptPubKey" : {
# p& p2 Y8 M* H, |                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",
, K6 H0 Q3 t! G7 v3 X                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",
7 c  v9 I; S+ L                "reqSigs" : 1,# w. z. ~, x+ m$ d0 I2 f$ U) J& z
                "type" : "pubkeyhash",6 B, P0 ?, p$ }1 v% B
                "addresses" : [' j' m, {7 O( a1 ^  G
                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"  u% I2 d8 v4 U/ J
                ]
$ |/ w! K+ A4 B& a1 K7 X/ h! g            }* |' D, w; A9 [9 V1 B! B
        }  A8 j9 G2 K/ L+ y5 x
    ],2 V7 b7 u1 Y; b1 b, R
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",5 t/ r) S2 `$ r7 J( |) g2 D4 t
    "confirmations" : 147751,* ^' c5 `; O; T2 ?" [8 m
    "time" : 1301705313,
: F0 R. Y# q: ~5 R    "blocktime" : 1301705313
3 `4 y% Q! |2 }# }}4 a: E* r+ Z- O' c( F9 C" `2 Z
字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):
' G4 M! Q" T0 z* h) z& w/ l. q01000000   // 版本号,UINT32
/ R4 B, [! }; p8 x  f03         // Tx输入数量,变长INT。3个输入。
7 \8 ^& ]5 n$ f7 s6 m; _. v/*** 第一组Input Tx ***/
8 w+ `3 g6 |' [" B/ _- i: u7 p// Tx Hash,固定32字节* K+ D. P# w7 q: A6 d4 S( u: W
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
. ]: F, N  `; j4 ]" H. J" R00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节5 l% N* T, s& t% B1 }  b4 k
8a        // 签名的长度, 0x8A = 138字节* _) U1 z' m  X
// 138字节长度的签名,含有两个部分:公钥+签名8 T, Z1 w5 k9 H% E+ E3 M$ f0 T
47       // 签名长度,0x47 = 71字节
2 A) S  F: Z; B3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01
: {2 _) {3 o$ X6 ?$ o: s) F41       // 公钥长度,0x41 = 65字节) ^: r. Q% S: Y; ^- u
048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe. h$ B7 o3 Z0 d7 R" q9 Q1 j3 J3 q
ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
$ _2 B9 I  ]1 p6 X. r/*** 第二组Input Tx。与上同理,省略分解 ***/
# A* ?/ Z0 {+ K( Fc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
2 b' f- e/ a: s) a. A/*** 第三组Input Tx ***/9 Q9 y8 ]- h! o, c2 U" a! }6 x
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff: ?" T/ d8 H% `1 R4 t& o; S
02  // Tx输出数量,变长INT。两个输出。
7 K6 E2 Z# G2 H- j/*** 第一组输出 ***/
8 T$ `4 P9 O5 K2 \00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi, K: \& R5 L. _
19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成7 N8 _: G- b* S0 L1 l
// 目标地址3 ~  E0 y3 s" O
// 0x76 -> OP_DUP(stack ops)4 z0 ~- U- n# ^# M* j+ M7 o
// 0xa9 -> OP_HASH160(crypto)* v( R: p% x( f( Z  q* ?7 `* t$ n
// 0x14 -> 长度,0x14 = 20字节
9 H7 F/ \5 d' @! s2 t- m6 Q76 a9 14 * L5 n" ^& |1 j5 k$ \
// 地址的HASH160值,20字节
: H$ U" B+ d7 w; Y+ Y/ c634228c26cf40a02a05db93f2f98b768a8e0e61b
7 i& T" ^4 @/ t. S+ q// 0x88 -> OP_EQUALVERIFY(bit logic)
* o  V3 }5 S: s" X- c8 F( h' L' o// 0xac -> OP_CHECKSIG(crypto)% N$ F& R9 R( I1 u6 s
88 ac
. Z: ~, U( P, y' W- `/*** 第二组输出 ***/
4 L3 V8 z# A$ q9 Nc096c7a603000000) {" ?- |. t1 K" o- y% h
19, ~5 y- S6 C$ _3 b1 V9 M
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac
7 Z. K5 O# }% H/ T( c5 {7 S00000000  // lock_time,UINT32,固定4字节# J& ]5 b0 ?& S, a5 \( l7 b4 H5 t
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。( _: V9 A0 ]$ @" Z/ P5 V
即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
3 Y) Z. \7 {1 E6 r# q4 H$ y+ }, _$ K& g) v
qq20131027-2
3 a, o% N" ~/ \/ D: a+ e' F: T, y7 [交易签名* Y1 T+ j/ J' y1 f% m3 {# v/ G
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。
$ P( |  U: \& Z- Z( F签名类型
+ F. ^! A$ H& Z: l* Y由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。7 u1 r/ ]- t" A" @* _
SIGHASH_ALL
' x% Q( v2 [0 z7 A/ ]- I5 M. v该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。2 P' _: a' X4 S% p7 ]# T1 r) b
SIGHASH_NONE# B) X  F7 g0 w
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。
( {) q/ O: s" p4 o) |6 PSIGHASH_SINGLE
( z; g+ M( W% ^1 k( D3 |$ L该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。
1 u  i, t, U5 S2 {& n2 y转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5