Implement a GetCFilterHeader RPC command
This commit is contained in:
parent
a5bf8941d5
commit
763842329b
3 changed files with 54 additions and 0 deletions
|
@ -293,6 +293,21 @@ func NewGetCFilterCmd(hash string, extended bool) *GetCFilterCmd {
|
|||
}
|
||||
}
|
||||
|
||||
// GetCFilterHeaderCmd defines the getcfilterheader JSON-RPC command.
|
||||
type GetCFilterHeaderCmd struct {
|
||||
Hash string
|
||||
Extended bool
|
||||
}
|
||||
|
||||
// NewGetCFilterHeaderCmd returns a new instance which can be used to issue a
|
||||
// getcfilterheader JSON-RPC command.
|
||||
func NewGetCFilterHeaderCmd(hash string, extended bool) *GetCFilterHeaderCmd {
|
||||
return &GetCFilterHeaderCmd{
|
||||
Hash: hash,
|
||||
Extended: extended,
|
||||
}
|
||||
}
|
||||
|
||||
// GetChainTipsCmd defines the getchaintips JSON-RPC command.
|
||||
type GetChainTipsCmd struct{}
|
||||
|
||||
|
@ -771,6 +786,7 @@ func init() {
|
|||
MustRegisterCmd("getblockheader", (*GetBlockHeaderCmd)(nil), flags)
|
||||
MustRegisterCmd("getblocktemplate", (*GetBlockTemplateCmd)(nil), flags)
|
||||
MustRegisterCmd("getcfilter", (*GetCFilterCmd)(nil), flags)
|
||||
MustRegisterCmd("getcfilterheader", (*GetCFilterHeaderCmd)(nil), flags)
|
||||
MustRegisterCmd("getchaintips", (*GetChainTipsCmd)(nil), flags)
|
||||
MustRegisterCmd("getconnectioncount", (*GetConnectionCountCmd)(nil), flags)
|
||||
MustRegisterCmd("getdifficulty", (*GetDifficultyCmd)(nil), flags)
|
||||
|
|
|
@ -330,6 +330,19 @@ func TestChainSvrCmds(t *testing.T) {
|
|||
Hash: "123",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "getcfilterheader",
|
||||
newCmd: func() (interface{}, error) {
|
||||
return btcjson.NewCmd("getcfilterheader", "123", false)
|
||||
},
|
||||
staticCmd: func() interface{} {
|
||||
return btcjson.NewGetCFilterHeaderCmd("123", false)
|
||||
},
|
||||
marshalled: `{"jsonrpc":"1.0","method":"getcfilterheader","params":["123",false],"id":1}`,
|
||||
unmarshalled: &btcjson.GetCFilterHeaderCmd{
|
||||
Hash: "123",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "getchaintips",
|
||||
newCmd: func() (interface{}, error) {
|
||||
|
|
25
rpcserver.go
25
rpcserver.go
|
@ -143,6 +143,7 @@ var rpcHandlersBeforeInit = map[string]commandHandler{
|
|||
"getblockheader": handleGetBlockHeader,
|
||||
"getblocktemplate": handleGetBlockTemplate,
|
||||
"getcfilter": handleGetCFilter,
|
||||
"getcfilterheader": handleGetCFilterHeader,
|
||||
"getconnectioncount": handleGetConnectionCount,
|
||||
"getcurrentnet": handleGetCurrentNet,
|
||||
"getdifficulty": handleGetDifficulty,
|
||||
|
@ -260,6 +261,7 @@ var rpcLimited = map[string]struct{}{
|
|||
"getblockhash": {},
|
||||
"getblockheader": {},
|
||||
"getcfilter": {},
|
||||
"getcfilterheader": {},
|
||||
"getcurrentnet": {},
|
||||
"getdifficulty": {},
|
||||
"getheaders": {},
|
||||
|
@ -2169,6 +2171,29 @@ func handleGetCFilter(s *rpcServer, cmd interface{}, closeChan <-chan struct{})
|
|||
return hex.EncodeToString(filterBytes), nil
|
||||
}
|
||||
|
||||
// handleGetCFilterHeader implements the getcfilterheader command.
|
||||
func handleGetCFilterHeader(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) {
|
||||
c := cmd.(*btcjson.GetCFilterHeaderCmd)
|
||||
hash, err := chainhash.NewHashFromStr(c.Hash)
|
||||
if err != nil {
|
||||
return nil, rpcDecodeHexError(c.Hash)
|
||||
}
|
||||
|
||||
headerBytes, err := s.server.cfIndex.FilterHeaderByBlockHash(hash, c.Extended)
|
||||
if len(headerBytes) > 0 {
|
||||
rpcsLog.Debugf("Found header of committed filter for %v", hash)
|
||||
} else {
|
||||
rpcsLog.Debugf("Could not find header of committed filter for %v: %v",
|
||||
hash, err)
|
||||
return nil, &btcjson.RPCError{
|
||||
Code: btcjson.ErrRPCBlockNotFound,
|
||||
Message: "Block not found",
|
||||
}
|
||||
}
|
||||
|
||||
return hex.EncodeToString(headerBytes), nil
|
||||
}
|
||||
|
||||
// handleGetConnectionCount implements the getconnectioncount command.
|
||||
func handleGetConnectionCount(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) {
|
||||
return s.cfg.ConnMgr.ConnectedCount(), nil
|
||||
|
|
Loading…
Reference in a new issue