Skip to main content

Tracking xCalls

Every xcall is associated with a unique transferId that can be used to track its lifecycle through a cross-chain transaction.

Querying Subgraphs

You can query the hosted subgraphs on each chain to check the transaction status.

Mainnet Subgraphs
ChainSubgraph
Ethereumv0-Mainnet
Optimismv0-Optimism
Arbitrumv0-Arbitrum
Polygonv0-Polygon
Binance Smart Chainv0-Bnb
Gnosisv0-Gnosis
Testnet Subgraphs
ChainSubgraph
Goerliv0-Goerli
Optimism-Goerliv0-Opt-Goerli
Mumbaiv0-Mumbai
  1. Make note of the transaction hash that interacted with the Connext contract.

  2. Navigate to the hosted subgraph for the origin domain and query by the xcall's transaction hash or the transfer ID.

    query OriginTransfer {
    originTransfers(
    where: {
    # Query by the transaction hash of the xcall
    transactionHash: "<TRANSACTION_HASH>",
    # Or by the xcall's transfer ID
    transferId: "<TRANSFER_ID>"
    }
    ) {
    # Meta Data
    chainId
    nonce
    transferId
    to
    delegate
    receiveLocal
    callData
    slippage
    originSender
    originDomain
    destinationDomain
    transactionHash
    bridgedAmt
    status
    timestamp
    normalizedIn
    # Asset Data
    asset {
    id
    adoptedAsset
    canonicalId
    canonicalDomain
    }
    }
    }
  3. Navigate to the hosted subgraph for the destination domain and query by the transferId obtained from the origin domain subgraph.

    query DestinationTransfer {
    destinationTransfers(
    where: {
    transferId: "<TRANSFER_ID>"
    }
    ) {
    # Meta Data
    chainId
    nonce
    transferId
    to
    callData
    originDomain
    destinationDomain
    delegate
    # Asset Data
    asset {
    id
    }
    bridgedAmt
    # Executed event Data
    status
    routers {
    id
    }
    originSender
    # Executed Transaction
    executedCaller
    executedTransactionHash
    executedTimestamp
    executedGasPrice
    executedGasLimit
    executedBlockNumber
    # Reconciled Transaction
    reconciledCaller
    reconciledTransactionHash
    reconciledTimestamp
    reconciledGasPrice
    reconciledGasLimit
    reconciledBlockNumber
    routersFee
    slippage
    }
    }
  4. If there was a nested xcall involved on the destination side, the executedTransactionHash from step 3 can be used as the new origin-side transaction hash. To trace the nested xcall, go back to step 1 using this executedTransactionHash but instead consider the current destination domain as the origin domain.

Connextscan

Another option is using Connextscan to track the status of any transferId.

In the top right search box, enter the transferId of interest.

Connextscan Search

Connextscan will pull up current status of the associated xcall. This is what it looks like when a transfer is complete.

Connextscan Search

XCall Status

StatusDescription
XCalledTransaction has been initiated on origin.
ExecutedFunds have been delivered and calldata executed on destination, if applicable. If this happens before Reconciled, then this was a fast path transfer (non-authenticated).
ReconciledFunds have been reimbursed to routers. If this happens before Executed, then this was a slow path transfer (authenticated).
CompletedFastTransaction has been Executed and then Reconciled.
CompletedSlowTransaction has been Reconciled and then Executed.