aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTaylor Gerring <taylor.gerring@gmail.com>2015-01-13 23:27:36 +0800
committerTaylor Gerring <taylor.gerring@gmail.com>2015-01-13 23:27:36 +0800
commit961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc (patch)
treefa9deabbbce89ad263a996cc5bd4cf5893bf38e5
parentb178414a475aa48764622487223237a7d28edd46 (diff)
downloadgo-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.tar
go-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.tar.gz
go-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.tar.bz2
go-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.tar.lz
go-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.tar.xz
go-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.tar.zst
go-tangerine-961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc.zip
Add support for CodeAt
-rw-r--r--rpc/json.go8
-rw-r--r--rpc/message.go15
-rw-r--r--rpc/packages.go37
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
+}