synapsecns / sanguine

Synapse Monorepo
MIT License
38 stars 29 forks source link

[Scribe] Query Receipts/Txes by Sender #1186

Open trajan0x opened 1 year ago

trajan0x commented 1 year ago

It'd be nice if query receipts/txes could by queried by sender and sorted asc/descending by nonce.

Let's also make sure we add a comment noting that this will only contain tracked txes by sender

greptile-apps[bot] commented 3 months ago

Implementation Steps

  1. Update GraphQL Schema

    • Modify /services/scribe/graphql/server/graph/schema/queries.graphql to include sender and sort_by_nonce parameters for transactions and receipts queries:
      type Query {
      transactions(
      tx_hash: String
      chain_id: Int!
      block_number: Int
      block_hash: String
      confirmed: Boolean
      sender: String
      sort_by_nonce: Boolean = false
      page: Int!
      ): [Transaction]
      receipts(
      chain_id: Int!
      tx_hash: String
      contract_address: String
      block_hash: String
      block_number: Int
      tx_index: Int
      confirmed: Boolean
      sender: String
      sort_by_nonce: Boolean = false
      page: Int!
      ): [Receipt]
      }
  2. Update Client Queries

    • Modify /services/scribe/graphql/client/queries/queries.graphql to include sender and sort_by_nonce parameters:
      query GetTransactions($chain_id: Int!, $page: Int!, $sender: String, $sort_by_nonce: Boolean = false) {
      response: transactions(chain_id: $chain_id, page: $page, sender: $sender, sort_by_nonce: $sort_by_nonce) {
      ...
      }
      }
      query GetReceipts($chain_id: Int!, $page: Int!, $sender: String, $sort_by_nonce: Boolean = false) {
      response: receipts(chain_id: $chain_id, page: $page, sender: $sender, sort_by_nonce: $sort_by_nonce) {
      ...
      }
      }
  3. Update Resolver Functions

    • Modify /services/scribe/graphql/server/graph/utils.go to handle the new parameters in the resolver functions:
      func (r Resolver) RetrieveTransactions(ctx context.Context, chainID uint32, sender *string, sortByNonce bool, page int) ([]*model.Transaction, error) {
      // Implement logic to query transactions by sender and sort by nonce
      }
      func (r Resolver) RetrieveReceipts(ctx context.Context, chainID uint32, sender *string, sortByNonce bool, page int) ([]*model.Receipt, error) {
      // Implement logic to query receipts by sender and sort by nonce
      }
  4. Update Database Query Functions

    • Modify /services/scribe/db/datastore/sql/base/receipt.go to include sender and sort by nonce logic:
      func (s Store) RetrieveReceiptsWithFilter(ctx context.Context, receiptFilter db.ReceiptFilter, sender *string, sortByNonce bool, page int) ([]types.Receipt, error) {
      // Implement logic to filter by sender and sort by nonce
      }
      func (s Store) RetrieveTransactionsWithFilter(ctx context.Context, txFilter db.TxFilter, sender *string, sortByNonce bool, page int) ([]types.Transaction, error) {
      // Implement logic to filter by sender and sort by nonce
      }

Note

References

/services/scribe/graphql/server/graph/schema/queries.graphql /services/scribe/graphql/server/graph/schema/types.graphql /services/scribe/graphql/client/queries/queries.graphql /services/scribe/graphql/server/graph/utils.go /services/scribe/db/datastore/sql/base/receipt.go /services/scribe/graphql/client /services/scribe/graphql/server/graph/model/models_gen.go /services/scribe/api/resolver_test.go

Ask Greptile