Skip to main content
Users can pay gas in USDC, USDT, or any token with liquidity—no native ETH required. Perfect for DeFi users who hold stablecoins but not native tokens.
MEE Supersedes Token Paymasters: Traditional ERC-4337 token paymasters handle gas-in-tokens on a single chain. Biconomy’s MEE replaces this with universal gas abstraction—pay for gas on any chain using tokens from any other supported chain. One unified system instead of chain-by-chain paymaster configuration.

When to Use

Users have stablecoins but no ETH
DeFi applications where users already hold tokens
Cross-chain apps (pay from any chain)
You don’t want to sponsor gas

How It Works

User has 100 USDC, 0 ETH

User initiates transaction

Biconomy quotes: "This costs 0.50 USDC"

User signs approval

Biconomy:
  - Deducts 0.50 USDC from user
  - Pays native gas on their behalf
  - Executes transaction

User has 99.50 USDC, transaction complete

Implementation

import { createMeeClient, toMultichainNexusAccount } from "@biconomy/abstractjs";

const USDC = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";

// 1. Setup
const account = await toMultichainNexusAccount({
  signer: userWallet,
  chainConfigurations: [
    { chain: base, transport: http(), version: getMEEVersion(MEEVersion.V2_1_0) }
  ]
});

const meeClient = await createMeeClient({ account });

// 2. Build instruction
const swapInstruction = await account.buildComposable({
  type: "default",
  data: {
    chainId: base.id,
    to: UNISWAP_ROUTER,
    abi: UniswapAbi,
    functionName: "exactInputSingle",
    args: [swapParams]
  }
});

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

// Show fee to user
console.log('Fee:', quote.paymentInfo.tokenAmount, 'USDC');

// 4. Execute
const { hash } = await meeClient.executeQuote({ quote });
const receipt = await meeClient.waitForSupertransactionReceipt({ hash });

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: [/* Arbitrum transaction */]
  }],
  feeToken: {
    address: USDC_BASE,
    chainId: 8453    // Pay from Base
  }
});
Cross-chain gas requires Smart Account or EIP-7702 mode. Fusion (EOA) mode only supports same-chain gas payment.

Supported Tokens

Stablecoins

TokenChains
USDCAll
USDTAll
DAIEthereum, Optimism, Arbitrum, Polygon
FRAXEthereum, Arbitrum, Optimism

Major Tokens

TokenChains
WETHAll
WBTCEthereum, Arbitrum, Optimism, Polygon
stETH/wstETHEthereum, Arbitrum, Optimism

Yield-Bearing

TokenChains
aUSDCEthereum, Arbitrum, Optimism, Polygon
sDAIEthereum

And 10,000+ More

Any token with DEX liquidity can be used. Biconomy’s solver network finds the best route to convert to native gas.

By Wallet Type

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

Showing Fees to Users

Always show the fee before asking for signature:
const quote = await meeClient.getQuote({
  instructions: [...],
  feeToken: { address: USDC, chainId: base.id }
});

// Display to user
const feeDisplay = `
  Transaction Fee: ${formatUnits(quote.paymentInfo.tokenAmount, 6)} USDC
  You will receive: ${formatUnits(outputAmount, 18)} WETH
`;

// Confirm before executing
if (await userConfirms(feeDisplay)) {
  await meeClient.executeQuote({ quote });
}

Multiple Fee Tokens

Let users choose their preferred token:
// Get quotes for different tokens
const [usdcQuote, usdtQuote, daiQuote] = await Promise.all([
  meeClient.getQuote({ instructions, feeToken: { address: USDC, chainId } }),
  meeClient.getQuote({ instructions, feeToken: { address: USDT, chainId } }),
  meeClient.getQuote({ instructions, feeToken: { address: DAI, chainId } }),
]);

// Show options to user
const options = [
  { token: 'USDC', fee: usdcQuote.paymentInfo.tokenAmount },
  { token: 'USDT', fee: usdtQuote.paymentInfo.tokenAmount },
  { token: 'DAI', fee: daiQuote.paymentInfo.tokenAmount },
];

Next Steps