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
- 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. - Token transfer. The user sends USDC to the address. First deposit triggers contract deployment automatically (no gas until funds actually arrive).
- Action execution. The contract publishes a Routes intent for the deposited amount.
- 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 iscreateIntent(). 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.
