diff --git a/pkg/graphql/client.go b/pkg/graphql/client.go index 5954060a..1040b1bc 100644 --- a/pkg/graphql/client.go +++ b/pkg/graphql/client.go @@ -45,10 +45,14 @@ func NewClient(endpoint string) *Client { return &Client{client: client} } -func (c *Client) GetLogs(ctx context.Context, hash common.Hash, address common.Address) ([]LogResponse, error) { - getLogsQuery := fmt.Sprintf(` - query{ - getLogs(blockHash: "%s", contract: "%s") { +func (c *Client) GetLogs(ctx context.Context, hash common.Hash, address *common.Address) ([]LogResponse, error) { + params := fmt.Sprintf(`blockHash: "%s"`, hash.String()) + if address != nil { + params += fmt.Sprintf(`, contract: "%s"`, address.String()) + } + + getLogsQuery := fmt.Sprintf(`query{ + getLogs(%s) { data topics transaction { @@ -57,8 +61,7 @@ func (c *Client) GetLogs(ctx context.Context, hash common.Hash, address common.A status receiptCID } - } - `, hash.String(), address.String()) + }`, params) req := gqlclient.NewRequest(getLogsQuery) req.Header.Set("Cache-Control", "no-cache") diff --git a/pkg/graphql/graphql.go b/pkg/graphql/graphql.go index d6029f91..d12838e2 100644 --- a/pkg/graphql/graphql.go +++ b/pkg/graphql/graphql.go @@ -1025,7 +1025,11 @@ func (r *Resolver) GetLogs(ctx context.Context, args struct { BlockHash common.Hash Contract *common.Address }) (*[]*Log, error) { - ret := make([]*Log, 0, 10) + + var filter eth.ReceiptFilter + if args.Contract != nil { + filter.LogAddresses = []string{args.Contract.String()} + } // Begin tx tx, err := r.backend.DB.Beginx() @@ -1033,10 +1037,6 @@ func (r *Resolver) GetLogs(ctx context.Context, args struct { return nil, err } - filter := eth.ReceiptFilter{ - LogAddresses: []string{args.Contract.String()}, - } - filteredLogs, err := r.backend.Retriever.RetrieveFilteredGQLLogs(tx, filter, &args.BlockHash) if err != nil { return nil, err @@ -1051,6 +1051,7 @@ func (r *Resolver) GetLogs(ctx context.Context, args struct { return nil, err } + ret := make([]*Log, 0, 10) for _, l := range rctLog { ret = append(ret, &Log{ backend: r.backend, diff --git a/pkg/graphql/graphql_test.go b/pkg/graphql/graphql_test.go index afd01694..c3ca3b70 100644 --- a/pkg/graphql/graphql_test.go +++ b/pkg/graphql/graphql_test.go @@ -183,7 +183,7 @@ var _ = Describe("GraphQL", func() { Describe("eth_getLogs", func() { It("Retrieves logs that matches the provided blockHash and contract address", func() { - logs, err := client.GetLogs(ctx, blockHash, contractAddress) + logs, err := client.GetLogs(ctx, blockHash, &contractAddress) Expect(err).ToNot(HaveOccurred()) expectedLogs := []graphql.LogResponse{ @@ -200,7 +200,7 @@ var _ = Describe("GraphQL", func() { }) It("Retrieves logs for the failed receipt status that matches the provided blockHash and another contract address", func() { - logs, err := client.GetLogs(ctx, blockHash, test_helpers.AnotherAddress2) + logs, err := client.GetLogs(ctx, blockHash, &test_helpers.AnotherAddress2) Expect(err).ToNot(HaveOccurred()) expectedLogs := []graphql.LogResponse{ @@ -216,8 +216,14 @@ var _ = Describe("GraphQL", func() { Expect(logs).To(Equal(expectedLogs)) }) + It("Retrieves all the logs for the receipt that matches the provided blockHash and nil contract address", func() { + logs, err := client.GetLogs(ctx, blockHash, nil) + Expect(err).ToNot(HaveOccurred()) + Expect(len(logs)).To(Equal(6)) + }) + It("Retrieves logs with random hash", func() { - logs, err := client.GetLogs(ctx, randomHash, contractAddress) + logs, err := client.GetLogs(ctx, randomHash, &contractAddress) Expect(err).ToNot(HaveOccurred()) Expect(len(logs)).To(Equal(0)) })