rpc/server: implement getstateroot RPC
This commit is contained in:
parent
1869d6d460
commit
4de22247d5
2 changed files with 52 additions and 0 deletions
|
@ -100,6 +100,7 @@ var rpcHandlers = map[string]func(*Server, request.Params) (interface{}, *respon
|
|||
"getpeers": (*Server).getPeers,
|
||||
"getrawmempool": (*Server).getRawMempool,
|
||||
"getrawtransaction": (*Server).getrawtransaction,
|
||||
"getstateroot": (*Server).getStateRoot,
|
||||
"getstorage": (*Server).getStorage,
|
||||
"gettransactionheight": (*Server).getTransactionHeight,
|
||||
"getunclaimedgas": (*Server).getUnclaimedGas,
|
||||
|
@ -773,6 +774,28 @@ func (s *Server) contractScriptHashFromParam(param *request.Param) (util.Uint160
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func (s *Server) getStateRoot(ps request.Params) (interface{}, *response.Error) {
|
||||
p := ps.Value(0)
|
||||
if p == nil {
|
||||
return nil, response.NewRPCError("Invalid parameter.", "", nil)
|
||||
}
|
||||
var rt *state.MPTRootState
|
||||
var h util.Uint256
|
||||
height, err := p.GetInt()
|
||||
if err == nil {
|
||||
rt, err = s.chain.GetStateRoot(uint32(height))
|
||||
} else if h, err = p.GetUint256(); err == nil {
|
||||
hdr, err := s.chain.GetHeader(h)
|
||||
if err == nil {
|
||||
rt, err = s.chain.GetStateRoot(hdr.Index)
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return nil, response.NewRPCError("Unknown state root.", "", err)
|
||||
}
|
||||
return rt, nil
|
||||
}
|
||||
|
||||
func (s *Server) getStorage(ps request.Params) (interface{}, *response.Error) {
|
||||
id, rErr := s.contractIDFromParam(ps.Value(0))
|
||||
if rErr == response.ErrUnknown {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue