waitForTransaction method

Future<Map<String, dynamic>> waitForTransaction(
  1. String txHash, {
  2. int confirmations = 1,
  3. Duration timeout = const Duration(minutes: 5),
})

Implementation

Future<Map<String, dynamic>> waitForTransaction(
  String txHash, {
  int confirmations = 1,
  Duration timeout = const Duration(minutes: 5),
}) async {
  final deadline = DateTime.now().add(timeout);
  while (DateTime.now().isBefore(deadline)) {
    final receipt = await reader.getTransactionReceipt(txHash);
    if (receipt != null) {
      if (confirmations <= 1) return receipt;
      final receiptBlock = receipt['blockNumber'] as String?;
      if (receiptBlock != null) {
        final receiptNum =
            BigInt.parse(receiptBlock.substring(2), radix: 16);
        final currentBlock = await reader.getBlockNumber();
        if (currentBlock - receiptNum + BigInt.one >=
            BigInt.from(confirmations)) {
          return receipt;
        }
      }
    }
    await Future<void>.delayed(const Duration(seconds: 2));
  }
  throw TimeoutException(
    'Transaction $txHash not confirmed within $timeout',
  );
}