Skip to main content
A Programmable Address is a deterministic CREATE2 contract address that executes custom logic on inbound or outbound stablecoin transfers. When funds arrive, its actions run automatically — the sender just makes a normal ERC-20 transfer, and the address handles whatever it’s programmed to do: settlement into a preferred token or chain, payment splits, or deposits into a yield vault. Developers program the rules once to streamline their product experience. The model is compatible with both Solana and EVM chains supported by Eco.
REST endpoint reference: Gateway Fast Deposits API

What ships today

CapabilitySource chainsDestinationUse case
Circle Gateway DepositsBase, Optimism, ArbitrumCircle Gateway on PolygonFast, gasless USDC deposits into Gateway (20–40s)

How it works

  1. Address generation. Your app calls the API for a deposit address derived from (depositor, destination, chainId) via CREATE2. The address is deterministic — same inputs always return the same address.
  2. Token transfer. The user sends USDC to the address. First deposit triggers contract deployment automatically (no gas until funds actually arrive).
  3. Action execution. The contract publishes a Routes intent for the deposited amount.
  4. Fulfillment. Solvers compete to deliver the destination outcome.

Properties

Permissionless. Any wallet or app can generate an address via the API. No whitelisting, no KYC at the protocol level. Non-custodial. The deposit contract’s only operation is createIntent(). It cannot be drained, redirected, or upgraded. If the intent expires unfulfilled, an independent permissionless refund service returns the USDC to the depositor. Immutable. The address is CREATE2-derived from the inputs. Calling the endpoint again with identical inputs always returns the same address — and the address can be shared before the contract is deployed onchain.

Funding methods

Funds can arrive at a Programmable Address by any of:
MethodUser pays gas?When to use
Direct ERC-20 transferYesSender already has source-chain gas
ERC-3009 transferWithAuthorizationNoRecommended for gasless UX (USDC-native)
EIP-2612 PermitNoFallback for tokens that support permit() but not ERC-3009
See Funding methods for signing code and field-by-field details.

Architecture

ContractRole
FactoryComputes deterministic addresses, deploys deposit contracts on first deposit
Deposit contractPer-destination contract — receives tokens, calls createIntent()
The factory is configured per source-token / destination-chain pair, with immutable parameters for Portal address, prover address, and intent-deadline duration.

Circle Gateway Deposits

Gasless USDC into Circle Gateway in 20–40 seconds.

Gateway API

Gateway endpoints and gasless funding.

Funding methods

EIP-712 signing code for ERC-3009 and Permit, plus the direct-transfer path.