From 32bed50ba107ff69ff489e4df6f935fd404a5caa Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Mon, 12 Jan 2015 23:25:29 -0600 Subject: begin conversion to rpc over http Per specification at https://github.com/ethereum/wiki/wiki/Generic-JSON-RPC --- rpc/message.go | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 163 insertions(+), 8 deletions(-) (limited to 'rpc/message.go') diff --git a/rpc/message.go b/rpc/message.go index c8103eded..f520548c9 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -1,14 +1,169 @@ package rpc -import "github.com/ethereum/go-ethereum/ethutil" +import ( + "bytes" + "encoding/json" + "errors" -type Message struct { - Call string `json:"call"` - Args []interface{} `json:"args"` - Id int `json:"_id"` - Data interface{} `json:"data"` + // "github.com/ethereum/go-ethereum/ethutil" +) + +const ( + ErrorArguments = "Error: Insufficient arguments" + ErrorNotImplemented = "Error: Method not implemented" + ErrorUnknown = "Error: Unknown error" + ErrorParseRequest = "Error: Could not parse request" + ErrorDecodeArgs = "Error: Could not decode arguments" +) + +// type JsonResponse interface { +// } + +type ErrorResponse struct { + Error bool `json:"error"` + ErrorText string `json:"errorText"` +} + +// type SuccessRes struct { +// Error bool `json:"error"` +// Result JsonResponse `json:"result"` +// } + +// type Message struct { +// Call string `json:"call"` +// Args []interface{} `json:"args"` +// Id int `json:"_id"` +// Data interface{} `json:"data"` +// } + +// func (self *Message) Arguments() *ethutil.Value { +// return ethutil.NewValue(self.Args) +// } + +type RpcSuccessResponse struct { + ID int `json:"id"` + JsonRpc string `json:"jsonrpc"` + Error bool `json:"error"` + Result interface{} `json:"result"` } -func (self *Message) Arguments() *ethutil.Value { - return ethutil.NewValue(self.Args) +type RpcErrorResponse struct { + ID int `json:"id"` + JsonRpc string `json:"jsonrpc"` + Error bool `json:"error"` + ErrorText string `json:"errortext"` +} + +type RpcRequest struct { + JsonRpc string `json:"jsonrpc"` + ID int `json:"id"` + Method string `json:"method"` + Params []json.RawMessage `json:"params"` +} + +func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(GetBlockArgs) + 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 (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { + if len(req.Params) < 7 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(NewTxArgs) + 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 (req *RpcRequest) ToPushTxArgs() (*PushTxArgs, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(PushTxArgs) + 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 (req *RpcRequest) ToGetStorageArgs() (*GetStorageArgs, error) { + if len(req.Params) < 2 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(GetStorageArgs) + // TODO need to pass both arguments + 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 (req *RpcRequest) ToGetTxCountArgs() (*GetTxCountArgs, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(GetTxCountArgs) + 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 (req *RpcRequest) ToGetBalanceArgs() (*GetBalanceArgs, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(GetBalanceArgs) + 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) +// if err != nil { +// // This should never happen +// panic("Creating json error response failed, help") +// } +// success := string(res) +// return success +// // return res +// } + +func NewErrorResponse(msg string) error { + return errors.New(msg) } -- cgit v1.2.3 From b2112729faa2263fe0dbf6f735339e27608ae614 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Mon, 12 Jan 2015 23:44:56 -0600 Subject: cleanup --- rpc/message.go | 21 --------------------- 1 file changed, 21 deletions(-) (limited to 'rpc/message.go') diff --git a/rpc/message.go b/rpc/message.go index f520548c9..8aadfa691 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -4,8 +4,6 @@ import ( "bytes" "encoding/json" "errors" - - // "github.com/ethereum/go-ethereum/ethutil" ) const ( @@ -16,30 +14,11 @@ const ( ErrorDecodeArgs = "Error: Could not decode arguments" ) -// type JsonResponse interface { -// } - type ErrorResponse struct { Error bool `json:"error"` ErrorText string `json:"errorText"` } -// type SuccessRes struct { -// Error bool `json:"error"` -// Result JsonResponse `json:"result"` -// } - -// type Message struct { -// Call string `json:"call"` -// Args []interface{} `json:"args"` -// Id int `json:"_id"` -// Data interface{} `json:"data"` -// } - -// func (self *Message) Arguments() *ethutil.Value { -// return ethutil.NewValue(self.Args) -// } - type RpcSuccessResponse struct { ID int `json:"id"` JsonRpc string `json:"jsonrpc"` -- cgit v1.2.3 From b178414a475aa48764622487223237a7d28edd46 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 13 Jan 2015 09:13:43 -0600 Subject: Added license headers --- rpc/message.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'rpc/message.go') diff --git a/rpc/message.go b/rpc/message.go index 8aadfa691..03e9625ac 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -1,3 +1,19 @@ +/* + This file is part of go-ethereum + + go-ethereum is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + go-ethereum is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with go-ethereum. If not, see . +*/ package rpc import ( -- cgit v1.2.3 From 961e4da7d885a6d5d00fc7c3ab2e11c80c9eeecc Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 13 Jan 2015 09:27:36 -0600 Subject: Add support for CodeAt --- rpc/message.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'rpc/message.go') 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) -- cgit v1.2.3 From a81d835e4d27f600fac31f74d938d0b6502c3072 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Tue, 13 Jan 2015 09:37:08 -0600 Subject: cleanup --- rpc/message.go | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'rpc/message.go') diff --git a/rpc/message.go b/rpc/message.go index 91fbde99b..63de734b8 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -162,18 +162,6 @@ func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { return args, nil } -// func NewSuccessRes(object JsonResponse) string { -// e := SuccessRes{Error: false, Result: object} -// res, err := json.Marshal(e) -// if err != nil { -// // This should never happen -// panic("Creating json error response failed, help") -// } -// success := string(res) -// return success -// // return res -// } - func NewErrorResponse(msg string) error { return errors.New(msg) } -- cgit v1.2.3