← All posts

Mar 4, 2026

How to Pay Gas with USDC on Any Chain in 2026

The Universal Gas Framework lets users pay gas in stablecoins instead of native tokens — across EVM and non-EVM chains. Here's how the flow works and when to use it.

UGFGas AbstractionUSDCStablecoinsCross-chain

The fastest way to lose a new crypto user is the gas fee error. They hold USDC. They want to do something on Polygon. The transaction fails because they don't have MATIC. They go research how to bridge MATIC, give up halfway through, and never come back.

The Universal Gas Framework is built to remove that error from the flow. Pay once in USDC, EURC, or United Stables $U, and the destination chain action gets executed without the user ever holding the native token. This post explains how it works, where it works, and when it doesn't.

Why native gas tokens are a tax on adoption

Every chain has a native token: ETH on Ethereum and most L2s, MATIC on Polygon, BNB on BNB Chain, AVAX on Avalanche, SOL on Solana, SUI on Sui. To do anything on any of those chains, you need a small balance of that exact token, every time.

For active users, this becomes a portfolio of dust. Twenty dollars of ETH on Base, another twenty on Arbitrum, ten on Optimism, fifteen on Polygon. None of it useful for anything except gas. All of it earning nothing.

For new users, it is worse. The first transaction fails before they understand what gas is, why it is required, or which token to acquire. Onboarding falls off a cliff.

What UGF does instead

UGF lets the user pay gas in stablecoins on a source chain, while the action executes on a different destination chain. Three supported source tokens today:

  • USDC (Circle)
  • EURC (Circle)
  • United Stables $u

The user signs a quote. The quote pins the payment leg (e.g. USDC on Base) to the action leg (e.g. swap on BNB Chain). UGF relayers settle the payment, then execute the destination action. The user never holds BNB.

The supported chain matrix

UGF is live on twelve chains across two ecosystems:

EVM chains — Ethereum, Base, Optimism, Polygon, Avalanche, BNB Chain, Arbitrum, opBNB.

Non-EVM chains — Solana, Sui, Tron, TON.

The non-EVM coverage is the part most people miss. Paying gas in USDC on Base to execute a transfer on Solana is a single SDK call. Same for Sui, same for Tron and TON. The framework abstracts the family-specific execution paths.

A concrete example

Here is the minimum SDK call to pay USDC on Base and execute on Solana:

const solanaQuote = await client.quote.get({
  payment_coin: "USDC",
  payment_chain: "8453",       // Base
  payment_chain_type: "evm",
  dest_chain_id: "sol-mainnet",
  dest_chain_type: "sol",
});

await client.chains.sol.sponsorCustomTx(
  solanaQuote.digest,
  keypair,
  connection,
  buildTx,
);

The buildTx function is whatever Solana transaction the user wants to execute. UGF handles the sponsorship; the developer focuses on the actual action.

When this matters

A few flows where paying gas in stablecoins changes everything:

  • DeFi rebalancing across chains. A user who keeps yield on Aave deposits on multiple L2s no longer needs native gas on each chain to move positions.
  • NFT minting on chains the user doesn't normally touch. Mint a Polygon NFT from a Base balance.
  • AI agent execution. An agent operating across twelve chains keeps a single USDC balance instead of twelve native gas balances. Drastically simpler accounting.
  • Onramp-to-action flows. A user comes in fresh through MoonPay or Banxa, lands USDC, and immediately does something useful — no second-step bridge required.

When this is not the right tool

UGF is not magic. A few cases where you still need native tokens or different infrastructure:

  • On-chain governance voting that requires native tokens for quorum or staking.
  • Validator-level operations (running a node, posting attestations).
  • Pure token transfers with no destination action — for that, a normal transfer is fine.

The framework is built around the case where source value should fund a destination action. If there is no action, the question of paying gas in a different token doesn't arise.

Try it

Two paths:

  • As a user: download the Tychi Wallet. Gas is paid in stablecoins by default on supported flows.
  • As a developer: install @tychilabs/ugf-sdk, read the docs, and run the quickstart on testnet before going live.

The dev experience is short. Five lines of TypeScript from quote to executed transaction. Once you see a Base USDC payment land as a Solana action, the rest of the integration is straightforward.

More posts