Docs
Track and recover

Track a message

Follow a GMP message through each step, and find out why it stopped.

Every GMP message goes through the same steps, from the call on the source chain to execution on the destination chain. Axelarscan shows where a message is, and which step it's waiting on.

💡

Using an AI agent?

Copy this page with Copy Markdown at the top, and give it to your agent with the transaction hash or message ID. It can look up the message through the Axelarscan API and tell you where it's stuck and what to do. Review every transaction before it's signed, and don't paste private keys into a chat: let the agent use a wallet or keystore you control.

On Axelarscan

Search for the source transaction hash or the message ID on Axelarscan (testnet), or open https://axelarscan.io/gmp/<tx hash or message ID> directly.

A message page shows these steps:

StepWhat happened
SentThe source contract called the gateway.
Gas PaidGas was paid to the gas service. Shows Pay Gas if no payment was found.
ConfirmedAxelar verified the call on the source chain, after it reached finality.
ApprovedThe message was approved on the destination chain's gateway.
ExecutedThe destination contract's execute ran.

Messages that use Express also show Express Executed, and after execution the page shows the gas used and any refund.

When a message stops

Axelarscan showsMeaningWhat to do
Pay GasNo gas was paid, so the message isn't relayed.Add gas, or relay it manually and execute it yourself.
Insufficient FeeThe gas paid doesn't cover verification and approval.Add gas.
Waiting for FinalityThe source transaction isn't final yet.Wait. See transaction time.
Confirm or Approve, for a long timeThe relayer didn't pick it up.Relay it manually.
Failed to ConfirmVerification failed: the poll found no matching event, or failed.Relay it manually, which verifies it again.
Invalid CallThe source transaction reverted, or the call has an invalid field, e.g. an unknown destination chain.Nothing; send a new message.
Not Enough GasThe gas left doesn't cover execution.Add gas.
Errorexecute reverted on the destination chain.Debug the destination contract, then execute it again.

From code

Axelarscan API

curl -X POST https://api.axelarscan.io/gmp/searchGMP \
  -H 'content-type: application/json' \
  -d '{"txHash":"0x..."}'

Use "messageId" instead of "txHash" to look up one message from a transaction that sent several. For testnet, use https://testnet.api.axelarscan.io.

Each result in data has the overall status (e.g. executed, error, approved), a simplified_status (sent, approved, received or failed) and the details of each step (call, gas_paid, confirm, approved, executed, error, refunded).

AxelarJS SDK

queryTransactionStatus returns the same information:

import { AxelarGMPRecoveryAPI, Environment } from '@axelar-network/axelarjs-sdk';

const sdk = new AxelarGMPRecoveryAPI({ environment: Environment.MAINNET });

const { status, gasPaidInfo, error } = await sdk.queryTransactionStatus(txHash);

status is a GMPStatus, such as source_gateway_called, confirmed, destination_gateway_approved, destination_executed, express_executed, error or insufficient_fee. gasPaidInfo.status is a GasPaidStatus: gas_unpaid, gas_paid, gas_paid_not_enough_gas or gas_paid_enough_gas.

If the transaction sent more than one message, pass the log index of the call as the second argument.

On this page