Fix eth_newBlockFilter

This commit is contained in:
Taylor Gerring 2015-03-13 10:03:19 -04:00
parent d4ed66c83d
commit 0932f84383
2 changed files with 15 additions and 6 deletions

View File

@ -176,7 +176,7 @@ func (self *EthereumApi) UninstallFilter(id int, reply *interface{}) error {
return nil return nil
} }
func (self *EthereumApi) NewFilterString(args string, reply *interface{}) error { func (self *EthereumApi) NewFilterString(args *FilterStringArgs, reply *interface{}) error {
var id int var id int
filter := core.NewFilter(self.xeth().Backend()) filter := core.NewFilter(self.xeth().Backend())
@ -186,10 +186,14 @@ func (self *EthereumApi) NewFilterString(args string, reply *interface{}) error
self.logs[id].add(&state.StateLog{}) self.logs[id].add(&state.StateLog{})
} }
if args == "pending" {
switch args.Word {
case "pending":
filter.PendingCallback = callback filter.PendingCallback = callback
} else if args == "chain" { case "latest":
filter.BlockCallback = callback filter.BlockCallback = callback
default:
return NewValidationError("Word", "Must be `latest` or `pending`")
} }
id = self.filterManager.InstallFilter(filter) id = self.filterManager.InstallFilter(filter)
@ -692,7 +696,7 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
if err := json.Unmarshal(req.Params, &args); err != nil { if err := json.Unmarshal(req.Params, &args); err != nil {
return err return err
} }
return p.NewFilterString(args.Word, reply) return p.NewFilterString(args, reply)
case "eth_uninstallFilter": case "eth_uninstallFilter":
args := new(FilterIdArgs) args := new(FilterIdArgs)
if err := json.Unmarshal(req.Params, &args); err != nil { if err := json.Unmarshal(req.Params, &args); err != nil {

View File

@ -503,7 +503,7 @@ type FilterStringArgs struct {
} }
func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) { func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
var obj []string var obj []interface{}
r := bytes.NewReader(b) r := bytes.NewReader(b)
if err := json.NewDecoder(r).Decode(&obj); err != nil { if err := json.NewDecoder(r).Decode(&obj); err != nil {
return NewDecodeParamError(err.Error()) return NewDecodeParamError(err.Error())
@ -513,7 +513,12 @@ func (args *FilterStringArgs) UnmarshalJSON(b []byte) (err error) {
return NewInsufficientParamsError(len(obj), 1) return NewInsufficientParamsError(len(obj), 1)
} }
args.Word = obj[0] var argstr string
argstr, ok := obj[0].(string)
if !ok {
return NewDecodeParamError("Filter is not a string")
}
args.Word = argstr
return nil return nil
} }