tx Helpers

There are a number of helper functions to check the status of a transaction. See useTx for a full list of Transaction state values and descriptions.

shouldDisable

This function that returns true if a transaction state is DryRun, PendingSignature, or Broadcast. It is good practice to disable a button that triggers a transaction unless it has fully resolved. In a successful transaction, Broadcast state comes immediately before InBlock, which is when contracts emit events and the transaction is most likely to succeed. See shouldDisableStrict if you want to disable a button until it is Finalized, which may be more appropriate for high stake dApps.

import { shouldDisable } from 'useink';

export const Flipper = (contract) => {
    const flipTx = useTx(contract, 'flip');

    return (
        <button
            onClick={flipTx.signAndSend}
            disabled={shouldDisable(flipTx)}
        >
            {shouldDisable(flipTx) ? 'Flipping' : 'Flip!'}
        </button>
    )
}

shouldDisableStrict

This function that returns true if a transaction state is DryRun, PendingSignature, Broadcast, or InBlock. It is good practice to disable a button that triggers a transaction unless it has fully resolved.

import { shouldDisableStrict } from 'useink';

//... React code omitted
<button
    onClick={flipTx.signAndSend}
    disabled={shouldDisableStrict(flipTx)}
>
    {shouldDisableStrict(flipTx) ? 'Flipping' : 'Flip!'}
</button>

hasAny

Returns a boolean if the transaction status has any of the arguments you pass in. Arguments must be of type Status;

import { hasAny } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(hasAny(['Broadcast', 'Finalized']));

isPendingSignature

Returns a boolean if the transaction status is PendingSignature. PendingSignature is set when you call signAndSend() on a transaction, which opens up a browser wallet extension modal for a user to sign. Once the transaction is signed the state will change to Broadcast.

import { isPendingSignature } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');
flipTx.signAndSend();

console.log(isPendingSignature(flipTx));

isNone

Returns a boolean if the transaction status is None.

import { isNone } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isNone(flipTx));

isDryRun

Returns true if the transaction status is DryRun. DryRun occurs immediately before a transaction is sent to verify if it will succeed.

import { isDryRun } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isDryRun(flipTx));

isErrored

Returns a boolean if the transaction status is Errored, which means that there was an error in JavaScript somewhere.

import { isErrored } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isErrored(flipTx));

isFuture

Returns a boolean if the transaction status is Future, which means that the transaction is moving in to the transaction pool.

import { isFuture } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isFuture(flipTx));

isReady

Returns a boolean if the transaction status is Ready, which means that the transaction is ready to be entered in to the transaction pool.

import { isReady } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isFuture(flipTx));

isBroadcast

Returns a boolean if the transaction status is Broadcast. This is the point when events are emitted.

import { isBroadcast } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isBroadcast(flipTx));

isInBlock

Returns a boolean if the transaction status is InBlock. At this point it is very likely that the transaction will succeed. Most dApps can optimistically assume that the transaction is a success, but you may want to wait until Finalized stutus if you are building a high stakes dApp with monetary value so you can offer 100% guarantee that a transaction did succeed.

import { isInBlock } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isInBlock(flipTx));

isInvalid

Returns a boolean if the transaction status is Invalid.

import { isInvalid } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isInvalid(flipTx));

isUsurped

Returns a boolean if the transaction status is Usurped.

import { isUsurped } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isUsurped(flipTx));

isDropped

Returns a boolean if the transaction status is Usurped.

import { isDropped } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isDropped(flipTx));

isFinalized

Returns a boolean if the transaction status is Finalized. This status guarantees that a transaction completed.

import { isFinalized } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isFinalized(flipTx));

isFinalityTimeout

Returns a boolean if the transaction status is FinalityTimeout.

import { isFinalityTimeout } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isFinalityTimeout(flipTx));

isRetracted

Returns a boolean if the transaction status is Retracted.

import { isRetracted } from 'useink';

//... React code omitted
const flipTx = useTx(contract, 'flip');

console.log(isRetracted(flipTx));

Last updated

Was this helpful?