Allow latest/pending in filter options
This commit is contained in:
parent
3cf51d5479
commit
5757f547a6
62
rpc/args.go
62
rpc/args.go
@ -331,42 +331,6 @@ func (args *Sha3Args) UnmarshalJSON(b []byte) (err error) {
|
|||||||
return nil
|
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 {
|
type FilterOptions struct {
|
||||||
Earliest int64
|
Earliest int64
|
||||||
Latest int64
|
Latest int64
|
||||||
@ -378,8 +342,8 @@ type FilterOptions struct {
|
|||||||
|
|
||||||
func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
|
func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
|
||||||
var obj []struct {
|
var obj []struct {
|
||||||
FromBlock string `json:"fromBlock"`
|
FromBlock interface{} `json:"fromBlock"`
|
||||||
ToBlock string `json:"toBlock"`
|
ToBlock interface{} `json:"toBlock"`
|
||||||
Limit string `json:"limit"`
|
Limit string `json:"limit"`
|
||||||
Offset string `json:"offset"`
|
Offset string `json:"offset"`
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
@ -394,8 +358,26 @@ func (args *FilterOptions) UnmarshalJSON(b []byte) (err error) {
|
|||||||
return NewInsufficientParamsError(len(obj), 1)
|
return NewInsufficientParamsError(len(obj), 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
args.Earliest = int64(common.Big(obj[0].FromBlock).Int64())
|
fromstr, ok := obj[0].FromBlock.(string)
|
||||||
args.Latest = int64(common.Big(obj[0].ToBlock).Int64())
|
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.Max = int(common.Big(obj[0].Limit).Int64())
|
||||||
args.Skip = int(common.Big(obj[0].Offset).Int64())
|
args.Skip = int(common.Big(obj[0].Offset).Int64())
|
||||||
args.Address = obj[0].Address
|
args.Address = obj[0].Address
|
||||||
|
@ -286,6 +286,29 @@ func TestFilterOptions(t *testing.T) {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFilterOptionsWords(t *testing.T) {
|
||||||
|
input := `[{
|
||||||
|
"fromBlock": "latest",
|
||||||
|
"toBlock": "pending"
|
||||||
|
}]`
|
||||||
|
expected := new(FilterOptions)
|
||||||
|
expected.Earliest = 0
|
||||||
|
expected.Latest = -1
|
||||||
|
|
||||||
|
args := new(FilterOptions)
|
||||||
|
if err := json.Unmarshal([]byte(input), &args); err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if expected.Earliest != args.Earliest {
|
||||||
|
t.Errorf("Earliest shoud be %#v but is %#v", expected.Earliest, args.Earliest)
|
||||||
|
}
|
||||||
|
|
||||||
|
if expected.Latest != args.Latest {
|
||||||
|
t.Errorf("Latest shoud be %#v but is %#v", expected.Latest, args.Latest)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDbArgs(t *testing.T) {
|
func TestDbArgs(t *testing.T) {
|
||||||
input := `["0x74657374","0x6b6579","0x6d79537472696e67"]`
|
input := `["0x74657374","0x6b6579","0x6d79537472696e67"]`
|
||||||
expected := new(DbArgs)
|
expected := new(DbArgs)
|
||||||
|
Loading…
Reference in New Issue
Block a user