From ffbbbb0b4434f00345a910a097005f228a91516b Mon Sep 17 00:00:00 2001 From: Martin Boehm Date: Wed, 27 Feb 2019 13:29:42 +0100 Subject: [PATCH] Fix dash after DIP2 update to the blockchain --- bchain/coins/dash/dashparser.go | 17 +- bchain/coins/dash/dashparser_test.go | 307 ++++++++++++++++++ bchain/coins/dash/dashrpc.go | 57 ++++ bchain/coins/dash/testdata/block_dump.1028159 | 1 + bchain/coins/dash/testdata/block_dump.1028160 | 1 + bchain/coins/dash/testdata/block_dump.500001 | 1 + 6 files changed, 383 insertions(+), 1 deletion(-) create mode 100644 bchain/coins/dash/dashparser_test.go create mode 100644 bchain/coins/dash/testdata/block_dump.1028159 create mode 100644 bchain/coins/dash/testdata/block_dump.1028160 create mode 100644 bchain/coins/dash/testdata/block_dump.500001 diff --git a/bchain/coins/dash/dashparser.go b/bchain/coins/dash/dashparser.go index 6bb014c2..9d4d4d4f 100644 --- a/bchain/coins/dash/dashparser.go +++ b/bchain/coins/dash/dashparser.go @@ -1,6 +1,7 @@ package dash import ( + "blockbook/bchain" "blockbook/bchain/coins/btc" "github.com/martinboehm/btcd/wire" @@ -45,11 +46,15 @@ func init() { // DashParser handle type DashParser struct { *btc.BitcoinParser + baseparser *bchain.BaseParser } // NewDashParser returns new DashParser instance func NewDashParser(params *chaincfg.Params, c *btc.Configuration) *DashParser { - return &DashParser{BitcoinParser: btc.NewBitcoinParser(params, c)} + return &DashParser{ + BitcoinParser: btc.NewBitcoinParser(params, c), + baseparser: &bchain.BaseParser{}, + } } // GetChainParams contains network parameters for the main Dash network, @@ -77,3 +82,13 @@ func GetChainParams(chain string) *chaincfg.Params { return &MainNetParams } } + +// PackTx packs transaction to byte array using protobuf +func (p *DashParser) PackTx(tx *bchain.Tx, height uint32, blockTime int64) ([]byte, error) { + return p.baseparser.PackTx(tx, height, blockTime) +} + +// UnpackTx unpacks transaction from protobuf byte array +func (p *DashParser) UnpackTx(buf []byte) (*bchain.Tx, uint32, error) { + return p.baseparser.UnpackTx(buf) +} diff --git a/bchain/coins/dash/dashparser_test.go b/bchain/coins/dash/dashparser_test.go new file mode 100644 index 00000000..0a373fce --- /dev/null +++ b/bchain/coins/dash/dashparser_test.go @@ -0,0 +1,307 @@ +// +build unittest + +package dash + +import ( + "blockbook/bchain" + "blockbook/bchain/coins/btc" + "bytes" + "encoding/hex" + "fmt" + "io/ioutil" + "math/big" + "path/filepath" + "reflect" + "testing" +) + +type testBlock struct { + size int + time int64 + txs []string +} + +var testParseBlockTxs = map[int]testBlock{ + 500001: { + size: 6521, + time: 1468043164, + txs: []string{ + "6d45c761892eb07b7651140aa42901b03cb501a82585fb360ff8f155d46727b0", + "5f6cbefca8a48cccd40805013e5f6c602e0d35c3511ccb7a2ae25e51dd95d38f", + "0eb37faa8b2f24c68c8e4a3009a051caded005d5f13f0dc216ff6422256f6b7b", + "2565cfacb7f8cbc73dc1053b06ca527d9798bf6bf29a778cb5924a17dd167a39", + "85f93911e8a4d8d9bbf3de009a666ed594d62aa41a34a9e3763058067e64f084", + "46712f0f32a392c71df443798e120d0f40eb93063631a992b3dedd4d4afc04e4", + "1790efaa05caad7ab546ef479041c3cb1cb9bca7b9cc7992566d2e2344701167", + }, + }, + // last block without special transactions, valid for bitcoin parser + 1028159: { + size: 8608, + time: 1551246608, + txs: []string{ + "a800f5b2dde5d48bda08d9d6fc5647c41cec902ce690a5a2be0665e6acf77c35", + "981d6668e65b70fcd97ddd68319f3c5e5163e510cc0ed479be5667bf1782f036", + "b9fd19d37ec97d038da2ccad9414ef311275d5fd3762bdec3e76f535e2295f4c", + "1b4051d02c9919ef8d482cadf6ca2002442d9436b444923cd295fe56009ec52b", + "6f1ec8472624b8e7481024ee8b228086b9b32606790e94f161589d3fe2b3a826", + "b12c512803d733f3f7afce846e18c6a46c713533cdb18a13392cbda88866523c", + "69e6d67946ed660b440c8e457933ae594ce60acdbe17ded091ce0ac6f41ed186", + "755c3b7cad9b569def3f69f897da2ee7732ee2e0a165965512680b4fe9086e12", + "63de772ff400789c2c3ad9be653817bebf92551e139d80c8e735bb0610865500", + "1566bd9bb2413c63412a13d16c7017814363f668d8b3bfe66a5478734e73f010", + "d7f441b0abca7df6530a0620661c839244bb6f26e1b4a53b783fb3acc1f5f42a", + "ec7762d0e02a87e311b128662db8ef4161dcc9d9f2831250c7366eed98fc744b", + "b977669bfc0ac3b9ca9de7512fda564a69fe49dde8a286fcb7ea99147db54b5f", + }, + }, + // first block with special transactions, invalid for bitcoin parser + // 1028160: { + // size: 2347, + // time: 1551246710, + // txs: []string{ + // "71d6975e3b79b52baf26c3269896a34f3bedfb04561c692ffa31f64dada1f9c4", + // "ed732a404cdfd4e0475a7a016200b7eef191f2c9de0ffdef8a20091c0499299c", + // "99d0613f82ea1f928bbc98318665adbdf5b40d206bd487fe77d542e86c903f55", + // "05cbf334a563468d0e378c56b43fb5254ee9c0e35ca8fab5cb242ebd825ae97b", + // "ee91fae7be36b3b81bc60992e904e1ae91e7dffdd5751ccaef557ba62ea80a4f", + // }, + // }, +} + +func helperLoadBlock(t *testing.T, height int) []byte { + name := fmt.Sprintf("block_dump.%d", height) + path := filepath.Join("testdata", name) + + d, err := ioutil.ReadFile(path) + if err != nil { + t.Fatal(err) + } + + d = bytes.TrimSpace(d) + + b := make([]byte, hex.DecodedLen(len(d))) + _, err = hex.Decode(b, d) + if err != nil { + t.Fatal(err) + } + + return b +} + +func TestParseBlock(t *testing.T) { + p := NewDashParser(GetChainParams("main"), &btc.Configuration{}) + + for height, tb := range testParseBlockTxs { + b := helperLoadBlock(t, height) + + blk, err := p.ParseBlock(b) + if err != nil { + t.Errorf("ParseBlock() error %v", err) + } + + if blk.Size != tb.size { + t.Errorf("ParseBlock() block size: got %d, want %d", blk.Size, tb.size) + } + + if blk.Time != tb.time { + t.Errorf("ParseBlock() block time: got %d, want %d", blk.Time, tb.time) + } + + if len(blk.Txs) != len(tb.txs) { + t.Errorf("ParseBlock() number of transactions: got %d, want %d", len(blk.Txs), len(tb.txs)) + } + + for ti, tx := range tb.txs { + if blk.Txs[ti].Txid != tx { + t.Errorf("ParseBlock() transaction %d: got %s, want %s", ti, blk.Txs[ti].Txid, tx) + } + } + } +} + +var ( + testTx1 = bchain.Tx{ + Blocktime: 1551246710, + Confirmations: 0, + Hex: "0100000001f85264d11a747bdba77d411e5e4a3d35e3aeb5843b34a95234a2121ac65496bd000000006b483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190ffffffff02ec3f8a2a010000001976a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac3116491d000000001976a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac00000000", + LockTime: 0, + Time: 1551246710, + Txid: "ed732a404cdfd4e0475a7a016200b7eef191f2c9de0ffdef8a20091c0499299c", + Version: 1, + Vin: []bchain.Vin{ + { + Txid: "bd9654c61a12a23452a9343b84b5aee3353d4a5e1e417da7db7b741ad16452f8", + Vout: 0, + ScriptSig: bchain.ScriptSig{ + Hex: "483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190", + }, + Sequence: 4294967295, + }, + }, + Vout: []bchain.Vout{ + { + N: 0, + ScriptPubKey: bchain.ScriptPubKey{ + Addresses: []string{"XkycBX1ykVXXs92pAi6ZQwZPEre9kSHHKH"}, + Hex: "76a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac", + }, + ValueSat: *big.NewInt(5008670700), + }, + { + N: 1, + ScriptPubKey: bchain.ScriptPubKey{ + Addresses: []string{"Xm1R9thKBm2EZKZevXsmMX4DVwQQuTohZu"}, + Hex: "76a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac", + }, + ValueSat: *big.NewInt(491329073), + }, + }, + } + testTxPacked1 = "0a20ed732a404cdfd4e0475a7a016200b7eef191f2c9de0ffdef8a20091c0499299c12e2010100000001f85264d11a747bdba77d411e5e4a3d35e3aeb5843b34a95234a2121ac65496bd000000006b483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190ffffffff02ec3f8a2a010000001976a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac3116491d000000001976a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac0000000018f6cad8e305200028c0e03e3299010a001220bd9654c61a12a23452a9343b84b5aee3353d4a5e1e417da7db7b741ad16452f81800226b483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c219028ffffffff0f3a480a05012a8a3fec10001a1976a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac2222586b7963425831796b565858733932704169365a51775a50457265396b5348484b483a470a041d49163110011a1976a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac2222586d31523974684b426d32455a4b5a657658736d4d5834445677515175546f685a754001" +) + +func TestBaseParser_ParseTxFromJson(t *testing.T) { + p := NewDashParser(GetChainParams("main"), &btc.Configuration{}) + tests := []struct { + name string + msg string + want *bchain.Tx + wantErr bool + }{ + { + name: "normal tx", + msg: `{"hex":"0100000001f85264d11a747bdba77d411e5e4a3d35e3aeb5843b34a95234a2121ac65496bd000000006b483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190ffffffff02ec3f8a2a010000001976a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac3116491d000000001976a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac00000000","txid":"ed732a404cdfd4e0475a7a016200b7eef191f2c9de0ffdef8a20091c0499299c","size":226,"version":1,"type":0,"locktime":0,"vin":[{"txid":"bd9654c61a12a23452a9343b84b5aee3353d4a5e1e417da7db7b741ad16452f8","vout":0,"scriptSig":{"asm":"3045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6[ALL]03093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190","hex":"483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190"},"value":55.00000000,"valueSat":5500000000,"address":"Xgcv4bKAXaWf5sjX9KR49L98jeMwNgeXWh","sequence":4294967295}],"vout":[{"value":50.08670700,"valueSat":5008670700,"n":0,"scriptPubKey":{"asm":"OP_DUPOP_HASH16070dcef2a22575d7a8f0779fb1d6cdd48135bd227OP_EQUALVERIFYOP_CHECKSIG","hex":"76a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac","reqSigs":1,"type":"pubkeyhash","addresses":["XkycBX1ykVXXs92pAi6ZQwZPEre9kSHHKH"]}},{"value":4.91329073,"valueSat":491329073,"n":1,"scriptPubKey":{"asm":"OP_DUPOP_HASH16071348f7780e955a2a60eba17ecc4c826ebc23a98OP_EQUALVERIFYOP_CHECKSIG","hex":"76a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac","reqSigs":1,"type":"pubkeyhash","addresses":["Xm1R9thKBm2EZKZevXsmMX4DVwQQuTohZu"]}}],"blockhash":"000000000000002099caaf1a877911d99a5980ede9b981280eecb291afedf87b","height":1028160,"confirmations":0,"time":1551246710,"blocktime":1551246710,"instantlock":false}`, + want: &testTx1, + }, + { + name: "special tx - DIP2", + msg: `{"hex":"03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff170340b00f1291af3c09542bc8349901000000002f4e614effffffff024181f809000000001976a9146a341485a9444b35dc9cb90d24e7483de7d37e0088ac3581f809000000001976a9140d1156f6026bf975ea3553b03fb534d0959c294c88ac0000000026010040b00f000000000000000000000000000000000000000000000000000000000000000000","txid":"71d6975e3b79b52baf26c3269896a34f3bedfb04561c692ffa31f64dada1f9c4","size":181,"version":3,"type":5,"locktime":0,"vin":[{"coinbase":"0340b00f1291af3c09542bc8349901000000002f4e614e","sequence":4294967295}],"vout":[{"value":1.67280961,"valueSat":167280961,"n":0,"scriptPubKey":{"asm":"OP_DUPOP_HASH1606a341485a9444b35dc9cb90d24e7483de7d37e00OP_EQUALVERIFYOP_CHECKSIG","hex":"76a9146a341485a9444b35dc9cb90d24e7483de7d37e0088ac","reqSigs":1,"type":"pubkeyhash","addresses":["XkNPrBSJtrHZUvUqb3JF4g5rMB3uzaJfEL"]}},{"value":1.67280949,"valueSat":167280949,"n":1,"scriptPubKey":{"asm":"OP_DUPOP_HASH1600d1156f6026bf975ea3553b03fb534d0959c294cOP_EQUALVERIFYOP_CHECKSIG","hex":"76a9140d1156f6026bf975ea3553b03fb534d0959c294c88ac","reqSigs":1,"type":"pubkeyhash","addresses":["XbswPXhcLqm5AN5gwcTTyiUGSP2YndWwk9"]}}],"extraPayloadSize":38,"extraPayload":"010040b00f000000000000000000000000000000000000000000000000000000000000000000","cbTx":{"version":1,"height":1028160,"merkleRootMNList":"0000000000000000000000000000000000000000000000000000000000000000"},"blockhash":"000000000000002099caaf1a877911d99a5980ede9b981280eecb291afedf87b","height":1028160,"confirmations":140,"time":1551246710,"blocktime":1551246710,"instantlock":false}`, + want: &bchain.Tx{ + Blocktime: 1551246710, + Confirmations: 140, + Hex: "03000500010000000000000000000000000000000000000000000000000000000000000000ffffffff170340b00f1291af3c09542bc8349901000000002f4e614effffffff024181f809000000001976a9146a341485a9444b35dc9cb90d24e7483de7d37e0088ac3581f809000000001976a9140d1156f6026bf975ea3553b03fb534d0959c294c88ac0000000026010040b00f000000000000000000000000000000000000000000000000000000000000000000", + LockTime: 0, + Time: 1551246710, + Txid: "71d6975e3b79b52baf26c3269896a34f3bedfb04561c692ffa31f64dada1f9c4", + Version: 3, + Vin: []bchain.Vin{ + { + Coinbase: "0340b00f1291af3c09542bc8349901000000002f4e614e", + Sequence: 4294967295, + }, + }, + Vout: []bchain.Vout{ + { + N: 0, + ScriptPubKey: bchain.ScriptPubKey{ + Addresses: []string{"XkNPrBSJtrHZUvUqb3JF4g5rMB3uzaJfEL"}, + Hex: "76a9146a341485a9444b35dc9cb90d24e7483de7d37e0088ac", + }, + ValueSat: *big.NewInt(167280961), + }, + { + N: 1, + ScriptPubKey: bchain.ScriptPubKey{ + Addresses: []string{"XbswPXhcLqm5AN5gwcTTyiUGSP2YndWwk9"}, + Hex: "76a9140d1156f6026bf975ea3553b03fb534d0959c294c88ac", + }, + ValueSat: *big.NewInt(167280949), + }, + }, + }, + }} + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := p.ParseTxFromJson([]byte(tt.msg)) + if (err != nil) != tt.wantErr { + t.Errorf("DashParser.ParseTxFromJson() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("DashParser.ParseTxFromJson() = %+v, want %+v", got, tt.want) + } + }) + } +} + +func Test_PackTx(t *testing.T) { + type args struct { + tx bchain.Tx + height uint32 + blockTime int64 + parser *DashParser + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + { + name: "dash-1", + args: args{ + tx: testTx1, + height: 1028160, + blockTime: 1551246710, + parser: NewDashParser(GetChainParams("main"), &btc.Configuration{}), + }, + want: testTxPacked1, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.args.parser.PackTx(&tt.args.tx, tt.args.height, tt.args.blockTime) + if (err != nil) != tt.wantErr { + t.Errorf("packTx() error = %v, wantErr %v", err, tt.wantErr) + return + } + h := hex.EncodeToString(got) + if !reflect.DeepEqual(h, tt.want) { + t.Errorf("packTx() = %v, want %v", h, tt.want) + } + }) + } +} + +func Test_UnpackTx(t *testing.T) { + type args struct { + packedTx string + parser *DashParser + } + tests := []struct { + name string + args args + want *bchain.Tx + want1 uint32 + wantErr bool + }{ + { + name: "dash-1", + args: args{ + packedTx: testTxPacked1, + parser: NewDashParser(GetChainParams("main"), &btc.Configuration{}), + }, + want: &testTx1, + want1: 1028160, + wantErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + b, _ := hex.DecodeString(tt.args.packedTx) + got, got1, err := tt.args.parser.UnpackTx(b) + if (err != nil) != tt.wantErr { + t.Errorf("unpackTx() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("unpackTx() got = %v, want %v", got, tt.want) + } + if got1 != tt.want1 { + t.Errorf("unpackTx() got1 = %v, want %v", got1, tt.want1) + } + }) + } +} diff --git a/bchain/coins/dash/dashrpc.go b/bchain/coins/dash/dashrpc.go index dec0ee49..a2aea6ba 100644 --- a/bchain/coins/dash/dashrpc.go +++ b/bchain/coins/dash/dashrpc.go @@ -6,8 +6,11 @@ import ( "encoding/json" "github.com/golang/glog" + "github.com/juju/errors" ) +const firstBlockWithSpecialTransactions = 1028160 + // DashRPC is an interface to JSON-RPC bitcoind service. type DashRPC struct { *btc.BitcoinRPC @@ -54,3 +57,57 @@ func (b *DashRPC) Initialize() error { return nil } + +// GetBlock returns block with given hash. +func (b *DashRPC) GetBlock(hash string, height uint32) (*bchain.Block, error) { + if hash == "" && height < firstBlockWithSpecialTransactions { + return b.BitcoinRPC.GetBlock(hash, height) + } + + var err error + if hash == "" && height > 0 { + hash, err = b.GetBlockHash(height) + if err != nil { + return nil, err + } + } + + glog.V(1).Info("rpc: getblock (verbosity=1) ", hash) + + res := btc.ResGetBlockThin{} + req := btc.CmdGetBlock{Method: "getblock"} + req.Params.BlockHash = hash + req.Params.Verbosity = 1 + err = b.Call(&req, &res) + + if err != nil { + return nil, errors.Annotatef(err, "hash %v", hash) + } + if res.Error != nil { + return nil, errors.Annotatef(res.Error, "hash %v", hash) + } + + txs := make([]bchain.Tx, 0, len(res.Result.Txids)) + for _, txid := range res.Result.Txids { + tx, err := b.GetTransaction(txid) + if err != nil { + if err == bchain.ErrTxNotFound { + glog.Errorf("rpc: getblock: skipping transanction in block %s due error: %s", hash, err) + continue + } + return nil, err + } + txs = append(txs, *tx) + } + block := &bchain.Block{ + BlockHeader: res.Result.BlockHeader, + Txs: txs, + } + return block, nil +} + +// GetTransactionForMempool returns a transaction by the transaction ID. +// It could be optimized for mempool, i.e. without block time and confirmations +func (z *DashRPC) GetTransactionForMempool(txid string) (*bchain.Tx, error) { + return z.GetTransaction(txid) +} diff --git a/bchain/coins/dash/testdata/block_dump.1028159 b/bchain/coins/dash/testdata/block_dump.1028159 new file mode 100644 index 00000000..4a9953b7 --- /dev/null +++ b/bchain/coins/dash/testdata/block_dump.1028159 @@ -0,0 +1 @@ +0800002082c8c074ab8d83ef7a7d1a5b03b811c86582cb0362010bae34000000000000000b058b3abd99c10445f1cfad9928c1c5d32e500125eeafbe2791bc5923fdde341025765c63924119b35cf1990d02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff17033fb00f041025765c2f2fb7003fce8b05000000000000ffffffff02799cf809000000001976a9142d667ccbf7c8dda7fce8792aea5c10f8d5c625e788ac869cf809000000001976a914c78600abb06d9f7b925faecd9fa005c97e210d5288ac000000000200000002abb86bf166b00ab3b738014bc60e82f5aefc3a202a06b549928a12f9133ce532010000006a47304402201ffa814d04d56fd33ba58abe0b30904c71d841024b495975200c4e392177864202205f3163d7157a4181f5117f7e8169cdd5b2a866046931df461dc7d16ad4d571c4012103e30716039805ff9e00d8b4e6b3fd9a1f61dfea373c7bdc66f8385dd272eb5af6feffffff4a67c237276472b28c4277126df09fadb66ebb2a6130a941dd2ab201a51c544b000000006a47304402205a2bc45baedaefe93fff473e8e536f2d530319185c1bc55c9e26532a2339dbb502201191753741371207893bb5d169372d6e1efe81870a7549114c76cab0c7136b87012103e30716039805ff9e00d8b4e6b3fd9a1f61dfea373c7bdc66f8385dd272eb5af6feffffff2ca1860100000000001976a9141bcaa1b18c3ad6c218ec38b347aa712d7067dd2a88aca1860100000000001976a9141c61c0e33b1e6a10c6823408e1194074d501608188aca1860100000000001976a9142f81879c0ea47281e154a58563e6d23e41cfc2e388aca1860100000000001976a914974374b2eed4614eedbc9beced0b7d62ae33108a88aca1860100000000001976a914a2cbe2d2ad7d5306ff88d4b163475b003f6066a488aca1860100000000001976a914abc35f06e27849a4d24088d9c2b14c78793e8f3a88aca1860100000000001976a914b106833cdc0cadb3ed672860849cb3c0e45ba71488aca1860100000000001976a914bda4b6e7ace6bb922cff6695b523c0ce0b921ab988aca1860100000000001976a914ea2604efeacde34f345f9d81b53c6912778ae3b888aca1860100000000001976a914edafbe57ee3780f6616f1ed8b1b5a1b1ae4231af88aca1860100000000001976a914f201bb733a553071a0ab25961ab9fee78bb8d68488ac4a420f00000000001976a9140b9d258e345647de4b2fd13f38eebcc145e07e1e88ac4a420f00000000001976a91430a42fc287102db9284b23a3a6767b9b2358b77088ac4a420f00000000001976a9143b5d84da0c7b90fb059517e9a6c8a12aad34e3a388ac4a420f00000000001976a914503249ec3503e2835645bd16c58ff38fe497777288ac4a420f00000000001976a9145e63e8d6d8d33e744761a0f83a6669d665bf243d88ac4a420f00000000001976a9149d4d4ffcc337ca2440075d2a48c260a8d1bbf9e188ac4a420f00000000001976a914c187da24c9cb48c920092bbf939b00140243770188ac4a420f00000000001976a914d0fbe8f180f1ce28bd9bb998b75290796b05363a88ac4a420f00000000001976a914d67a411c38565a4672a127b6720f8df92468b5b488ac4a420f00000000001976a914e854b7150e9b57129330a7d14a59aba78e30025b88ac4a420f00000000001976a914ea9b3175a48c42e0946095a28f191de6bd5cbe0f88ace4969800000000001976a91415a02c889b2bf0010c8423a3257196cb916ad2f988ace4969800000000001976a914252edb9151f59eebc2c0be855ac4ff4e5d15c17088ace4969800000000001976a91469865565e4f11b0e9f3cd7f907c63c14c17e1f7488ace4969800000000001976a9147b1680af17154047cd45da3de9719261512d492788ace4969800000000001976a9148f8703d65892a3e1367a376b915c885b4b13caac88ace4969800000000001976a9149577f8851fbe4e0cb164fdf18c1900de7c70829588ace4969800000000001976a914b874d152bfc8af4a079361bc146af198cd99606688ace4969800000000001976a914c2b7ca8aafa9a85d761e3b85f405fc89b68e110a88ace4969800000000001976a914df2be59063355dee14f9f0ac2512829088b77f0f88ace4969800000000001976a914ef9f4a78e6ac2476ff324806cd920cfb08d677e688ace4969800000000001976a914f72f4e41b78c43578c3b89de3de8bf241871482088ac665d0602000000001976a9147df28b27bdf274b33e6ec1fd0ee0e063eb1b0a1e88ace8e4f505000000001976a9142acb0b417798b79b37f77ed4bfead36e7d76cd9a88ace8e4f505000000001976a9142adf3c6215eaa9541daba077c09cd427a29fd58788ace8e4f505000000001976a9142b6a45930b4fe7fe2f6ff75a20ed971ba144f40688ace8e4f505000000001976a9142c3b6e15c2c08c80604af49df545c14fabe24a4488ace8e4f505000000001976a914629857368c682b9f575a21a347bfaf60d0f339ea88ace8e4f505000000001976a91467e934a99ca3199c0027b037f72f7ca48e74999788ace8e4f505000000001976a9147f95d798ff2616bbb5e221f36c6e6396378a1bf588ace8e4f505000000001976a914846498299cc6e69c63dba644879ac3ad069ee1e888ace8e4f505000000001976a9148af99c57239a44a9ffb9a94ddec9c652033f19b788ace8e4f505000000001976a914ee96219234295e9c8a950483078305806fdeab8c88ac3cb00f000100000001ae249b02afcc9644863ec7fdfeb60055458fc8ffbf8034a45856d279fc522e12010000006a473044022075f4870ec9c4a9217eb24414bcb4a459aad873e2fd228264b3e547588b93cc330220037548cad615af49470db2a0e3322b8202292fa58863dc7ca9ca54848093b03b012102b7c48c2cf9a07c8fc79be4a601ae2a6b4193d1f0f222480c478bc43873a151efffffffff0103acd4060000000017a9144cc8145f0456d0045c1a3ff982c358943c1b914f870000000002000000083f4f280d5b16b5d58711dc291a11d88ce8a56e4a558e17b23519df87bfd8a914020000006a47304402207e59ee863eaaed648bf01391c3eddd3ca3b2aacf0fc22f621622b66befd6bd6002204510b76c2bbc114b1473178e9334804e84d3917fc39b7e32d2e4908b8f043dd88121029b5efa8ce447be2d8d6e75b478775d020e662c0fe2d2c4904e7928b99de807d2fffffffffc4a98b870f6698cf845559ff547adce01cb22e6b1c3c43cc971435da46d7c2f010000006b4830450221009f66acc67519c2548e9dda325414bbee1c238f20beb8b2897cb56c7abbb38ff402204d9c4bad4af96451e661240fbeee968f8b4c4681bd386c6a7215d864de892358812102a5eac12e1acd3fcbbbecd9c367848142c64c3bfff035b733b0d8ca00152e64c5fffffffffc4a98b870f6698cf845559ff547adce01cb22e6b1c3c43cc971435da46d7c2f020000006b483045022100af6f91c55ab17b20ff906fc061d34a98ae37e69b9eccdaa319ac2a5b7218d10b02201b3afb9ff988627d426ef87a4f12e5b0f38d8629957f622213141d910484c3128121026cf96b37230bc86f218ba097e0bad2de1c21788df87165b1ebed1d2009d76240ffffffff6f6d1037abf15cb03e840d5555b70fd7ca2ce392c0d9302629a63b6f9cfd7c46030000006a47304402200a3467c3a59e2d7c4d3fd37789b41a226c722ba3a26e85bbc90ce2385560631e02207a8d5494e1938374499a655561c34eb1cde9e68c0024ed8ef35c2b18dbb590b181210367c14c1604d62a0c0bd0403412f34e2a7c3c0aacce46c597dcf40417da690cf6ffffffff465d9a139581f9cb35835d31df9424ee76feffbdff24edb0b9b298167c246e5d040000006b483045022100a0fe14a038c865941a49e510f9f3cb67b5449580ae591f9d2fcf87682862805302205879fb31bad41088598c6c366138434a32085ac37386126ee3fe9a9648c2f94b812103207d6c18a779937ad04f1e4323289a758918859cb4ecf11e9aa82eb89ee6f476ffffffff465d9a139581f9cb35835d31df9424ee76feffbdff24edb0b9b298167c246e5d090000006a47304402204a65bf261920b2605179f69604d6de560982e89ed068a60bc5cd738b2d2ae347022044ef4101c71658ed51cbf771a18df2bfa22f861415cdb19da1e7ec9fc3cecf4c812103f8e2610bb4503abd2ec4eff7c929f57c8b75d929fc7820417ecae99ec60ca891ffffffff51a07465918218932fefacd529f080046613fbb0ca025230fdac4e8869648bbc010000006a47304402200e69a3522681e7f4ce405fafab35a37c56f6300ee9e1e175e71fbad576c6c069022008bfecbeb9fc13cca686e521cbfaa04db2852e627e5c02efb90f718323c6bd01812103e4df689e29bc0533f6ea57e9583c6d0f4d96be7457ed5d366f97065788e78c55ffffffffb2371fe4f6ed3fe34300a544e845ed02fd7c419b7751f37ea753662ea2c9cfc0070000006a4730440220133560af1f3fd12f77e1cb0a9a18599e5db2b29e753b3ed93b7f0527c88258b90220591affc93db978e7f71eb7a6b346733f571f741f89c5dc82e460ef322acb2199812102aeb7c208d5611ca2dd6e7e372cbe6948c0a6c163cc3ef30444cda34728ea81bdffffffff084a420f00000000001976a9141a8088591153744727c5428c296457341811422688ac4a420f00000000001976a9144ec5a1e2616e03a3fdb3d8745069165162c55f9288ac4a420f00000000001976a91466ef32cddd351ca44c6a1badefc68e0ada26eeb988ac4a420f00000000001976a9147d37972e0b49a391b44606a23f61c7d3493c602c88ac4a420f00000000001976a914aabe5ea4ac4a0035b07512e3d95313490643a30888ac4a420f00000000001976a914c1f0d6522ea8ad87c1aacf8a0d5ccbb5591e68ca88ac4a420f00000000001976a914c5dcb2805430615ca827b89a5b5591d3cbda13a888ac4a420f00000000001976a914f9db8f673fcb394bcb97ab891c01bf09317b720488ac00000000020000000b1a1aa0ff2cca04bc6a24b67b20933b4d700a451a76c37cbeaa751d6ebfa3790b000000006a473044022037dc3656b1195d38899ab34a5025881af5767745bb6b29f5fd20a2b300aa282002200731a15602c2d818cb566c32107ac3ef0d3998f406ed5d420dd4632e614df509812102925a2db28b1eb8e606544bbf10f70dc2437c9f955574f1824eab9edbec2d797affffffffdfa400e359ded287a9d2d96b07aa1b3dd2be42e221ddcf71527f4198b343bc27060000006b4830450221009a01ead520d66d51c55b294de201db54c89115bae26b311e941b155e683cab5c022028ae21a05d4781dbe91cb47ad859a2e8024a4dd74817c5bc1f1510ef572b4aab812103b6c7ef00a136dc52747297175984c61d7dd6a271314d9e27f10fc74b236ef656ffffffffc7e0b5af92b73b5d9dd85b90e025792d0e6919581091f69d45d827e46f693d2c000000006a473044022053e2daa051de6dd6244c37a0fd08e3e57988e8aba230cb7692c065f177779c7402202a7b3b9d2967d429a01d9db4bbd361023ef955c9354a1de0af363ff2f18c2ac58121021fa39f61e0980d448c1a9d0e828924addd609c9c6f4f24aaf1252db3a58bed8effffffffbce90f7c210e4648ed23fe7ed64d9dd63b2dcf711bfd8eea5529dffe2d3dae34090000006b483045022100a145ea729f13694b37d3021d9e83a4696fc6cf6c6905f162298e28fc23ef3a6c022011e66740c35f0a6a78777888e57160e0f75300071eca73ffae68a7e32860f8cf812103530b041106529d5be4cc53107710adbdfb8028d6b618003679ad5452532e0a53ffffffff5569f1ef5bc24a53420500514b9d60b1fc34d2030137f504f2c6ca58ff04b66b020000006a473044022029d0b04bfe1e18c986f7f65f4043e96e61061bfcf16e8af1407f61e43f42a17002202602c74d2d3297bd0ebb71145ccff07329eacb24459946a419df173bca6a6703812103b47e98344ff6383def82abd2a63505fb7dd352fb1d25a7cec3650364c91b77beffffffff68f499ec3647c82956be1d1b6568ca7331250263a48a8aacbd7b71fe7da028a5090000006a47304402204c53b3e4234e94878761f964a6ba8e86598376b3789ded6a0fbe98ff9968a8af02204eb0d42efc57de9bc051e38e12f410b51e24ecff7626f86ca3cf9e36ecf8f6e3812102c68558b7cdfd78543fffbfff4ab343a95829f04ccabc131d09e792f03452c701ffffffffa24429102730997ba70da75c1ceeadc3544e5b31f25829f7a0140501fe97e8a7070000006b483045022100a4118c5aa045095ab2235b600944f6962c0146dce55eab2b1a8e32f60bef2155022072a2c832e2a762c5772d50e81760bbea5998ee30253b756d5ef471cd8ee6d1e1812103f97ff530218809cb86b3ac95370d7468af3b809c3dc8f08554b50c6e1fb25d0dfffffffff6c887acbbdbaf72b860daa6816bb2cd573d054b9ad25db1f14935107a4340d5040000006b483045022100e1d46a9053626d80c41cc8a9c6ef05abcff0fc6ec7b3e28b154be2799f95477202207abbb788da7cc8e4491de9f64ef9333a8f6c9a9a5578a0c4bcd7599b2aef25d981210279ac83a1d06b922ab76e061b765c9941fe33609b5692ef39c54b09c91e784673ffffffff5610bd62358e9cbd763fee0eda85072ab540d157567547928eea09284e5938e1030000006b483045022100e7eabd4e5cecc825b3605e1ed14b4898f288b114c284abec25717d5ebab5421f022023b14c01a83fa69fca783ff73d08bdbf589f96ec4f7f1bf985e5b7b98b34733b812103a641384d72db972db1f2bd2e4849ac7d3b5861f677574ff134164263584c24deffffffffd10526637bd607801631793dd8110a378ce874da005b96beae75436b9f325de7050000006b483045022100efb22c9149407dbe06617680da777a542c61a69c9920fc7259e7009c31225c570220129562d06c68aa6716dcd3c3edbdf8f3441e1f1c0ef17cc55d9b2482f5560baa81210234194f5c9ddde4937a015122fd2d2accf5f8092b4385e591865f156f1be19415ffffffff31b45bd1b16ae14a99767b7097fc8ce5bc18ef1a9e4877b40d1c32142ce9f1e80c0000006b483045022100b8a7b75aef4e0329c87a901fba735d81a320bc2e11746fdafd6d0942e864215e02207d5f552b277b19a632d88c4fd8cdca5c2101f54fa10af7d3a0719fc16662c2ff812103d82e7d5cd3871a8e8967e2eb5b911f06bc1a60597032994cc330194c05261421ffffffff0ba1860100000000001976a9140c280679bda1641b2b277499c4957af34e006ee888aca1860100000000001976a9141953de0db3c2efc9df7f9c63e1e2b4c16d47be6788aca1860100000000001976a9142e51a002c1d0eb521304f8f46a4f44f90bac8d4988aca1860100000000001976a91443038bb0a1714cb59f9dd2d2f2e611d4d85a217188aca1860100000000001976a91449947820efe92b54cea4063b0867693f4a7d092588aca1860100000000001976a9148074234440ea9980e095d704ccba253c25d057d588aca1860100000000001976a914b5360ede985fbf82db991e0765222341d208cf0488aca1860100000000001976a914c2dc2e1d740264f04e627f073408c903b170f18d88aca1860100000000001976a914d23fb5a72eef2f5c3c2e4922b4863a943bdb0b2188aca1860100000000001976a914d5d8c3cc5f2eeedce72fd0b8cce75ddd5cc4fa1c88aca1860100000000001976a914ff10a7fa5cf5194733553dcbd0124aa37c472a1588ac00000000020000000102f95e943d1862072f5d56e97b2be7ae7ce30d97bc26ab039ded1395ed06bfa0000000006a4730440220128b0f6443cab52cb10f6a97ec264eec016c6cecfc4b88886324b831e250af6a022066f27358a2866a92cf947a2c16088bf8b48de6f74bc45652f084235a97d5bdce01210383dc20ab3ae3c778234344264406818aad4de8b51f908438a5f52431b85b2b2effffffff0110270000000000001976a9147eb4ae677a5ab90869cf20338a16641743cf55ac88ac0000000002000000019edb989179706d5e3b2c7da4e79320e594e63b98781d3f24eb7e9c6d48b56084010000006b483045022100d1f38395bfb0fc3392d464747e42cc7d64bb7d4a46fa70d3f4ba72784a8bbcb3022040ef89aefab5e2cc7c73d4720c4af2348a9040e74c05383f69a203c98c79c7cc0121030a9042311caccddde89e83c4839b86d8a8dcf6b3db32d17b4943027a36340059ffffffff019657eb01000000001976a9148de5d289f916c9bc4b3e6afc5101ddc320ae8f4b88ac000000000200000004ed42190a5fe20776a0ea11ac896191c8863db0c90c72f4cc06d36cc29da92e3b010000006b483045022100bbf089cc4f2df148ce459214c810e46c5408818e2241aada1b8abf5d20a9758d0220166bdfaa06764c6597a098fbc358343f61b86007a6094f458d0e86e54f2e0217012103ea1dfec463ba13e48699a3a2cfc226172f4a4ededd22040a08cfe7cf6e994411feffffffce55134375a4eb97b97ea6ac5e66d0f3f3f0d75343b859184439fce5ee0d8a88000000006a47304402203bda3f5ccf7d4ade6ed677c7b51b6ac3d489a2bb91b13348815d55399da6f2ed022050e783739a36d29f39b8a44fa8a7dbf2c4899d9a064315b10501a7536185b5ae0121023553f618e81a0af28b57c2bb7d400027dd3f40ea090caf2ec855b56c83f9e7c2feffffffa36abe9c6c79690431ac502cd713a131e3aa5e41a75b93d2e2101f87a0443da9000000006b48304502210094b89761b330a9d562501ba4d9b1abbe424641a0ca382ae40c17da6716234d7802206612cb12f264d21428c93570cb1958cbbbb898c046dc226a318bce137b6644e301210357551ad05d97fbe9bef0d3527c586d9fd980f3d917edb24d52892dcffe24ce6ffeffffffae45f9b4d597cfe8f22b2511f96e370172e58b2d8fb8fd52de5d8567557fbcc2010000006a47304402203d6a6481f7b74cd6837d32188514fd61c20e0b0c7b81da030d0365b43a99d44502207135c21b4d180b6e16424f071fccabc264c1740448e8a54b9072a7a7912fe6c701210336ff9d9f90a53cc55232cc4e170b6f25c8724feb5a74f7625c3451120b482f92feffffff02ed7f1000000000001976a914b9982f851615f274f3391338f5876fd61e642c0688ac9fd1eb01000000001976a91419f22917445533975dd5679f467236b340f67f8e88ac000000000200000001126e08e94f0b6812559665a1e0e22e73e72eda97f8693fef9d569bad7c3b5c75010000006b483045022100f80da492a27e292bbbe189e8df7b09c2bd88db1197e6afa5b626504cfb787d37022016ec8caefb360f87a662aab797ad83d93c1f1fc50b3305f0ead564ae83640ccd012103595dc9d1cb210b7bd1a467f1b7a461f7d462856bbddbf10ee65ddd0f23a7e8c4ffffffff014dceeb01000000001976a914f7b71dd2f84162ec25e9114246d8df4e5c0bce2388ac00000000020000000149ed70843b63a355bad5733ff304ce902c75eb756a59e55670418c028fe5d9f6010000006a47304402205f6139dd9523fe553beafb3329e0426ad7e6461bc178b96a36666d74569b122002207ed1f4eefd7c4e74b03384b54128a95640d17bc2295c8a4a9575bd544c7ca4540121034eacddd447b9625f14a2775d9b6de8f0ea9e1e2da6e1debe235dbfbbfc7c6043feffffff02e8fd0000000000001976a9140c387fc981da0a9a21a1c9d7b22643fbec0e393b88ac9c8d1600000000001976a91422484961ebb581ba0556adbee9248530c133f7b388ac23b00f00020000000136f08217bf6756be79d40ecc10e563515e3c9f3168dd7dd9fc705be668661d98210000006a4730440220224cb827b86c53e5fbd5a13a8ca3c05d7002df9ace6e155402c3c5f71c2421d402202171fc6f5b63493b09044b68c98606d5bf02ccdd6139605e588bb0c315ddb254012103e30716039805ff9e00d8b4e6b3fd9a1f61dfea373c7bdc66f8385dd272eb5af6feffffff19a1860100000000001976a91434a2ec0906dcdff714a9e1ad5c7f56a7ba88d1a688aca1860100000000001976a9143c6995b030bb900eb61e280aa6d8665142213b9588aca1860100000000001976a9144d948285047d1fa0ce869252afa9357664b7cf8588aca1860100000000001976a91450767add681d8e32d024c2e010902ec9c30446bf88aca1860100000000001976a914656149c9894afe975d26725f933df64af5e7625688aca1860100000000001976a914761e89c4931e7b463148a9fa56b404c07ce9313b88aca1860100000000001976a91480b83501acb4bf1eae2fe092a97cf0ec263f231c88aca1860100000000001976a91488d031c5da454b834a6159e0e7f654539adeb68788aca1860100000000001976a91492fe289c11e70bcbe44fb25414a73357ad48f41288aca1860100000000001976a914aa2f50a42f2793de5255238261935add57af057388aca1860100000000001976a914b2d36edaccb1acb96473749670088489f7268e6a88ac4a420f00000000001976a9140ae3e4602858f21757d8e99581e5f5cfa8a3b1d688ac4a420f00000000001976a914102eb2fb8b358e01356652e58609548e34fbd25688ac4a420f00000000001976a91454d807e93e648ba42c93f372f70c143bcd8643ae88ac4a420f00000000001976a91461bb1851203ec64c3ad1d978b28cad410ec9712188ac4a420f00000000001976a914a0c754b25d9174545e9f62c3a00dbb0c32d0e46788ac4a420f00000000001976a914a64ed8c96b936c92c8893ccc4721f072d5deb48d88ac4a420f00000000001976a914b4ce26be392edd3350c006fa47591ace78b1e22e88ac4a420f00000000001976a914be59ba4fe03935f354c4b629fdd546b6c2bfacc888ac4a420f00000000001976a914d9fe3c43d797eab5f7b424fc7fd818b355a1f7e288ac4a420f00000000001976a914f76a2cc92f2117962329a2f4f98e50c9667618e688ac4a420f00000000001976a914fc7810eba3aaccad5af6faba5e4cf6de975f30dc88ac95891c00000000001976a9147df28b27bdf274b33e6ec1fd0ee0e063eb1b0a1e88ace4969800000000001976a91494a772fe7304797b47e0d9eae04c0e6445caed5688ace4969800000000001976a914bb9071dbda81045dfaa9bead6b1b0216ba5329c788ac3db00f000200000001d28cb36c5af2bd8eccc05c2a488b48c0c5185611c85d7beba8a1660e4ed33c92010000006b483045022100abde813a5827d2cf65ca6cfe2bb7c57389c1e9483b12cfb6d21c3593fc087bd0022053e7c66fce941516de0a0733954e52b66cb553c10ee43c543b399eb9b80a967501210279dbf1227d405de24971bb7d5e8031af9e5f24394f3df0db5aae09abf9641a2dfeffffff02e8fd0000000000001976a914b256aa01757a963692c8f4c9cbf47420200508e188ac099b1100000000001976a914ad33b5d8bd194a665f05963bece157f46a2372a088ac3db00f000200000001f64c12f930ad007023ce70e8224469a8b3dc1406ea630d6f1d3638e2a682fdc1010000006b4830450221008bdb9d8465fb2abb618b1fccaeb07128f232a0957649796d00d71671f41a90fd0220614dff0c027017abfa60b27edf1be16d5ae655da2c9d88ea14a435a2b9e5de60012103ff5868f44edfb051bca7865a651ba9b2cfe6df8839aa1b8a9bec37a634012cadfeffffff02e8fd0000000000001976a914954dc8349f70c9e9e1067d9c6906283bef707c7288ac08901400000000001976a9142e8c1f687ed9753e0403bd4063ab3fce2e7f92af88ac3db00f00 \ No newline at end of file diff --git a/bchain/coins/dash/testdata/block_dump.1028160 b/bchain/coins/dash/testdata/block_dump.1028160 new file mode 100644 index 00000000..37f3340d --- /dev/null +++ b/bchain/coins/dash/testdata/block_dump.1028160 @@ -0,0 +1 @@ +00000020b652661d4cc8a262f9561a313b8cb15fcb4f69e6f88e908b3e0000000000000048a11a95e5a224637dc3639bf6c20c0ee0ca16b66a5dba5a9823ad9515a772c07625765cb8f34119a74e94e10503000500010000000000000000000000000000000000000000000000000000000000000000ffffffff170340b00f1291af3c09542bc8349901000000002f4e614effffffff024181f809000000001976a9146a341485a9444b35dc9cb90d24e7483de7d37e0088ac3581f809000000001976a9140d1156f6026bf975ea3553b03fb534d0959c294c88ac0000000026010040b00f0000000000000000000000000000000000000000000000000000000000000000000100000001f85264d11a747bdba77d411e5e4a3d35e3aeb5843b34a95234a2121ac65496bd000000006b483045022100dfa158fbd9773fab4f6f329c807e040af0c3a40967cbe01667169b914ed5ad960220061c5876364caa3e3c9c990ad2b4cc8b1a53d4f954dbda8434b0e67cc8348ff6012103093865e1e132b33a2a5ed01c79d2edba3473826a66cb26b8311bfa42749c2190ffffffff02ec3f8a2a010000001976a91470dcef2a22575d7a8f0779fb1d6cdd48135bd22788ac3116491d000000001976a91471348f7780e955a2a60eba17ecc4c826ebc23a9888ac000000000200000002ce167f4b13fdd25facf0a92aba23f5220f8366ac5ed29b83a3a6f2c9f76f5726000000006b483045022100c39871831ee92830da00fe1ba69925f8476cf39bcd1629857bf59b908b53649402201d168fb69ea995ed49059b7d532475891d3b482d19778f339bb95f3a6be3df6701210387bfcd2d4f7e7e68549ecb21a14e6c56eb7c5c3c5c5fddf975106fa4891268b5feffffff01fc4e7dd7446a800cf382e1f668fb155faa6c0f31f9871cdc54d801b64edbcc000000006b4830450221008b55df7a57529004a0cdf6b4ff43be097f9451c86a8457f073dd5cbab3a60f3002205c5b68ed70901e235402c850bec7ca3fac7448faf5a6989de78c2215734a7de60121034e448205a98486cb2fcc0294fa88579b6a6ba0213cbcf7e68cb9527a63a5c826feffffff028cb45e00000000001976a914cf50f0c1cecf279dac4207cd5e77caf2e1b4193f88ac2989f809000000001976a914c646b9ce369333f0b174bf70ffe169464c81776a88ac3eb00f000200000001ff6f6384099ff092fcc1257ebd2ba723fc33a1b3c858c8e4390180a071ed15aa010000006b483045022100d6e867d1c5d815552d1efa4ec06b0111d8b180d708f3497bcd53e8d945aebdbb02205fa734c5a3bb18da893da3dcd9540a2ea7535418323e8c0c1b0a88cc932a1fe5012102e03200f8de25214eaf675554a2f28d2b60c7c4c545691729dec1c2fe0d3b630bfeffffff023d346901000000001976a914953ba93fae9ab552793533769a7de6f7630781e688ac56870603000000001976a914887933e453428b99b3b2dfdd8359f6d8016873e688ac39b00f0002000000082e51598a94eea6059479fb3b31605bbc44ce50c25f014e91bd8bdd5b14891442000000006b483045022100dd04fefab5ad17929d1ed8561335a7c493761e0cbf6a23b8445d21da7b09bd4b0220398f2df4d47bc0b924ce71754d452268485b85ab3f1a8e21529559b4302003510121036b56e0f8996c289842752bc71eb60f2f9964b28653d3857725efe1bdc3193386feffffffacd131246ada5f7ad177bdc6d236766ff78559506a5da90e81fcb26366ac377b010000006a47304402202932864432b51a9894128b74fc109951d182fc91bac3a67a61b3b7a83e3bea71022021dd28448b54bf560dca69c198cdd9a0d1184adb231c72141db19d5114559ffd012102102efafa2ca31499090aaea1bf1dfd91f16bf29c96202faf48cdf14a791f757cfeffffffecba1b7c9071c42ff79e5db479369d5adb8995ec1ea28ba75676d58c09c10089000000006b48304502210096b33a9a65cbeca58cdd0ca01d4792dd075ac832aecb2d113c522bc635f535bd0220736d726b6126c4845335ad61af1e7e193d7d8661ca69c749ca257191bd24447f01210357386ba93caf20c1fee3bccf00cd4ad96535e42bda22d22c605cf3cf7532dde4feffffff0e7e7a7cfffa2c6917dc5578eac7153b334d7f813d256ccea9e60d1eb9f62da3000000006a4730440220362935ea1a705d4c275d733e350f53798f05e8a39e6cdd03f3ba5434c6d78c370220031729d52d9f8d1a301ce59335af7a5b7fa70f0bcae42dd95254e22a725bd9d4012102f7164234b08f8a6f47d92fa01eac375d0c1ebd4300ce40412302a5ea0218c19afeffffffa0f6f00c4b99b7b25ef20e64ce4a4bf5e2ca13e3cdbe8e1d7ec7dfab1e0292ab000000006a473044022077a9137654cafd4a583ae5b04faf1d549ab5d1d0655e6b48b4e1242a596efca4022008372fc1bec3490c4376408d4c9eed32b4182563ba43943b4bb959c29c91058a0121022bd6d141f0c455c7f54cb690db6b1349223ddd27fb65d64bb9ac35735ef48c5bfeffffffab6cf7419933410d25538a971b13d099e155c0339c2257f350ab2ef24944c1b9000000006b483045022100dd7b537e334e3dac76c57eb0683ea4cd74fd9a59f55f928f8c7f94a19064d8ea022045f4452f3742bb6ee2a7080507433904f5fcb94ef9ae8aa6bac0778a9889f4ef012102d00a705fcd458bc3e6dc0eab9f449162f73fff0773a4e09e2a3164b39bc26983feffffffc817f12e090dfe54e5c0bb1546fb01a6eac23f49aafa367bbbb0dc857bc98dc9000000006b483045022100959e19c75158f235abd196643dff70762f6263a058ed4b7d19c00f20ba18fef00220402189f2c8dc56139812d65c76b2b1a90b5148d7ecda6326053afc26471f9261012103330db7800ba95f92006909aba0e270985cccb34c7787dbf4776b6762f97132abfeffffff540f639ab8f986bc0832181c9efd315a1af81d07e61b367cdb10cab58f9518ff000000006b48304502210083db93b6724fe929e984f3e5df3ece7c43277a926abc841cd4cd75d15d787de0022027a299e82e420d418da973f82afcd80cf986c022042d9c758f51af64aa08fb2e01210369eccadf5758ca5eac2f3ce63001294819c119d1411a294135280cfd423ac59dfeffffff028f650f00000000001976a914535960e621cc458918703e33a7644501299a9d2188ace5a2ea01000000001976a914dcdc4137f2e7a347fcb14c85a6d1730d3e212c4b88ac00000000 \ No newline at end of file diff --git a/bchain/coins/dash/testdata/block_dump.500001 b/bchain/coins/dash/testdata/block_dump.500001 new file mode 100644 index 00000000..17c96785 --- /dev/null +++ b/bchain/coins/dash/testdata/block_dump.500001 @@ -0,0 +1 @@ +030000007d0b69b812b7e03d77833c459cdc06fa04c5efa64a7f71ff1cbe020000000000e6118c69336f692bdecf92d7259fd0392580ff3925c2dfef950b2a00a17611309c8f80571665061b8420ea0c0701000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4c0321a107049c8f805708fabe6d6d27dadcdfd609a9ef399842acb80ef5135b10bb2d3cd855c8f0073d937f8ab2e301000000000000006fee02deaa0000000d2f6e6f64655374726174756d2f00000000021d1fa00b000000001976a91436c19047ac8df6e0e4f7c70e0a70395abbb3042688ac1c1fa00b000000001976a914f343d154a5e15f032be8b3cb5f16415c15088b5a88ac000000000100000005ed0f09e7d260fcc507bae77d2bf4de74b08a1e802a32c8863c5d8b83515505d8500100006b48304502210095a955f043baeb2b422a64605b75b38d155cc7e005851ef16efdaafbee2959ac022017238a74f65a46deff95293de8eaacae2e7cee8d4ff23900cb2ff5556660feef01210288d25f2049ca363f2ac28d091a091d4e06f8f638600d611d53f75eb8d5b926aaffffffff910df2743f84e3a168cabfa277789a0989144be224ec62848d2613ba012b76c39a0100006a473044022046b299f734feef574f4357b8f11eb14926588798486efaf413d7c904f09323320220009bf43ee5233a77cbc30571b16c8db044cea40f64cf9939c01552ef1204adae01210374223440d31129821917e26ab405fa94dc1efe36f4fb0639f2c872998a453c4affffffffa44aae54d68cc02df3bcc6f6c99716a0138f579fcc76744d4975f8a682a8ccff160000006b483045022100f4e056521c7331be2404a503a68fdcb7b4b81f13d83389f27080caa4997012a10220271071c640fb92623be13e9138cf1d53c77a9b2237fdacaad24dcaae93fdf394012103befb21245ad3b0381e9b618d8a2ec0f07872cfad72b4fa3d134eb91bb93bba58ffffffff6d7e487a1b7b17d9be1802a83c04eb8725336402711ffb8c9bf7d36bc4f2c586000000006b483045022100a9dc790888871ef251a0def81963aa872703caca2ac06ef68c4f24064c80d81d0220779d4509e4dcae956bf07da0651430c8bce6b952ca5da113dc7ad1282cbebdaf0121021c564bc923123481c21e38c1d92dbcb9bcf189df199f5cb6507c58fd1b40ace7ffffffff37958f1fc3607e303d4bee87770a1466124f9bcf08ecbfe56a849c94dd045945ab0100006a473044022016f3010258ccf2c58f3e3ab4e19226dbd9d466dee4371194e9a00f23ca90aa5502202072098fc58c3a379cd13e6e1d6169f7ca5fb6b3e4acb4addb100575e27c7b7001210319c3819e751b27d25da953be201b47f6654c734fabf16e4ae851276161b2ea7bffffffff0252420f00000000001976a91455925373eb52d56699d480f5980e5c5bb521658988ac60343c02000000001976a91493d1321a6cb972261b4273681ff4a833f96373a488ac000000000100000002cc748f316d43472d10eec698af0b5e4f094f8b81e323994c3b490820103f408c010000006b483045022100fd6cd5ce5359e5c4c2c97d329a9d52934c2ba2f295be12182d8674fe8744b6e0022055c411e6904f4fdae7a2d2ae030d548604072dfece83f3165879a07ac079db510121025be309c046150b985367e119789c9071ec5a14da95ce4e9f8e99f78c4f390d5bffffffffd3be34f7fe4f596325ae796982aeef7774ce4d86a643f8edb69b011689841567000000006b483045022100d41774d0b1ad4b24bbcb2ac2d9205b98a311f2e312a68145f8f055c38f08f8390220460c6c8dffc1f327cce731a0744578cec936a7b8aafd963aedfe02c1c90d9ed80121022b139133c4239293b8d20e4de885c485a61a9d843975f8ffa22e6d6acc348500ffffffff021dae720b000000001976a914af6c2f9155f5b76b9daff52821e4a9aea25b1b7488aca9d10f00000000001976a9143f74be7f636411082b17549ab5268170d766eab988ac000000000100000012d55283595376a2f0e6514d96438f337fe4b61561483a4b1e371e24f4d3da20d50b0000006a47304402203ab23195048a6c658040c30744d2c915730503a0db824f6142fb1b6cf74aa8d7022037a878cd6b5fa98239d1e8e6d0ad44c4a3fcd13cb1fdb26b89f98d7b9eb22cde81210364ca9bfe84555bff2f8de4246596da3123d066d1f236371e9f2b8ad39ae137c7ffffffff3130e23792666e65b91b4acf0def3b458200ed9eb2be930a158939340d53b98a000000006b483045022100b15f8c8019aa8bd4daab22a67327e44f58bd67757e0225490633b113f024cf2d02205ed80aef4c2669f10d88d64dd485c13fcd9f795f3b40981100441802c500a719812103637fe9ea35d1149679b3b609c74a5f21a0f11d883a1dc6891563f0b4c04d6746ffffffffd55283595376a2f0e6514d96438f337fe4b61561483a4b1e371e24f4d3da20d50f0000006a4730440220039097a2c32d61427aae703fd8921ed8248bce973ebfcf14668b5634be7f0f33022052312508267fab4807d968ae4f8d84a8688e821381b93a076dd18e88f31ad24e81210302830a2bfb02fbc8bc2f1c6afc5b97db573303aa593eade49beb792e2acb2bbaffffffff9cd5cfd99e89c5ccd39f648520673314488b284b688573b30fe6cd6003ab0e06000000006a473044022048ea7d2973bc64cfd59a917b086e439d4877701fa052f7fee553ad1caed270c502206e081854bdfe540ddcb20f09487502acf8dbcfec3a6da0c809c7a53bcc3526198121030b0e4779639bd0f8c14127530fa740b376f4b52fb533052df73a6220a7857dedffffffff7a87a536ba47caa3a440a151135b59c3e8bc2eb157b7a8981c47357a23945fb5000000006946304302203748878a788585408d1cf704cedb36017b11f8797b13c8d84bdc9cdc980cf0f3021f7bff51305a573804b6b1a1f4cfdd16166110512dc4aa29e2e8bf9b8c9b78b98121035a1285b2a1a661e27a77c87a5ee8493fa443442e72e5090daf678c9e14667968ffffffffc5fd6ed74a75c56b2098e0ac5d8686fffd60866a01e2965dcc15110cd0e81587130000006a4730440220399cca1f309ff0c024a9037284188c0e662e1a9044795ae3a029e9c88d2c2c860220071111a2aaa2d3dfdbedf4c9313c9f4415747e3364a9974764cdaf1d99ab9d11812103975b82e6fa501f66792347b4ca362b1906e3f0c6fe6ea9cf0311ef566e9ab087ffffffff7c5dbd9465c7be7e3a0e3f7605dcee5350bac52aeb3a59cdf499e413e67892e1030000006a473044022009f432bdc6230ca8fd51e47989e8c4d2eadad8a79ecff4bd21230c6eb9f72fea0220721fe88c953b25d5ce6337eb9c68e73179df12cf4a3b7ff8e1eddf415586277381210239a54c6e9defa1fa3d2cc4e727e696d09382caa56fd3b2b1a7d8e14e427714e2ffffffff7839a8e20728a3ac24ed459f5bc4fb1241f0f4bf9cdee44391dc7e4abbd7a6970d0000006a4730440220729c8c8802ae8ded5b62c97f9620b55383b7d60e0958ee0747c8534d952e07a9022062b73e97b1c7f6c6888a8d5693d7b8969cb6cba2315bf84fb9db41f532d7d267812103bea538b59ace8774ec8a0d7223dc1fe8bc4b6f36a7d8e97563c3c790e1911f34ffffffff3130e23792666e65b91b4acf0def3b458200ed9eb2be930a158939340d53b98a070000006a47304402207236d0dc209a3797ff9627fd0abcaa6df84d8a702b6ae60214bfdfe0299c79db022004cd3bde7f6eb6f77a469acea39e2c8ea61b1d3b53b684dfd15d10fb54626479812103b487678803869ef871ebc188dcbb861d635b976ffb26993562c7e0f6c625f76bffffffff78fadaad1cb42bb55d6f045444b1c581d12e47df92f1d0560a9fd4839a508cfa030000006a47304402200d61777d2e2079535c4b2477158b6666263c0e5e75398ffeb6e7ca8771d709c902202567702ad6c014b7c53eb313fd96319adbb295422b75ac6aa15dd68bf18aa3e2812102a9f6dbb247b9f030c2eb3ba22943859b428f6a0c4aca1b290e1cff6da326dd37ffffffff3dd6b1f7e77a61cd4cc4a40d0c4af9c44d911d674ab8ad4ffd0c18028b945206050000006a47304402202a262108f7216f16c7e4146c48f61b800549db331ecaf6d2d5f677d7d2753a5202201d927397c7385967d517c4e7f4fe0cf7ce1ce90e5b7ab2c3c0268ff3321fe674812103af02a5cc56e11e9cd2c6d0ec0e6e5991c51cf482e3852ba2af501e21fa55c39dffffffff78fadaad1cb42bb55d6f045444b1c581d12e47df92f1d0560a9fd4839a508cfa090000006a4730440220096340d009d59d7942afb1963cb8800beb823e48fbbba40bd078f67df92354800220520a810933f92ff3a8077ef946da131690d2b7c3659c70944dbc059e78e8ce358121037ef43096a384229b2b309e1160985f005f8df88ac2cf3ca70fd8a0983868ead5ffffffff3dd6b1f7e77a61cd4cc4a40d0c4af9c44d911d674ab8ad4ffd0c18028b945206000000006b483045022100941d4829199afaa0f366f0d677f2c3b3bf4a45e76df50b14c4018bcc99db1654022051423c38279218d1546c15765114b2ac0d29aa4b47dd74f7ef8e915b5e41fd4f8121025eb73f58035fd0dc31aa9f33d8c6ebcc89be3e734bf00b857c697629083c462fffffffffd55283595376a2f0e6514d96438f337fe4b61561483a4b1e371e24f4d3da20d50c0000006a4730440220058d0d6ef6168fe38d81af182cc9eb488ccccf7b99c46ac41a0ee9ca2b1ded6a0220718783ccf57fddff89d34203c0b07199fb57f43d98388386ae347cc3aa7cc41381210305a1abc9c7d042f46b3e21aa49e6b8acffcf759177469f530d050eeae6dc4ebfffffffffd55283595376a2f0e6514d96438f337fe4b61561483a4b1e371e24f4d3da20d5000000006a4730440220514dc76b97069c49332cbe752fbbab3b51dbdbb145a4fac64a29541b65d96594022009c9a453269d85045d73231c943c877a5b072f8680b2e911fb334768eed9b74c812103ac7c4bcb5903f00cebd89f34536f33b742e4bf221134333f174b792402ae12b0ffffffffd55283595376a2f0e6514d96438f337fe4b61561483a4b1e371e24f4d3da20d5090000006b483045022100bdb3bd58a1b4a4b7cdb445223c2d913c66cd16ff974e876b0fa3fddc02bab88f022000e3037c401f0a338159dc5430cf8ee795e9eea62b233116020f4694cb24ad648121020eb3edb09904df290b950b8cddf30f2eee4224829c291a148a999a22d7b3247affffffff78fadaad1cb42bb55d6f045444b1c581d12e47df92f1d0560a9fd4839a508cfa020000006a473044022059e1fdd1602b61e6c3d670b33d560fde46bfe7fd5c729116e170138bbe80cd1402205583bd1aaa34e52563a277510edc7bc7f5f988771794c3fa6fe9db7f93f83c9b812102fbd94d3d50b7c6c5c20d3d1a67b1cf3ab8800b320f73daf948d5913f07f79f63ffffffffd55283595376a2f0e6514d96438f337fe4b61561483a4b1e371e24f4d3da20d5020000006a473044022017c034e88642e77d6a00e11dae0a4962a093709a98a463874e8aeeade572bb8702203131ef115cb873453caaccaf2dfa400d5103e0c8f6f4fa1ba289df659694b4f98121030261c40bd013a4684445d2ec176b0b93240e4dfee26a1bf0e969fefa621a3f5effffffff12e4969800000000001976a914d6959cccbbecdb4c39c06ba0355ee130ce7c3fbd88ace4969800000000001976a9144538b9f11e54ee011348fb4d1121f00c4176926f88ace4969800000000001976a9149b66d63c5f3c60e4758851c4232ba3eb311c559e88ace4969800000000001976a914e79df321d9665668d8e2a30b18c7270ba15ec54a88ace4969800000000001976a914d73cac081eb2444fe8746e20911764668239d58388ace4969800000000001976a9142142002ee06ee9763359ae21ca6b0737c5de974e88ace4969800000000001976a91477fca6291dfa3cf07060144b8f2fad0f3da893b488ace4969800000000001976a91425bce90e50cc4f7db684b3fc7baa50ca8948410588ace4969800000000001976a9146853fa9fa2dcf22aa9a6090c3a6e6aaf66ccdc5d88ace4969800000000001976a91492771948eb9344f8ce09dac245c3ee962eb8257888ace4969800000000001976a91496ca76024c28534f4ebdd3dff7beb553730d0fdd88ace4969800000000001976a91446eb2f285e78d2d389f83316ecea26f66ec9fed488ace4969800000000001976a914de5f09ff08ca03ad554119f14b5733a07cb9ab5188ace4969800000000001976a914587e145b49f61fdeb0baa78b21f28a47a034702588ace4969800000000001976a9143433260272816af6e855cc8dacfb2fe7266f647988ace4969800000000001976a914318c806b35f528ba48e277f57a1a527ef25af43f88ace4969800000000001976a9140dec91bcac0fdc81373ae1dc349964b069632a4b88ace4969800000000001976a91488466b1be52ada7d847f511360cf964a64edf95488ac000000000100000003184cba8b676ba502aadea8d9654bbe3f2d44ed6319f27d49ab4ca67e23b79379000000006a4730440220036415c112c7c73a8373a5698ec30b14148ab8d75357b54ac917198c8221b5fb02204009894662cf555d7d58072fecff84102c8fa81d37fa68e5d98d0bab7228ff7b01210297446368dc16c1a64e3723866eacc5e023e9944fef1cc025e4b1f96dd32f43a0ffffffffdaa54167e064b9f0d05f9f1f62fe32fdd608415197acbf5d15c1d07f3d8ab4d3000000006946304302205f10e9c84158cb97fa3e383a408b35903ecb963da18df29724e60dae21908f63021f0d21b76da132bfc0c0ad08a85e1e45c3d713d3e3fb0fb849f367a64198685a012102b898d1a5f5282bc3404fea66adc796d43e97b76ba2d641d5ce6226429b54386cffffffff45771a65c38c432a75b7828bed3bb0c938987ae2b3e68593481d9ae12c08c99e000000006a473044022032d35a3991d6a1f06cb4d4e18fa94200c946a160a87e368ef04530f24a92e13a0220719d8071fd4c8a5af8e4b46d9e5e37805062bf58739fe06f303e76931a461a7f0121025d7ec5f2b8224d6fdc48317ab364fac3af66ba55d7b6b3a415fdae3e15f0eceeffffffff1a00093d00000000001976a91496950fa33e7d616034881ccacfd7e5fb0a7055e288ace4969800000000001976a914d5b0579598c15b6184a3d86fb9eb2def125a26b088ace4969800000000001976a9147d94678ce24d2ff07e55211a952488cf5d8ce43e88ace4969800000000001976a9146daa5740f32a9c193bd36be789d08047b674eb8088ace4969800000000001976a91432e9424ed6db3dc572349617d8861c93815f016e88ace4969800000000001976a914ae35b0a1373cc158ad94343cb1efd7f56c32541688ace4969800000000001976a91467eb7487abd6781d61acb4a5ef2bb024d34b913f88ace4969800000000001976a9149d33039a003c222923ceb28ce8f9d97dfc1339c688ace4969800000000001976a9146fb426ea2fb05745ff9f07db1c8b48080110232488ace4969800000000001976a914a4700062ef923e5b4569852bd6e02e25b1395bfc88ace4969800000000001976a914cae34942d339a732f59427e08a4ba5a82d7a29a488ace4969800000000001976a914761384204c3076981fc72349455fe8b89ebc50fb88ace8e4f505000000001976a91466895e8f847401204a1db8b607a4e56529dc3f2388ace8e4f505000000001976a9148b85a1e0db44f06979b2f51ee0441fcc7d528d3d88ace8e4f505000000001976a91431cb1813d58dc1145995afe741496a72fd7ded0c88ace8e4f505000000001976a914e0942abad74923dba61da08e5e9f121e773233f388ace8e4f505000000001976a914cdbc5026ca5ce7608ee33b2348fb9f26dd506aee88ace8e4f505000000001976a914a5ed29816c69ea8e0e8dafa096ae9fe860b1ea1288ace8e4f505000000001976a914c9a5f9829802a981d73e05d06b3ad910843a197788ace8e4f505000000001976a9143bdf1d309528441be9c5b9c3dcf10e26481a222288aceb8f1f05000000001976a9144acc1e5b8c8b1f9f0b3f237f21d6ed8419e9853a88ace8e4f505000000001976a914f27592164f28776a43937fb90d0baf6b90aca33c88ace8e4f505000000001976a914a19c3befd6a118b48ceb5ee80941a46f1ba9ddcd88ace8e4f505000000001976a914154197988a120b46470de6c7e7730ebc39b0889188ac10f19a3b000000001976a9142bd93a9f64db3132538d1335654a2132419f421488ac10f19a3b000000001976a9145623e1cb32738842de1d77bfa8ba1a6a55b3289688ac00000000010000000167e0bda175e49ef6e01e4a3bf859e75b26b27d011f1522a29f9b155d2dad44ed010000006a47304402207b411a9a98b943885962f1411538de788b8ae51e8502e2b716c06fbade8f32eb02204d2ff2300919dc2a410f85c8eb1f98d4b4f4a3c0ea9d236bc885b8ee36371f8d012103958ee62ddc696ef5791a86d703eefd0394b24fb0c54b8318ee3c6845be3b6374ffffffff02561d3900000000001976a9149487572a338f59387a3cc130db2d701d1be4ce7a88ac567aaa00000000001976a914d659365a5f90e3371ae1d96090528274de34b8b388ac000000000100000001e475015c91565b57ea5bed02f3efa61221cde625e927f524b25a96d89bf753ca000000006b48304502210099dab9dcebf45e6efe390e363599ee53af42b02664f740584cb84918bae17e6d02200db5d3ac8c3ceedd34bc1e11acdd517604160f1b02a9745ceb24d91e972a9d61012102bcfc16ec69a8e9c55ceef98db822bae29952c8fb05e8ee8bcb089d59533065f8ffffffff020b7cf305000000001976a9144f9362d07e6e0eaf85e0bc3d050a97fdb309196888ac7d3e0000000000001976a91497cd1683e3b171d27935eb4bc92fc7e95ec440a388ac00000000 \ No newline at end of file