[Zcash] Expose zcash consensus info (#508)

pull/511/head
hewigovens 2020-11-13 02:56:41 +08:00 committed by GitHub
parent fc25200ff8
commit 5534372e7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 79 additions and 23 deletions

View File

@ -424,18 +424,19 @@ type BlockbookInfo struct {
// BackendInfo is used to get information about blockchain
type BackendInfo struct {
BackendError string `json:"error,omitempty"`
Chain string `json:"chain,omitempty"`
Blocks int `json:"blocks,omitempty"`
Headers int `json:"headers,omitempty"`
BestBlockHash string `json:"bestBlockHash,omitempty"`
Difficulty string `json:"difficulty,omitempty"`
SizeOnDisk int64 `json:"sizeOnDisk,omitempty"`
Version string `json:"version,omitempty"`
Subversion string `json:"subversion,omitempty"`
ProtocolVersion string `json:"protocolVersion,omitempty"`
Timeoffset float64 `json:"timeOffset,omitempty"`
Warnings string `json:"warnings,omitempty"`
BackendError string `json:"error,omitempty"`
Chain string `json:"chain,omitempty"`
Blocks int `json:"blocks,omitempty"`
Headers int `json:"headers,omitempty"`
BestBlockHash string `json:"bestBlockHash,omitempty"`
Difficulty string `json:"difficulty,omitempty"`
SizeOnDisk int64 `json:"sizeOnDisk,omitempty"`
Version string `json:"version,omitempty"`
Subversion string `json:"subversion,omitempty"`
ProtocolVersion string `json:"protocolVersion,omitempty"`
Timeoffset float64 `json:"timeOffset,omitempty"`
Warnings string `json:"warnings,omitempty"`
Consensus interface{} `json:"consensus,omitempty"`
}
// SystemInfo contains information about the running blockbook and backend instance

View File

@ -1777,6 +1777,7 @@ func (w *Worker) GetSystemInfo(internal bool) (*SystemInfo, error) {
Timeoffset: ci.Timeoffset,
Version: ci.Version,
Warnings: ci.Warnings,
Consensus: ci.Consensus,
}
glog.Info("GetSystemInfo finished in ", time.Since(start))
return &SystemInfo{blockbookInfo, backendInfo}, nil

View File

@ -7,6 +7,7 @@ import (
"github.com/juju/errors"
"github.com/trezor/blockbook/bchain"
"github.com/trezor/blockbook/bchain/coins/btc"
"github.com/trezor/blockbook/common"
)
// ZCashRPC is an interface to JSON-RPC bitcoind service
@ -14,6 +15,23 @@ type ZCashRPC struct {
*btc.BitcoinRPC
}
type ResGetBlockChainInfo struct {
Error *bchain.RPCError `json:"error"`
Result struct {
Chain string `json:"chain"`
Blocks int `json:"blocks"`
Headers int `json:"headers"`
Bestblockhash string `json:"bestblockhash"`
Difficulty common.JSONNumber `json:"difficulty"`
Pruned bool `json:"pruned"`
SizeOnDisk int64 `json:"size_on_disk"`
Consensus struct {
Chaintip string `json:"chaintip"`
Nextblock string `json:"nextblock"`
} `json:"consensus"`
} `json:"result"`
}
// NewZCashRPC returns new ZCashRPC instance
func NewZCashRPC(config json.RawMessage, pushHandler func(bchain.NotificationType)) (bchain.BlockChain, error) {
b, err := btc.NewBitcoinRPC(config, pushHandler)
@ -54,6 +72,41 @@ func (z *ZCashRPC) Initialize() error {
return nil
}
func (z *ZCashRPC) GetChainInfo() (*bchain.ChainInfo, error) {
chainInfo := ResGetBlockChainInfo{}
err := z.Call(&btc.CmdGetBlockChainInfo{Method: "getblockchaininfo"}, &chainInfo)
if err != nil {
return nil, err
}
if chainInfo.Error != nil {
return nil, chainInfo.Error
}
networkInfo := btc.ResGetNetworkInfo{}
err = z.Call(&btc.CmdGetNetworkInfo{Method: "getnetworkinfo"}, &networkInfo)
if err != nil {
return nil, err
}
if networkInfo.Error != nil {
return nil, networkInfo.Error
}
return &bchain.ChainInfo{
Bestblockhash: chainInfo.Result.Bestblockhash,
Blocks: chainInfo.Result.Blocks,
Chain: chainInfo.Result.Chain,
Difficulty: string(chainInfo.Result.Difficulty),
Headers: chainInfo.Result.Headers,
SizeOnDisk: chainInfo.Result.SizeOnDisk,
Version: string(networkInfo.Result.Version),
Subversion: string(networkInfo.Result.Subversion),
ProtocolVersion: string(networkInfo.Result.ProtocolVersion),
Timeoffset: networkInfo.Result.Timeoffset,
Consensus: chainInfo.Result.Consensus,
Warnings: networkInfo.Result.Warnings,
}, nil
}
// GetBlock returns block with given hash.
func (z *ZCashRPC) GetBlock(hash string, height uint32) (*bchain.Block, error) {
var err error

View File

@ -161,17 +161,18 @@ type MempoolEntry struct {
// ChainInfo is used to get information about blockchain
type ChainInfo struct {
Chain string `json:"chain"`
Blocks int `json:"blocks"`
Headers int `json:"headers"`
Bestblockhash string `json:"bestblockhash"`
Difficulty string `json:"difficulty"`
SizeOnDisk int64 `json:"size_on_disk"`
Version string `json:"version"`
Subversion string `json:"subversion"`
ProtocolVersion string `json:"protocolversion"`
Timeoffset float64 `json:"timeoffset"`
Warnings string `json:"warnings"`
Chain string `json:"chain"`
Blocks int `json:"blocks"`
Headers int `json:"headers"`
Bestblockhash string `json:"bestblockhash"`
Difficulty string `json:"difficulty"`
SizeOnDisk int64 `json:"size_on_disk"`
Version string `json:"version"`
Subversion string `json:"subversion"`
ProtocolVersion string `json:"protocolversion"`
Timeoffset float64 `json:"timeoffset"`
Warnings string `json:"warnings"`
Consensus interface{} `json:"consensus,omitempty"`
}
// RPCError defines rpc error returned by backend