All RPC tests rewritten to use new common methods

pull/12/head
Jakub Matys 2018-06-18 15:19:32 +02:00
parent 8ec0b7c590
commit f431c481ef
12 changed files with 449 additions and 1050 deletions

View File

@ -25,7 +25,7 @@ func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) {
var rpcTest *rpc.Test
func init() {
t, err := rpc.NewTest("bch", getRPCClient)
t, err := rpc.NewTest("Bcash Testnet", getRPCClient)
if err != nil {
panic(err)
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,37 +4,42 @@ package eth
import (
"blockbook/bchain"
"flag"
"blockbook/bchain/tests/rpc"
"encoding/json"
"reflect"
"testing"
"time"
ethtypes "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/rpc"
)
var rpcURL = flag.String("rpc", "ws://localhost:18036", "URL of geth server")
var ethClient *ethclient.Client
var ethRPCClient *rpc.Client
func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) {
c, err := NewEthereumRPC(cfg, nil)
if err != nil {
return nil, err
}
return c, nil
}
func setupEthRPC() *EthereumRPC {
if ethClient == nil {
rc, err := rpc.Dial(*rpcURL)
if err != nil {
panic(err)
}
ec := ethclient.NewClient(rc)
ethRPCClient = rc
ethClient = ec
}
return &EthereumRPC{
client: ethClient,
rpc: ethRPCClient,
timeout: time.Duration(25) * time.Second,
rpcURL: *rpcURL,
Parser: NewEthereumParser(),
var rpcTest *rpc.Test
func init() {
t, err := rpc.NewTest("Ethereum Testnet", getRPCClient)
if err != nil {
panic(err)
}
rpcTest = t
}
func TestEthRPC_GetBlockHash(t *testing.T) {
rpcTest.TestGetBlockHash(t)
}
func TestEthRPC_GetBlock(t *testing.T) {
rpcTest.TestGetBlock(t)
}
func TestEthRPC_GetTransaction(t *testing.T) {
rpcTest.TestGetTransaction(t)
}
func TestEthRPC_getBestHeader(t *testing.T) {
@ -50,7 +55,7 @@ func TestEthRPC_getBestHeader(t *testing.T) {
{
name: "1",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
},
}
@ -79,7 +84,7 @@ func TestEthRPC_GetBestBlockHash(t *testing.T) {
{
name: "1",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
want: 66,
},
@ -112,7 +117,7 @@ func TestEthRPC_GetBestBlockHeight(t *testing.T) {
{
name: "1",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
want: 1000000,
},
@ -131,68 +136,8 @@ func TestEthRPC_GetBestBlockHeight(t *testing.T) {
}
}
func TestEthRPC_GetBlockHash(t *testing.T) {
type fields struct {
b *EthereumRPC
}
type args struct {
height uint32
}
tests := []struct {
name string
fields fields
args args
want string
wantErr error
}{
{
name: "1000000",
fields: fields{
b: setupEthRPC(),
},
args: args{
height: 1000000,
},
want: "0x6e6b2e771a3026a1981227ab4a4c8d018edb568494f17df46bcddfa427df686e",
},
{
name: "2870000",
fields: fields{
b: setupEthRPC(),
},
args: args{
height: 2870000,
},
want: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895",
},
{
name: "ErrBlockNotFound",
fields: fields{
b: setupEthRPC(),
},
args: args{
height: 1 << 31,
},
want: "",
wantErr: bchain.ErrBlockNotFound,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.fields.b.GetBlockHash(tt.args.height)
if err != tt.wantErr {
t.Errorf("EthRPC.GetBlockHash() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got != tt.want {
t.Errorf("EthRPC.GetBlockHash() = %v, want %v", got, tt.want)
}
})
}
}
func TestEthRPC_GetBlockHeader(t *testing.T) {
bh, err := setupEthRPC().getBestHeader()
bh, err := rpcTest.Client.(*EthereumRPC).getBestHeader()
if err != nil {
panic(err)
}
@ -212,7 +157,7 @@ func TestEthRPC_GetBlockHeader(t *testing.T) {
{
name: "2870000",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
args: args{
hash: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895",
@ -226,7 +171,7 @@ func TestEthRPC_GetBlockHeader(t *testing.T) {
{
name: "ErrBlockNotFound",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
args: args{
hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903896",
@ -248,204 +193,6 @@ func TestEthRPC_GetBlockHeader(t *testing.T) {
}
}
func TestEthRPC_GetBlock(t *testing.T) {
bh, err := setupEthRPC().getBestHeader()
if err != nil {
panic(err)
}
type fields struct {
b *EthereumRPC
}
type args struct {
hash string
height uint32
}
tests := []struct {
name string
fields fields
args args
want *bchain.Block
wantTxCount int
wantErr error
}{
{
name: "2870000 by hash",
fields: fields{
b: setupEthRPC(),
},
args: args{
hash: "eccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895",
},
want: &bchain.Block{
BlockHeader: bchain.BlockHeader{
Hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895",
Height: 2870000,
Confirmations: int(uint32(bh.Number.Uint64()) - 2870000 + 1),
},
},
wantTxCount: 12,
},
{
name: "2870000 by height",
fields: fields{
b: setupEthRPC(),
},
args: args{
height: 2870000,
},
want: &bchain.Block{
BlockHeader: bchain.BlockHeader{
Hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895",
Height: 2870000,
Confirmations: int(uint32(bh.Number.Uint64()) - 2870000 + 1),
},
},
wantTxCount: 12,
},
{
name: "ErrBlockNotFound",
fields: fields{
b: setupEthRPC(),
},
args: args{
hash: "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903896",
},
wantErr: bchain.ErrBlockNotFound,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.fields.b.GetBlock(tt.args.hash, tt.args.height)
if err != tt.wantErr {
t.Errorf("EthRPC.GetBlock() error = %v, wantErr %v", err, tt.wantErr)
return
}
if got == nil && tt.want == nil {
return
}
if got.Hash != tt.want.Hash {
t.Errorf("EthRPC.GetBlock().Hash = %v, want %v", got.Hash, tt.want.Hash)
return
}
if got.Height != tt.want.Height {
t.Errorf("EthRPC.GetBlock().Height = %v, want %v", got.Height, tt.want.Height)
return
}
if got.Confirmations != tt.want.Confirmations {
t.Errorf("EthRPC.GetBlock().Confirmations = %v, want %v", got.Confirmations, tt.want.Confirmations)
return
}
if len(got.Txs) != tt.wantTxCount {
t.Errorf("EthRPC.GetBlock().Txs = %v, want %v", len(got.Txs), tt.wantTxCount)
return
}
})
}
}
func TestEthRPC_GetTransaction(t *testing.T) {
var (
addr1, addr2 bchain.Address
err error
)
addr1, err = bchain.NewBaseAddress("0x682b7903a11098cf770c7aef4aa02a85b3f3601a")
if err == nil {
addr2, err = bchain.NewBaseAddress("0x555ee11fbddc0e49a9bab358a8941ad95ffdb48f")
}
if err != nil {
panic(err)
}
bh, err := setupEthRPC().getBestHeader()
if err != nil {
panic(err)
}
type fields struct {
b *EthereumRPC
}
type args struct {
txid string
}
tests := []struct {
name string
fields fields
args args
want *bchain.Tx
wantErr bool
}{
{
name: "1",
fields: fields{
b: setupEthRPC(),
},
args: args{
txid: "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d",
},
want: &bchain.Tx{
Blocktime: 1521515026,
Confirmations: uint32(bh.Number.Uint64()) - 2870000 + 1,
Hex: "7b226e6f6e6365223a2230783239666165222c226761735072696365223a223078313261303566323030222c22676173223a2230786462626130222c22746f223a22307836383262373930336131313039386366373730633761656634616130326138356233663336303161222c2276616c7565223a22307830222c22696e707574223a223078663032356361616630303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030323235222c2268617368223a22307865366231363864366262336438656437386530336462663832386236626664316662363133663665313239636261363234393634393834353533373234633564222c22626c6f636b4e756d626572223a223078326263616630222c2266726f6d223a22307864616363396336313735346130633436313666633533323364633934366538396562323732333032222c227472616e73616374696f6e496e646578223a22307831222c2276223a2230783162222c2272223a22307831626434306133313132326330333931386466366431363664373430613661336132326630386132353933346365623136383863363239373736363163383063222c2273223a22307836303766626331356331663739393561343235386635613962636363363362303430333632643139393164356566653133363163353632323265346361383966227d",
Time: 1521515026,
Txid: "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d",
Vin: []bchain.Vin{
{
Addresses: []string{"0xdacc9c61754a0c4616fc5323dc946e89eb272302"},
},
},
Vout: []bchain.Vout{
{
ScriptPubKey: bchain.ScriptPubKey{
Addresses: []string{"0x682b7903a11098cf770c7aef4aa02a85b3f3601a"},
},
Address: addr1,
},
},
},
},
{
name: "2",
fields: fields{
b: setupEthRPC(),
},
args: args{
txid: "cd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b",
},
want: &bchain.Tx{
Blocktime: 1521533434,
Confirmations: uint32(bh.Number.Uint64()) - 2871048 + 1,
Hex: "7b226e6f6e6365223a22307862323663222c226761735072696365223a223078343330653233343030222c22676173223a22307835323038222c22746f223a22307835353565653131666264646330653439613962616233353861383934316164393566666462343866222c2276616c7565223a22307831626330313539643533306536303030222c22696e707574223a223078222c2268617368223a22307863643634373135313535326235313332623261656637633962653030646336663733616663353930316464653135376161623133313333356261616138353362222c22626c6f636b4e756d626572223a223078326263663038222c2266726f6d223a22307833653361336436396463363662613130373337663533316564303838393534613965633839643937222c227472616e73616374696f6e496e646578223a22307861222c2276223a2230783239222c2272223a22307866373136316331373064343335373361643963386437303163646166373134666632613534386135363262306463363339323330643137383839666364343035222c2273223a22307833633439373766633930333835613237656661303033326531376234396664353735623238323663623536653364316563663231353234663261393466393135227d",
Time: 1521533434,
Txid: "0xcd647151552b5132b2aef7c9be00dc6f73afc5901dde157aab131335baaa853b",
Vin: []bchain.Vin{
{
Addresses: []string{"0x3e3a3d69dc66ba10737f531ed088954a9ec89d97"},
},
},
Vout: []bchain.Vout{
{
ScriptPubKey: bchain.ScriptPubKey{
Addresses: []string{"0x555ee11fbddc0e49a9bab358a8941ad95ffdb48f"},
},
Address: addr2,
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := tt.fields.b.GetTransaction(tt.args.txid)
if (err != nil) != tt.wantErr {
t.Errorf("EthRPC.GetTransaction() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("EthRPC.GetTransaction() = %v, want %v", got, tt.want)
}
})
}
}
func TestEthRPC_EstimateFee(t *testing.T) {
type fields struct {
b *EthereumRPC
@ -463,7 +210,7 @@ func TestEthRPC_EstimateFee(t *testing.T) {
{
name: "1",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
args: args{
blocks: 10,
@ -498,7 +245,7 @@ func TestEthRPC_GetMempool(t *testing.T) {
{
name: "1",
fields: fields{
b: setupEthRPC(),
b: rpcTest.Client.(*EthereumRPC),
},
},
}

View File

@ -4,254 +4,39 @@ package zec
import (
"blockbook/bchain"
"encoding/hex"
"blockbook/bchain/tests/rpc"
"encoding/json"
"flag"
"fmt"
"reflect"
"testing"
)
var rpcURL = flag.String("rpcURL", "http://localhost:18032", "RPC URL of backend server")
var rpcUser = flag.String("rpcUser", "rpc", "RPC user of backend server")
var rpcPass = flag.String("rpcPass", "rpc", "RPC password of backend server")
var rpcClient *ZCashRPC
func getRPCConfig() string {
config := `{
"coin_name": "Zcash",
"rpcURL": "%s",
"rpcUser": "%s",
"rpcPass": "%s",
"rpcTimeout": 25,
"parse": true
}`
return fmt.Sprintf(config, *rpcURL, *rpcUser, *rpcPass)
}
func getRPCClient() (*ZCashRPC, error) {
if rpcClient == nil {
cfg := json.RawMessage(getRPCConfig())
c, err := NewZCashRPC(cfg, nil)
if err != nil {
return nil, err
}
cli := c.(*ZCashRPC)
cli.Parser = NewZCashParser(cli.ChainConfig)
rpcClient = cli
func getRPCClient(cfg json.RawMessage) (bchain.BlockChain, error) {
c, err := NewZCashRPC(cfg, nil)
if err != nil {
return nil, err
}
return rpcClient, nil
cli := c.(*ZCashRPC)
cli.Parser = NewZCashParser(cli.ChainConfig)
return cli, nil
}
const blockHeight = 251102
const blockHash = "001335906f981bbf0633e124e2fa8afef3d882e34a0306a4e0c55162e57e673d"
const blockHex = "04000000dae072724713c60408a643775f15f58a37088bea7a51165880fbed47346b0c00cce3aae2d297be2838c5d4829b682b4fbbe8a09f9a10da8222b8256b2b1f20df0000000000000000000000000000000000000000000000000000000000000000d15b1f5baf71151f040019290a7a71036c73966bf61b685bd50dd09e095ef4680224901a53050000fd4005008d152c3b0d8adeee94b01ce9d9ebeec96098779a1a9782005ec849d1198482c1eb2c9234d8100b2d560c1bae8798c6c15add6082e9b871bc751792aedbce2f086ad7aa914537318d846af7e6c9ede26856c9440874d981c8d5f48eff38e5f81ef76585ca6c3b774f0b5ffc7676054c246d5704e9bfdc0f3e29aefa913a16bb1505f3cc44aaae9d7170569fe120d4146ad98f242c52e334e40599cdaab24455d95e12abf7fb283009647baa27a04a79ac45d0dddfc70106baa8dfb34d105b1da71fbac3c3dca4718a97b976b9e4c4b56dea0c2f0f73d258e435e3156125a3a85574b0e06a5cb22ab6d77d900c0d82a73db6b147f1378286885f4b8d11e15cb9bbee80abb90ff49addd3d995e1727c6d751c15d964ca0a199b3fd1821d97685f793ebeb82e1a173f3d4b21535004e9edc511f2f8595e467cd3dd5117df2ff8cb0e928ffadbe33a2838d914d22e709ed000f267538f88287858f062edab5f7dbe079ab6f5e8252ee356155eea1d99b8b8bc9a778f3e3f4c15716408f4d6d4b0d6739fa5900622dc72fff6d0c79ae43118727bb533c81930a3bc85dea97574ee678d7546c4060d1ee526359e8ff6b0809ff4e218e54c8233411d5d1316861c698a13bc95862adf3eda6360367fe18519eea495294990bb2f0db3a7e9dd1e064ba1d3a0fc2c4489be1d52a2fbfac665adb93d84ae806d9e1ed704aae1e140156f4f113fd2aa88db1fa98c7a903e29115b1a37b5f53b57e0b5350231630603057d7f47ab05c5a9b8e78976d73f6be1f39eef207ef665bba21910b4333592cd23af144fd32cbeb29f5d8f734f5c7f062e4a0a0d5abb236588a3a604657231adc10e07910cccd6b075c73bb4d53311b076be2ac22f2a75c98719f857b2bddfbcfbb99314cdacbdb9cbb4ea3f532f5f9a1c93256f83b7b933f7857675eb56e57d395c2a009214f706c371b13d706221161161914f61927ed3435f641b851cc2c35a56f68aa0367db22e24bf7c4608317135e65422f5023391bc2893eb45cf0f3762648bec5e2c3f649a5b2ffd69555668c1525d7f1cc19104793ccb1c14360b5f3f4790bfe0f60ed882189567058e29c0fe67428db64721e5880fef24d9b696a5f10972740e5ed8eedd365876662555ace71bbebb8b9b200621e6d2ef28e5eaac935521c621bd6533b725f001ef494f6ba94cad6e8b4810937a2642fa97fddf59606e9d43762e1eff7badf6b0274354864df0f97cfb0362c324de02d694c83356b0f6e273f20cfad339fe0883da29e58715663d03b1d6c5fa0b9615cef7377507aa43c06c70d5f1cc48a6f449be2956481b33309911edb77effc8fea728fa04544c7f04a1d3f7b365a310c7ed63034528890c6bc23118dd01cad7a096c1fb15b2df445fdfb3a146a881f424254d44dc0caa20e501f5edaf3eba4881ef6380937cb1eb50488a0aef365d49d40aeaa7bd754231973ad1cc6716a5babcfed810f60db313172583b34c237057f1a3991436f6b40c3bd2374cbf1d8b0ef2af73fbdf60623a51841a256617d0829e6b338fddeca9948a0fde177d7a04def4e858ad56388e660a25a405d6397bdc0cce6287b3906a2a2167fbb08ee5828dda75cd3dd61af2a8eb971ea72a515df331ce595b15113368fd30dd36a7ca77d2ac149f049ca55e37cdf95a7316c6686eba6e5a152a6f289983d470314681d331b36b5ff5a1a93915bc309a1f2c0be8eed10a39548ee7b48cbedcb6622c13b0f134136f1bead1dc7ae29118048064119252721b5446192ca1a77eac7f2592fc34bc8eeae98633a21a17b3220ef93d58e28fc9e9b922e4f7ea3bf10f1dd5da9e327fbdfbe79765bf6cc0e37f3c9eceed203d8f80083b8b2a2c0f6a5b0d5a52c8d541e60632a666bcad5c03030000807082c403010000000000000000000000000000000000000000000000000000000000000000ffffffff0603ded4030101ffffffff0267cc9a3b000000001976a914550cef2cf048a294415d0c5893e653ac529c404388ac80b2e60e0000000017a914a71e4588c50c86f4669e0da43db37cbd7428a9f287000000000000000000030000807082c40301601ade5f535f62f3da01e0c88b16beb916877fa0fa43299a9e2398b813d0a119020000006a4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2feffffff02ea5e2c1c000000001976a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac00a3e1110000000017a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e8794d40300f1d4030000030000807082c40302eac0139a677c07b6fcdddd205f4bf538d9cc9fb586565fe77440f93cf1b5ca9a010000006b4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727feffffff6a1ed49e62634ab5a60b23ec73f9014ad1c9d3bd3bf023333c8eb311c802f298000000006b4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1feffffff0200a3e111000000001976a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac3176a002000000001976a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488acd2d40300f1d4030000"
var blockTxs = []string{
"f02aa1c4c86e1d0cef6ccbbc48b2b7b38355bc3612d8f77dd58d04be1ec6ba19",
"a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63",
"83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202",
}
var txDetails map[string]*bchain.Tx
var rpcTest *rpc.Test
func init() {
var (
addr1, addr2, addr3, addr4 bchain.Address
err error
)
addr1, err = bchain.NewBaseAddress("tmGunyrqeeHBKX3Jm23zKLokRogrS51Qzqh")
if err == nil {
addr2, err = bchain.NewBaseAddress("t2GGEpYQUKiTsb9WYKD9AKNEriao84tVsr5")
}
if err == nil {
addr3, err = bchain.NewBaseAddress("tmPuzhaxL3vzTqkyJ6wn48Q4ZfAo6PBvHKC")
}
if err == nil {
addr4, err = bchain.NewBaseAddress("tmBbamgVqVBTAsEzPmEymbczdoaQvE5qwaR")
}
t, err := rpc.NewTest("Zcash Testnet", getRPCClient)
if err != nil {
panic(err)
}
txDetails = map[string]*bchain.Tx{
"a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63": &bchain.Tx{
Hex: "030000807082c40301601ade5f535f62f3da01e0c88b16beb916877fa0fa43299a9e2398b813d0a119020000006a4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2feffffff02ea5e2c1c000000001976a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac00a3e1110000000017a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e8794d40300f1d4030000",
Blocktime: 1528781777,
Time: 1528781777,
Txid: "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63",
LockTime: 251028,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2",
},
Txid: "19a1d013b898239e9a2943faa07f8716b9be168bc8e001daf3625f535fde1a60",
Vout: 2,
Sequence: 4294967294,
},
},
Vout: []bchain.Vout{
{
Value: 4.72669930,
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac",
Addresses: []string{
"tmGunyrqeeHBKX3Jm23zKLokRogrS51Qzqh",
},
},
Address: addr1,
},
{
Value: 3.0,
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e87",
Addresses: []string{
"t2GGEpYQUKiTsb9WYKD9AKNEriao84tVsr5",
},
},
Address: addr2,
},
},
},
"83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202": &bchain.Tx{
Hex: "030000807082c40302eac0139a677c07b6fcdddd205f4bf538d9cc9fb586565fe77440f93cf1b5ca9a010000006b4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727feffffff6a1ed49e62634ab5a60b23ec73f9014ad1c9d3bd3bf023333c8eb311c802f298000000006b4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1feffffff0200a3e111000000001976a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac3176a002000000001976a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488acd2d40300f1d4030000",
Blocktime: 1528781777,
Time: 1528781777,
Txid: "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202",
LockTime: 251090,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727",
},
Txid: "9acab5f13cf94074e75f5686b59fccd938f54b5f20ddddfcb6077c679a13c0ea",
Vout: 1,
Sequence: 4294967294,
},
{
ScriptSig: bchain.ScriptSig{
Hex: "4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1",
},
Txid: "98f202c811b38e3c3323f03bbdd3c9d14a01f973ec230ba6b54a63629ed41e6a",
Vout: 0,
Sequence: 4294967294,
},
},
Vout: []bchain.Vout{
{
Value: 3.0,
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac",
Addresses: []string{
"tmPuzhaxL3vzTqkyJ6wn48Q4ZfAo6PBvHKC",
},
},
Address: addr3,
},
{
Value: 0.44070449,
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488ac",
Addresses: []string{
"tmBbamgVqVBTAsEzPmEymbczdoaQvE5qwaR",
},
},
Address: addr4,
},
},
},
}
rpcTest = t
}
func TestZCashRPC_GetBlockHash(t *testing.T) {
cli, err := getRPCClient()
if err != nil {
t.Fatal(err)
}
hash, err := cli.GetBlockHash(blockHeight)
if err != nil {
t.Error(err)
return
}
if hash != blockHash {
t.Errorf("GetBlockHash() got %q, want %q", hash, blockHash)
}
}
func TestZCashRPC_GetBlockRaw(t *testing.T) {
cli, err := getRPCClient()
if err != nil {
t.Fatal(err)
}
d, err := cli.GetBlockRaw(blockHash)
if err != nil {
t.Error(err)
return
}
blk := hex.EncodeToString(d)
if blk != blockHex {
t.Errorf("GetBlockRaw() got %q, want %q", blk, blockHex)
}
rpcTest.TestGetBlockHash(t)
}
func TestZCashRPC_GetBlock(t *testing.T) {
cli, err := getRPCClient()
if err != nil {
t.Fatal(err)
}
blk, err := cli.GetBlock(blockHash, 0)
if err != nil {
t.Error(err)
return
}
if len(blk.Txs) != len(blockTxs) {
t.Errorf("GetBlock() number of transactions: got %d, want %d", len(blk.Txs), len(blockTxs))
}
for ti, tx := range blk.Txs {
if tx.Txid != blockTxs[ti] {
t.Errorf("GetBlock() transaction %d: got %s, want %s", ti, tx.Txid, blockTxs[ti])
}
}
rpcTest.TestGetBlock(t)
}
func TestZCashRPC_GetTransaction(t *testing.T) {
cli, err := getRPCClient()
if err != nil {
t.Fatal(err)
}
for txid, want := range txDetails {
got, err := cli.GetTransaction(txid)
if err != nil {
t.Error(err)
return
}
// Confirmations is variable field, we just check if is set and reset it
if got.Confirmations > 0 {
got.Confirmations = 0
} else {
t.Errorf("GetTransaction() has empty Confirmations field")
continue
}
if !reflect.DeepEqual(got, want) {
t.Errorf("GetTransaction() got %v, want %v", got, want)
}
}
rpcTest.TestGetTransaction(t)
}

View File

@ -1,25 +1,25 @@
{
"bch": {
"Bcash Testnet": {
"url": "http://localhost:18031",
"user": "rpc",
"pass": "rpc"
},
"btc": {
"Bitcoin Testnet": {
"url": "http://localhost:18030",
"user": "rpc",
"pass": "rpc"
},
"dash": {
"Dash Testnet": {
"url": "http://localhost:18033",
"user": "rpc",
"pass": "rpc"
},
"eth": {
"Ethereum Testnet": {
"url": "ws://localhost:18036",
"user": null,
"pass": null
},
"zec": {
"Zcash Testnet": {
"url": "http://localhost:18032",
"user": "rpc",
"pass": "rpc"

View File

@ -38,6 +38,7 @@ func readDataFile(dir, relDir, filename string) ([]byte, error) {
if !ok {
return nil, errors.New("Path not found")
}
filename = strings.Replace(filename, " ", "_", -1)
path = filepath.Join(path, filename)
return ioutil.ReadFile(path)
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,123 @@
{
"blockHeight": 1325168,
"blockHash": "000000000000004ed0834f3de922e66d024ec4da9fcc2da17be61369cb6dc041",
"blockTxs": [
"e1179f205aabbf48dc2ce4ebd9ed255571b0578e4de551f6574a50cb81120007",
"00a5aa2891d41af9eb1dc30c940f142a609ecab8f370eb0874ba7d32252d1b1b",
"1c519d80804dd17258cfc801bf2c875607956fc9f065a664f43e88d53f80af6f",
"b10c1e2f7c8a6b10fddf94260aff0f8a5f56e33c8d0de48c49a72eb8418c3f6e",
"ba85ca543b290deb84cde9c4ca53614dbe557a3dede5d0adb141f803f8e82f34",
"60dfc2c9cc184ae68ca9e540ab4393d9d2179d060e2ac290f29560c6a1360f51",
"3a40bca678653ae8f7f6d2771b571d5ace1a258056b99e3fd361a10f1016bc53",
"4d4e495f3329801d92c7e3dc9874a372576bf3548decf884ede388143980ecab",
"74ba4bee8d559e4d8b4859c086b0ea5f2c36bcabc95d8578e775f065f70943b8",
"32bcc281f081e172dcb40ad137564724bd9486095813b78990d1d986173ac3c6",
"b6e77c59f4a988731d9b8520e0f4971223e622946eb12e28cc2bab72f1e9c2f8",
"0bc8f39da5d5300a2728b45edb18c8219e94a8b27a2e8074f6c5c10a00d99788",
"8329b31d2a490d57980afcf5c7df4574ce57f952aef6f5aecb3b7786f5c9f255",
"e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470",
"3005378ee85fc905a1812bdfae4b2e0e9bb09f5867a53fd73237bb319a1774aa",
"ebea245b9e4d96fab65c938547a9b3ffd03659b92b8ae4fcdfe4ac9bc325c0a2",
"a2d5fe23b50253dda9941dd6c97c04853d58f048acf347acf9ccf549ee215b51",
"017c2ccec866850521db877c1c7f6d095b7df668f891cfaf70a5e14ce39d010c",
"d101d3467a831cc4dfc87bdd19d0ff5d01b8c872e47b2096eeeac3b44c2a258a",
"3884180bab62d0f0498a8ad012b0005aceec778a18a617e5392d99cee5f21869",
"a00200e57bed4fbd193c4cad49549d311282fee9a82956083353a2874f9bfd9f",
"d32ce7a9413111fb2e3578472d520eb1437db701f20256e3afd37b7c0a6d67e6",
"fed1df6d23a40e1a1f26820bbe35febb668aa2240902f1fd17b31a84dde6eb39",
"5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114",
"411e7f3f4cae4125c8933403809771ebfcaa088f6ef773e5a412ead8639fb515",
"d53858bbbbde4518ea92abda93ac5d01e5122d420a468e6d076244edd99bcea1",
"b5fc4d963805b439d11f06b5d5d89ce3aac225e7145d1673d20d3d37a12c61dd",
"c8d7332377d4bf43c232bc7afc3d7e3aacf13523d1c8488f68f530e58e6cfd88",
"3c21a6b7e3810ca10efac45446cd2b7ef0c9848ac589be7375b61ea5aabbbea4",
"5a25c2b70e2194e05a6208c99343ebe0fad970dd19f3f9cca88aaf77ab9e4658",
"031e3c08ebdcafccf6dc5d7ff1161cd5314424d0a943d2c22a5a2109286e332d",
"4992d16008aa3050b3e2e4aab67e488eb338850ff1c348367ae3d089d8d67a52",
"beb3e71b8da7da7917228f5ce8a88afdc45836c421b053dde24d367865326bd7"
],
"txDetails": {
"e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470": {
"hex": "01000000000102a4b8c14f271cfa77d5ecaed9c3026472a55ea6bca119e2ff7b04975326f5974001000000171600147edbcdda98080eeb6e8a63c63da135498295c3cdffffffffabcdf96b8ba187c24d70f98a2edfbf100821506212637f28b30a08efa970a4eb0100000017160014df7d60680e984aae4052e24bce8f17e4bfdcc532ffffffff0292fe1e00000000001976a914abba3808b854c70b63ff038fcddfbafcb707713988ac13e796110100000017a914c9e67d2b78a38857c786ea9a2fc3e64cb6e775648702483045022100a6910d3a3b64545a44e097a3739b1206095602fa796afc51f81b249d1293ad0a02206cdae51853b59ca52003f4e54ea8ae418b6b4d036cbe1fdd78677efe8eddb318012102b45e239d96f8504ae45a32af7c80f6164f7b9658166e318521ee822192fee3ef0247304402202684a6f59ee255f3f5e9a9209a735bf2aaa818d47add7c3f7a5590623bd2211c0220452bf2fb8d0dc0380862988f0f098c21e861004e02da7bd1fc6bea4e7f33d2dc012103f308867fda821467f77d372791644225174ae16daba86e55754c150a8d5aa40d00000000",
"txid": "e559c2fd0f4e8aebe28fcb6dbb099fc6ee92d726d74fda28522f52bc1490a470",
"blocktime": 1528788394,
"time": 1528788394,
"locktime": 0,
"vin": [
{
"txid": "4097f5265397047bffe219a1bca65ea5726402c3d9aeecd577fa1c274fc1b8a4",
"vout": 1,
"sequence": 4294967295,
"scriptSig": {
"hex": "1600147edbcdda98080eeb6e8a63c63da135498295c3cd"
}
},
{
"txid": "eba470a9ef080ab3287f63126250210810bfdf2e8af9704dc287a18b6bf9cdab",
"vout": 1,
"sequence": 4294967295,
"scriptSig": {
"hex": "160014df7d60680e984aae4052e24bce8f17e4bfdcc532"
}
}
],
"vout": [
{
"value": 0.02031250,
"n": 0,
"scriptPubKey": {
"hex": "76a914abba3808b854c70b63ff038fcddfbafcb707713988ac"
}
},
{
"value": 45.90069523,
"n": 1,
"scriptPubKey": {
"hex": "a914c9e67d2b78a38857c786ea9a2fc3e64cb6e7756487"
}
}
]
},
"5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114": {
"hex": "01000000025b0551bd0fffcf55881e285e15b364ab9a831d2494d2eb7a163a4bbd6f551151000000006b483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314ffffffffd49a58913818610b0aa065d4f32995863d216c44040a49d454f6b7eeb65c9adc010000006b483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56feffffff02da869800000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac80fe210a000000001976a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac00000000",
"txid": "5bef621ad6d0970939ae36270a3228d3c315f8008fb04eebffab5f7a3589d114",
"blocktime": 1528788394,
"time": 1528788394,
"locktime": 0,
"vin": [
{
"txid": "5111556fbd4b3a167aebd294241d839aab64b3155e281e8855cfff0fbd51055b",
"vout": 0,
"sequence": 4294967295,
"scriptSig": {
"hex": "483045022100dff500e8c060a9c8810483d4ada8f91c0b844e92778cc762300040870109c0be02207029fa781ec37ddeb0ffbfa7160e625afdd126f30ec11fb9bc25f4d2164933bb0121023c6017ab9f471a69157180c5e30b9aef2ff73ea2a1a774c53a975e2557536314"
}
},
{
"txid": "dc9a5cb6eeb7f654d4490a04446c213d869529f3d465a00a0b61183891589ad4",
"vout": 1,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100dce24b819b70f920d0bb60fa1241fa14f2500412a60aceeaae2610e1593b5e3c022041fdc5a02dc26af043bea27713f1245340b98bd47aa283e23b96ecc4aae157a4012102d18a88bcf5f65d937de7d9bc24d2f492a55216087262bf4683d0055dd0521a56"
}
}
],
"vout": [
{
"value": 0.09995994,
"n": 0,
"scriptPubKey": {
"hex": "76a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac"
}
},
{
"value": 1.7,
"n": 1,
"scriptPubKey": {
"hex": "76a914b4f1349ec3e7c751c6720e2c0783e3449e21e36888ac"
}
}
]
}
}
}

View File

@ -0,0 +1,111 @@
{
"blockHeight": 139521,
"blockHash": "000000000296ea05e13b5479f6c041de575eec90759f58f57d311a8918b0af17",
"blockTxs": [
"cfe2d2c5bd9929349a9d8f3d8f2423f4f0c9b408ed41b3002be5e7437a20aa7d",
"3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942",
"3f296b929f6ee4f0ad3d6fce35873d6aeacbdf06aaf2abe384beb6e3f2a4dd03",
"5ef4f9b7e4c0240687c3a6e6a073e0fbc753645d231ca35435b95325778b7186",
"805b5ba055227b0f7dbbdef8e603632c4d25b93f0e87c59fc74cbe8ad8dbe806",
"392785b88f03c82492172827f30cbed4761de3098a0faaa740999b412ff15e46",
"13fafd7c8afc6fd2c860d342eaf0cfe0edd2b994bb836898c02830b2f688155e",
"26bc95fcc71380f0d66e437314c72999c0848cab81fe1f91c9c95bf15b74855c",
"7873d8d774f2aae72100620a21b38ea681b488b328802b6ec3271b1d727c6b73",
"23147585fd4ed3970118027ce9b2e190e264f26fbf5d8c9708a483cee6cada43",
"e079894b2545eca7184a2f0eaccf4b069242f18fa0721aedc8f66b73112a1e8f",
"b36284854fa1947844ecc5d62768be3e14cc44c430db87b1b90184364b30dbf4",
"1fd3ad5d0392cedf318600908270986c801cac161ef06f660591634cc2a29652",
"7a5b8944589b0cfba9c408b24b095648b0040a37fd769a9785982603bb7ca1f7",
"7da1811ec3f2c6381d89e59f40957d36c898ba1bb70b976e0b5490d3b9fa8952",
"dbcfa65bdfe758353305eaff11b300463018efb7fa8f17c6c6a98bb8dba6bcc9",
"c046821e5503770304359792c20c1ed3e71509a19a867acf1dae113bf52d2a6f",
"d3cea11e1a4937323cc94172f93a2e0edc0981a706f2d2c3315ace94b01b375a",
"6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e",
"53834414d8a88afe4268b85f959e526a0c677ac6b7dedba9a796d1549852fd41",
"b761ebaccfb6d0eeaa5350ccafdf6a7633e59d6baadc932c6d78491cb08052a6"
],
"txDetails": {
"3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942": {
"hex": "020000000109d37a59b7da8902b8822547c927e35554b16667ffd698daae985c58c71616a4010000006b483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58feffffff02a055e18e170000001976a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac8cb65df0440000001976a9141ed486862342afd134f96a6cee5ca105801375df88ac00210200",
"txid": "3f7ac6c55c0b383feb17715aef3cebf29182039fc42577d7c517b2fc04096942",
"blocktime": 1528713762,
"time": 1528713762,
"locktime": 139520,
"vin": [
{
"txid": "a41616c7585c98aeda98d6ff6766b15455e327c9472582b80289dab7597ad309",
"vout": 1,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100f3ef92ae1c8442eff171bd2dbc69373db384c86617032917b3bb2c5cd892bb2702207485cf5f8e6aa9fe245f5708a5c6ec37580c1c35e54429c6b43b322678f54cad012102ba7dbd059cc4f03e9fa4b6007b407279a154a8fc2103241511df155a52b7ea58"
}
}
],
"vout": [
{
"value": 1011.81380000,
"n": 0,
"scriptPubKey": {
"hex": "76a914e2114cb0a8b5d6f1c3c720f314cbf79e14bb9cdd88ac"
}
},
{
"value": 2960.90449548,
"n": 1,
"scriptPubKey": {
"hex": "76a9141ed486862342afd134f96a6cee5ca105801375df88ac"
}
}
]
},
"6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e": {
"hex": "020000000327ee9a2a360c6304fda56fa029670a95db595f70ae185a6f76ff1de415e07a18000000006a473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ecfeffffff1ae8beeed571f491410ed327a6821b683d8ae571aea56057634da7aa8ce1041f000000006b4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749feffffff6388454ad1e5718af92def6fe307e64e97c43324d30c322b31edf85088020dc9000000006a47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03feffffff02ce177e09000000001976a91437617547a3e0ba0adeead7c8c33c03970341404088acd0f7aad1010000001976a914f0b3dff509993e0b7035ce997b52763ce501d67888ac00210200",
"txid": "6ef2a57e38dd891690c8f230b65f26247799b2421860e6cf8a1c7c8cfdedd96e",
"blocktime": 1528713762,
"time": 1528713762,
"locktime": 139520,
"vin": [
{
"txid": "187ae015e41dff766f5a18ae705f59db950a6729a06fa5fd04630c362a9aee27",
"vout": 0,
"sequence": 4294967294,
"scriptSig": {
"hex": "473044022011e7aed7a1cf187a9b6ca294bb76e3576cadebce48b5b944ad8393a60e8aa485022000818546dc7ba47c625258223dcefd6e84dc3faa8d54c646bfc0f55c4506c8f00121023fe7680caadc7bf3f796936de04d77e1007dea53880621c01d7b34720345d4ec"
}
},
{
"txid": "1f04e18caaa74d635760a5ae71e58a3d681b82a627d30e4191f471d5eebee81a",
"vout": 0,
"sequence": 4294967294,
"scriptSig": {
"hex": "4830450221009277cfac065a076814e18613d89c7d85a6461cf5283f2a9cee7254ec83fce637022023cf7186be7714921fe24719450e65a204d803738a1cb9fe35f30753f0696b8b012102aff34da05a74891899aace72f2e650ec1c039bfc519c192e6c231a2b7fa05749"
}
},
{
"txid": "c90d028850f8ed312b320cd32433c4974ee607e36fef2df98a71e5d14a458863",
"vout": 0,
"sequence": 4294967294,
"scriptSig": {
"hex": "47304402204435602e00d22417ff489302758a246df5fbc05e9bc4d0025464556ae7f77e70022036e30d2d46937ee0fc0cdf9a63e7baf8351bd16454ec02311cac52655ac4c32801210395fbe30126fc97a2c8b1e29bc27028a5a6885e4a4116d13e2cbe32c9d71e7f03"
}
}
],
"vout": [
{
"value": 1.59258574,
"n": 0,
"scriptPubKey": {
"hex": "76a91437617547a3e0ba0adeead7c8c33c03970341404088ac"
}
},
{
"value": 78.12610000,
"n": 1,
"scriptPubKey": {
"hex": "76a914f0b3dff509993e0b7035ce997b52763ce501d67888ac"
}
}
]
}
}
}

View File

@ -0,0 +1,38 @@
{
"blockHeight": 2870000,
"blockHash": "0xeccd6b0031015a19cb7d4e10f28590ba65a6a54ad1baa322b50fe5ad16903895",
"blockTxs": [
"0x17ee235fc0359155b25419e0e4c65d9c500df6e71e8288d6ef020d04cc2f2cb3",
"0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d",
"0xe14e6628e866555091fda44f934dfc6bfbbcd8a81e1281bb682eaf293d248be8",
"0xcffe6d5f4022822ba5f1e64f5b413c7f91c3a48c3739429d72065ec1a8b82e91",
"0x1d261bf23077b7e68ad9300ce9d88e7f4f95075fe98ea76b70534acaf5cf891b",
"0x92f73c26c99ea3b15535829cf686541a1318623baf8c49fe2bf0168bf3c3e272",
"0x392394bb4e4463c9ed59182797b5dbf23aa41c6f6edd7f4b5025d82acf43c357",
"0x3dd838b8d5d9b7155c960f8a138a9c499b87d84b7c9d9a513d8022b1991f959c",
"0x4889b4d1ad3652f6c410a6b6c05a459b86e68363d795f38ec13d5dc6d595d977",
"0xd1e1ff22a80135d904d119252c5d56a8c5b07af9d26de79fd3dda8aeffccf9ae",
"0xd1c3b7835c6032eb9eb07fdce90944f26d470b1c027adf2951b329a783e8e628",
"0x7f0d140329941f120b5b3fc751e30adeb87b2aebbfce5adcd0216604a34b6cc0"
],
"txDetails": {
"0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d": {
"hex": "7b226e6f6e6365223a2230783239666165222c226761735072696365223a223078313261303566323030222c22676173223a2230786462626130222c22746f223a22307836383262373930336131313039386366373730633761656634616130326138356233663336303161222c2276616c7565223a22307830222c22696e707574223a223078663032356361616630303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030323235222c2268617368223a22307865366231363864366262336438656437386530336462663832386236626664316662363133663665313239636261363234393634393834353533373234633564222c22626c6f636b4e756d626572223a223078326263616630222c2266726f6d223a22307864616363396336313735346130633436313666633533323364633934366538396562323732333032222c227472616e73616374696f6e496e646578223a22307831222c2276223a2230783162222c2272223a22307831626434306133313132326330333931386466366431363664373430613661336132326630386132353933346365623136383863363239373736363163383063222c2273223a22307836303766626331356331663739393561343235386635613962636363363362303430333632643139393164356566653133363163353632323265346361383966227d",
"txid": "0xe6b168d6bb3d8ed78e03dbf828b6bfd1fb613f6e129cba624964984553724c5d",
"blocktime": 1521515026,
"time": 1521515026,
"vin": [
{
"addresses": ["0xdacc9c61754a0c4616fc5323dc946e89eb272302"]
}
],
"vout": [
{
"scriptPubKey": {
"addresses": ["0x682b7903a11098cf770c7aef4aa02a85b3f3601a"]
}
}
]
}
}
}

View File

@ -0,0 +1,89 @@
{
"blockHeight": 251102,
"blockHash": "001335906f981bbf0633e124e2fa8afef3d882e34a0306a4e0c55162e57e673d",
"blockTxs": [
"f02aa1c4c86e1d0cef6ccbbc48b2b7b38355bc3612d8f77dd58d04be1ec6ba19",
"a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63",
"83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202"
],
"txDetails": {
"a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63": {
"hex": "030000807082c40301601ade5f535f62f3da01e0c88b16beb916877fa0fa43299a9e2398b813d0a119020000006a4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2feffffff02ea5e2c1c000000001976a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac00a3e1110000000017a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e8794d40300f1d4030000",
"txid": "a9f7cc34d7e272d2d9fb68cfa1c1941e338f377e6e426ae2fea1c12616d89c63",
"blocktime": 1528781777,
"time": 1528781777,
"locktime": 251028,
"vin": [
{
"txid": "19a1d013b898239e9a2943faa07f8716b9be168bc8e001daf3625f535fde1a60",
"vout": 2,
"sequence": 4294967294,
"scriptSig": {
"hex": "4730440220770472192407cfc5c01e331442ac579a68e445a7ccb0fe8a481161519555794a02207b00b4c01af416a4972c2fd2fba8d58a6467da545400469ab57e9207a0ee3ca201210201d494a45f36f545443bafd1a9050b02f448dd236bb4ce2602f83978980b98f2"
}
}
],
"vout": [
{
"value": 4.72669930,
"n": 0,
"scriptPubKey": {
"hex": "76a9144ef2de10b304381a9404ccbe12f83395e7860bbd88ac",
"addresses": ["tmGunyrqeeHBKX3Jm23zKLokRogrS51Qzqh"]
}
},
{
"value": 3.0,
"n": 1,
"scriptPubKey": {
"hex": "a9146a8eecfe3a7949a4a8c68754accaea75ab32cd9e87",
"addresses": ["t2GGEpYQUKiTsb9WYKD9AKNEriao84tVsr5"]
}
}
]
},
"83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202": {
"hex": "030000807082c40302eac0139a677c07b6fcdddd205f4bf538d9cc9fb586565fe77440f93cf1b5ca9a010000006b4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727feffffff6a1ed49e62634ab5a60b23ec73f9014ad1c9d3bd3bf023333c8eb311c802f298000000006b4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1feffffff0200a3e111000000001976a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac3176a002000000001976a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488acd2d40300f1d4030000",
"txid": "83f3db1d129a77bee9c6cf32cbc12d959cd0af8c8d734c2611db4bfddfe99202",
"blocktime": 1528781777,
"time": 1528781777,
"locktime": 251090,
"vin": [
{
"txid": "9acab5f13cf94074e75f5686b59fccd938f54b5f20ddddfcb6077c679a13c0ea",
"vout": 1,
"sequence": 4294967294,
"scriptSig": {
"hex": "4830450221009ad50b4f0da90a1876af6b43c029e55f1c8b8c44e94161a7f14c812adcebeaa902204b9df40096337eb43120408d4743693b17ea27fc0f660948a0a761264e67a6b00121036ec451bd1d3d39bb8d2d0264dd5a0ff817ae306ec7ce0c7c9b86be3f3dde8727"
}
},
{
"txid": "98f202c811b38e3c3323f03bbdd3c9d14a01f973ec230ba6b54a63629ed41e6a",
"vout": 0,
"sequence": 4294967294,
"scriptSig": {
"hex": "4830450221009008a10ebebf45f1a9aeb01a5b49a5de820a1a396ca1b900ea0420a1c2c49ea7022053fad044ff42792dcad16d084d67d7c4cc565458f78a14292fe5ef5e9f7a20bb012103448301b9253e6822ae05af64c61517fe8cf8b22590cc7d0b308b7f5cbce26db1"
}
}
],
"vout": [
{
"value": 3.0,
"n": 0,
"scriptPubKey": {
"hex": "76a9149bc587e2cdd13b78e26f601f084ea0597b357f4d88ac",
"addresses": ["tmPuzhaxL3vzTqkyJ6wn48Q4ZfAo6PBvHKC"]
}
},
{
"value": 0.44070449,
"n": 1,
"scriptPubKey": {
"hex": "76a91414a88f1032c8ef1c6bd9177f62cdb260b5087b5488ac",
"addresses": ["tmBbamgVqVBTAsEzPmEymbczdoaQvE5qwaR"]
}
}
]
}
}
}