eth_getLogs use FilterCriteria not FilterQuery #46

Merged
telackey merged 1 commits from get_logs into master 2021-04-13 15:26:17 +00:00
2 changed files with 33 additions and 35 deletions

View File

@ -25,12 +25,12 @@ import (
"math/big" "math/big"
"time" "time"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth/filters"
"github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
@ -506,21 +506,19 @@ func (pea *PublicEthAPI) remoteGetTransactionReceipt(ctx context.Context, hash c
// GetLogs returns logs matching the given argument that are stored within the state. // GetLogs returns logs matching the given argument that are stored within the state.
// //
// https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getlogs // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_getlogs
func (pea *PublicEthAPI) GetLogs(ctx context.Context, crit ethereum.FilterQuery) ([]*types.Log, error) { func (pea *PublicEthAPI) GetLogs(ctx context.Context, crit filters.FilterCriteria) ([]*types.Log, error) {
logs, err := pea.localGetLogs(ctx, crit) logs, err := pea.localGetLogs(crit)
if err != nil && pea.rpc != nil { if err != nil && pea.rpc != nil {
if arg, err := toFilterArg(crit); err == nil { var res []*types.Log
var res []*types.Log if err := pea.rpc.CallContext(ctx, &res, "eth_getLogs", crit); err == nil {
if err := pea.rpc.CallContext(ctx, &res, "eth_getLogs", arg); err == nil { go pea.writeStateDiffWithCriteria(crit)
go pea.writeStateDiffWithCriteria(crit) return res, nil
return res, nil
}
} }
} }
return logs, err return logs, err
} }
func (pea *PublicEthAPI) localGetLogs(ctx context.Context, crit ethereum.FilterQuery) ([]*types.Log, error) { func (pea *PublicEthAPI) localGetLogs(crit filters.FilterCriteria) ([]*types.Log, error) {
// TODO: this can be optimized away from using the old cid retriever and ipld fetcher interfaces // TODO: this can be optimized away from using the old cid retriever and ipld fetcher interfaces
// Convert FilterQuery into ReceiptFilter // Convert FilterQuery into ReceiptFilter
addrStrs := make([]string, len(crit.Addresses)) addrStrs := make([]string, len(crit.Addresses))
@ -890,7 +888,7 @@ func (pea *PublicEthAPI) writeStateDiffAtOrFor(blockNrOrHash rpc.BlockNumberOrHa
} }
// writeStateDiffWithCriteria calls out to the proxy statediffing geth client to fill in a gap in the index // writeStateDiffWithCriteria calls out to the proxy statediffing geth client to fill in a gap in the index
func (pea *PublicEthAPI) writeStateDiffWithCriteria(crit ethereum.FilterQuery) { func (pea *PublicEthAPI) writeStateDiffWithCriteria(crit filters.FilterCriteria) {
// short circuit right away if the proxy doesn't support diffing // short circuit right away if the proxy doesn't support diffing
if !pea.supportsStateDiff { if !pea.supportsStateDiff {
return return

View File

@ -20,11 +20,11 @@ import (
"context" "context"
"strconv" "strconv"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/eth/filters"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
. "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo"
@ -554,7 +554,7 @@ var _ = Describe("API", func() {
Describe("eth_getLogs", func() { Describe("eth_getLogs", func() {
It("Retrieves receipt logs that match the provided topics within the provided range", func() { It("Retrieves receipt logs that match the provided topics within the provided range", func() {
crit := ethereum.FilterQuery{ crit := filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x04"), common.HexToHash("0x04"),
@ -568,7 +568,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x04"), common.HexToHash("0x04"),
@ -583,7 +583,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(2)) Expect(len(logs)).To(Equal(2))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x04"), common.HexToHash("0x04"),
@ -598,7 +598,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x04"), common.HexToHash("0x04"),
@ -614,7 +614,7 @@ var _ = Describe("API", func() {
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
Expect(len(logs)).To(Equal(0)) Expect(len(logs)).To(Equal(0))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x04"), common.HexToHash("0x04"),
@ -631,7 +631,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x05"), common.HexToHash("0x05"),
@ -648,7 +648,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x05"), common.HexToHash("0x05"),
@ -666,7 +666,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
common.HexToHash("0x04"), common.HexToHash("0x04"),
@ -685,7 +685,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(2)) Expect(len(logs)).To(Equal(2))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{}, {},
{ {
@ -700,7 +700,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{}, {},
{ {
@ -715,7 +715,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
Topics: [][]common.Hash{}, Topics: [][]common.Hash{},
FromBlock: test_helpers.MockBlock.Number(), FromBlock: test_helpers.MockBlock.Number(),
ToBlock: test_helpers.MockBlock.Number(), ToBlock: test_helpers.MockBlock.Number(),
@ -728,7 +728,7 @@ var _ = Describe("API", func() {
It("Uses the provided blockhash if one is provided", func() { It("Uses the provided blockhash if one is provided", func() {
hash := test_helpers.MockBlock.Hash() hash := test_helpers.MockBlock.Hash()
crit := ethereum.FilterQuery{ crit := filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{}, {},
@ -742,7 +742,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
@ -758,7 +758,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{}, {},
@ -772,7 +772,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
@ -788,7 +788,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
@ -803,7 +803,7 @@ var _ = Describe("API", func() {
Expect(err).ToNot(HaveOccurred()) Expect(err).ToNot(HaveOccurred())
Expect(len(logs)).To(Equal(0)) Expect(len(logs)).To(Equal(0))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
@ -820,7 +820,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(1)) Expect(len(logs)).To(Equal(1))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
@ -834,7 +834,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(2)) Expect(len(logs)).To(Equal(2))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{ Topics: [][]common.Hash{
{ {
@ -852,7 +852,7 @@ var _ = Describe("API", func() {
Expect(len(logs)).To(Equal(2)) Expect(len(logs)).To(Equal(2))
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2}))
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Topics: [][]common.Hash{}, Topics: [][]common.Hash{},
} }
@ -864,7 +864,7 @@ var _ = Describe("API", func() {
It("Filters on contract address if any are provided", func() { It("Filters on contract address if any are provided", func() {
hash := test_helpers.MockBlock.Hash() hash := test_helpers.MockBlock.Hash()
crit := ethereum.FilterQuery{ crit := filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Addresses: []common.Address{ Addresses: []common.Address{
test_helpers.Address, test_helpers.Address,
@ -886,7 +886,7 @@ var _ = Describe("API", func() {
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1}))
hash = test_helpers.MockBlock.Hash() hash = test_helpers.MockBlock.Hash()
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Addresses: []common.Address{ Addresses: []common.Address{
test_helpers.Address, test_helpers.Address,
@ -909,7 +909,7 @@ var _ = Describe("API", func() {
Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2})) Expect(logs).To(Equal([]*types.Log{test_helpers.MockLog1, test_helpers.MockLog2}))
hash = test_helpers.MockBlock.Hash() hash = test_helpers.MockBlock.Hash()
crit = ethereum.FilterQuery{ crit = filters.FilterCriteria{
BlockHash: &hash, BlockHash: &hash,
Addresses: []common.Address{ Addresses: []common.Address{
test_helpers.Address, test_helpers.Address,