queryTransactionsBySender method

Future<SenderTransactionPage> queryTransactionsBySender(
  1. String sender, {
  2. int first = 20,
  3. String? after,
})

Query transaction digests filtered by sender address.

Returns the page of digests and the end cursor. Full result hydration is left to callers via the gRPC getTransaction once digests are known.

Implementation

Future<SenderTransactionPage> queryTransactionsBySender(
  String sender, {
  int first = 20,
  String? after,
}) async {
  // Fetch enough per transaction to render a wallet activity row: timestamp,
  // status, and the balance deltas (amount / coin / owner).
  const q = r'''
    query ($sender: SuiAddress!, $first: Int!, $after: String) {
      transactions(
        first: $first
        after: $after
        filter: { sentAddress: $sender }
      ) {
        pageInfo { hasNextPage endCursor }
        nodes {
          digest
          effects {
            timestamp
            status
            balanceChanges {
              nodes { amount coinType { repr } owner { address } }
            }
          }
        }
      }
    }
  ''';
  final data = await transport.query(q, variables: {
    'sender': sender,
    'first': first,
    if (after != null) 'after': after,
  });
  final tx = data['transactions'] as Map<String, dynamic>;
  final txs = (tx['nodes'] as List)
      .map((n) => SenderTransaction._fromNode(n as Map<String, dynamic>))
      .toList();
  final pageInfo = tx['pageInfo'] as Map<String, dynamic>;
  return SenderTransactionPage(
    transactions: txs,
    hasNextPage: pageInfo['hasNextPage'] as bool,
    endCursor: pageInfo['endCursor'] as String?,
  );
}