Skip to main content
Users can pay gas in USDC, USDT, or any ERC-20—no need for native tokens like ETH.

Basic Usage

Pass feeToken when getting a quote:
const quote = await meeClient.getQuote({
  instructions: [/* your calls */],
  feeToken: {
    address: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC on Base
    chainId: 8453
  }
});

const { hash } = await meeClient.executeQuote({ quote });

Cross-Chain Gas Payment

Pay for transactions on one chain using tokens from another:
// Execute on Arbitrum, pay gas from Base USDC
const quote = await meeClient.getQuote({
  instructions: [{
    chainId: 42161,  // Arbitrum
    calls: [/* your calls */]
  }],
  feeToken: {
    address: USDC_BASE,
    chainId: 8453    // Pay from Base
  }
});

By Wallet Type

Most flexible—any token from any chain:
const quote = await meeClient.getQuote({
  instructions: [instruction],
  feeToken: { address: USDC, chainId: base.id }
});

Supported Tokens

Any ERC-20 with liquidity can be used for gas:
  • Stablecoins: USDC, USDT, DAI
  • Wrapped tokens: WETH, WBTC
  • LP tokens: Uniswap, Curve positions
  • Yield tokens: aUSDC, stETH
  • Governance tokens: UNI, AAVE, etc.

Example: Swap with Gas in USDC

import { parseUnits } from "viem";

const swapInstruction = await account.buildComposable({
  type: "default",
  data: {
    chainId: base.id,
    to: UNISWAP_ROUTER,
    abi: UniswapAbi,
    functionName: "exactInputSingle",
    args: [{ tokenIn: USDC, tokenOut: WETH, amountIn: parseUnits("100", 6), /* ... */ }]
  }
});

const quote = await meeClient.getQuote({
  instructions: [swapInstruction],
  feeToken: { address: USDC, chainId: base.id }
});

// User sees fee in USDC, not ETH
console.log("Fee:", quote.paymentInfo.tokenAmount, "USDC");

const { hash } = await meeClient.executeQuote({ quote });

Next Steps

Sponsor Gas

Cover gas costs entirely for your users