confirmSignatureStatus method

Future<SignatureNotification> confirmSignatureStatus(
  1. TransactionSignature signature, {
  2. GetSignatureStatusesConfig? config,
  3. Commitment? commitment,
  4. int? minContext,
})

Confirms a transaction by fetching the status of signature and comparing its confirmationStatus to commitment.

The signature is considered confirmed if it has a confirmationStatus level >= to commitment and the slot in which it was processed is >= minContext.

Implementation

Future<SignatureNotification> confirmSignatureStatus(
  final TransactionSignature signature, {
  final GetSignatureStatusesConfig? config,
  final Commitment? commitment,
  final int? minContext,
}) async {
  SignatureStatus? status =
      await getSignatureStatus(signature, config: config);
  while (status != null && minContext != null && status.slot < minContext) {
    final int slots = minContext - status.slot;
    final int delay = slots * millisecondsPerSlot.floor();
    await Future.delayed(Duration(milliseconds: delay));
    status = await getSignatureStatus(signature, config: config);
  }
  if (status == null) {
    return const SignatureNotification(
      err: TransactionException(
        'Transaction signature status not found.',
      ),
    );
  }
  if (status.err != null) {
    return SignatureNotification(
      err: status.err,
    );
  }
  final Commitment commitmentLevel =
      commitment ?? this.commitment ?? Commitment.finalized;
  return SignatureNotification(
    err: commitmentLevel.compareTo(status.confirmationStatus) > 0
        ? const TransactionException(
            'Transaction signature status has not been confirmed.')
        : null,
  );
}