aboutsummaryrefslogtreecommitdiffstats
path: root/ethclient/ethclient.go
diff options
context:
space:
mode:
authortamirms <tamir@trello.com>2018-11-08 20:26:47 +0800
committerFelix Lange <fjl@users.noreply.github.com>2018-11-08 20:26:47 +0800
commitb16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9 (patch)
tree02a92c1f7669d11c66337e32abf5f7d0ad1d178b /ethclient/ethclient.go
parent9313fa63f959f8a5c3609c187120711a484a4c57 (diff)
downloaddexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.tar
dexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.tar.gz
dexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.tar.bz2
dexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.tar.lz
dexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.tar.xz
dexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.tar.zst
dexon-b16cc501a88eb7c36cfd8ee9be1c0c985ef4a7d9.zip
ethclient: include block hash from FilterQuery (#17996)
ethereum/go-ethereum#16734 introduced BlockHash to the FilterQuery struct. However, ethclient was not updated to include BlockHash in the actual RPC request.
Diffstat (limited to 'ethclient/ethclient.go')
-rw-r--r--ethclient/ethclient.go36
1 files changed, 26 insertions, 10 deletions
diff --git a/ethclient/ethclient.go b/ethclient/ethclient.go
index b40837c8c..f3163e19b 100644
--- a/ethclient/ethclient.go
+++ b/ethclient/ethclient.go
@@ -365,26 +365,42 @@ func (ec *Client) NonceAt(ctx context.Context, account common.Address, blockNumb
// FilterLogs executes a filter query.
func (ec *Client) FilterLogs(ctx context.Context, q ethereum.FilterQuery) ([]types.Log, error) {
var result []types.Log
- err := ec.c.CallContext(ctx, &result, "eth_getLogs", toFilterArg(q))
+ arg, err := toFilterArg(q)
+ if err != nil {
+ return nil, err
+ }
+ err = ec.c.CallContext(ctx, &result, "eth_getLogs", arg)
return result, err
}
// SubscribeFilterLogs subscribes to the results of a streaming filter query.
func (ec *Client) SubscribeFilterLogs(ctx context.Context, q ethereum.FilterQuery, ch chan<- types.Log) (ethereum.Subscription, error) {
- return ec.c.EthSubscribe(ctx, ch, "logs", toFilterArg(q))
+ arg, err := toFilterArg(q)
+ if err != nil {
+ return nil, err
+ }
+ return ec.c.EthSubscribe(ctx, ch, "logs", arg)
}
-func toFilterArg(q ethereum.FilterQuery) interface{} {
+func toFilterArg(q ethereum.FilterQuery) (interface{}, error) {
arg := map[string]interface{}{
- "fromBlock": toBlockNumArg(q.FromBlock),
- "toBlock": toBlockNumArg(q.ToBlock),
- "address": q.Addresses,
- "topics": q.Topics,
+ "address": q.Addresses,
+ "topics": q.Topics,
}
- if q.FromBlock == nil {
- arg["fromBlock"] = "0x0"
+ if q.BlockHash != nil {
+ arg["blockHash"] = *q.BlockHash
+ if q.FromBlock != nil || q.ToBlock != nil {
+ return nil, fmt.Errorf("cannot specify both BlockHash and FromBlock/ToBlock")
+ }
+ } else {
+ if q.FromBlock == nil {
+ arg["fromBlock"] = "0x0"
+ } else {
+ arg["fromBlock"] = toBlockNumArg(q.FromBlock)
+ }
+ arg["toBlock"] = toBlockNumArg(q.ToBlock)
}
- return arg
+ return arg, nil
}
// Pending State