Skip to content
Oris Docs

Wallets

LIVE

Every agent has one canonical identifier. Behind it, Oris provisions native wallets on every supported chain. Your application code uses the identifier. The protocol handles the routing.

How it works

  1. One identifier — an oris.agent/<name> canonical address tied to the L1 identity.
  2. Native accounts — Oris provisions an ERC-4337 smart account on every EVM chain and a native SPL token account on Solana / TRC20 on Tron.
  3. Resolver — at send time, the SDK maps the canonical identifier to the chain-specific address.

Same pay() call, different rail underneath. The agent does not hold native gas tokens; the Oris paymaster sponsors the gas on EVM chains.

Account abstraction

EVM chains use ERC-4337 smart accounts. Benefits:

  • Gasless — the Oris paymaster covers gas. The agent pays in the stablecoin already in the wallet.
  • Recovery — policy-controlled rotation. Lost a key, rotate the signer without redeploying the account.
  • Batched calls — multiple operations in one UserOperation.

Non-EVM rails use native account models:

  • Solana — SPL token account, owned by the canonical principal.
  • Tron — TRC20 account with energy and bandwidth abstracted.

SDK methods

# Create a wallet for an agent on a specific chain
wallet = client.wallets.create(agent_id=agent.id, chain="base-sepolia")
print(wallet.address) # 0xab12...cd34
print(wallet.canonical) # oris.agent/procurement-bot
# Get balance across all chains
balances = client.wallets.list_balances(agent_id=agent.id)
for b in balances:
print(b.chain, b.asset, b.amount)
# Send a payment — chain is explicit
client.payments.send(agent_id=agent.id, to_address="0xA1b2...", amount=12.50, chain="base-sepolia")

Supported chains

10 chains today. See multi-chain for the routing model and supported stablecoins.

Where to go next