Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

比特币交易构成(一)

梦的衣裳323
148 0 0
简介
6 _! z- H0 V+ i& ?' d% P交易(Transaction)是比特币系统的信息载体,最小单元。而块(Block)就是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保障了块的安全,也就保障了单个交易的安全。# R2 S9 G' a; Q2 a  b# s
类型
7 g$ f% [* N! _6 B+ v! e3 a交易有三种常见类型:产量交易(Generation),合成地址交易(Script Hash),通用地址交易(Pubkey Hash)。该分类并非严格意义的,只是根据交易的输入输出做的简单区分。
$ F1 S/ U  b2 r6 U9 ]3 IGeneration TX& @$ I$ {( Y" d, S1 X  f
每个Block都对应一个产量交易(Generation TX),该类交易是没有输入交易的,挖出的新币是所有币的源头。
; J/ P4 I. T" F0 cScript Hash TX
2 d9 {- B8 h# e8 y1 a" \; A9 C该类交易目前不是很常见,大部分人可能没有听说过,但是非常有意义。未来应该会在某些场合频繁使用。该类交易的接受地址不是通常意义的地址,而是一个合成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,可以生成一个合成地址。在生成过程时指定n of 3中的n,n范围是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需要三把私钥依次签名才可以。
1 k* c8 y8 o% {1 W/ |* iPubkey Hash TX0 Q+ k: k* [6 o+ v6 \* e) r
该类是最常见的交易类型,由N个输入、M个输出构成。5 e; E1 G5 d6 G6 K6 ^1 l
数据结构8 `6 v4 k* N" \$ r& g8 p& @, f
交易中存放的是货币所有权的流转信息,所有权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币系统里的所有数据都是明文的),只有当需要转移货币所有权时,才需要用私钥签名来验证。% d) q3 C1 W4 H  {! w: i4 x
  j( a- A/ ?+ U8 ?  u5 w* O0 O; N$ e
lock_time是一个多意字段,表示在某个高度的Block之前或某个时间点之前该交易处于锁定态,无法收录进Block。
" C- f, S; I8 x( q- y1 h4 z" l5 w
1 q9 I7 T) t6 O; X$ b, f若该笔交易的所有输入交易的sequence字段,均为INT32最大值(0xffffffff),则忽略lock_time字段。否则,该交易在未达到Block高度或达到某个时刻之前,是不会被收录进Block中的。
9 A/ q7 M, p) y, Q/ _! V$ F示例
$ b8 k3 d5 `7 J% \为了演示方便,我们读取稍早期的块数据,以高度116219 Block为例。
+ R2 B( G: T) `* V4 I# ~  bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611           $ [) d; X! Y3 W! l1 Y" x, k% M( A
{+ G" x, ^: r4 K2 q
    "hash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
- j* K: i$ q" _1 m0 L    "confirmations" : 144667,) K5 W: d+ ^* v! i
    "size" : 1536,3 {. z; w3 x0 z3 ^. G
    "height" : 116219,
* S- s$ ~3 Z( Q+ i0 F+ @    "version" : 1,7 v# _8 {! Y. I2 r
    "merkleroot" : "587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6",
, y) Y$ l5 t5 K6 s! z2 p! r, r    "tx" : [2 Q, U9 U' X9 q  f; k8 l# {/ e
        "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
9 z9 N& R$ z' z5 f& g7 g! G        "a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",# P7 Y8 H, @, h
        "2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",9 v9 {! k! l9 p' [5 @, X- J
        "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",5 k$ H: C# C4 z7 V& O" C5 A! M
        "3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"( T$ p6 G* \) N* V( i
    ],3 B# `2 o! _- z- q, O4 N: l
    "time" : 1301705313,
2 Z7 Z& h' v' ]    "nonce" : 1826107553,1 a6 U2 U2 I  c& ^+ m% r: V' v: ~( u& Z8 b
    "bits" : "1b00f339",0 A7 E% v7 L8 Y
    "difficulty" : 68977.78463021,% a+ t- a) a9 \  N+ H
    "previousblockhash" : "00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb",2 u: E" x" S* S1 g0 U/ [
    "nextblockhash" : "000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77"
; P9 [* W9 d7 D2 F0 \" ^! x. G) j}
- V* O' v! O( H9 H4 R. P该Block里面有5笔交易,第一笔为Generation TX,解析出来看一下具体内容:6 Y0 I# a! a, T5 b7 b& U
# ~  bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1. Q. V9 z( R' a
{
- j) x/ G5 t3 A0 w6 ~8 f2 r$ m8 S6 B# p    "hex" : "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000",
- Q1 q$ S. A6 p( K! [4 ?) ]6 i    "txid" : "be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
! m& k5 K+ L. o. x2 g9 ~! M3 B0 u. N    "version" : 1,) I# a# w/ B* R
    "locktime" : 0,7 I! L; w: T$ {- J; g3 m
    "vin" : [; U2 R" n- E2 l2 P
        {( D( }  o, q9 {: u2 \7 X4 _9 L
            "coinbase" : "0439f3001b0134",
6 `* m2 @6 Q0 J: \# f- n/ {            "sequence" : 4294967295
, s5 o  ]6 P% d& _        }+ \2 B$ }. P5 i  |6 Z4 w7 g
    ],
* g9 V/ I$ V" C# ]* j5 d' x    "vout" : [5 m* a4 T1 L0 d5 d7 o$ J
        {
; Z7 u, n& @2 H* U4 ^$ @            "value" : 50.01000000,
6 V/ {4 D0 h' q& I) v8 l, \            "n" : 0,
# f8 s: d4 w8 z: ~) j& Z            "scriptPubKey" : {; Q" j5 H! A6 R; T, F4 ]
                "asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
* e8 e" s+ L* R2 ~# g% b                "hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",+ e3 b5 W9 h) A! ?  {
                "reqSigs" : 1,8 H1 M3 Q  m6 N( [7 O% j: {
                "type" : "pubkey",
7 K  L/ }; W6 J, k/ r! v. y/ o                "addresses" : [
5 f) _; n0 M3 C" x6 U0 _                    "1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"* |: ^& b7 Y" \; a/ n
                ]
4 I- O/ i6 x- n8 w0 f8 q; E            }
% l# T! I) r; j7 J        }) X& m6 [- O- Q* M
    ],! ]5 z) [) a$ r( Z5 t7 Z
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
  {) X$ l0 m# ]# D4 n8 J    "confirmations" : 145029,) Y3 L& x6 z. ]: r, A1 u1 A1 O+ q; q
    "time" : 1301705313,9 z1 `/ ?3 x# P) I% M$ H& n; e) N9 d
    "blocktime" : 1301705313
/ g& m8 {" x) t7 r6 U6 \+ F}
4 ?$ T8 \6 x% f" }/ Z; K) }Generation TX的输入不是一个交易,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:可以把信息写入货币系统(大家很喜欢用系统中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个交易中的写入的coinbase值是:9 }, i1 T( p; I, Z, {3 q8 ~7 H/ z7 a
"coinbase":"04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73"
+ B- b  H* a- M( Y. i将该段16进制转换为ASCII字符,就是那段著名的创世块留言:
" f4 [. T6 V8 GThe Times 03/Jan/2009 Chancellor on brink of second bailout for banks- L6 v+ _; a' s1 ^& l# K
接下来展示的是一个三个输入、两个输出的普通交易:
5 p2 ]0 m, t4 g  f4 r: G. |# ~  bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
& F, ~' V+ E6 c* G{
8 E$ y  A  w8 F7 q' a    "hex" : "0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000",  I8 N8 _; N! c( e( \+ o- d* W
    "txid" : "028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",& [) |* q/ s* u
    "version" : 1,
- H" r& H$ w6 U7 D* c5 R8 I. j    "locktime" : 0,. l, W1 Q  g: Z" e
    "vin" : [
$ V8 T, f5 S# O" t- |3 P' h        {0 W, n9 e" H3 s/ `' h
            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
5 Y, i; T" q6 I            "vout" : 0,1 u& P" Q9 B0 n, `1 G9 a2 s
            "scriptSig" : {. v! {. v6 S2 i3 |$ W
                "asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",% T0 [/ U- J. K7 d' m4 w9 ~
                "hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe": k' \$ G0 f7 t- E( ~0 Q7 s
            },
" {" [. E, Y8 o8 U. `2 v7 q. g* D  j            "sequence" : 4294967295
. r, U% D* n9 m  z3 R2 H. |        },
1 U& ~6 B5 Y1 S        {
  n& t8 u- Z( \/ \. G& B4 w. W            "txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
/ D+ B, s) `2 W5 d            "vout" : 1,
/ I4 h/ j% @, \: a$ |8 o/ h            "scriptSig" : {! @' b6 M. k" \- z! \2 G) a
                "asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
4 I" ^+ s: {) |1 K# [" {7 N                "hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"
. D$ U5 f' x5 f  X' v) U5 G0 n9 A. }            },
' D' T7 c! E0 X( d. z: \            "sequence" : 4294967295% ^+ {" Q% z: s5 q8 F
        },3 ^! V( l, m$ E6 I1 ^
        {/ l* R; W* c2 J; Q9 G
            "txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",& q7 M; d  D9 ~$ f
            "vout" : 1,2 U- Z$ m0 m4 C
            "scriptSig" : {
4 r. r2 l* i! c3 [: x                "asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",# N$ x) I, \9 M5 D- Z" K
                "hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"& K8 |6 G" O5 Z. b9 ], f+ u; V/ k
            },! m/ r6 G4 k# B" D, {
            "sequence" : 4294967295
4 X* J3 x+ B# G; r# c7 k        }, e3 U! {2 [9 N' q4 c! M
    ],: S& O2 ?$ q% f3 ?' p% y
    "vout" : [/ k6 ~# m8 Y% _0 s
        {
* ]8 h1 E0 n/ P% ?; C- J            "value" : 0.84000000,+ p! n2 ?, y' ?3 E$ V
            "n" : 0," B$ p% e! F- U$ }+ P* g
            "scriptPubKey" : {
) y* g: c$ w$ H5 R% l- X7 X                "asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",. u/ c, j, E+ V9 G
                "hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",% Z/ [. ^; [* w# m
                "reqSigs" : 1,# `, t3 v* \  e4 \
                "type" : "pubkeyhash",. C) |9 H! r; P: l; b: u
                "addresses" : [
% M* U" F5 t' H4 g8 g; t- f                    "1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"9 _" S) o# U1 b  b' x
                ]
1 a$ ?0 m' g2 w            }
4 z: p! U9 p) `# N+ Z) s. P        },
6 P% N8 ]4 b* [8 |$ u& X2 b        {
9 D- b  F0 Y, r* @! i            "value" : 156.83000000,
/ u. x3 ^4 w5 p            "n" : 1,
$ Y( Y% c* y  }  f. \9 S. e" a6 b            "scriptPubKey" : {
& I  j1 a# m: D2 i8 r                "asm" : "OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG",
7 O' d3 A3 P) p; L/ ?" Q                "hex" : "76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac",
$ ^6 y% E: C2 ]5 T                "reqSigs" : 1,. X. N: b1 ~% n( S/ N4 g
                "type" : "pubkeyhash",
3 _! \# ?' q: O0 J; B                "addresses" : [
3 ^& Y  [1 y2 c5 w" R                    "1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"' V  H. n" N; s# R0 w; T
                ]7 o; D! v% S/ t/ [5 {
            }0 _  T. n1 O- x+ N  [6 x! H
        }* h7 I$ c5 y, i: Y5 @
    ],* P+ c+ K0 F  \2 J" \; t- E
    "blockhash" : "0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611",
0 ?, \0 A& u0 J8 L' i9 Z    "confirmations" : 147751,
. n. y, H# M% f4 Z& q    "time" : 1301705313,
6 K7 |$ N8 h# e    "blocktime" : 1301705313$ r, b$ A6 H" M$ i; G& e
}
. E& l: e, o7 d; {+ X' Q字段hex记录了所有相关信息,后面显示的是hex解析出来的各类字段信息。下面把逐个分解hex内容(hex可以从上面的直接看到):+ Q% e" ?& B8 ^; m) o
01000000   // 版本号,UINT32
# v5 r! \: W8 f03         // Tx输入数量,变长INT。3个输入。) T' S4 {1 @; F, K/ G
/*** 第一组Input Tx ***/
4 R( h! C% X3 n* s1 X- A8 h% r* V// Tx Hash,固定32字节
' O$ J0 F8 T; B! Ec9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7  r/ c% z$ J! d
00000000  // 消费的Tx位于前向交易输出的第0个,UINT32,固定4字节
2 q- `0 F; V; U+ [$ Z8a        // 签名的长度, 0x8A = 138字节& E4 O, T# H0 K* y9 H9 S' W
// 138字节长度的签名,含有两个部分:公钥+签名
/ h0 R3 z3 w( A7 P47       // 签名长度,0x47 = 71字节* {1 Z) O; g0 H: p( S. p
3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01; ?3 B! C6 p( H  z
41       // 公钥长度,0x41 = 65字节
$ j% a+ G+ C" [9 W048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe
9 a3 q! N& a* `8 W' i$ ~ffffffff  // sequence,0xffffffff = 4294967295, UINT32, 固定4字节
% m4 o& F9 V6 X7 c/*** 第二组Input Tx。与上同理,省略分解 ***/$ h6 T1 }* c2 q1 q- ^
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff
! ~' I# Y- J+ N2 l+ L. r/*** 第三组Input Tx ***/
9 [4 m3 o  g$ Y; k! {% j2 dc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff
  w  e. w6 l* a0 G- ~02  // Tx输出数量,变长INT。两个输出。* V2 q7 q& P; |: O
/*** 第一组输出 ***/
: m( m$ M3 T8 N1 W. t; R+ n00bd010500000000    // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi8 n1 I( Q* \* M
19                  // 输出目的地址字节数, 0x19 = 25字节,由一些操作码与数值构成
1 F4 {; \# z; I# V4 m' z* J* D// 目标地址# d3 y7 N' m, o+ K  D
// 0x76 -> OP_DUP(stack ops)" r# h( s+ h$ {8 h/ }
// 0xa9 -> OP_HASH160(crypto), m2 L( y8 p* O; v( `  m
// 0x14 -> 长度,0x14 = 20字节7 P; I9 j+ S! K
76 a9 14 4 o: m5 I+ ]( o& I0 Q
// 地址的HASH160值,20字节
2 f# ]  b" j0 ~  i9 v( Y+ j634228c26cf40a02a05db93f2f98b768a8e0e61b ) `! M; n' q9 o# T/ I1 Q& L
// 0x88 -> OP_EQUALVERIFY(bit logic)$ v1 R& S! V/ T8 I. h3 x7 \  V
// 0xac -> OP_CHECKSIG(crypto)
% C5 s) U+ {. R7 ]6 o, m88 ac2 f' A0 E8 m7 N' B. S
/*** 第二组输出 ***/- B4 S  H; z4 \$ t$ U, t8 p
c096c7a603000000
* v- o; y+ S% f2 Q5 m0 f+ n19/ [/ R4 Z% Y. g! X% K9 U
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac4 [9 T! f) E% P
00000000  // lock_time,UINT32,固定4字节, k3 ]! d# z3 Z* w# M
Tx Hash,俗称交易ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个交易只能成为下一个的输入,有且仅有一次,那么不存在输入完全相同的交易,那么就不存在相同的Tx Hash(SHA256碰撞概率极小,所以无需考虑Hash碰撞的问题,就像无需考虑地址私钥被别人撞到一样)。  r0 E9 h; p5 i- L! v4 N
即便如此,在系统里依然产生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘记修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就构造了两个完全一模一样的交易,分别位于两个Block的第一个位置。这个对系统不会产生什么问题,但只要花费其中一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白损失了挖出的币。该交易ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。
% E; ^- b( O$ e) F  h3 q/ V2 A& r9 ^6 u
qq20131027-21 z- q- P7 _( V5 n$ _$ k3 ^: S0 a
交易签名9 s( c8 S( k+ s) Z
签名是对所有权的验证,节点收到交易广播后,会对交易进行验证,通过后则收录进内存、打包进Block,否则,丢弃之。签名就类似传统纸质合同盖章、签字过程,合法转移所有权的保证手段。
, K4 V9 @; i! J/ J- U" U签名类型2 _# D- w: m# {- E, J
由于一个交易的输入、输出都可能具有多个,那么签名也具有多种类型,目前共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。
! d4 p8 G' [2 v, zSIGHASH_ALL1 Q0 i' j3 H% ~5 `' T1 V
该签名类型为默认类型,也是目前绝大部分交易采用的,顾名思义即签名整单交易。首先,组织所有输出、输入,就像上文分解Hex过程一样,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完整的交易Hex(只缺签名字段)。然后,每一个输入均需使用私钥对该段数据进行签名,签名完成后各自填入相应的位置,N个输入N个签名。简单理解就是:对于该笔单子,认可且只认可的这些输入、输出,并同意花费我的那笔输入。% t/ J4 b7 i$ U1 e4 e1 N4 ]
SIGHASH_NONE" a# q* \: R4 X3 g1 M3 ]
该签名类型是最自由松散的,仅对输入签名,不对输出签名,输出可以任意指定。某人对某笔币签名后交给你,你可以在任意时刻填入任意接受地址,广播出去令其生效。简单理解就是:我同意花费我的那笔钱,至于给谁,我不关心。# x4 K9 n& [) d3 m' J
SIGHASH_SINGLE
! q" H6 m- k6 i! D该签名类型其次自由松散,仅对自己的输入、输出签名,并留空sequence字段。其输入的次序对应其输出的次序,比如输入是第3个,那么签名的输出也是第三个。简单理解就是:我同意花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。
! u* h( G% @8 A% k0 K转自比特币实验室
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

梦的衣裳323 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    5