Transaction states
You can cancel a transaction in
INITIATED, QUEUED, or SENT. You can
accelerate a transaction in SENT or STUCK.
CONFIRMED may be omitted or arrive out of order. Instant-finality
blockchains such as Arc skip it entirely (SENT → COMPLETE); on other
blockchains, webhook delivery isn’t ordered, so CONFIRMED may arrive after
COMPLETE or not at all. Treat both as inclusion signals.Transaction lifecycle
Challenge states
Challenges are the user approval flow for user-controlled wallets. A challenge inFAILED has errorCode and errorMessage fields describing the failure.
See Wallets API error codes for the
errorCode values.
Challenge lifecycle
Transaction errors
When a transaction entersFAILED, errorReason categorizes the cause and
errorDetails (when present) provides the specific message. For the numeric
error codes returned in API responses, see
Wallets API error codes.
Estimation error details
When a transaction fails withESTIMATION_ERROR, errorDetails provides the
specific reason.
Insufficient balance
The wallet or contract doesn’t have enough tokens to complete the transaction.Blocklist and access control
An account is restricted from performing the requested action.Allowance and approval
Token spending approvals are missing or insufficient.Signature and authentication
The cryptographic signature is invalid or expired.Smart account (ERC-4337)
Account abstraction wallets have specific failure modes.Invalid parameters
Transaction parameters are incorrect.Timeout and execution
Generic errors during transaction execution.Troubleshooting failed transactions
If the cause of the failure isn’t obvious fromerrorReason or errorDetails,
work through these checks:
- Verify contract addresses. Confirm the correct contract on the correct blockchain.
- Verify transaction parameters. Recipient addresses are valid and non-zero, token amounts meet minimums, and ABI signatures match the function being called.
- Check balances and allowances. The wallet has enough of the token being
transferred; for ERC-20 spending, the contract has enough allowance from
approve(). - Review contract state. The contract isn’t paused, and role-based access requirements are satisfied.
- Verify authorization. The calling wallet has the roles required by the contract. Check blocklist status when working with regulated tokens such as USDC.
- Retry time-sensitive operations. Regenerate expired signatures or nonces. Retry after a short delay if the error suggests the RPC node was temporarily unavailable.