Skip to main content

Cross-Chain Funding

The agent's wallet is rarely on the chain a venue settles on. The funding router makes "deposit USDC anywhere → fund the venue" a first-class operation.

The chain problem

Agent wallet native chains: base, solana, arc (Virtuals) or wherever Privy put it
Venue settlement chains: polymarket → polygon · hyperliquid → arbitrum
tradexyz → arbitrum · pumpfun → solana
virtuals/degenclaw/bankr → base

Funding chains (CAIP-2): Base eip155:8453 · Ethereum eip155:1 · Arbitrum eip155:42161 · Optimism eip155:10 · Polygon eip155:137 · BNB eip155:56 · Avalanche · Abstract eip155:2741 · HyperEVM eip155:999 · Monad eip155:143 · Tron tron:20191129 · Solana solana:… · Tempo · ARC.

Three routing rails

  1. Chain-agnostic deposit address (Privy useDepositAddress) — generate a unique deposit address; the user sends from any source chain; funds auto-bridge/swap to the destination. The cleanest "fund from anywhere" rail.
  2. Venue-native deposit bridge (e.g. Polymarket's any-chain bridge) — generate deposit addresses; the venue bridges to its settlement chain. OAW initiates no transfer.
  3. Cross-chain stablecoin transfer — when the agent already holds USDC, route a policy-gated bridge/swap from the agent balance to the venue's native chain.

Two slices: resolve (read) and execute (gated)

resolve — read-only, moves nothing

Given (user, venue, amountUsd) returns the venue's funding target (chain + address from the execution binding), available agent funding, and the recommended route. Statuses: ready, funding_required, funding_target_unresolved, funding_route_unsupported, funding_venue_unsupported, agent_wallet_required.

execute — gated, fail-closed

  • Polymarket → generate any-chain deposit addresses (deposit_addresses_ready); no OAW-initiated transfer.
  • Cross-chain venues → policy decision (kill-switch / max-transfer / daily-cap / destination validation) → preview. An actual transfer happens only when execute + explicit approval + the fail-closed venueFundingExecuteEnabled flag all hold. Otherwise ready_but_live_locked / requires_approval, executionPerformed: false.
Funding never auto-creates a wallet

Funding requires pre-bind authority first; if there's none it returns agent_wallet_required. The address you fund is read from the venue's execution binding — a single source of truth, so you fund exactly the address the venue trades from.

Next: Execution & safety.