Skip to content
SpendTheBits

Payments · 8 min read

Gasless USDC Transfers: How Paymasters Work and Who Pays

By Jay, Founder, SpendTheBits ·

In short

A gasless USDC transfer lets you send USDC from a wallet that holds no ETH, POL or AVAX at all. A paymaster contract pays the network's gas and takes its cost back in USDC from the same balance. It rests on three standards: ERC-4337 user operations, an EIP-2612 permit that lets the paymaster pull USDC, and EIP-7702, which lets a normal wallet address act like a smart account [1][5][2]. SpendTheBits runs the gasless USDC transfer on mainnet through Circle Paymaster. Your phone signs everything; our server checks the operation and relays it, and never holds a key.

0 ETH
needed to send USDC from a SpendTheBits wallet on Polygon, Base, Arbitrum, Optimism, Avalanche or EthereumMeasured by SpendTheBits in production

Here is the most common support ticket in stablecoin wallets. Someone receives USDC on Polygon or Base, tries to send some of it on, and gets a red banner: not enough gas. They have money. They just do not have the one coin the network wants to be paid in. Getting a little ETH or POL means another app, a wait, and a second transaction, and many people give up there.

The gasless USDC transfer exists to delete that step. This piece explains the machinery in plain words: what a paymaster is, who actually pays, why a permit signature is involved, what changed in 2025, and the errors you will meet if you build it. The examples come from our own runs, first on the Polygon Amoy testnet and then on mainnet.

The problem: a balance you cannot move

Every EVM chain charges for computation in its native coin: ETH on Ethereum, POL on Polygon, AVAX on Avalanche. USDC lives inside a contract on those chains, so moving it is a contract call, and a contract call needs gas. A wallet with USDC and nothing else is stuck, even though the USDC is worth far more than the gas.

For years the only answer was: keep a little native coin on every chain you use. That is a poor answer for a multichain user, and the top-up itself needs gas you do not have. It is also the moment where people pick up a scam token that looks like the coin they need; see how to spot a fake token.

The cleaner answer is a gasless USDC transfer: let someone else pay the gas and settle in USDC. That someone else is a paymaster, and the standard that makes it safe is ERC-4337 [1].

ERC-4337: user operations, bundlers and the EntryPoint

ERC-4337 is the account abstraction standard, now Final on Ethereum [1]. It does not change the chain's rules; it adds a second lane. You sign a user operation instead of a transaction: sender, nonce, call data, gas limits and a signature [1].

Signed user operations go to a bundler, a node that collects many of them and wraps them into one ordinary transaction to a single contract called the EntryPoint [1]. The bundler pays the chain's gas for that wrapper; the EntryPoint unpacks each operation, asks the sending account to validate it, and runs it [1].

The part that matters here is a fourth role. The standard defines a paymaster as a helper contract that agrees to pay for the transaction, instead of the sender itself [1]. The EntryPoint validates the account first, then the paymaster, and only then executes the call [1].

The paymaster: who pays, and how it gets paid back

A paymaster holds a deposit of native coin at the EntryPoint, which draws gas from that deposit rather than from your wallet [1]. So the bundler is repaid by the EntryPoint, the EntryPoint by the paymaster, and the paymaster needs to be repaid by you. In a gasless USDC transfer, that last step happens in USDC.

Circle Paymaster is the one we use. It is an onchain contract that lets users pay network gas in USDC instead of the chain's native token, with no Circle account or API key [4]. Circle's docs list it on seven mainnets: Arbitrum, Avalanche, Base, Ethereum, Optimism, Polygon and Unichain [4].

How does the paymaster take USDC from you without a gas-paying approval? Through EIP-2612, the permit extension to the token standard [5]. A permit is a signed message that changes your allowance, so the owner never sends an approve transaction, and it carries a deadline and a nonce so it cannot be replayed [5]. You sign a permit that lets the paymaster spend up to a ceiling of your USDC; it pulls what the gas cost and leaves the rest.

The price is not free. Circle's docs say an addition of 10 percent on gas applies on Arbitrum and Base and their testnets [4]. That is Circle's line item, not ours; the docs list none on the other chains [4].

EIP-7702: the upgrade that makes a normal wallet eligible

There was a catch. The EntryPoint only talks to smart accounts, and most people hold USDC at an ordinary address, an EOA controlled by a private key. EIP-7702 solved it, and it went live on Ethereum mainnet with the Pectra upgrade on 7 May 2025 [3].

EIP-7702 lets an EOA set code on its own account [2]. You sign an authorization naming a delegate contract and the chain it applies to; the chain writes a small delegation indicator into your account that points at that contract [2]. Your address stays the same and your key stays in charge; the account simply gains the ability to validate user operations. The EIP was written with sponsorship in mind [2].

A first gasless USDC transfer from a fresh wallet includes that authorization, so it needs one extra signature; every later send skips it. We measured this on Amoy: three signatures for the first send, two for the repeat. We also checked that the delegate's bytecode is identical on every chain we enable.

What actually happens when you press Send in SpendTheBits

Nothing in the flow moves signing off the phone. When a send on Pay fails for lack of gas, the app offers to pay the network fee in USDC instead. Accept, and our backend prepares the unsigned user operation: nonce, gas fields, the paymaster address and the USDC transfer call. It cannot sign any of it; see how to send crypto for the normal flow it mirrors.

The device then signs up to three things with the key in its secure keychain: the one-time EIP-7702 authorization, the EIP-2612 permit that lets the paymaster pull USDC up to a ceiling, and the user operation itself, hashed the way the v0.8 EntryPoint hashes it [6]. The review screen shows the fee, the ceiling and, on a first send, a note that the address is being upgraded.

Before relaying, our backend checks the signed operation against what it prepared. The sender must be the wallet that asked. The recipient must be the screened recipient. The permit must name the paymaster we quoted, at or under the quoted ceiling. And the call data digest must match byte for byte, so nothing can be swapped in after the review screen. Only then does it go to a bundler: prepare, sign on device, relay, as on our security page.

In our first Amoy proof the recipient received the USDC, the sender's balance fell by the amount sent plus a small USDC gas cost, and the sender's POL balance stayed at zero. We later ran the mainnet path end to end and left it enabled; see everyday multichain.

SpendTheBits Send screen in dark mode with amount, recipient and network shown
The Send screen. When gas is short, the same flow offers to pay the network fee in USDC.

The errors engineers see: AA24, AA33 and the pre-permit allowance

If you build a gasless USDC transfer, the EntryPoint will reject you with short codes before it lets you succeed. The standard groups them: AA1 codes are sender creation errors, AA2 sender validation errors and AA3 paymaster validation errors [1].

The first is AA24 signature error, which the EntryPoint raises when the account's validation says the signature does not match [6]. It names neither hashing nor delegation, which makes it painful. In our case the device hashed an empty init code, while the v0.8 EntryPoint puts the delegate's address in that slot for an EIP-7702 account, so we signed a different digest from the one the contract recovered. Read the contract's hashing code and pin a fixture from it.

The second is AA33 reverted, which means the paymaster's own validation call failed [6]. It arrives with the paymaster's reason appended, and that reason is what you must read. Ours once said the transfer amount exceeded the allowance: our permit ceiling was too small because the paymaster priced gas through its own oracle, which on the testnet quoted the native coin far above market. We fixed it by reading the oracle and extra gas figure from the contract and sizing the permit from those.

The third is the pre-permit allowance revert. Ask a bundler to estimate gas before the user has signed the permit and the paymaster has no allowance to pull, so in our runs simulation reverted with the AA33 code and an allowance message. That is expected, not a bug; our backend treats that pairing as the normal pre-permit case and still reports any other paymaster revert. Estimation accepts things that submission rejects, so the only proof is a landed transaction.

What it costs, what it does not cover, and when to use it

For the user the cost is the network's gas, priced in USDC by the paymaster, plus Circle's addition on the two chains where it applies [4]. SpendTheBits adds a small service fee, under 1 percent, on the flows listed on our pricing page; the in-app Fees screen is the source of truth.

Two limits matter. First, the permit leaves whatever the paymaster did not spend as a standing allowance, so we size the ceiling from the contract's own numbers, not a flat figure, and we show it. Second, this is an EVM story; USDC on Solana or the XRP Ledger has its own fee model, and the wallet shows the native balance you need there.

Use a gasless USDC transfer when you hold USDC on a chain and no native coin. If you build agents that pay for things, a signed authorization of the same kind is what makes our x402 payments gasless for the payer.

Hold your own keys, keep the yield, skip the middleman.

SpendTheBits is a fully non-custodial wallet for 13 chains, free on iOS and Android.

Frequently asked

No. A paymaster pays the network's gas and takes its cost back in USDC from the balance you are sending from. On the chains SpendTheBits supports for this, a wallet holding only USDC can send.

The bundler pays the chain, the EntryPoint repays the bundler from the paymaster's deposit, and the paymaster recovers its cost from you in USDC through a permit you signed. Nobody is paying for you for free; the currency of payment changes.

It gets an allowance up to the ceiling shown on the review screen, which SpendTheBits sizes from the paymaster contract's own pricing rather than a flat number. Unspent allowance stays as an allowance, and it can only be pulled by that paymaster contract.

No. EIP-7702 writes a delegation indicator into your existing account so it can validate user operations [2]. Your address and your private key stay the same, and your phone still signs every operation.

The EVM chains where Circle Paymaster is deployed and we have verified the contract on chain: Polygon, Base, Arbitrum, Optimism, Avalanche and Ethereum. Solana and the XRP Ledger use their own fee models.

Sources

  1. 1.ERC-4337: Account Abstraction Using Alt Mempool · Ethereum Improvement Proposals · accessed 2026-09-02
  2. 2.EIP-7702: Set Code for EOAs · Ethereum Improvement Proposals · accessed 2026-09-02
  3. 3.Pectra Mainnet Announcement · Ethereum Foundation Blog · accessed 2026-09-02
  4. 4.Circle Paymaster · Circle Developers · accessed 2026-09-02
  5. 5.ERC-2612: Permit Extension for EIP-20 Signed Approvals · Ethereum Improvement Proposals · accessed 2026-09-02
  6. 6.EntryPoint.sol (account-abstraction reference implementation) · eth-infinitism, GitHub · accessed 2026-09-02

This article is educational and reflects observed data and public sources on the date shown. It is not financial, legal or tax advice. Digital assets can lose value; yields shown are observed, not promised.