diff options
author | Taylor Gerring <taylor.gerring@gmail.com> | 2015-01-30 01:28:55 +0800 |
---|---|---|
committer | Taylor Gerring <taylor.gerring@gmail.com> | 2015-01-30 01:28:55 +0800 |
commit | 1cfea1113ac90b5214560ea6db923106f638c4b8 (patch) | |
tree | 5a539d60640da4ee4b1ddd62f703f715523c411a /rpc/message.go | |
parent | 726852e3d3ba5c2167bbdb3bdd3ecbaff6b4f242 (diff) | |
parent | 6488a392a347d0d47212fdc78386e3e0e5841d7d (diff) | |
download | go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.tar go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.tar.gz go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.tar.bz2 go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.tar.lz go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.tar.xz go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.tar.zst go-tangerine-1cfea1113ac90b5214560ea6db923106f638c4b8.zip |
Merge branch 'qt5.4' of github.com:ethereum/go-ethereum into qt5.4
Diffstat (limited to 'rpc/message.go')
-rw-r--r-- | rpc/message.go | 82 |
1 files changed, 78 insertions, 4 deletions
diff --git a/rpc/message.go b/rpc/message.go index caf50a6c0..05f66ee95 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -20,6 +20,9 @@ import ( "bytes" "encoding/json" "errors" + "fmt" + + "github.com/ethereum/go-ethereum/state" ) const ( @@ -56,6 +59,28 @@ type RpcRequest struct { Params []json.RawMessage `json:"params"` } +func NewErrorResponse(msg string) error { + return errors.New(msg) +} + +func NewErrorResponseWithError(msg string, err error) error { + return fmt.Errorf("%s: %v", msg, err) +} + +func (req *RpcRequest) ToSha3Args() (*Sha3Args, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(Sha3Args) + r := bytes.NewReader(req.Params[0]) + if err := json.NewDecoder(r).Decode(args); err != nil { + return nil, NewErrorResponse(ErrorDecodeArgs) + } + rpclogger.DebugDetailf("%T %v", args, args) + return args, nil +} + func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) { if len(req.Params) < 1 { return nil, NewErrorResponse(ErrorArguments) @@ -72,7 +97,7 @@ func (req *RpcRequest) ToGetBlockArgs() (*GetBlockArgs, error) { } func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { - if len(req.Params) < 7 { + if len(req.Params) < 1 { return nil, NewErrorResponse(ErrorArguments) } @@ -80,7 +105,7 @@ func (req *RpcRequest) ToNewTxArgs() (*NewTxArgs, error) { r := bytes.NewReader(req.Params[0]) err := json.NewDecoder(r).Decode(args) if err != nil { - return nil, NewErrorResponse(ErrorDecodeArgs) + return nil, NewErrorResponseWithError(ErrorDecodeArgs, err) } rpclogger.DebugDetailf("%T %v", args, args) return args, nil @@ -162,6 +187,55 @@ func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { return args, nil } -func NewErrorResponse(msg string) error { - return errors.New(msg) +func (req *RpcRequest) ToFilterArgs() (*FilterOptions, error) { + if len(req.Params) < 1 { + return nil, NewErrorResponse(ErrorArguments) + } + + args := new(FilterOptions) + r := bytes.NewReader(req.Params[0]) + err := json.NewDecoder(r).Decode(args) + if err != nil { + return nil, NewErrorResponse(ErrorDecodeArgs) + } + rpclogger.DebugDetailf("%T %v", args, args) + return args, nil +} + +func (req *RpcRequest) ToFilterChangedArgs() (int, error) { + if len(req.Params) < 1 { + return 0, NewErrorResponse(ErrorArguments) + } + + var id int + r := bytes.NewReader(req.Params[0]) + err := json.NewDecoder(r).Decode(&id) + if err != nil { + return 0, NewErrorResponse(ErrorDecodeArgs) + } + rpclogger.DebugDetailf("%T %v", id, id) + return id, nil +} + +type Log struct { + Address string `json:"address"` + Topics []string `json:"topics"` + Data string `json:"data"` +} + +func toLogs(logs state.Logs) (ls []Log) { + ls = make([]Log, len(logs)) + + for i, log := range logs { + var l Log + l.Topics = make([]string, len(log.Topics())) + l.Address = toHex(log.Address()) + l.Data = toHex(log.Data()) + for j, topic := range log.Topics() { + l.Topics[j] = toHex(topic) + } + ls[i] = l + } + + return } |