diff options
-rw-r--r-- | rpc/json.go | 8 | ||||
-rw-r--r-- | rpc/message.go | 15 | ||||
-rw-r--r-- | rpc/packages.go | 37 |
3 files changed, 58 insertions, 2 deletions
diff --git a/rpc/json.go b/rpc/json.go index 8c2a672e3..2e6ef2c2b 100644 --- a/rpc/json.go +++ b/rpc/json.go @@ -72,8 +72,12 @@ func (self jsonWrapper) GetRequestReply(xeth *EthereumApi, req *RpcRequest, repl return err } return xeth.GetTxCountAt(args, reply) - // case "eth_codeAt": - // return nil + 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 { diff --git a/rpc/message.go b/rpc/message.go index 03e9625ac..91fbde99b 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -147,6 +147,21 @@ func (req *RpcRequest) ToGetBalanceArgs() (*GetBalanceArgs, error) { return args, nil } +func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(GetCodeAtArgs) + r := bytes.NewReader(req.Params[0]) + err := json.NewDecoder(r).Decode(args) + if err != nil { + return nil, NewErrorResponse(ErrorDecodeArgs) + } + jsonlogger.DebugDetailf("%T %v", args, args) + return args, nil +} + // func NewSuccessRes(object JsonResponse) string { // e := SuccessRes{Error: false, Result: object} // res, err := json.Marshal(e) diff --git a/rpc/packages.go b/rpc/packages.go index 8a58700b2..4e6016b9e 100644 --- a/rpc/packages.go +++ b/rpc/packages.go @@ -149,6 +149,15 @@ func (p *EthereumApi) GetBalanceAt(args *GetBalanceArgs, reply *interface{}) err return nil } +func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error { + err := args.requirements() + if err != nil { + return err + } + *reply = p.pipe.CodeAt(args.Address) + return nil +} + type GetBlockArgs struct { BlockNumber int32 Hash string @@ -236,6 +245,15 @@ type GetStorageArgs struct { Key string } +func (obj *GetStorageArgs) UnmarshalJSON(b []byte) (err error) { + arg0 := "" + if err = json.Unmarshal(b, arg0); err == nil { + obj.Address = arg0 + return + } + return NewErrorResponse(ErrorDecodeArgs) +} + func (a *GetStorageArgs) requirements() error { if a.Address == "" { return NewErrorResponse("GetStorageAt requires an 'address' value as argument") @@ -316,3 +334,22 @@ type BalanceRes struct { Balance string `json:"balance"` Address string `json:"address"` } +type GetCodeAtArgs struct { + Address string +} + +func (obj *GetCodeAtArgs) UnmarshalJSON(b []byte) (err error) { + arg0 := "" + if err = json.Unmarshal(b, &arg0); err == nil { + obj.Address = arg0 + return + } + return NewErrorResponse(ErrorDecodeArgs) +} + +func (a *GetCodeAtArgs) requirements() error { + if a.Address == "" { + return NewErrorResponse("GetCodeAt requires an 'address' value as argument") + } + return nil +} |