From 5757f547a6339c770a6d85ad067107d34878858f Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Mon, 16 Mar 2015 10:38:57 -0400 Subject: Allow latest/pending in filter options --- rpc/args.go | 62 ++++++++++++++++++++++--------------------------------------- 1 file changed, 22 insertions(+), 40 deletions(-) (limited to 'rpc/args.go') diff --git a/rpc/args.go b/rpc/args.go index 7ed482c30..9ec2ed8a4 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -331,42 +331,6 @@ func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) { return nil } -// type FilterArgs struct { -// FromBlock uint64 -// ToBlock uint64 -// Limit uint64 -// Offset uint64 -// Address string -// Topics []string -// } - -// func (args *FilterArgs) UnmarshalJSON(b []byte) (err error) { -// var obj []struct { -// FromBlock string `json:"fromBlock"` -// ToBlock string `json:"toBlock"` -// Limit string `json:"limit"` -// Offset string `json:"offset"` -// Address string `json:"address"` -// Topics []string `json:"topics"` -// } - -// if err = json.Unmarshal(b, &obj); err != nil { -// return errDecodeArgs -// } - -// if len(obj) < 1 { -// return errArguments -// } -// args.FromBlock = uint64(common.Big(obj[0].FromBlock).Int64()) -// args.ToBlock = uint64(common.Big(obj[0].ToBlock).Int64()) -// args.Limit = uint64(common.Big(obj[0].Limit).Int64()) -// args.Offset = uint64(common.Big(obj[0].Offset).Int64()) -// args.Address = obj[0].Address -// args.Topics = obj[0].Topics - -// return nil -// } - type FilterOptions struct { Earliest int64 Latest int64 @@ -378,8 +342,8 @@ type FilterOptions struct { func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) { var obj []struct { - FromBlock string `json:"fromBlock"` - ToBlock string `json:"toBlock"` + FromBlock interface{} `json:"fromBlock"` + ToBlock interface{} `json:"toBlock"` Limit string `json:"limit"` Offset string `json:"offset"` Address string `json:"address"` @@ -394,8 +358,26 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) { return NewInsufficientParamsError(len(obj), 1) } - args.Earliest = int64(common.Big(obj[0].FromBlock).Int64()) - args.Latest = int64(common.Big(obj[0].ToBlock).Int64()) + fromstr, ok := obj[0].FromBlock.(string) + if ok { + if fromstr == "latest" { + args.Earliest = 0 + } else { + args.Earliest = int64(common.Big(obj[0].FromBlock.(string)).Int64()) + } + } + + tostr, ok := obj[0].ToBlock.(string) + if ok { + if tostr == "latest" { + args.Latest = 0 + } else if tostr == "pending" { + args.Latest = -1 + } else { + args.Latest = int64(common.Big(obj[0].ToBlock.(string)).Int64()) + } + } + args.Max = int(common.Big(obj[0].Limit).Int64()) args.Skip = int(common.Big(obj[0].Offset).Int64()) args.Address = obj[0].Address -- cgit v1.2.3 From 719effa7ecdef925a5a8fa61ac060e2ec5f0d612 Mon Sep 17 00:00:00 2001 From: Taylor Gerring Date: Mon, 16 Mar 2015 15:30:31 -0400 Subject: Return error when filter params are not strings --- rpc/args.go | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'rpc/args.go') diff --git a/rpc/args.go b/rpc/args.go index 9ec2ed8a4..fee44c4e0 100644 --- a/rpc/args.go +++ b/rpc/args.go @@ -359,23 +359,29 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) { } fromstr, ok := obj[0].FromBlock.(string) - if ok { - if fromstr == "latest" { - args.Earliest = 0 - } else { - args.Earliest = int64(common.Big(obj[0].FromBlock.(string)).Int64()) - } + if !ok { + return NewDecodeParamError("FromBlock is not a string") + } + + switch fromstr { + case "latest": + args.Earliest = 0 + default: + args.Earliest = int64(common.Big(obj[0].FromBlock.(string)).Int64()) } tostr, ok := obj[0].ToBlock.(string) - if ok { - if tostr == "latest" { - args.Latest = 0 - } else if tostr == "pending" { - args.Latest = -1 - } else { - args.Latest = int64(common.Big(obj[0].ToBlock.(string)).Int64()) - } + if !ok { + return NewDecodeParamError("ToBlock is not a string") + } + + switch tostr { + case "latest": + args.Latest = 0 + case "pending": + args.Latest = -1 + default: + args.Latest = int64(common.Big(obj[0].ToBlock.(string)).Int64()) } args.Max = int(common.Big(obj[0].Limit).Int64()) -- cgit v1.2.3