Add Ravencoin support

pull/184/head
Scotty0448 2019-05-19 15:33:12 -06:00 committed by Martin
parent dcfb468d76
commit 78ffee5d3d
9 changed files with 947 additions and 0 deletions

View File

@ -25,6 +25,7 @@ import (
"blockbook/bchain/coins/pivx"
"blockbook/bchain/coins/polis"
"blockbook/bchain/coins/qtum"
"blockbook/bchain/coins/ravencoin"
"blockbook/bchain/coins/vertcoin"
"blockbook/bchain/coins/viacoin"
"blockbook/bchain/coins/vipstarcoin"
@ -90,6 +91,7 @@ func init() {
BlockChainFactories["NULS"] = nuls.NewNulsRPC
BlockChainFactories["VIPSTARCOIN"] = vipstarcoin.NewVIPSTARCOINRPC
BlockChainFactories["ZelCash"] = zec.NewZCashRPC
BlockChainFactories["Ravencoin"] = ravencoin.NewRavencoinRPC
}
// GetCoinNameFromConfig gets coin name and coin shortcut from config file

View File

@ -0,0 +1,91 @@
package ravencoin
import (
"blockbook/bchain"
"blockbook/bchain/coins/btc"
"blockbook/bchain/coins/utils"
"bytes"
"github.com/martinboehm/btcd/wire"
"github.com/martinboehm/btcutil/chaincfg"
)
const (
MainnetMagic wire.BitcoinNet = 0x4e564152
TestnetMagic wire.BitcoinNet = 0x544e5652
)
var (
MainNetParams chaincfg.Params
TestNetParams chaincfg.Params
)
func init() {
MainNetParams = chaincfg.MainNetParams
MainNetParams.Net = MainnetMagic
MainNetParams.PubKeyHashAddrID = []byte{60}
MainNetParams.ScriptHashAddrID = []byte{122}
TestNetParams = chaincfg.TestNet3Params
TestNetParams.Net = TestnetMagic
TestNetParams.PubKeyHashAddrID = []byte{111}
TestNetParams.ScriptHashAddrID = []byte{196}
}
// RavencoinParser handle
type RavencoinParser struct {
*btc.BitcoinParser
}
// NewRavencoinParser returns new RavencoinParser instance
func NewRavencoinParser(params *chaincfg.Params, c *btc.Configuration) *RavencoinParser {
return &RavencoinParser{BitcoinParser: btc.NewBitcoinParser(params, c)}
}
// GetChainParams contains network parameters
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
}
}
// ParseBlock parses raw block to our Block struct
func (p *RavencoinParser) ParseBlock(b []byte) (*bchain.Block, error) {
r := bytes.NewReader(b)
w := wire.MsgBlock{}
h := wire.BlockHeader{}
err := h.Deserialize(r)
if err != nil {
return nil, err
}
err = utils.DecodeTransactions(r, 0, wire.WitnessEncoding, &w)
if err != nil {
return nil, err
}
txs := make([]bchain.Tx, len(w.Transactions))
for ti, t := range w.Transactions {
txs[ti] = p.TxFromMsgTx(t, false)
}
return &bchain.Block{
BlockHeader: bchain.BlockHeader{
Size: len(b),
Time: h.Timestamp.Unix(),
},
Txs: txs,
}, nil
}

View File

@ -0,0 +1,273 @@
// +build unittest
package ravencoin
import (
"blockbook/bchain"
"blockbook/bchain/coins/btc"
"encoding/hex"
"math/big"
"os"
"reflect"
"testing"
"github.com/martinboehm/btcutil/chaincfg"
)
func TestMain(m *testing.M) {
c := m.Run()
chaincfg.ResetParams()
os.Exit(c)
}
func Test_GetAddrDescFromAddress_Mainnet(t *testing.T) {
type args struct {
address string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "P2PKH1",
args: args{address: "RAoGkGhKwzxLnstApumYPD2eTrAJ849cga"},
want: "76a91410a8805f1a6af1a5927088544b0b6ec7d6f0ab8b88ac",
wantErr: false,
},
{
name: "P2PKH2",
args: args{address: "RTq37kPJqMS36tZYunxo2abrBMLeYSCAaa"},
want: "76a914cb78181d62d312fdb9aacca433570150dcf0dec288ac",
wantErr: false,
},
{
name: "P2SH1",
args: args{address: "rCzjkBoY2duVn2WizKxfBedTVWAg6UhfLZ"},
want: "a9144a2a40987c74578ee517d426aa2c43fc568f7e0887",
wantErr: false,
},
{
name: "P2SH2",
args: args{address: "rDzGemZkv9FbDDh5pvWfr7TWtMUnNRRE7T"},
want: "a914550bc2fcc1992afade4d298326ee6a03ab975a9387",
wantErr: false,
},
}
parser := NewRavencoinParser(GetChainParams("main"), &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)
}
})
}
}
var (
testTx1 bchain.Tx
testTxPacked1 = "000a08848bcae7c30e0200000001c171348ffc8976074fa064e48598a816fce3798afc635fb67d99580e50b8e614000000006a473044022009e07574fa543ad259bd3334eb365c655c96d310c578b64c24d7f77fa7dc591c0220427d8ae6eacd1ca2d1994e9ec49cb322aacdde98e4bdb065e0fce81162fb3aa9012102d46827546548b9b47ae1e9e84fc4e53513e0987eeb1dd41220ba39f67d3bf46affffffff02f8137114000000001976a914587a2afa560ccaeaeb67cb72a0db7e2573a179e488ace0c48110000000001976a914d85e6ab66ab0b2c4cfd40ca3b0a779529da5799288ac00000000"
testTx2 bchain.Tx
testTxPacked2 = "000a08848bcae7c30e02000000029e2e14113b2f55726eebaa440edec707fcec3a31ce28fa125afea1e755fb6850010000006a47304402204034c3862f221551cffb2aa809f621f989a75cdb549c789a5ceb3a82c0bcc21c022001b4638f5d73fdd406a4dd9bf99be3dfca4a572b8f40f09b8fd495a7756c0db70121027a32ef45aef2f720ccf585f6fb0b8a7653db89cacc3320e5b385146851aba705fefffffff3b240ae32c542786876fcf23b4b2ab4c34ef077912898ee529756ed4ba35910000000006a47304402204d442645597b13abb85e96e5acd34eff50a4418822fe6a37ed378cdd24574dff02205ae667c56eab63cc45a51063f15b72136fd76e97c46af29bd28e8c4d405aa211012102cde27d7b29331ea3fef909a8d91f6f7753e99a3dd129914be50df26eed73fab3feffffff028447bf38000000001976a9146d7badec5426b880df25a3afc50e476c2423b34b88acb26b556a740000001976a914b3020d0ab85710151fa509d5d9a4e783903d681888ac83080a00"
)
func init() {
testTx1 = bchain.Tx{
Hex: "0200000001c171348ffc8976074fa064e48598a816fce3798afc635fb67d99580e50b8e614000000006a473044022009e07574fa543ad259bd3334eb365c655c96d310c578b64c24d7f77fa7dc591c0220427d8ae6eacd1ca2d1994e9ec49cb322aacdde98e4bdb065e0fce81162fb3aa9012102d46827546548b9b47ae1e9e84fc4e53513e0987eeb1dd41220ba39f67d3bf46affffffff02f8137114000000001976a914587a2afa560ccaeaeb67cb72a0db7e2573a179e488ace0c48110000000001976a914d85e6ab66ab0b2c4cfd40ca3b0a779529da5799288ac00000000",
Blocktime: 1554837703,
Txid: "d4d3a093586eae0c3668fd288d9e24955928a894c20b551b38dd18c99b123a7c",
LockTime: 0,
Version: 2,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "473044022009e07574fa543ad259bd3334eb365c655c96d310c578b64c24d7f77fa7dc591c0220427d8ae6eacd1ca2d1994e9ec49cb322aacdde98e4bdb065e0fce81162fb3aa9012102d46827546548b9b47ae1e9e84fc4e53513e0987eeb1dd41220ba39f67d3bf46a",
},
Txid: "14e6b8500e58997db65f63fc8a79e3fc16a89885e464a04f077689fc8f3471c1",
Vout: 0,
Sequence: 4294967295,
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(342955000),
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a914587a2afa560ccaeaeb67cb72a0db7e2573a179e488ac",
Addresses: []string{
"RHM1tmdvkk7vDoiGxwUJAMNNmDqywZ5tEn",
},
},
},
{
ValueSat: *big.NewInt(276940000),
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a914d85e6ab66ab0b2c4cfd40ca3b0a779529da5799288ac",
Addresses: []string{
"RV1F99b9UBBrCM8aNKugsqsDM8iqoCq7Mt",
},
},
},
},
}
testTx2 = bchain.Tx{
Hex: "02000000029e2e14113b2f55726eebaa440edec707fcec3a31ce28fa125afea1e755fb6850010000006a47304402204034c3862f221551cffb2aa809f621f989a75cdb549c789a5ceb3a82c0bcc21c022001b4638f5d73fdd406a4dd9bf99be3dfca4a572b8f40f09b8fd495a7756c0db70121027a32ef45aef2f720ccf585f6fb0b8a7653db89cacc3320e5b385146851aba705fefffffff3b240ae32c542786876fcf23b4b2ab4c34ef077912898ee529756ed4ba35910000000006a47304402204d442645597b13abb85e96e5acd34eff50a4418822fe6a37ed378cdd24574dff02205ae667c56eab63cc45a51063f15b72136fd76e97c46af29bd28e8c4d405aa211012102cde27d7b29331ea3fef909a8d91f6f7753e99a3dd129914be50df26eed73fab3feffffff028447bf38000000001976a9146d7badec5426b880df25a3afc50e476c2423b34b88acb26b556a740000001976a914b3020d0ab85710151fa509d5d9a4e783903d681888ac83080a00",
Blocktime: 1554837703,
Txid: "8e480d5c1bf7f11d1cbe396ab7dc14e01ea4e1aff45de7c055924f61304ad434",
LockTime: 657539,
Version: 2,
Vin: []bchain.Vin{
{
ScriptSig: bchain.ScriptSig{
Hex: "47304402204034c3862f221551cffb2aa809f621f989a75cdb549c789a5ceb3a82c0bcc21c022001b4638f5d73fdd406a4dd9bf99be3dfca4a572b8f40f09b8fd495a7756c0db70121027a32ef45aef2f720ccf585f6fb0b8a7653db89cacc3320e5b385146851aba705",
},
Txid: "5068fb55e7a1fe5a12fa28ce313aecfc07c7de0e44aaeb6e72552f3b11142e9e",
Vout: 1,
Sequence: 4294967294,
},
{
ScriptSig: bchain.ScriptSig{
Hex: "47304402204d442645597b13abb85e96e5acd34eff50a4418822fe6a37ed378cdd24574dff02205ae667c56eab63cc45a51063f15b72136fd76e97c46af29bd28e8c4d405aa211012102cde27d7b29331ea3fef909a8d91f6f7753e99a3dd129914be50df26eed73fab3",
},
Txid: "1059a34bed569752ee98289177f04ec3b42a4b3bf2fc76687842c532ae40b2f3",
Vout: 0,
Sequence: 4294967294,
},
},
Vout: []bchain.Vout{
{
ValueSat: *big.NewInt(952059780),
N: 0,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a9146d7badec5426b880df25a3afc50e476c2423b34b88ac",
Addresses: []string{
"RKG5tpWwjhtqddTgA3QhUh7QmKcuvBnhBX",
},
},
},
{
ValueSat: *big.NewInt(500000189362),
N: 1,
ScriptPubKey: bchain.ScriptPubKey{
Hex: "76a914b3020d0ab85710151fa509d5d9a4e783903d681888ac",
Addresses: []string{
"RRbhVMbLfuezHPwUMujTmDFAzv64Y9mJqd",
},
},
},
},
}
}
func Test_PackTx(t *testing.T) {
type args struct {
tx bchain.Tx
height uint32
blockTime int64
parser *RavencoinParser
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{
name: "ravencoin-1",
args: args{
tx: testTx1,
height: 657540,
blockTime: 1554837703,
parser: NewRavencoinParser(GetChainParams("main"), &btc.Configuration{}),
},
want: testTxPacked1,
wantErr: false,
},
{
name: "ravencoin-2",
args: args{
tx: testTx2,
height: 657540,
blockTime: 1554837703,
parser: NewRavencoinParser(GetChainParams("main"), &btc.Configuration{}),
},
want: testTxPacked2,
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 *RavencoinParser
}
tests := []struct {
name string
args args
want *bchain.Tx
want1 uint32
wantErr bool
}{
{
name: "ravencoin-1",
args: args{
packedTx: testTxPacked1,
parser: NewRavencoinParser(GetChainParams("main"), &btc.Configuration{}),
},
want: &testTx1,
want1: 657540,
wantErr: false,
},
{
name: "ravencoin-2",
args: args{
packedTx: testTxPacked2,
parser: NewRavencoinParser(GetChainParams("main"), &btc.Configuration{}),
},
want: &testTx2,
want1: 657540,
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)
}
})
}
}

View File

@ -0,0 +1,58 @@
package ravencoin
import (
"blockbook/bchain"
"blockbook/bchain/coins/btc"
"encoding/json"
"github.com/golang/glog"
)
// RavencoinRPC is an interface to JSON-RPC bitcoind service.
type RavencoinRPC struct {
*btc.BitcoinRPC
}
// NewRavencoinRPC returns new RavencoinRPC instance.
func NewRavencoinRPC(config json.RawMessage, pushHandler func(bchain.NotificationType)) (bchain.BlockChain, error) {
b, err := btc.NewBitcoinRPC(config, pushHandler)
if err != nil {
return nil, err
}
s := &RavencoinRPC{
b.(*btc.BitcoinRPC),
}
s.RPCMarshaler = btc.JSONMarshalerV1{}
s.ChainConfig.SupportsEstimateFee = false
return s, nil
}
// Initialize initializes RavencoinRPC instance.
func (b *RavencoinRPC) Initialize() error {
ci, err := b.GetChainInfo()
if err != nil {
return err
}
chainName := ci.Chain
glog.Info("Chain name ", chainName)
params := GetChainParams(chainName)
// always create parser
b.Parser = NewRavencoinParser(params, b.ChainConfig)
// parameters for getInfo request
if params.Net == MainnetMagic {
b.Testnet = false
b.Network = "livenet"
} else {
b.Testnet = true
b.Network = "testnet"
}
glog.Info("rpc: block chain ", params.Name)
return nil
}

View File

@ -0,0 +1,67 @@
{
"coin": {
"name": "Ravencoin",
"shortcut": "RVN",
"label": "Ravencoin",
"alias": "ravencoin"
},
"ports": {
"backend_rpc": 8059,
"backend_message_queue": 38359,
"blockbook_internal": 9059,
"blockbook_public": 9159
},
"ipc": {
"rpc_url_template": "http://127.0.0.1:{{.Ports.BackendRPC}}",
"rpc_user": "rpc",
"rpc_pass": "rpc",
"rpc_timeout": 25,
"message_queue_binding_template": "tcp://127.0.0.1:{{.Ports.BackendMessageQueue}}"
},
"backend": {
"package_name": "backend-ravencoin",
"package_revision": "satoshilabs-1",
"system_user": "ravencoin",
"version": "2.2.2.0",
"binary_url": "https://github.com/RavenProject/Ravencoin/releases/download/v2.2.2/raven-2.2.2.0-x86_64-linux-gnu.tar.gz",
"verification_type": "sha256",
"verification_source": "f6e2c20e9741a9485a8b8b34044bd5b2cdd8c5d5871b04272ec96a4ebf6bcf2e",
"extract_command": "tar -C backend --strip 1 -xf",
"exclude_files": [
"bin/raven-qt"
],
"exec_command_template": "{{.Env.BackendInstallPath}}/{{.Coin.Alias}}/bin/ravend -datadir={{.Env.BackendDataPath}}/{{.Coin.Alias}}/backend -conf={{.Env.BackendInstallPath}}/{{.Coin.Alias}}/{{.Coin.Alias}}.conf -pid=/run/{{.Coin.Alias}}/{{.Coin.Alias}}.pid",
"logrotate_files_template": "{{.Env.BackendDataPath}}/{{.Coin.Alias}}/backend/*.log",
"postinst_script_template": "",
"service_type": "forking",
"service_additional_params_template": "",
"protect_memory": true,
"mainnet": true,
"server_config_file": "bitcoin_like.conf",
"client_config_file": "bitcoin_like_client.conf",
"additional_params": {
"deprecatedrpc": "estimatefee"
}
},
"blockbook": {
"package_name": "blockbook-ravencoin",
"system_user": "blockbook-ravencoin",
"internal_binding_template": ":{{.Ports.BlockbookInternal}}",
"public_binding_template": ":{{.Ports.BlockbookPublic}}",
"explorer_url": "",
"additional_params": "",
"block_chain": {
"parse": true,
"mempool_workers": 8,
"mempool_sub_workers": 2,
"block_addresses_to_keep": 300,
"xpub_magic": 76067358,
"slip44": 175,
"additional_params": {}
}
},
"meta": {
"package_maintainer": "Scotty",
"package_maintainer_email": "scotty.rvn@gmail.com"
}
}

View File

@ -30,6 +30,7 @@
| VIPSTARCOIN | 9056 | 9156 | 8056 | 38356 |
| MonetaryUnit | 9057 | 9157 | 8057 | 38357 |
| ZelCash | 9058 | 9158 | 8058 | 38358 |
| Ravencoin | 9059 | 9159 | 8059 | 38359 |
| Flo | 9066 | 9166 | 8066 | 38366 |
| Polis | 9067 | 9167 | 8067 | 38367 |
| Qtum | 9088 | 9188 | 8088 | 38388 |

119
tests/rpc/testdata/ravencoin.json vendored 100644
View File

@ -0,0 +1,119 @@
{
"blockHeight": 707554,
"blockHash": "000000000000429dbd10e090e00384199e85555d501cfa47720e5261c66942a6",
"blockTime": 1557858845,
"blockTxs": [
"194a89653371595337c306e559d71a94a72f3395c8801189cb396ce6330636cd",
"58ce37e86e5c17e3c08ef14c55d994aaf4c11003fd749aa597b141c89d22c582",
"9d3e19d6f147c362410fa361b0cae9690e8de1c727e7a99bc145e7d95580a314",
"739b0ef5a5d8314f84f61105b107b7534dc9748b288fcd06dc8087783ce26e20"
],
"txDetails": {
"58ce37e86e5c17e3c08ef14c55d994aaf4c11003fd749aa597b141c89d22c582": {
"hex": "02000000025496421e6a3627ec4a5eab571ff22b3a1a5aa7555d48b7013976eef18443a115000000006a473044022027e2ef2d5057e03864373e6a3bbf8206af18bd64c817a42979f784688a703c4d02203230b32182046d01a16ea765f85219fd3ba8b2d731eb4a0446d968da170da5a5012102f721c9e757b10fe342869b92ba76c4fbcc74d634fc9536b9c068fc033488d655feffffff886c20d01cc0647f0bff7fea3506d88fd7a49dcc17de2938846f6a52055d1f6e800000006b483045022100cf6c8d2452c5f146e317a77ccafdf6cb516c3050f9d6e71d0d834db8a02d1cc7022041823ee041589a1fcdb43d5ce121cb6470506f6726a4f667d6d20af894a034260121035e5dfde430f2d5f832c4df4a9a251293b0ba29995aee49a6908586de22cbc8c3feffffff0295117782570600001976a9147f7d88fa55fab938161953faf6bd3d026cd078dc88acf2420f00000000001976a914e8fd48114696f4e6ee5b3e5d532c408a19f691b788ac92cb0a00",
"txid": "58ce37e86e5c17e3c08ef14c55d994aaf4c11003fd749aa597b141c89d22c582",
"blocktime": 1557858845,
"time": 1557858845,
"locktime": 707474,
"version": 2,
"vin": [
{
"txid": "15a14384f1ee763901b7485d55a75a1a3a2bf21f57ab5e4aec27366a1e429654",
"vout": 0,
"sequence": 4294967294,
"scriptSig": {
"hex": "473044022027e2ef2d5057e03864373e6a3bbf8206af18bd64c817a42979f784688a703c4d02203230b32182046d01a16ea765f85219fd3ba8b2d731eb4a0446d968da170da5a5012102f721c9e757b10fe342869b92ba76c4fbcc74d634fc9536b9c068fc033488d655"
}
},
{
"txid": "6e1f5d05526a6f843829de17cc9da4d78fd80635ea7fff0b7f64c01cd0206c88",
"vout": 128,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100cf6c8d2452c5f146e317a77ccafdf6cb516c3050f9d6e71d0d834db8a02d1cc7022041823ee041589a1fcdb43d5ce121cb6470506f6726a4f667d6d20af894a034260121035e5dfde430f2d5f832c4df4a9a251293b0ba29995aee49a6908586de22cbc8c3"
}
}
],
"vout": [
{
"value": 69729.20762773,
"n": 0,
"scriptPubKey": {
"hex": "76a9147f7d88fa55fab938161953faf6bd3d026cd078dc88ac",
"addresses": [
"RLuJHD2GRHzTbwc47Cg43oAJQZRMMVcU7S"
]
}
},
{
"value": 0.01000178,
"n": 1,
"scriptPubKey": {
"hex": "76a914e8fd48114696f4e6ee5b3e5d532c408a19f691b788ac",
"addresses": [
"RWX8GL2MHTewUvEcJMwu1cSZEhrSitG9Nz"
]
}
}
]
},
"9d3e19d6f147c362410fa361b0cae9690e8de1c727e7a99bc145e7d95580a314": {
"hex": "0200000004152c754032d6d014e21a10f68cd0d1f62b29ad3997bc637f434f513240a6393a370000006b483045022100f397fe990bc6871408a8178a4cac7afc27a989abd8dc32536d4b392e2d46d7d502205aafc72f6b76bfee3373da3786492c8d24107d1005751f25e6be4f8788d85a8e012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35dfeffffff1d8cedc545c969e9fe0b74465c47081bc25d9c423a1668c9ede948c5627aa78f020000006a4730440220580ccb55105732dca7ae5e338c9d9af1651c1d8a9d167a0dfea41b977c38f67502205a5fe94fb9190a97f8bff5ee94e603323da36c0383a1d6fbf27b499bf900a24d012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35dfeffffffb832371edbbd6ae9498ec3f33cc61333d1cfb0497f4600cbc0a05ceae82e39e7640000006b483045022100906a567b719038f7b5e0750e5c8ff4b1356dd28ecd867edfb7bf65623b50c64d02203bfe4bd0d08b4caff78112aa63bb4fbfb6804c428488dd5ac30266f0f2ba1fa9012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35dfeffffffc20447c40b451c4ccb643863a3d06ecbf96681d8f5dace42a80a0e1b7627ec62660000006b483045022100e9912569e224fee0f9febfc1a9356918229461d323c891d93b21e2396bf8e3e2022053c814c6661b3fdabc838d0ea77585b9c340f659fbe902dc5cf7559939350756012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35dfeffffff0269ef8a00000000001976a9148273705545d167297b7278503447d809d9e84b2e88ac003c9476520200001976a9147cf41bc3cdba1b8edf811877ab1cc9493847a3e488ace0cb0a00",
"txid": "9d3e19d6f147c362410fa361b0cae9690e8de1c727e7a99bc145e7d95580a314",
"blocktime": 1557858845,
"time": 1557858845,
"locktime": 707552,
"version": 2,
"vin": [
{
"txid": "3a39a64032514f437f63bc9739ad292bf6d1d08cf6101ae214d0d63240752c15",
"vout": 55,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100f397fe990bc6871408a8178a4cac7afc27a989abd8dc32536d4b392e2d46d7d502205aafc72f6b76bfee3373da3786492c8d24107d1005751f25e6be4f8788d85a8e012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35d"
}
},
{
"txid": "8fa77a62c548e9edc968163a429c5dc21b08475c46740bfee969c945c5ed8c1d",
"vout": 2,
"sequence": 4294967294,
"scriptSig": {
"hex": "4730440220580ccb55105732dca7ae5e338c9d9af1651c1d8a9d167a0dfea41b977c38f67502205a5fe94fb9190a97f8bff5ee94e603323da36c0383a1d6fbf27b499bf900a24d012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35d"
}
},
{
"txid": "e7392ee8ea5ca0c0cb00467f49b0cfd13313c63cf3c38e49e96abddb1e3732b8",
"vout": 100,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100906a567b719038f7b5e0750e5c8ff4b1356dd28ecd867edfb7bf65623b50c64d02203bfe4bd0d08b4caff78112aa63bb4fbfb6804c428488dd5ac30266f0f2ba1fa9012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35d"
}
},
{
"txid": "62ec27761b0e0aa842cedaf5d88166f9cb6ed0a3633864cb4c1c450bc44704c2",
"vout": 102,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100e9912569e224fee0f9febfc1a9356918229461d323c891d93b21e2396bf8e3e2022053c814c6661b3fdabc838d0ea77585b9c340f659fbe902dc5cf7559939350756012103f8a3801f6e45a63821c41c8cd5baa1aca5760e2dac0edce67ea1721e3a63a35d"
}
}
],
"vout": [
{
"value": 0.09105257,
"n": 0,
"scriptPubKey": {
"hex": "76a9148273705545d167297b7278503447d809d9e84b2e88ac"
}
},
{
"value": 25532.00000000,
"n": 1,
"scriptPubKey": {
"hex": "76a9147cf41bc3cdba1b8edf811877ab1cc9493847a3e488ac"
}
}
]
}
}
}

View File

@ -0,0 +1,331 @@
{
"connectBlocks": {
"syncRanges": [
{"lower": 702610, "upper": 702619},
{"lower": 707540, "upper": 707548}
],
"blocks": {
"702610": {
"height": 702610,
"hash": "00000000000042b3cd2d763d46320fc0a4fa973f11dec48f730da1992a1b4a19",
"noTxs": 6,
"txDetails": [
{
"hex": "02000000026bba01cbc000c54057b8558ac0acae555638a8338d85c7553723ebeacf32578a000000006a473044022024103908c0cf880d0f58bd00a825bc2ded66b42626da62c594de95860385f0f3022005b9f5fa339fd236d777f7bad4058955b3d5792a0dbc44dfe855db2b9fb3d0d1012102c90a0c3a4e95987e7d9e8d1bf743707340ec876d478dcf42effcd1e9e77ecd34feffffffea8457394368f8cd3915a5aff8faf628d111b376af1a3f8bc34e36b807dac34a030000006a4730440220515cb94883c0823d66dac740beb68a1510c46471ca2eaab2924ccf79d5d1db470220644a5fe3972d2f3bda6e6a3744dbb233c6d3afae76d54722f0b84458ef488af4012102c90a0c3a4e95987e7d9e8d1bf743707340ec876d478dcf42effcd1e9e77ecd34feffffff02b21d842b050000001976a91493f0a84f3e4fdcfea587d0c68f6236ec4ba8c0db88ac005cb2ec220000001976a914ee121fca023b92d0369eeb3a9dae9de2610b287088ac90b80a00",
"txid": "32e7361f430957d58bc0e99ed0b115c673bc7c0755c92c925ba80802ad1182f5",
"blocktime": 1557559421,
"time": 1557559421,
"version": 2,
"vin": [
{
"txid": "8a5732cfeaeb233755c7858d33a8385655aeacc08a55b85740c500c0cb01ba6b",
"vout": 0,
"sequence": 4294967294,
"scriptSig": {
"hex": "473044022024103908c0cf880d0f58bd00a825bc2ded66b42626da62c594de95860385f0f3022005b9f5fa339fd236d777f7bad4058955b3d5792a0dbc44dfe855db2b9fb3d0d1012102c90a0c3a4e95987e7d9e8d1bf743707340ec876d478dcf42effcd1e9e77ecd34"
}
},
{
"txid": "4ac3da07b8364ec38b3f1aaf76b311d128f6faf8afa51539cdf86843395784ea",
"vout": 3,
"sequence": 4294967294,
"scriptSig": {
"hex": "4730440220515cb94883c0823d66dac740beb68a1510c46471ca2eaab2924ccf79d5d1db470220644a5fe3972d2f3bda6e6a3744dbb233c6d3afae76d54722f0b84458ef488af4012102c90a0c3a4e95987e7d9e8d1bf743707340ec876d478dcf42effcd1e9e77ecd34"
}
}
],
"vout": [
{
"value": 222.04915122,
"n": 0,
"scriptPubKey": {
"hex": "76a91493f0a84f3e4fdcfea587d0c68f6236ec4ba8c0db88ac"
}
},
{
"value": 1500.00000000,
"n": 1,
"scriptPubKey": {
"hex": "76a914ee121fca023b92d0369eeb3a9dae9de2610b287088ac"
}
}
]
},
{
"hex": "020000000164e38b17ec20ca8a1071c100070e556cdb995b307040c8ac834e1b3e68dee349010000006b483045022100f161513ce7b96df7d772c1e34f71ce0515ff97d64c49cd3c1766406280adcd5802203b51e896b675f336b4600534ae67980b2193f6c39e1380facc7d69c34d0156060121021d06c7124eb7be62b3d4bf8f094510c29760a5f06c1b62c51c9f5df51857d27dfeffffff02e07866eb130000001976a914c889edba47f299e5a79dddbcad6fb9a1b566fc7888ac72abea26a40700001976a9141737a3b2e5b6e9e20067ec56f7db7d29014b1ce588ac91b80a00",
"txid": "2e9bd5cc2afa7f5b9de22b39149c4341bc189a7b9ef7df49876173bdbc85b802",
"blocktime": 1557559421,
"time": 1557559421,
"version": 2,
"vin": [
{
"txid": "49e3de683e1b4e83acc84070305b99db6c550e0700c171108aca20ec178be364",
"vout": 1,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100f161513ce7b96df7d772c1e34f71ce0515ff97d64c49cd3c1766406280adcd5802203b51e896b675f336b4600534ae67980b2193f6c39e1380facc7d69c34d0156060121021d06c7124eb7be62b3d4bf8f094510c29760a5f06c1b62c51c9f5df51857d27d"
}
}
],
"vout": [
{
"value": 855.5374000,
"n": 0,
"scriptPubKey": {
"hex": "76a914c889edba47f299e5a79dddbcad6fb9a1b566fc7888ac"
}
},
{
"value": 84016.08944498,
"n": 1,
"scriptPubKey": {
"hex": "76a9141737a3b2e5b6e9e20067ec56f7db7d29014b1ce588ac"
}
}
]
}
]
},
"702611": {
"height": 702611,
"hash": "0000000000001c8c9218bad5a338daa93d16695a2bbfd1d35c32aba8094ccc07",
"noTxs": 2,
"txDetails": [
{
"hex": "02000000018f7a8b54bf2cc90ef51937601f63aa7bb9948a4891a8fdd970327efa86c3c6cf030000006b483045022100971099caabc08e507171f65648ea8d0b13ad1d0471479d4744cf2e41c02ab9aa0220652161d0cdd1d379249d2914c3ff2702680535647157c518ea7357d7cec0313a01210339ac9143c476ede4a7b39ec03d7b85b36c4d571ebe84f0d5caabb6948d34f43ffeffffff05b0da0e1e000000001976a914d1d3d3c7064a9aa29077f322b498b5ca6317bb5388ac3b3b740b090000001976a9142fdede3c1573c646ca13b59f4456b4e439a6ac3588ac6531e81f000000001976a9149d9bddb3e257cc565b775ac5147c8f74d1e2a9b788ac00d4121f000000001976a91407e5d84e1805d96781f9571095767f0103f68fda88ac72b85a22000000001976a914b5a99ad52450f8c2a8e81ab2cfa4e156936e3da888ac91b80a00",
"txid": "1579ab536518550f2fc71609b0c007ba6f78167ecc361362e3a4480357946598",
"blocktime": 1557559435,
"time": 1557559435,
"version": 2,
"vin": [
{
"txid": "cfc6c386fa7e3270d9fda891488a94b97baa631f603719f50ec92cbf548b7a8f",
"vout": 3,
"sequence": 4294967295,
"scriptSig": {
"hex": "483045022100971099caabc08e507171f65648ea8d0b13ad1d0471479d4744cf2e41c02ab9aa0220652161d0cdd1d379249d2914c3ff2702680535647157c518ea7357d7cec0313a01210339ac9143c476ede4a7b39ec03d7b85b36c4d571ebe84f0d5caabb6948d34f43f"
}
}
],
"vout": [
{
"value": 5.04289968,
"n": 0,
"scriptPubKey": {
"hex": "76a914d1d3d3c7064a9aa29077f322b498b5ca6317bb5388ac"
}
},
{
"value": 388.46872379,
"n": 1,
"scriptPubKey": {
"hex": "76a9142fdede3c1573c646ca13b59f4456b4e439a6ac3588ac"
}
},
{
"value": 5.35310693,
"n": 2,
"scriptPubKey": {
"hex": "76a9149d9bddb3e257cc565b775ac5147c8f74d1e2a9b788ac"
}
},
{
"value": 5.21327616,
"n": 3,
"scriptPubKey": {
"hex": "76a91407e5d84e1805d96781f9571095767f0103f68fda88ac"
}
},
{
"value": 5.76370802,
"n": 4,
"scriptPubKey": {
"hex": "76a914b5a99ad52450f8c2a8e81ab2cfa4e156936e3da888ac"
}
}
]
}
]
},
"702619": {
"height": 702619,
"hash": "00000000000009aa5f637d634a18b42d62ae820daa341b5386b29248e2a42356",
"noTxs": 3,
"txDetails": [
{
"hex": "0200000001b93ae2aff06bc580e26331d6d59d2f3ae910cdc549993bb3a21acb53db3a50c80a0000006b483045022100d0083a5968774f7f01de6cc72f8fa04e458ea5ce4cccc58e73254966d8645cf9022056f10deaeaa44eb89f4b0204a16140a49237a1e79cd4d017837ab6719eb14959012102b1e1ef3235d31b84cbd22e0fd8c049202724e7e9382729ad2b881cda664639dcfeffffff03289d0ad5030000001976a91475fceb999dc2625360ad647894eec8f46882802a88ac50dc8956020000001976a9141cc4e68334b4a15aae8406ed296308c4f463d2ac88ac80d1cc67060000001976a914aedf3be432c995a5c054d102c16624b0e64bd04c88ac99b80a00",
"txid": "0d4774305ee1be1d88334218379bf0669004c416e828e6fdceafcd320612bc81",
"blocktime": 1557559657,
"time": 1557559657,
"version": 2,
"vin": [
{
"txid": "c8503adb53cb1aa2b33b9949c5cd10e93a2f9dd5d63163e280c56bf0afe23ab9",
"vout": 10,
"sequence": 4294967294,
"scriptSig": {
"hex": "483045022100d0083a5968774f7f01de6cc72f8fa04e458ea5ce4cccc58e73254966d8645cf9022056f10deaeaa44eb89f4b0204a16140a49237a1e79cd4d017837ab6719eb14959012102b1e1ef3235d31b84cbd22e0fd8c049202724e7e9382729ad2b881cda664639dc"
}
}
],
"vout": [
{
"value": 164.59144488,
"n": 0,
"scriptPubKey": {
"hex": "76a91475fceb999dc2625360ad647894eec8f46882802a88ac"
}
},
{
"value": 100.41810000,
"n": 1,
"scriptPubkey": {
"hex": "76a9141cc4e68334b4a15aae8406ed296308c4f463d2ac88ac"
}
},
{
"value": 275.11280000,
"n": 2,
"scriptPubkey": {
"hex": "76a914aedf3be432c995a5c054d102c16624b0e64bd04c88ac"
}
}
]
}
]
},
"707548": {
"height": 707548,
"hash": "0000000000001deb9c03419e16bcf4d3bba37a68eab17b1d9e80d833d59eaa2f",
"noTxs": 2,
"txDetails": [
{
"hex": "020000000001010000000000000000000000000000000000000000000000000000000000000000ffffffff1503ddcb0a044208db5c014f10509801000000000000ffffffff020088526a740000001976a914055594c199fafa48f6ba46a3ada7cfc3c9d6eb1d88ac0000000000000000266a24aa21a9ede2f61c3f71d1defd3fa999dfa36953755c690689799962b48bebd836974e8cf90120000000000000000000000000000000000000000000000000000000000000000000000000",
"txid": "4e99215422b368329b7edc738461d9ee864fa9a9b95fcc2c07fa8b17cc0da49c",
"blocktime": 1557858226,
"time": 1557858226,
"version": 2,
"vin": [
{
"txid": "d7924d630473a8ed5934db65c06e364e76f5237ca7673d38b6f2a8aa52c52997",
"vout": 0,
"sequence": 4294967295,
"scriptSig": {
"hex": "483045022100952c376e729d5d9f2973bb4ad305e370d6a3331e61e3b9f8831c25c7bbb47c6002201f7c43ddc733d8aee44df51f431a3a0ae473ce95a98597602e4a87bc9e3874870121039e0b146c77f4c85cef15c2f51ad18ffa3141e08ee3ea55a41af68408ecb5e458"
}
}
],
"vout": [
{
"value": 33.51362274,
"n": 0,
"scriptPubKey": {
"hex": "76a9142f366c3fddc3dc8ce4f9a2b97042f5bb6159a6ab88ac"
}
},
{
"value": 10.10052689,
"n": 1,
"scriptPubKey": {
"hex": "76a9144e4802c29f3b6b3ab0a32ce6314efa1e069141cc88ac"
}
},
{
"value": 800.26159654,
"n": 2,
"scriptPubKey": {
"hex": "76a914f72a0f212c006992e36e3d3cac889f3e1a5b12c288ac"
}
},
{
"value": 8.59088871,
"n": 3,
"scriptPubKey": {
"hex": "76a91438e85a0dc5ae187322239d7cba044664cbc587f888ac"
}
},
{
"value": 6.09864291,
"n": 4,
"scriptPubKey": {
"hex": "76a914cf349fa004830769fa76e698033f0a00777f1fc588ac"
}
},
{
"value": 9.36995447,
"n": 5,
"scriptPubKey": {
"hex": "76a914f43058a7559aef593985759588695e0198ead7f688ac"
}
},
{
"value": 6.90847110,
"n": 6,
"scriptPubKey": {
"hex": "76a9140484e38edeb95813ba2d0919493de1710a66189d88ac"
}
},
{
"value": 7.45144308,
"n": 7,
"scriptPubKey": {
"hex": "76a914b9dd0d2742a248ceef9c88630cd9f8a00747076188ac"
}
}
]
}
]
}
}
},
"handleFork": {
"syncRanges": [
{"lower": 702610, "upper": 702619},
{"lower": 707540, "upper": 707548}
],
"fakeBlocks": {
"702617": {
"height": 702617,
"hash": "0000000000002934ba9dc2f595a159f59b658c27247186bc90fe06798fad141e"
},
"702618": {
"height": 702618,
"hash": "000000000000605b9334525e1082de041c35c3bd25a62fe1cb73cdb241787884"
},
"702619": {
"height": 702619,
"hash": "0000000000004cc962adcfa5380f3664a34df55ddef94bc27c59064890c29bea"
},
"707547": {
"height": 707547,
"hash": "000000000000468a219597a5e99fafa3e9e9fafd4f52b1b3f09796b3cf8b0125"
},
"707548": {
"height": 707548,
"hash": "000000000000111258e9313f60f56a809c2ec63b81373af4eb5c2c5b140aff12"
}
},
"realBlocks": {
"702617": {
"height": 702617,
"hash": "000000000000208422f13be75d8e9dba367245ca11b5ce7a7a3d1f88ca31a2c4"
},
"702618": {
"height": 702618,
"hash": "00000000000047cdfb5ecb000b59a9f7622280356008f9cc05e15321626528ff"
},
"702619": {
"height": 702619,
"hash": "00000000000009aa5f637d634a18b42d62ae820daa341b5386b29248e2a42356"
},
"707547": {
"height": 707547,
"hash": "00000000000031c13e3c865d5f7861f28aa02bf997716471f364db6b69b6244f"
},
"707548": {
"height": 707548,
"hash": "0000000000001deb9c03419e16bcf4d3bba37a68eab17b1d9e80d833d59eaa2f"
}
}
}
}

View File

@ -155,5 +155,10 @@
"rpc": ["GetBlock", "GetBlockHash", "GetTransaction", "GetTransactionForMempool", "MempoolSync",
"EstimateSmartFee", "EstimateFee", "GetBestBlockHash", "GetBestBlockHeight", "GetBlockHeader"],
"sync": ["ConnectBlocksParallel", "ConnectBlocks", "HandleFork"]
},
"ravencoin": {
"rpc": ["GetBlock", "GetBlockHash", "GetTransaction", "GetTransactionForMempool", "MempoolSync",
"EstimateSmartFee", "GetBestBlockHash", "GetBestBlockHeight", "GetBlockHeader"],
"sync": ["ConnectBlocksParallel", "ConnectBlocks", "HandleFork"]
}
}