From 094f921e5028fc215efbc86118e3d3e5b0663055 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Thu, 12 Mar 2015 19:07:03 -0500 Subject: Convert to proper errors Allow returning different JSON RPC error codes depending on error type --- rpc/api.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'rpc/api.go') diff --git a/rpc/api.go b/rpc/api.go index b94d2d6dc..b72a0dd60 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -578,7 +578,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error } return p.Call(args, reply) case "eth_flush": - return errNotImplemented + return NewNotImplementedError(req.Method) case "eth_getBlockByHash": args := new(GetBlockByHashArgs) if err := json.Unmarshal(req.Params, &args); err != nil { @@ -618,7 +618,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } if args.Index > int64(len(v.Transactions)) || args.Index < 0 { - return NewErrorWithMessage(errDecodeArgs, "Transaction index does not exist") + return NewValidationError("Index", "does not exist") } *reply = v.Transactions[args.Index] case "eth_getTransactionByBlockNumberAndIndex": @@ -632,7 +632,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } if args.Index > int64(len(v.Transactions)) || args.Index < 0 { - return NewErrorWithMessage(errDecodeArgs, "Transaction index does not exist") + return NewValidationError("Index", "does not exist") } *reply = v.Transactions[args.Index] case "eth_getUncleByBlockHashAndIndex": @@ -646,7 +646,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } if args.Index > int64(len(v.Uncles)) || args.Index < 0 { - return NewErrorWithMessage(errDecodeArgs, "Uncle index does not exist") + return NewValidationError("Index", "does not exist") } uncle, err := p.GetBlockByHash(toHex(v.Uncles[args.Index]), false) @@ -665,7 +665,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } if args.Index > int64(len(v.Uncles)) || args.Index < 0 { - return NewErrorWithMessage(errDecodeArgs, "Uncle index does not exist") + return NewValidationError("Index", "does not exist") } uncle, err := p.GetBlockByHash(toHex(v.Uncles[args.Index]), false) @@ -678,7 +678,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error case "eth_compileSolidity": case "eth_compileLLL": case "eth_compileSerpent": - return errNotImplemented + return NewNotImplementedError(req.Method) case "eth_newFilter": args := new(FilterOptions) if err := json.Unmarshal(req.Params, &args); err != nil { @@ -717,7 +717,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return p.AllLogs(args, reply) case "eth_getWork": case "eth_submitWork": - return errNotImplemented + return NewNotImplementedError(req.Method) case "db_put": args := new(DbArgs) if err := json.Unmarshal(req.Params, &args); err != nil { @@ -746,7 +746,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return p.HasWhisperIdentity(args.Identity, reply) case "shh_newGroup": case "shh_addToGroup": - return errNotImplemented + return NewNotImplementedError(req.Method) case "shh_newFilter": args := new(WhisperFilterArgs) if err := json.Unmarshal(req.Params, &args); err != nil { @@ -790,7 +790,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error // } // return p.WatchTx(args, reply) default: - return NewErrorWithMessage(errNotImplemented, req.Method) + return NewNotImplementedError(req.Method) } rpclogger.DebugDetailf("Reply: %T %s", reply, reply) -- cgit v1.2.3 From d4ed66c83df40c6d3035e21c705b4ca06e52a0be Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Thu, 12 Mar 2015 19:20:46 -0500 Subject: Add web3_clientVersion --- rpc/api.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'rpc/api.go') diff --git a/rpc/api.go b/rpc/api.go index b72a0dd60..05f4d0bc4 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -477,6 +477,10 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } *reply = toHex(crypto.Sha3(fromHex(args.Data))) + case "web3_clientVersion": + *reply = p.xeth().Backend().Version() + case "net_version": + return NewNotImplementedError(req.Method) case "net_listening": *reply = p.xeth().IsListening() case "net_peerCount": @@ -675,9 +679,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error *reply = uncle case "eth_getCompilers": return p.GetCompilers(reply) - case "eth_compileSolidity": - case "eth_compileLLL": - case "eth_compileSerpent": + case "eth_compileSolidity", "eth_compileLLL", "eth_compileSerpent": return NewNotImplementedError(req.Method) case "eth_newFilter": args := new(FilterOptions) @@ -715,8 +717,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } return p.AllLogs(args, reply) - case "eth_getWork": - case "eth_submitWork": + case "eth_getWork", "eth_submitWork": return NewNotImplementedError(req.Method) case "db_put": args := new(DbArgs) @@ -744,8 +745,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return err } return p.HasWhisperIdentity(args.Identity, reply) - case "shh_newGroup": - case "shh_addToGroup": + case "shh_newGroup", "shh_addToGroup": return NewNotImplementedError(req.Method) case "shh_newFilter": args := new(WhisperFilterArgs) -- cgit v1.2.3 From 0932f843830a30ea3da5d866fbe4e459d2748b1e Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Fri, 13 Mar 2015 10:03:19 -0400 Subject: Fix eth_newBlockFilter --- rpc/api.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'rpc/api.go') diff --git a/rpc/api.go b/rpc/api.go index 05f4d0bc4..630fb32b5 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -176,7 +176,7 @@ func (self *EthereumApi) UninstallFilter(id int, reply *interface{}) error { return nil } -func (self *EthereumApi) NewFilterString(args string, reply *interface{}) error { +func (self *EthereumApi) NewFilterString(args *FilterStringArgs, reply *interface{}) error { var id int filter := core.NewFilter(self.xeth().Backend()) @@ -186,10 +186,14 @@ func (self *EthereumApi) NewFilterString(args string, reply *interface{}) error self.logs[id].add(&state.StateLog{}) } - if args == "pending" { + + switch args.Word { + case "pending": filter.PendingCallback = callback - } else if args == "chain" { + case "latest": filter.BlockCallback = callback + default: + return NewValidationError("Word", "Must be `latest` or `pending`") } id = self.filterManager.InstallFilter(filter) @@ -692,7 +696,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error if err := json.Unmarshal(req.Params, &args); err != nil { return err } - return p.NewFilterString(args.Word, reply) + return p.NewFilterString(args, reply) case "eth_uninstallFilter": args := new(FilterIdArgs) if err := json.Unmarshal(req.Params, &args); err != nil { -- cgit v1.2.3 From e3b64d70c212d893c147b8af62abe5c03fb2f492 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Fri, 13 Mar 2015 10:56:41 -0400 Subject: Rename db_put db_get --- rpc/api.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'rpc/api.go') diff --git a/rpc/api.go b/rpc/api.go index 630fb32b5..af9f10530 100644 --- a/rpc/api.go +++ b/rpc/api.go @@ -723,18 +723,20 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error return p.AllLogs(args, reply) case "eth_getWork", "eth_submitWork": return NewNotImplementedError(req.Method) - case "db_put": + case "db_putString": args := new(DbArgs) if err := json.Unmarshal(req.Params, &args); err != nil { return err } return p.DbPut(args, reply) - case "db_get": + case "db_getString": args := new(DbArgs) if err := json.Unmarshal(req.Params, &args); err != nil { return err } return p.DbGet(args, reply) + case "db_putHex", "db_getHex": + return NewNotImplementedError(req.Method) case "shh_post": args := new(WhisperMessageArgs) if err := json.Unmarshal(req.Params, &args); err != nil { -- cgit v1.2.3