diff --git a/rpc/json.go b/rpc/json.go index dc37a7cb73..5446cb3c10 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -54,54 +54,4 @@ func (self jsonWrapper) ParseRequestBody(req *http.Request) (RpcRequest, error) return reqParsed, nil } -func (self jsonWrapper) GetRequestReply(xeth *EthereumApi, req *RpcRequest, reply *interface{}) error { - // Spec at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC - jsonlogger.DebugDetailf("%T %s", req.Params, req.Params) - switch req.Method { - case "eth_coinbase": - return xeth.GetCoinbase(reply) - case "eth_listening": - return xeth.GetIsListening(reply) - case "eth_mining": - return xeth.GetIsMining(reply) - case "eth_peerCount": - return xeth.GetPeerCount(reply) - case "eth_countAt": - args, err := req.ToGetTxCountArgs() - if err != nil { - return err - } - return xeth.GetTxCountAt(args, reply) - case "eth_codeAt": - args, err := req.ToGetCodeAtArgs() - if err != nil { - return err - } - return xeth.GetCodeAt(args, reply) - case "eth_balanceAt": - args, err := req.ToGetBalanceArgs() - if err != nil { - return err - } - return xeth.GetBalanceAt(args, reply) - case "eth_stateAt": - args, err := req.ToGetStorageArgs() - if err != nil { - return err - } - return xeth.GetStorageAt(args, reply) - case "eth_blockByNumber", "eth_blockByHash": - args, err := req.ToGetBlockArgs() - if err != nil { - return err - } - return xeth.GetBlock(args, reply) - default: - return NewErrorResponse(ErrorNotImplemented) - } - - jsonlogger.DebugDetailf("Reply: %T %s", reply, reply) - return nil -} - var JSON jsonWrapper diff --git a/rpc/packages.go b/rpc/packages.go index 34a4467b1c..e87e0db7ca 100644 --- a/rpc/packages.go +++ b/rpc/packages.go @@ -157,5 +157,52 @@ func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error { return nil } +func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error { + // Spec at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC + jsonlogger.DebugDetailf("%T %s", req.Params, req.Params) + switch req.Method { + case "eth_coinbase": + return p.GetCoinbase(reply) + case "eth_listening": + return p.GetIsListening(reply) + case "eth_mining": + return p.GetIsMining(reply) + case "eth_peerCount": + return p.GetPeerCount(reply) + case "eth_countAt": + args, err := req.ToGetTxCountArgs() + if err != nil { + return err + } + return p.GetTxCountAt(args, reply) + case "eth_codeAt": + args, err := req.ToGetCodeAtArgs() + if err != nil { + return err + } + return p.GetCodeAt(args, reply) + case "eth_balanceAt": + args, err := req.ToGetBalanceArgs() + if err != nil { + return err + } + return p.GetBalanceAt(args, reply) + case "eth_stateAt": + args, err := req.ToGetStorageArgs() + if err != nil { + return err + } + return p.GetStorageAt(args, reply) + case "eth_blockByNumber", "eth_blockByHash": + args, err := req.ToGetBlockArgs() + if err != nil { + return err + } + return p.GetBlock(args, reply) + default: + return NewErrorResponse(ErrorNotImplemented) + } + + jsonlogger.DebugDetailf("Reply: %T %s", reply, reply) return nil } diff --git a/rpc/server.go b/rpc/server.go index d14f50f242..a4cf1aa7c0 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -89,7 +89,7 @@ func apiHandler(xeth *EthereumApi) http.Handler { } var response interface{} - reserr := JSON.GetRequestReply(xeth, &reqParsed, &response) + reserr := xeth.GetRequestReply(&reqParsed, &response) if reserr != nil { jsonlogger.Errorln(reserr) JSON.Send(w, &RpcErrorResponse{JsonRpc: reqParsed.JsonRpc, ID: reqParsed.ID, Error: true, ErrorText: reserr.Error()})