Ten chains.
One line of code.
Ethereum, Base, Polygon, Arbitrum, Avalanche, BNB Chain, Optimism, Celo, Solana, Tron. Write one line. The router picks the rail. The payment lands.
Ten chains. Same call.
Every chain runs through the same Oris call. Pick a rail by hand or let the router pick the best one for you.
Ethereum
EVM
USDC / USDT / DAI
Base
EVM
USDC / USDbC
Polygon
EVM
USDC / USDT
Arbitrum
EVM
USDC / USDT
Avalanche
EVM
USDC / USDT
BNB Smart Chain
EVM
USDC / USDT / BUSD
Optimism
EVM
USDC / USDT
Celo
EVM
USDC / cUSD
Solana
SPL Token
USDC / USDT
Tron
TRC20
USDT / USDC
The router picks the cheapest rail.
Skip the chain argument and the router scans gas, speed, and balance across ten rails. Cheapest viable option wins every time.
The router treats the chains as a fungible pool of settlement rails. It looks at the destination, the agent's spending wallet, current gas prices, and the chain's finality profile, then picks the best route for the payment in question.
When the same destination is reachable on multiple chains, the router picks the cheapest one that still meets the settlement time the caller asked for. A default request optimizes for cost. A latency-sensitive call optimizes for finality.
No native tokens required.
Agents never hold ETH, MATIC, or AVAX. Oris pays the gas. The agent settles in stablecoin in the same call. One currency, one balance.
On the eight EVM rails, Oris uses ERC-4337 account abstraction with paymasters that accept stablecoin reimbursement. On Solana, the same role is played by a native fee handler. On Tron, energy and bandwidth allocations are managed for the caller.
The developer never sees these protocol-level differences. Every payment is denominated in the stablecoin the agent holds, and the underlying gas obligation is reconciled inside the same call.
Pick a chain. Or do not.
Same call either way. The only difference is whether you name a chain.
If the agent already has stablecoin on a specific chain, pass the chain argument and the payment goes out there. Otherwise, let the router choose. The behavior is consistent across Python and TypeScript SDKs.
# Explicit chain agent.pay(to="0x7f3a...", amount=25.00, chain="base") # Auto-routed agent.pay(to="0x7f3a...", amount=25.00)
Every chain. Same safety.
No weak rail. No chain where the policy engine takes a break. No carve-out for cheaper gas. The safety layer runs everywhere.
Policy engine
All 10 chains
Per-transaction caps, daily and monthly limits, counterparty whitelists, and category restrictions evaluate identically on every supported chain. A blocked transaction on Ethereum is blocked on Solana too.
Audit log
All 10 chains
Activity log records every payment in the same schema regardless of source chain. The chain identifier is one column among many, not a separate database.
KYA checks
All 10 chains
The agent's KYA level governs which chains and which amount tiers are reachable. The same enforcement runs whether the agent transacts on Ethereum, Solana, or Tron.
Compliance
All 10 chains
Pre-execution screening and post-execution audit run against every payment. The sanctions check is chain-agnostic; the same blocked address is blocked on every rail.
Ship to every chain.
One SDK. Ten chains. Your agents move value wherever they need to.