Managing fees in cross-chain messaging involves handling two main types of fees: gas fees on the destination chain and source fees on the origin chain.

Types of Fees

Message Fee

  • Where: Paid on source blockchain

  • What: A static fee in the most stable stablecoin on the origin blockchain. Listed as FEE_TOKEN in the developer documentation. Often this is Circle's USDC. If USDC is unavailable, the fee token is typically USDT or an equivalent.

  • Responsibility: The contract sending the message must have enough stablecoins; otherwise, the message cannot be sent.

  • Example: If sending a message from Polygon, your contract on Polygon needs enough USDC to cover the static fee.

Gas Fees

  • Where: Paid on destination blockchain

  • What: A dynamic fee charged by the blockchain's themselves. Paid in the wrapped native gas coin (e.g., WETH on Ethereum, WAVAX on Avalanche, etc.).

  • Responsibility: The receiving contract must have enough of the gas token to cover transaction costs. The gas is automatically pulled / sent to the relayer contract as a "gas reimbursement".

  • Example: If sending a message to Ethereum, your deployed contract on Ethereum needs enough WETH to cover the gas fee.

Automatic Fee Handling

The system automatically checks and deducts these fees during transactions. Fees are pulled directly from the your deployed smart contracts. The integrating party can choose to pay this themselves or pass the cost to the user.

Setting Fee Limits:

Developers can set limits on fees to prevent unexpected high costs using setMaxgas and setMaxfee functions.

Last updated