diff options
author | obscuren <geffobscura@gmail.com> | 2015-01-29 23:52:00 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-01-29 23:52:00 +0800 |
commit | 6488a392a347d0d47212fdc78386e3e0e5841d7d (patch) | |
tree | ed95cdf67028b2b60ddc7850728abe9a391796bf /rpc/message.go | |
parent | ddf17d93acf92ef18b0134f19f22220362e06bad (diff) | |
download | dexon-6488a392a347d0d47212fdc78386e3e0e5841d7d.tar.gz dexon-6488a392a347d0d47212fdc78386e3e0e5841d7d.tar.zst dexon-6488a392a347d0d47212fdc78386e3e0e5841d7d.zip |
Reimplemented message filters for rpc calls
Diffstat (limited to 'rpc/message.go')
-rw-r--r-- | rpc/message.go | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/rpc/message.go b/rpc/message.go index e9f47634f..05f66ee95 100644 --- a/rpc/message.go +++ b/rpc/message.go @@ -21,6 +21,8 @@ import ( "encoding/json" "errors" "fmt" + + "github.com/ethereum/go-ethereum/state" ) const ( @@ -184,3 +186,56 @@ func (req *RpcRequest) ToGetCodeAtArgs() (*GetCodeAtArgs, error) { rpclogger.DebugDetailf("%T %v", args, args) return args, nil } + +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 +} |