feat: Dogecoin testnet support (#650)

* feat: Dogecoin testnet address/script parsing

* test: Dogecoin testnet address/script parsing

* test: Dogecoin testnet transaction packing/unpacking

* test: Dogecoin testnet block parsing

* chore: Dogecoin testnet config file

* test: Dogecoin testnet integration rpc (initial)

* fix: run backend as REST

* fix: Dogecoin testnet in BlockChainFactories

* test: Dogecoin testnet integration sync

* docs: Dogecoin testnet port numbers
This commit is contained in:
nhaus12 2021-08-12 22:22:05 +02:00 committed by GitHub
parent 51d10bccd2
commit 7847f7c2ad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 756 additions and 0 deletions

View File

@ -84,6 +84,7 @@ func init() {
BlockChainFactories["Litecoin"] = litecoin.NewLitecoinRPC
BlockChainFactories["Litecoin Testnet"] = litecoin.NewLitecoinRPC
BlockChainFactories["Dogecoin"] = dogecoin.NewDogecoinRPC
BlockChainFactories["Dogecoin Testnet"] = dogecoin.NewDogecoinRPC
BlockChainFactories["Vertcoin"] = vertcoin.NewVertcoinRPC
BlockChainFactories["Vertcoin Testnet"] = vertcoin.NewVertcoinRPC
BlockChainFactories["Namecoin"] = namecoin.NewNamecoinRPC

View File

@ -13,11 +13,13 @@ import (
// magic numbers
const (
MainnetMagic wire.BitcoinNet = 0xc0c0c0c0
TestnetMagic wire.BitcoinNet = 0xfcc1b7dc // See https://github.com/dogecoin/dogecoin/blob/f80bfe9068ac1a0619d48dad0d268894d926941e/qa/rpc-tests/test_framework/mininode.py#L1620
)
// chain parameters
var (
MainNetParams chaincfg.Params
TestNetParams chaincfg.Params
)
func init() {
@ -25,6 +27,11 @@ func init() {
MainNetParams.Net = MainnetMagic
MainNetParams.PubKeyHashAddrID = []byte{30}
MainNetParams.ScriptHashAddrID = []byte{22}
TestNetParams = chaincfg.TestNet3Params
TestNetParams.Net = TestnetMagic
TestNetParams.PubKeyHashAddrID = []byte{113} // See https://github.com/dogecoin/dogecoin/blob/f80bfe9068ac1a0619d48dad0d268894d926941e/contrib/testgen/gen_base58_test_vectors.py#L23
TestNetParams.ScriptHashAddrID = []byte{196} // See https://github.com/dogecoin/dogecoin/blob/f80bfe9068ac1a0619d48dad0d268894d926941e/contrib/testgen/gen_base58_test_vectors.py#L24
}
// DogecoinParser handle
@ -42,11 +49,16 @@ func NewDogecoinParser(params *chaincfg.Params, c *btc.Configuration) *DogecoinP
func GetChainParams(chain string) *chaincfg.Params {
if !chaincfg.IsRegistered(&MainNetParams) {
err := chaincfg.Register(&MainNetParams)
if err == nil {
err = chaincfg.Register(&TestNetParams)
}
if err != nil {
panic(err)
}
}
switch chain {
case "test":
return &TestNetParams
default:
return &MainNetParams
}

View File

@ -82,6 +82,70 @@ func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) {
}
}
func Test_GetAddrDescFromAddress_Testnet(t *testing.T) {
type args struct {
address string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "P2PKH1",
args: args{address: "neYNjrnowpYrbS4QanPngXBi6MQcX6FsWV"},
want: "76a9147183fdc10d664551d151922f95e58ab548d8ad2688ac",
wantErr: false,
},
{
name: "P2PKH2",
args: args{address: "nYrWFiv3zz5MewmN6ZJUpEfLQwz63Ptf1i"},
want: "76a9143320ff38bc2d44e404cc3f0b36202f3a4897e05088ac",
wantErr: false,
},
{
name: "P2PKH3",
args: args{address: "nbn2EWCDp2xcb7jTxhcXytLKZuctY8xXiB"},
want: "76a914533051d74f660325166fd342250f99fd366214ec88ac",
wantErr: false,
},
{
name: "P2SH1",
args: args{address: "2MyChfh5WfqzDTyFibZq2uSF3WcYFE1G5te"},
want: "a91441569cc9dbdc08a99d20079bfd12071a2bdbf8e987",
wantErr: false,
},
{
name: "P2SH2",
args: args{address: "2NCnuCgdAAQHQvSQVw9eJA8UfbffupFLaYm"},
want: "a914d66804cbba3b9035f2447b5454699f657dd3275087",
wantErr: false,
},
{
name: "P2SH3",
args: args{address: "2N2ju8ukjDQbJRB4ptNtekDzYNiqSQHARvd"},
want: "a9146825756d503c3a81659409636d6e6c40755fcdcf87",
wantErr: false,
},
}
parser := NewDogecoinParser(GetChainParams("test"), &btc.Configuration{})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := parser.GetAddrDescFromAddress(tt.args.address)
if (err != nil) != tt.wantErr {
t.Errorf("GetAddrDescFromAddress() error = %v, wantErr %v", err, tt.wantErr)
return
}
h := hex.EncodeToString(got)
if !reflect.DeepEqual(h, tt.want) {
t.Errorf("GetAddrDescFromAddress() = %v, want %v", h, tt.want)
}
})
}
}
func Test_GetAddressesFromAddrDesc_Mainnet(t *testing.T) {
type args struct {
script string
@ -157,12 +221,107 @@ func Test_GetAddressesFromAddrDesc_Mainnet(t *testing.T) {
}
}
func Test_GetAddressesFromAddrDesc_Testnet(t *testing.T) {
type args struct {
script string
}
tests := []struct {
name string
args args
want []string
want2 bool
wantErr bool
}{
{
name: "P2PKH1",
args: args{script: "76a9147183fdc10d664551d151922f95e58ab548d8ad2688ac"},
want: []string{"neYNjrnowpYrbS4QanPngXBi6MQcX6FsWV"},
want2: true,
wantErr: false,
},
{
name: "P2PKH2",
args: args{script: "76a9143320ff38bc2d44e404cc3f0b36202f3a4897e05088ac"},
want: []string{"nYrWFiv3zz5MewmN6ZJUpEfLQwz63Ptf1i"},
want2: true,
wantErr: false,
},
{
name: "P2PKH3",
args: args{script: "76a914533051d74f660325166fd342250f99fd366214ec88ac"},
want: []string{"nbn2EWCDp2xcb7jTxhcXytLKZuctY8xXiB"},
want2: true,
wantErr: false,
},
{
name: "P2SH1",
args: args{script: "a91441569cc9dbdc08a99d20079bfd12071a2bdbf8e987"},
want: []string{"2MyChfh5WfqzDTyFibZq2uSF3WcYFE1G5te"},
want2: true,
wantErr: false,
},
{
name: "P2SH2",
args: args{script: "a914d66804cbba3b9035f2447b5454699f657dd3275087"},
want: []string{"2NCnuCgdAAQHQvSQVw9eJA8UfbffupFLaYm"},
want2: true,
wantErr: false,
},
{
name: "P2SH3",
args: args{script: "a9146825756d503c3a81659409636d6e6c40755fcdcf87"},
want: []string{"2N2ju8ukjDQbJRB4ptNtekDzYNiqSQHARvd"},
want2: true,
wantErr: false,
},
{
name: "OP_RETURN ascii",
args: args{script: "6a0c48656c6c6f20746865726521"},
want: []string{"OP_RETURN (Hello there!)"},
want2: false,
wantErr: false,
},
{
name: "OP_RETURN hex",
args: args{script: "6a072020f1686f6a20"},
want: []string{"OP_RETURN 2020f1686f6a20"},
want2: false,
wantErr: false,
},
}
parser := NewDogecoinParser(GetChainParams("test"), &btc.Configuration{})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
b, _ := hex.DecodeString(tt.args.script)
got, got2, err := parser.GetAddressesFromAddrDesc(b)
if (err != nil) != tt.wantErr {
t.Errorf("GetAddressesFromAddrDesc() error = %v, wantErr %v", err, tt.wantErr)
return
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("GetAddressesFromAddrDesc() = %v, want %v", got, tt.want)
}
if !reflect.DeepEqual(got2, tt.want2) {
t.Errorf("GetAddressesFromAddrDesc() = %v, want %v", got2, tt.want2)
}
})
}
}
var (
testTx1 bchain.Tx
testTxPacked1 = "00030e6d8ba8d7aa2001000000016b3c0c53267964120acf7f7e72217e3f463e52ce622f89659f6a6bb8e69a4d91000000006c493046022100a96454237e3a020994534583e28c04757881374bceac89f933ea9ff00b4db259022100fbb757ff7ea4f02c4e42556b2834c61eba1f1af605db089d836a0614d90a3b46012103cebdde6d1046e285df4f48497bc50dc20a4a258ca5b7308cb0a929c9fdadcd9dffffffff0217e823ca7f0200001976a914eef21768a546590993e313c7f3dfadf6a6efa1e888acaddf4cba010000001976a914e0fee2ea29dd9c6c759d8341bd0da4c4f738cced88ac00000000"
testTx2 bchain.Tx
testTxPacked2 = "0001193a8ba8d7835601000000016d0211b5656f1b8c2ac002445638e247082090ffc5d5fa7c38b445b84a2c2054000000006b4830450221008856f2f620df278c0fc6a5d5e2d50451c0a65a75aaf7a4a9cbfcac3918b5536802203dc685a784d49e2a95eb72763ad62f02094af78507c57b0a3c3f1d8a60f74db6012102db814cd43df584804fde1949365a6309714e342aef0794dc58385d7e413444cdffffffff0237daa2ee0a4715001976a9149355c01ed20057eac9fe0bbf8b07d87e62fe712d88ac8008389e7e8d03001976a9145b4f2511c94e4fcaa8f8835b2458f8cb6542ca7688ac00000000"
testTx1_Testnet bchain.Tx
testTxPacked1_Testnet = "0030d40b8c8bc4d552010000000104207e905afaf6facfafe7f63cac0afaab07c36b8aab34d5a6b6402859cfbb3b010000006b483045022100daf5631310f5f8ffa4b6a5e9151e3eefbc797ab67ee52e78621526d32694705b02206c038bd527397d3d6f01cd72011a61b58f5d8b74c2d067274d09a8f70f436d330121031d716677bfa840265c32f02b1ff519e59b2d76fcc1753c59516d6891058e6826ffffffff0256b54009000000001976a914e56f55dbb600c10e1f4f6d5da38eea5e664504cf88ac220d5871030000001976a914e8600a08d053bcd41bc316be574efbba6e126d3088ac00000000"
testTx2_Testnet bchain.Tx
testTxPacked2_Testnet = "0030d4068c8bc4c770010000000342dd48439e8fe54b161be919bd9a34e887fa88ca38b1200fc26f4edffc3e69950000000069463043021f48a06f76e53665563090919d01dab845039d7ca4050ea00d65dd6542f2e219022024ae5e8806d737c80e83aa969dd549afbf675a94582889b61a630c0a328969870121036a0a9600ef07072a55fdd770fe4c6e4a138ce3c409eb4328f37fb3066d12e598feffffff9883d80ffa7af541808640940b2a7fb69c8ad817ef51049cdf9ee09731460a12010000006a47304402201d6a14b9a2f275a64edfa447e13347e53023bc192de577a0f7fa5309f26d987b0220386ba58a20032395c8c773cc9be405251b9f5d47182f3be5055dbe01ce0894650121038548fe799340b63c4e05e1edee6a36c5a2b82abec4efecc60bef0205969fb9befeffffffd7d88db648983248f58adb62a428baad726e9d6f40a9dfbf8181c7cd013d2dad000000006b483045022100880a8e9c9fdf43ef8f8c2e6817327d6cee89f12e47d77eb6e470a1b2d99b695d0220755911c3ec6d6704c34d8fd447875c9dbaf37c83a2079352be827c558e1b3f3b012103ddd9ebd38c8891b2ee56b17a155367edcc251fc7aca30130523c834d94fd04d2feffffff021ed9092c000000001976a91433bc558a159810fe4353b09b38b270a74a02621f88ac29ebe9a50000000017a914d0e87f2ab081c1c00e3dca9b653d654889ddb7148705d43000"
)
func init() {
@ -245,6 +404,102 @@ func init() {
},
},
}
testTx1_Testnet = bchain.Tx{
Hex: "010000000104207e905afaf6facfafe7f63cac0afaab07c36b8aab34d5a6b6402859cfbb3b010000006b483045022100daf5631310f5f8ffa4b6a5e9151e3eefbc797ab67ee52e78621526d32694705b02206c038bd527397d3d6f01cd72011a61b58f5d8b74c2d067274d09a8f70f436d330121031d716677bfa840265c32f02b1ff519e59b2d76fcc1753c59516d6891058e6826ffffffff0256b54009000000001976a914e56f55dbb600c10e1f4f6d5da38eea5e664504cf88ac220d5871030000001976a914e8600a08d053bcd41bc316be574efbba6e126d3088ac00000000",
Blocktime: 1622709609,
Txid: "43cfbc6db77a8e9aad25913c2298da81421e513e216420b8af2562e744a030c9",
LockTime: 0,
Version: 1,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "483045022100daf5631310f5f8ffa4b6a5e9151e3eefbc797ab67ee52e78621526d32694705b02206c038bd527397d3d6f01cd72011a61b58f5d8b74c2d067274d09a8f70f436d330121031d716677bfa840265c32f02b1ff519e59b2d76fcc1753c59516d6891058e6826",
},
Txid: "3bbbcf592840b6a6d534ab8a6bc307abfa0aac3cf6e7afcffaf6fa5a907e2004",
Vout: 1,
Sequence: 4294967295,
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(155235670),
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a914e56f55dbb600c10e1f4f6d5da38eea5e664504cf88ac",
Addresses: []string{
"nq7JNvDtsGxB7wRjqc6DQ7JRzzXtHT2ETD",
},
},
},
{
ValueSat: *big.NewInt(14786497826),
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a914e8600a08d053bcd41bc316be574efbba6e126d3088ac",
Addresses: []string{
"nqNr5hLREhQTjx4DA4TfJfeFR9YjMQXrxn",
},
},
},
},
}
testTx2_Testnet = bchain.Tx{
Hex: "010000000342dd48439e8fe54b161be919bd9a34e887fa88ca38b1200fc26f4edffc3e69950000000069463043021f48a06f76e53665563090919d01dab845039d7ca4050ea00d65dd6542f2e219022024ae5e8806d737c80e83aa969dd549afbf675a94582889b61a630c0a328969870121036a0a9600ef07072a55fdd770fe4c6e4a138ce3c409eb4328f37fb3066d12e598feffffff9883d80ffa7af541808640940b2a7fb69c8ad817ef51049cdf9ee09731460a12010000006a47304402201d6a14b9a2f275a64edfa447e13347e53023bc192de577a0f7fa5309f26d987b0220386ba58a20032395c8c773cc9be405251b9f5d47182f3be5055dbe01ce0894650121038548fe799340b63c4e05e1edee6a36c5a2b82abec4efecc60bef0205969fb9befeffffffd7d88db648983248f58adb62a428baad726e9d6f40a9dfbf8181c7cd013d2dad000000006b483045022100880a8e9c9fdf43ef8f8c2e6817327d6cee89f12e47d77eb6e470a1b2d99b695d0220755911c3ec6d6704c34d8fd447875c9dbaf37c83a2079352be827c558e1b3f3b012103ddd9ebd38c8891b2ee56b17a155367edcc251fc7aca30130523c834d94fd04d2feffffff021ed9092c000000001976a91433bc558a159810fe4353b09b38b270a74a02621f88ac29ebe9a50000000017a914d0e87f2ab081c1c00e3dca9b653d654889ddb7148705d43000",
Blocktime: 1622708728,
Txid: "91e2f3a9dde1e2da53f29c73033084b3d1a3b0c0ba6737d6418cfa9cad62be3c",
LockTime: 3200005,
Version: 1,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "463043021f48a06f76e53665563090919d01dab845039d7ca4050ea00d65dd6542f2e219022024ae5e8806d737c80e83aa969dd549afbf675a94582889b61a630c0a328969870121036a0a9600ef07072a55fdd770fe4c6e4a138ce3c409eb4328f37fb3066d12e598",
},
Txid: "95693efcdf4e6fc20f20b138ca88fa87e8349abd19e91b164be58f9e4348dd42",
Vout: 0,
Sequence: 4294967294, // Locktime is enabled for this transaction; see BIP-125
},
{
ScriptSig: bchain.ScriptSig{
Hex: "47304402201d6a14b9a2f275a64edfa447e13347e53023bc192de577a0f7fa5309f26d987b0220386ba58a20032395c8c773cc9be405251b9f5d47182f3be5055dbe01ce0894650121038548fe799340b63c4e05e1edee6a36c5a2b82abec4efecc60bef0205969fb9be",
},
Txid: "120a463197e09edf9c0451ef17d88a9cb67f2a0b9440868041f57afa0fd88398",
Vout: 1,
Sequence: 4294967294,
},
{
ScriptSig: bchain.ScriptSig{
Hex: "483045022100880a8e9c9fdf43ef8f8c2e6817327d6cee89f12e47d77eb6e470a1b2d99b695d0220755911c3ec6d6704c34d8fd447875c9dbaf37c83a2079352be827c558e1b3f3b012103ddd9ebd38c8891b2ee56b17a155367edcc251fc7aca30130523c834d94fd04d2",
},
Txid: "ad2d3d01cdc78181bfdfa9406f9d6e72adba28a462db8af548329848b68dd8d7",
Vout: 0,
Sequence: 4294967294,
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(738842910),
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a91433bc558a159810fe4353b09b38b270a74a02621f88ac",
Addresses: []string{
"nYuiLjsDCVCBwZ3XhNv3qiiDiwmtQRLNhY",
},
},
},
{
ValueSat: *big.NewInt(2783570729),
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "a914d0e87f2ab081c1c00e3dca9b653d654889ddb71487",
Addresses: []string{
"2NCHq4LmqvjB9mqrHMWNUjfDs2FdsmJah6b",
},
},
},
},
}
}
func Test_PackTx(t *testing.T) {
@ -298,6 +553,57 @@ func Test_PackTx(t *testing.T) {
}
}
func Test_PackTx_Testnet(t *testing.T) {
type args struct {
tx bchain.Tx
height uint32
blockTime int64
parser *DogecoinParser
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "dogecoin-testnet-1",
args: args{
tx: testTx1_Testnet,
height: 3200011,
blockTime: 1622709609,
parser: NewDogecoinParser(GetChainParams("test"), &btc.Configuration{}),
},
want: testTxPacked1_Testnet,
wantErr: false,
},
{
name: "dogecoin-testnet-2",
args: args{
tx: testTx2_Testnet,
height: 3200006,
blockTime: 1622708728,
parser: NewDogecoinParser(GetChainParams("test"), &btc.Configuration{}),
},
want: testTxPacked2_Testnet,
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
@ -349,6 +655,57 @@ func Test_UnpackTx(t *testing.T) {
}
}
func Test_UnpackTx_Testnet(t *testing.T) {
type args struct {
packedTx string
parser *DogecoinParser
}
tests := []struct {
name string
args args
want *bchain.Tx
want1 uint32
wantErr bool
}{
{
name: "dogecoin-testnet-1",
args: args{
packedTx: testTxPacked1_Testnet,
parser: NewDogecoinParser(GetChainParams("test"), &btc.Configuration{}),
},
want: &testTx1_Testnet,
want1: 3200011,
wantErr: false,
},
{
name: "dogecoin-testnet-2",
args: args{
packedTx: testTxPacked2_Testnet,
parser: NewDogecoinParser(GetChainParams("test"), &btc.Configuration{}),
},
want: &testTx2_Testnet,
want1: 3200006,
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)
}
})
}
}
type testBlock struct {
size int
time int64
@ -507,3 +864,96 @@ func TestParseBlock(t *testing.T) {
}
}
}
var testParseBlockTxs_Testnet = map[int]testBlock{
// block without auxpow
99999: {
size: 789,
time: 1401525639,
txs: []string{
"a4006895a14f5eb8796c784e6845d6aaea57b87325ccd066e900dc53aa8bf6a4",
"63c8d9dff87bf56804748e33c6c69f66d4930c4403b01cfd9a9d520fb91e4e17",
"3fa993ca67bcd2b2dec15c61b7fc2947e268ebe71bcf77dc00236c99c15eaa72",
},
},
// 1st block with auxpow see https://github.com/dogecoin/dogecoin/releases/tag/v1.8.0-beta-1
158100: {
size: 227,
time: 1407217902,
txs: []string{
"f09d8c02cd8a3da1af2a9722860fc58c593ffb3b6c51ffe09f978c89744561a7",
},
},
// random block with auxpow
1234580: {
size: 850,
time: 1521801579,
txs: []string{
"b16bd42a4718fa8db2f88fd7f5d268582af1b9cfd378600ba4e615708d7550cf",
"2786caddf5c090be0554fe39511299b5daf5644024e80643c70c6573465252f1",
"423f4c0efa75a521a29c21100b90d4f6bdbafeb0778657154cedb638b9c3b439",
},
},
// recent block
3274642: {
size: 847,
time: 1627931191,
txs: []string{
"aefc849cd9522e6d93a0ef4c2647dec96386756f02238bb05507407a589fb9a9",
"877a2b2bf1f5b52e4893866aff3d573c49e22666662a510b0ff313bdf10e76b3",
"8c9130974b68a81c652f3b43c6d352b892d920fe498d1f2fb566c1155169f443",
"7fee19b12f19f426bc3e90b36d0149917695bcc4c57a07f0efebbdd30820a079",
},
},
}
func helperLoadBlock_Testnet(t *testing.T, height int) []byte {
name := fmt.Sprintf("block_dump_testnet.%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_Testnet(t *testing.T) {
p := NewDogecoinParser(GetChainParams("test"), &btc.Configuration{})
for height, tb := range testParseBlockTxs_Testnet {
b := helperLoadBlock_Testnet(t, height)
blk, err := p.ParseBlock(b)
if err != nil {
t.Fatal(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)
}
}
}
}

View File

@ -0,0 +1 @@
03006200560b52800fe10f45142aee16377dc241cb76b447bafac9306ef6cab77ca1cc02568951efc02537bf5ba1eae8fe2f95af5b2248bf608f4e0b3582a9f8bd6346716bd9b45affff0f1e53c70e000301000000010000000000000000000000000000000000000000000000000000000000000000ffffffff060394d6120103ffffffff0100d290e0e8000000232102fa293664fc4065b29664cafbf9c8639e32581a2385d29e3faf469eb7052ba47eac000000000100000001183be0d233276119160589c28feec31aa83cc2d933b96dc89f5e92669f51ff2901000000da00473044022036a000c0eea2e8c8682fa16bab07d523b4e26645635be54d328caf58e4b60d70022022b5f609e4593f86d244d76bda4f94ced3d32afeb7e2eed12c628e8c6f2c191b01483045022100e71355cdf6b5c22faedbc523bc6908e0fb689ca74ff72268bdadfdd210b58f2302204737733c92a54239ddb95ba1841771d70685a86d9f4cbe305d0050a2efdaf0d40147522103e3b553f7042c2f1d6af0182228135af1f817fb8e95f69f44093b0f0d216113a6210204d99f36750fe059e4b7128ba96482711b6c643ddcc25b15110325d5b28069eb52aeffffffff0200c2eb0b000000001976a9144d7c60f7ef28b638177d0ecc4909b69541573b4788ac006cedc78850000017a914ca07e851b2779d99dc7cd0345f70748e80c3aed8870000000001000000016f2ff9946d169b5bf70b88b6b31b4f49ef170f727f49d9b608d962269039bfe700000000da00483045022100d658cf8d45719462c3e33c996ada2bfcb9b7269987d2058c0e8aed7ef5a6721f02200ec61714951e4893aac6dd8819261cc701eacd296c61559c48951227792d2e730147304402203c0d99432c0637f614f1505bd9d996000afcc4df013286e24c6923015fa9e49e022031913f15620d7d992897882a856699be3e66b04c90b3dde7d33ccdc7b001f5d00147522103858c48d6fd45ddfed1dc5ce1b47e0eec36a87012a0865ac0fdca7a6a149184592102d8ad02f257f4cf3b68609babc56e9cd6cdde7f5e415ab1e8c839e1e0378a608b52aeffffffff020065cd1d0000000017a9145cf863be1eb54e7501235d16c4fbe378e38a3c75870084d7170000000017a9142587c36cfa4558cce983c4981e8da1357cac51608700000000

View File

@ -0,0 +1 @@
02006200e93bd6199a1ebfe82f89f9da53dc97c7978c3ba7f06603e9866c94b69d746756a7614574898c979fe0ff516c3bfb3f598cc50f8622972aafa13d8acd028c9df0ee70e053b2cf051e0013bc5f0102000000010000000000000000000000000000000000000000000000000000000000000000ffffffff3d039469022cfabe6d6d06a27e6dd0e80eb6cf85f715521e481ad071f1e6d38157f32e68a6ea74ef15d20100000000000000010000000000000000000000000000000100901ec4bc1600001976a914dac6a0f3388893ba8bbc8427dbcabec174beb11488ac00000000

View File

@ -0,0 +1 @@
04006200869dca31955ea74aa30247ad00005e0cbd369e005f01fd49bfb6a644fc08ca955f2f13db46ecd9bd845de66989b78ae6814f14a8260a084f35df137d8b2faf1237420861ffff0f1e000143690401000000010000000000000000000000000000000000000000000000000000000000000000ffffffff040392f731ffffffff0100b386e6e80000001976a9141551b84892e83048b77f814e9f0a84f42f775aad88ac000000000100000001c2cb22ad1ba98eec3ad4505eb0156fc07e9c56e8c8d414b3dfbfb345c1ea96a6010000006b483045022100a0f412c599482edc6408f2a0e6b0980962bdf2a2cd77e9423d3c82c1ce59de0802203c7465d11f8e91f354753b76abe13dd577f61663414f51eedb102e6529043c4e0121034ca2b96ac17517cb9267e13aaf41396f1a9e31395a18ed18a61e77dda6e11c59feffffff0200e40b54020000001976a914409657eb218741347b0801447c18c7ce489194e188ac00729ab8da0000001976a914d22a150165ef64631021c90706fd4dfd36567cdd88ac91f73100010000000156dc28fd53369a67adf07ab1d3dc5ecbde6c17ffa698a40954008338ac0b8900010000006a47304402206106636d75879f48376cab6946512ff9c451295680bc1a26c711be1c1f75dda0022059b669c1034021395cec946bd5856c43e9a2c23092e3ca1d67e7d71845ad8d2801210261074181a79ab56af65b4257486d0c71d2b3cab92c70b63d9c502a4df5295508feffffff0200497556a90000001976a914205ddbfd8710a4a452b8cf34e4d4710b6c05e66b88ac00e40b54020000001976a914409657eb218741347b0801447c18c7ce489194e188ac37f73100010000000109c798a31c52f748912318a3e0ccc445e0f9d1901f6ad46533f22f7df92d9a6a010000006b4830450221008c0873e5e4ec79e2a3939a090235e224fa334547af08ef1a3c26ff27a092afcf02204c408c77fb057ccfe78a2223393c6bd31f49d1cce6387000f3d03e64d6b333240121020715b41d4b010ff3fcb1d5190ef65c583fdd39274b7cb9bfa80bbcc8a0c5b4bcffffffff020065cd1d000000001976a914adb327a539d42a245920819c44e2da1638ecd6cd88ac00180d8f000000001976a91477686c9ba39bf1c557f7ea2462d6f2fd6cb1fa8888ac00000000

View File

@ -0,0 +1 @@
02000000ef0109d480fd25f6d1e92d3557cd00e648ed6542d0a95798d114626633a78538da163af2d78b5e7d2f3462bfb1872eb3f54b3fbaa5a3afc9f974a49ca0f9338e8795895387880d1e0004563e0301000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0b039f8601062f503253482fffffffff04510422b74c1500001976a9141baddeaea6dbdf929281a6c154f677858947e9ef88ac40c2e6301c3a00001976a914a49c481ffaada228e66d956db84dd59bc1a4431d88ac6fdbfb31cc000000434104ffd03de44a6e11b9917f3a29f9443283d9871c9d743ef30d5eddcd37094b64d1b3d8090496b53256786bf5c82932ec23c3b74d9f05a6f95a8b5529352656664bac00000000000000002a6a28676964ca2e3dc86c44ea5d375982a07b1c79c0316f648bbf9c6ae9e6657b14890000000000000000000000000100000001642932e2b3dad0daa6df49bfa968f49c08879b87fea4d13669f7564bbe153d94010000006b483045022100c893ee249241ae4ca3654ed9d2d2be8d3f12804fc7436767b208b37b22d1b5590220772e8b1568bb5196792047cc0666adae16e97524f67f4026fd27df339e0e6ec401210387690b37eecf988835a0a9c992943f499041b06cd46c51ff32a3c9b766cdbee2ffffffff0200e87648170000001976a91432fa715655094175dd3b9b83ed7aa731f0df6d8288ac009c39fb7c1803001976a914eb980913d844960b1c57cb923fc6f7d82b62887e88ac000000000100000001174e1eb90f529d9afd1cb003440c93d4669fc6c6338e740468f57bf8dfd9c863010000006a47304402201551a536e9ae05912d7651dab0dfa3a275d14ba6fe611421c4ddc35f762d3db80220221d2e1366907b9f68861a30b67b0c620ce80e178b8a8c86fe649d7e29db56d8012103055a80e0950eefc9792b152fb82643b954450123078d871d0be711616c64c96affffffff0200e87648170000001976a91432fa715655094175dd3b9b83ed7aa731f0df6d8288ac00b4c2b2651803001976a91454ac4121c7d53bdf450efe0e240fff3f21e5378e88ac00000000

View File

@ -0,0 +1,70 @@
{
"coin": {
"name": "Dogecoin Testnet",
"shortcut": "DOGETEST",
"label": "Dogecoin Testnet",
"alias": "dogecoin_testnet"
},
"ports": {
"backend_rpc": 18038,
"backend_message_queue": 48338,
"blockbook_internal": 19038,
"blockbook_public": 19138
},
"ipc": {
"rpc_url_template": "http://127.0.0.1:{{.Ports.BackendRPC}}",
"rpc_user": "rpc",
"rpc_pass": "rpcp",
"rpc_timeout": 25,
"message_queue_binding_template": "tcp://127.0.0.1:{{.Ports.BackendMessageQueue}}"
},
"backend": {
"package_name": "backend-dogecoin-testnet",
"package_revision": "satoshilabs-1",
"system_user": "dogecoin",
"version": "1.14.3",
"binary_url": "https://github.com/dogecoin/dogecoin/releases/download/v1.14.3/dogecoin-1.14.3-x86_64-linux-gnu.tar.gz",
"verification_type": "sha256",
"verification_source": "a95cc29ac3c19a450e9083cc3ac24b6f61763d3ed1563bfc3ea9afbf0a2804fd",
"extract_command": "tar -C backend --strip 1 -xf",
"exclude_files": [
"bin/dogecoin-qt"
],
"exec_command_template": "{{.Env.BackendInstallPath}}/{{.Coin.Alias}}/bin/dogecoind -datadir={{.Env.BackendDataPath}}/{{.Coin.Alias}}/backend -conf={{.Env.BackendInstallPath}}/{{.Coin.Alias}}/{{.Coin.Alias}}.conf -pid=/run/{{.Coin.Alias}}/{{.Coin.Alias}}.pid -rest",
"logrotate_files_template": "{{.Env.BackendDataPath}}/{{.Coin.Alias}}/backend/*.log",
"postinst_script_template": "",
"service_type": "forking",
"service_additional_params_template": "",
"protect_memory": false,
"mainnet": false,
"server_config_file": "bitcoin_like.conf",
"client_config_file": "bitcoin_like_client.conf",
"additional_params": {
"discover": 0,
"rpcthreads": 16,
"upnp": 0,
"whitelist": "127.0.0.1"
}
},
"blockbook": {
"package_name": "blockbook-dogecoin-testnet",
"system_user": "blockbook-dogecoin",
"internal_binding_template": ":{{.Ports.BlockbookInternal}}",
"public_binding_template": ":{{.Ports.BlockbookPublic}}",
"explorer_url": "",
"additional_params": "-resyncindexperiod=30011 -resyncmempoolperiod=2011",
"block_chain": {
"parse": true,
"mempool_workers": 8,
"mempool_sub_workers": 2,
"block_addresses_to_keep": 300,
"xpub_magic": 70617039,
"slip44": 1,
"additional_params": {}
}
},
"meta": {
"package_maintainer": "IT Admin",
"package_maintainer_email": "it@satoshilabs.com"
}
}

View File

@ -55,6 +55,7 @@
| Litecoin Testnet | 19034 | 19134 | 18034 | 48334 |
| Bitcoin Gold Testnet | 19035 | 19135 | 18035 | 48335 |
| Ethereum Ropsten | 19036 | 19136 | 18036 | 48336 p2p |
| Dogecoin Testnet | 19038 | 19138 | 18038 | 48338
| Vertcoin Testnet | 19040 | 19140 | 18040 | 48340 |
| Monacoin Testnet | 19041 | 19141 | 18041 | 48341 |
| DigiByte Testnet | 19042 | 19142 | 18042 | 48342 |

View File

@ -0,0 +1,59 @@
{
"blockHeight": 1000026,
"blockHash": "1d817bb9494aae8937c7b2ee7328eed4518b91cfd5bb4308b14516530ea8c30b",
"blockTime": 1495656473,
"blockTxs": [
"6a86882d6732cef2c2b87286cdfea028f57f8e46a444bc0745e4b7c758b8a987",
"0c51e442d35946bf0e10ef321c5b2492bbe2c5e218a7e6fafaceb09496c3965f",
"909c00caac5cb72df3bc3c198d6bb0d897f102834ea8621a6329bf5983fc22c5",
"05d64a16beaf6604281efa28ee5449df8a58ad5a18528440ee89b9c28d062388",
"9f6c0c98b3d61454e40d26746531e8278d55c0e19628bdc2829ceb3655719a39",
"51d503e96dd4292a168f9b3958106ed5122f3d28aac279cfc14f05b720569a74",
"135af3d89384d2e97aada23fcb53995642ded2afc52347cea15bbec1f1c2e39c",
"c88637b70b11f3d7750bdc7cc30e446c0e7b4c595891a103083e3ff0da2a1f4c"
],
"txDetails": {
"0c51e442d35946bf0e10ef321c5b2492bbe2c5e218a7e6fafaceb09496c3965f": {
"hex": "0100000002f2abad3753e2e52be2de82f9c2b7e899237eee901f66c5dec22fbc16ef1cde2d010000006b483045022100fbee8b46d376d7cad5d6240a56cc9fc58a9bf6fba812abb3a6006fde1899bb750220386f11ff554966362a78a75cd56bf1708d2156f490384893300307cffefdad51012102991a76081c2513ba269f98c84ffa3d94d1a923858b4fe27f888e8cc8640fef03fffffffffdf846e9f59b30ebbd61fcdba290871611af468a61d663c0d89ad33cadae0acc010000006b483045022100bc9f869763ce4b16cb819a752f29a40e44b52230304a85550010f22b6b9a1aeb022032af127c7133257897c9c999a36bd1751870fca970e92c15163addd2679eb4d0012102991a76081c2513ba269f98c84ffa3d94d1a923858b4fe27f888e8cc8640fef03ffffffff0200d6117e030000001976a91477d527b839af5b9d2126de7df15908613d68b31188ac00275c0b120000001976a914a4cbacf5e85425abfaf2338b068351236e69807f88ac00000000",
"txid": "0c51e442d35946bf0e10ef321c5b2492bbe2c5e218a7e6fafaceb09496c3965f",
"blocktime": 1495656473,
"time": 1495656473,
"locktime": 0,
"version": 1,
"vin": [
{
"txid": "2dde1cef16bc2fc2dec5661f90ee7e2399e8b7c2f982dee22be5e25337adabf2",
"vout": 1,
"scriptSig": {
"hex": "483045022100fbee8b46d376d7cad5d6240a56cc9fc58a9bf6fba812abb3a6006fde1899bb750220386f11ff554966362a78a75cd56bf1708d2156f490384893300307cffefdad51012102991a76081c2513ba269f98c84ffa3d94d1a923858b4fe27f888e8cc8640fef03"
},
"sequence": 4294967295
},
{
"txid": "cc0aaead3cd39ad8c063d6618a46af11168790a2dbfc61bdeb309bf5e946f8fd",
"vout": 1,
"scriptSig": {
"hex": "483045022100bc9f869763ce4b16cb819a752f29a40e44b52230304a85550010f22b6b9a1aeb022032af127c7133257897c9c999a36bd1751870fca970e92c15163addd2679eb4d0012102991a76081c2513ba269f98c84ffa3d94d1a923858b4fe27f888e8cc8640fef03"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 150.00000000,
"n": 0,
"scriptPubKey": {
"hex": "76a91477d527b839af5b9d2126de7df15908613d68b31188ac"
}
},
{
"value": 775.00000000,
"n": 1,
"scriptPubKey": {
"hex": "76a914a4cbacf5e85425abfaf2338b068351236e69807f88ac"
}
}
]
}
}
}

View File

@ -0,0 +1,155 @@
{
"connectBlocks": {
"syncRanges": [
{"lower": 2101303, "upper": 2101345}
],
"blocks": {
"2101317": {
"height": 2101317,
"hash": "debcad94a94ec0a18088ce418207c3f0169aeb278db5d5e7fe1acc0a854169be",
"noTxs": 3,
"txDetails": [
{
"hex": "0100000001ccc918717419ea3c038f5e1b4c1eb20ede84d5157acb394b89d15bd1922f51e201000000da004730440220652ffef2be035bb7365f30f16450e64fdcba0f18c41fcd0f36e74f5c50d30c0902200d1bf9a4ab1e16d16e47271f10a918461c005ab5793a2b7eb67e1f14cda20151014830450221008c89d5526a3dbab2fd506fb88c3de5e1d0e94d57c408e4f2c39c35cba4c27a0902205bd541dda1703ba2f239ef092e3b59f1092acc71c5135834f9d49b8d030d0f480147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352aeffffffff0200743ba40b00000017a914f2c3c9e719f5c996ca59798309b3677c5385070d8700f0a24c795a010017a91401d4df05a673fc46698c4d2effdac931d76002528700000000",
"txid": "14e085da1e44a7885fde414a6efb2f92b856625ca8f874ac11e09c776304a886",
"version": 1,
"vin": [
{
"txid": "e2512f92d15bd1894b39cb7a15d584de0eb21e4c1b5e8f033cea19747118c9cc",
"vout": 1,
"scriptSig": {
"hex": "004730440220652ffef2be035bb7365f30f16450e64fdcba0f18c41fcd0f36e74f5c50d30c0902200d1bf9a4ab1e16d16e47271f10a918461c005ab5793a2b7eb67e1f14cda20151014830450221008c89d5526a3dbab2fd506fb88c3de5e1d0e94d57c408e4f2c39c35cba4c27a0902205bd541dda1703ba2f239ef092e3b59f1092acc71c5135834f9d49b8d030d0f480147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352ae"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 500.00000000,
"n": 0,
"scriptPubKey": {
"hex": "a914f2c3c9e719f5c996ca59798309b3677c5385070d87"
}
},
{
"value": 3809520.00000000,
"n": 1,
"scriptPubKey": {
"hex": "a91401d4df05a673fc46698c4d2effdac931d760025287"
}
}
],
"time": 1576249514,
"blocktime": 1576249514
},
{
"hex": "01000000018e7275b4aa7ac76609bfb0259837fab9317f691045ec6ca6218363b827690eca01000000db0048304502210096021cc5d6ee479887d2eacf16ebb2867bf666a9c9fbc3dd92b1604e0d0ddc51022014e68ad785126dead79421f8027bfe2fc6ccc70a3cb2159fd071170ff4a0a2b101483045022100e0e68deca4b83ec36898e89b35d6cc17e24f2afee7f821f294ee7f02b226fd9202207ac48ecb29433023d2d4e2f93f1e844e1cb31047317490cfd4e886d07ce4925c0147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352aeffffffff0200743ba40b00000017a914a33f3c34fa6cf20d5c69bff84ce516adbe85c6708700d950f219f6000017a91401d4df05a673fc46698c4d2effdac931d76002528700000000",
"txid": "e0432574b3ec052a0622639c781bf5eee5aa7372361e329dd6bc434db1b03db7",
"version": 1,
"vin": [
{
"txid": "ca0e6927b8638321a66cec4510697f31b9fa379825b0bf0966c77aaab475728e",
"vout": 1,
"scriptSig": {
"hex": "0048304502210096021cc5d6ee479887d2eacf16ebb2867bf666a9c9fbc3dd92b1604e0d0ddc51022014e68ad785126dead79421f8027bfe2fc6ccc70a3cb2159fd071170ff4a0a2b101483045022100e0e68deca4b83ec36898e89b35d6cc17e24f2afee7f821f294ee7f02b226fd9202207ac48ecb29433023d2d4e2f93f1e844e1cb31047317490cfd4e886d07ce4925c0147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352ae"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 500.00000000,
"n": 0,
"scriptPubKey": {
"hex": "a914a33f3c34fa6cf20d5c69bff84ce516adbe85c67087"
}
},
{
"value": 2705913.00000000,
"n": 1,
"scriptPubKey": {
"hex": "a91401d4df05a673fc46698c4d2effdac931d760025287"
}
}
],
"time": 1576249514,
"blocktime": 1576249514
}
]
},
"2101339": {
"height": 2101339,
"hash": "da25c3650e1feacfabbc4b6a65d7ba70a3f354b763506f1348d798f51cbe5b35",
"noTxs": 7,
"txDetails": [
{
"hex": "01000000018ab51e1ed1f2671fa03041d32911f70eabe7e5b36289dbaecbb13cdd6376022c01000000d9004730440220593c40ce566ca2137eea75f2b3c9aedb79671b75b65a6cc19002ff63f4c568fe0220163ff99d3baf64efaaa8fa48f6ee9cd488c9c9931a70e87ab5eca107f115d9f4014730440220784a49214b47a75056351f676467f6dab5f06f84259f7fc7e1bc9efeab55eaf202204d53d292bdc1c0db7567b0056ec715a0f24ebe0f7ba95fdb8e5591d8a3da73820147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352aeffffffff0200743ba40b00000017a9144051325c50c4e2c3e867342b2639204d844399d8870081f16957a2010017a91401d4df05a673fc46698c4d2effdac931d76002528700000000",
"txid": "bfe99f76c54ce18b56220670c7c42ded599f5043f65b65e6b2066867b29ef19c",
"version": 1,
"vin": [
{
"txid": "2c027663dd3cb1cbaedb8962b3e5e7ab0ef71129d34130a01f67f2d11e1eb58a",
"vout": 1,
"scriptSig": {
"hex": "004730440220593c40ce566ca2137eea75f2b3c9aedb79671b75b65a6cc19002ff63f4c568fe0220163ff99d3baf64efaaa8fa48f6ee9cd488c9c9931a70e87ab5eca107f115d9f4014730440220784a49214b47a75056351f676467f6dab5f06f84259f7fc7e1bc9efeab55eaf202204d53d292bdc1c0db7567b0056ec715a0f24ebe0f7ba95fdb8e5591d8a3da73820147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352ae"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 500.00000000,
"n": 0,
"scriptPubKey": {
"hex": "a9144051325c50c4e2c3e867342b2639204d844399d887"
}
},
{
"value": 4599713.00000000,
"n": 1,
"scriptPubKey": {
"hex": "a91401d4df05a673fc46698c4d2effdac931d760025287"
}
}
],
"time": 1576254096,
"blocktime": 1576254096
},
{
"hex": "0100000001c536d697327ee834f55bf6347ee73d6413b6126ec54ae69700caf4be6723192d01000000db00483045022100bf6ecb6ba5586adc0fcc95e2205d75c8965ebb17d892d5a1459e1f73aa1c5efb022023988cffc13d4942f44ac4f82dfc79547ce312b2d6dda62b2f6e875465b7faeb01483045022100d3d67d93d7e2c3224036f09ad2f9a07ef12d65a8d8542f3d79249ebbc5f068a80220154638ade598e1929ed2c38bcab477805ea01c9582dbf1f25ec23f268013b11a0147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352aeffffffff0200743ba40b00000017a914497d17688b2a45fa496db089ed6c8978ba809dd98700833f59ff3d010017a91401d4df05a673fc46698c4d2effdac931d76002528700000000",
"txid": "71a93721f624f14e957fb9de84d2c3bb49490d2d2f0b33b00350c7011e0f3068",
"version": 1,
"vin": [
{
"txid": "2d192367bef4ca0097e64ac56e12b613643de77e34f65bf534e87e3297d636c5",
"vout": 1,
"scriptSig": {
"hex": "00483045022100bf6ecb6ba5586adc0fcc95e2205d75c8965ebb17d892d5a1459e1f73aa1c5efb022023988cffc13d4942f44ac4f82dfc79547ce312b2d6dda62b2f6e875465b7faeb01483045022100d3d67d93d7e2c3224036f09ad2f9a07ef12d65a8d8542f3d79249ebbc5f068a80220154638ade598e1929ed2c38bcab477805ea01c9582dbf1f25ec23f268013b11a0147522103abf01d993487a683db0a788298e176624b8530c9481b8f3f17eaec015a6e8c882103ec7f0dd153f1fa7f2fd5d6b331796298ebd0a657950c70cbb58eac34c7b475f352ae"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 500.00000000,
"n": 0,
"scriptPubKey": {
"hex": "a914497d17688b2a45fa496db089ed6c8978ba809dd987"
}
},
{
"value": 3496419.00000000,
"n": 1,
"scriptPubKey": {
"hex": "a91401d4df05a673fc46698c4d2effdac931d760025287"
}
}
],
"time": 1576254096,
"blocktime": 1576254096
}
]
}
}
}
}

View File

@ -85,6 +85,10 @@
"rpc": ["GetBlock", "GetBlockHash", "GetTransaction", "GetTransactionForMempool", "MempoolSync"],
"sync": ["ConnectBlocksParallel", "ConnectBlocks"]
},
"dogecoin_testnet": {
"rpc": ["GetBlock", "GetBlockHash", "GetTransaction", "GetTransactionForMempool", "MempoolSync"],
"sync": ["ConnectBlocksParallel", "ConnectBlocks"]
},
"ethereum_testnet_ropsten": {
"rpc": ["GetBlock", "GetBlockHash", "GetTransaction", "EstimateFee", "GetBestBlockHash", "GetBestBlockHeight",
"GetBlockHeader"]