From 4d1873eb65574779bdc1b172b727ec08af170c11 Mon Sep 17 00:00:00 2001 From: prathamesh0 Date: Thu, 3 Nov 2022 11:41:29 +0530 Subject: [PATCH] Use block number when fetching a tx by hash --- pkg/eth/cid_retriever.go | 15 ++++++++++----- pkg/graphql/graphql.go | 5 +++-- pkg/graphql/graphql_test.go | 2 +- pkg/graphql/schema.go | 2 +- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/pkg/eth/cid_retriever.go b/pkg/eth/cid_retriever.go index c9d65087..1ef56aae 100644 --- a/pkg/eth/cid_retriever.go +++ b/pkg/eth/cid_retriever.go @@ -712,7 +712,7 @@ func (ecr *CIDRetriever) RetrieveHeaderAndTxCIDsByBlockNumber(blockNumber int64) return headerCIDs, nil } -// RetrieveHeaderAndTxCIDsByBlockHash retrieves header CID and their associated tx CIDs by block hash +// RetrieveHeaderAndTxCIDsByBlockHash retrieves header CID and their associated tx CIDs by block hash (and optionally block number) func (ecr *CIDRetriever) RetrieveHeaderAndTxCIDsByBlockHash(blockHash common.Hash, blockNumber *big.Int) (HeaderCIDRecord, error) { log.Debug("retrieving header cid and tx cids for block hash ", blockHash.String()) @@ -743,15 +743,20 @@ func (ecr *CIDRetriever) RetrieveHeaderAndTxCIDsByBlockHash(blockHash common.Has return headerCIDs[0], nil } -// RetrieveTxCIDByHash returns the tx for the given tx hash -func (ecr *CIDRetriever) RetrieveTxCIDByHash(txHash string) (TransactionCIDRecord, error) { +// RetrieveTxCIDByHash returns the tx for the given tx hash (and optionally block number) +func (ecr *CIDRetriever) RetrieveTxCIDByHash(txHash string, blockNumber *big.Int) (TransactionCIDRecord, error) { log.Debug("retrieving tx cid for tx hash ", txHash) var txCIDs []TransactionCIDRecord - err := ecr.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))", txHash).Error + var err error + if blockNumber != nil { + err = ecr.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number)) AND transaction_cids.block_number = ?", txHash, blockNumber.Int64()).Error + } else { + err = ecr.gormDB.Joins("IPLD").Find(&txCIDs, "tx_hash = ? AND transaction_cids.header_id = (SELECT canonical_header_hash(transaction_cids.block_number))", txHash).Error + } if err != nil { - log.Error("header cid retrieval error") + log.Error("tx retrieval error") return TransactionCIDRecord{}, err } diff --git a/pkg/graphql/graphql.go b/pkg/graphql/graphql.go index 8b4e1972..2a930f76 100644 --- a/pkg/graphql/graphql.go +++ b/pkg/graphql/graphql.go @@ -1353,9 +1353,10 @@ func (r *Resolver) AllEthHeaderCids(ctx context.Context, args struct { } func (r *Resolver) EthTransactionCidByTxHash(ctx context.Context, args struct { - TxHash string + TxHash string + BlockNumber *BigInt }) (*EthTransactionCID, error) { - txCID, err := r.backend.Retriever.RetrieveTxCIDByHash(args.TxHash) + txCID, err := r.backend.Retriever.RetrieveTxCIDByHash(args.TxHash, args.BlockNumber.ToInt()) if err != nil { return nil, err diff --git a/pkg/graphql/graphql_test.go b/pkg/graphql/graphql_test.go index f52c9be0..7dfc3185 100644 --- a/pkg/graphql/graphql_test.go +++ b/pkg/graphql/graphql_test.go @@ -311,7 +311,7 @@ var _ = Describe("GraphQL", func() { ethTransactionCIDResp, err := client.EthTransactionCIDByTxHash(ctx, txHash) Expect(err).ToNot(HaveOccurred()) - txCID, err := backend.Retriever.RetrieveTxCIDByHash(txHash) + txCID, err := backend.Retriever.RetrieveTxCIDByHash(txHash, nil) Expect(err).ToNot(HaveOccurred()) compareEthTxCID(*ethTransactionCIDResp, txCID) diff --git a/pkg/graphql/schema.go b/pkg/graphql/schema.go index 9e09a359..14c5eb0e 100644 --- a/pkg/graphql/schema.go +++ b/pkg/graphql/schema.go @@ -349,6 +349,6 @@ const schema string = ` allEthHeaderCids(condition: EthHeaderCidCondition): EthHeaderCidsConnection # PostGraphile alternative to get transactions using transaction hash. - ethTransactionCidByTxHash(txHash: String!): EthTransactionCid + ethTransactionCidByTxHash(txHash: String!, blockNumber: BigInt): EthTransactionCid } `