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.

What ships today

Both capabilities share the same architecture (a factory plus per-address deposit contracts) and use Routes for fulfillment. They differ in source chains, destination, and funding model.

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: See Funding methods for signing code and field-by-field details.

Architecture

The factory is configured per source-token / destination-chain pair, with immutable parameters for Portal address, prover address, and intent-deadline duration.