Oneliq Documentation
The engineering reference for the unified stablecoin terminal on Arc. Oneliq puts Circle's stablecoin stack - Gateway, CCTP V2, Programmable Wallets, USDC, EURC - behind a single non-custodial UI on the Arc Layer 1. This guide covers every live product surface, the on-chain contract registry, the proxy API, and the security baseline.
Introduction
Oneliq is a non-custodial frontend that brings Circle's stablecoin stack together under a single UX on the Arc Layer 1. Six surfaces, one balance, zero custody:
| Surface | What it does | Built on |
|---|---|---|
| Trade | Spend USDC anywhere - swap inside Arc (USDC ⇄ EURC) or bridge cross-chain. One panel, one source picker (wallet + Gateway pre-deposits), one destination. | Circle App Kit Swap + CCTP V2 (Uniswap V2 fallback) |
| Unified Balance | One USDC balance across every supported chain. Deposit from any chain, spend instantly on Arc - no bridge clicks, no wrapped tokens. | Circle Gateway V1 |
| Auto-Replenish Agent preview | Sign once. Your agent keeps any wallet topped up automatically - or runs scheduled USDC transfers across chains. Daily safety cap, revocable anytime. | Circle Programmable Wallets + Paymaster |
| History | A receipt-style feed of every Trade, Balance, and Agent moment on your USDC activity. Filter by surface, jump to the chain explorer in one click. | Local activity log + agent API |
| Create Token | Deploy a custom ERC-20 to Arc in under a minute. Name, symbol, supply, decimals, mintable / burnable / pausable / capped toggles. | Arc Testnet ERC-20 |
| Dashboard soon | Operator control center. Live portfolio across chains, agent fleet view, settlement volume, quick-actions tile grid. | Read-only aggregator |
Who is this for?
- Stablecoin holders tired of fragmenting USDC into seven balances across seven chains.
- Multi-chain treasurers who want one place to see, move, and automate USDC across the Circle ecosystem.
- Arc-native traders swapping USDC ⇄ EURC inside the L1 with sub-second finality and predictable USD-denominated gas.
- Agent operators who want sign-once / run-forever USDC plumbing - auto top-ups, scheduled payouts - across any of 8 Circle-supported chains.
- Builders using Oneliq as a reference implementation for Circle Gateway, CCTP V2, App Kit Swap, and Programmable Wallets integrations.
Design principles
- Custody never leaves you. Oneliq holds no funds and has no admin path that can pause your access. Every state-changing call is signed by your wallet against a third-party contract.
- No build pipeline. The frontend is plain HTML/CSS/vanilla JS plus
ethers.js v6- every served byte is reviewable, every CDN script is SRI-pinned. - Strict CSP, locked CDNs. Every page ships with a Content-Security-Policy. The only third-party origins reachable are the RPCs and Circle endpoints we explicitly trust.
- Reads through proxies. Reads to Circle's Gateway and IRIS APIs route through Cloudflare Pages Functions to keep the browser's
connect-srctight and to dodge CORS quirks.
Architecture
Oneliq is a thin frontend over Circle's stablecoin stack and the Arc Layer 1. There is no Oneliq-owned smart contract on any chain. What lives on our origin is static HTML, a few KB of shared JavaScript, a handful of stateless proxy routes, and a single Cloudflare Worker that executes scheduled agent runs.
┌─ UI Layer ────────────────────────────────────────────────────────────┐ │ index · trade · balance · agent · history · token · dashboard │ └────────────────────────────────────────────────────────────────────────┘ ↓ ┌─ Shared JS modules (assets/) ─────────────────────────────────────────┐ │ arc-core.js │ │ arc-gateway.js │ │ arc-appkit.js │ │ arc-ui.js / .css │ └────────────────────────────────────────────────────────────────────────┘ ↓ ┌─ Cloudflare Pages Functions (proxies + agent API) ────────────────────┐ │ /api/circle-proxy/* │ │ /api/gateway-proxy/* │ │ /api/agent/* │ │ /api/metrics/* │ └────────────────────────────────────────────────────────────────────────┘ ↓ ┌─ Cloudflare Worker (cron, every minute) ──────────────────────────────┐ │ agent-cron │ └────────────────────────────────────────────────────────────────────────┘ ↓ ┌─ External protocols (we don't operate any of these) ──────────────────┐ │ Arc L1 │ │ Circle Gateway │ │ Circle CCTP V2 │ │ Circle App Kit Swap │ │ Circle Programmable │ │ Wallets │ └────────────────────────────────────────────────────────────────────────┘
What "non-custodial" means in practice
- Every state-changing user action is a transaction signed by your wallet against a third-party contract (Circle's Gateway, CCTP, App Kit Swap router, or an ERC-20 you just deployed).
- Oneliq has no privileged role on any of these contracts: no
owner, noadmin, no upgrade path. Read the verified source on the Arc explorer. - The agent runner moves funds only along the rules you signed, via a Circle Programmable Wallet you authorized via EIP-2612 permit. You can pause or revoke any agent in one click - that yanks the permit and stops every future execution.
- The proxy routes (
/api/*) only reformulate read requests to Circle's public APIs. They cannot move funds, sign messages, or hold custody.
Quick start
From a fresh browser to your first cross-chain USDC spend in five steps.
- Install a wallet. MetaMask, Rabby, Coinbase Wallet, Frame, or any EIP-6963-compliant browser wallet. See Supported wallets.
- Add Arc Testnet. Open oneliq.xyz/trade, click Connect, and approve the network prompt. Manual params are in the Network info table below.
- Get testnet USDC. Use the Circle faucet on your address. Arc uses USDC as native gas, so one faucet drip covers both spending and gas fees. The same USDC works for Trade, Balance, and Agent.
- Open Balance. Deposit USDC from any supported chain (Sepolia, Base, Fuji, Arbitrum, OP, Polygon, Unichain) into the Gateway. Your unified balance updates in seconds.
- Spend from Trade. Pick a destination chain and recipient. Multi-source unified spend pulls from N chains in one transfer and mints native USDC on the destination.
Wallet setup
Oneliq uses EIP-6963 for wallet discovery - the multi-injector standard that
replaced the old window.ethereum singleton. Any wallet that announces itself via
eip6963:announceProvider appears in our wallet picker, ranked by RDNS so the choice
is deterministic when multiple wallets are installed.
Once connected, the session is held entirely in browser memory. There is no auth cookie, no JWT, no session token issued by Oneliq.
Adding Arc Testnet manually
If your wallet doesn't auto-prompt or you prefer to add the network by hand:
| Field | Value |
|---|---|
| Network name | Arc Testnet |
| RPC URL | https://rpc.testnet.arc.network |
| Chain ID | 5042002 (0x4cef52) |
| Currency symbol | USDC |
| Block explorer | testnet.arcscan.app |
Get testnet USDC
Arc Testnet uses USDC as the native gas token. You need USDC for both transaction fees and for whatever you want to do with it (deposit, swap, agent funding). One faucet call covers both.
- Visit faucet.circle.com.
- Select Arc Testnet from the network dropdown.
- Paste your wallet address - delivery is typically under 30 seconds.
- Faucets are rate-limited per-address per-day. If you hit the limit, come back tomorrow or grab USDC on Sepolia / Base / Fuji and use Unified Balance to make it spendable on Arc.
Trade
The /trade page is the spend surface. It unifies same-chain
swap (USDC ⇄ EURC on Arc via Circle App Kit Swap) and cross-chain bridging (USDC anywhere via
CCTP V2) into a single panel. Source picker shows your wallet balances plus your Circle Gateway
pre-deposits, ranked so the path with the lowest friction floats to the top.
Same-chain swap (Arc internal)
Routes through Circle App Kit Swap for USDC ⇄ EURC pairs on Arc. If the App Kit SDK is unreachable the page degrades gracefully to a Uniswap V2 fallback (deployed by the Arc Foundation). Quote latency is debounced at 150 ms with an SDK prefetch on the source-amount input.
Cross-chain spend (CCTP V2)
- Choose source chain and destination chain (any pair from the 8 supported).
- Enter USDC amount and recipient address (defaults to your own).
- Pick a finality mode - Fast (~20 s, small Circle fee) or Standard (13–19 min, zero fee).
- Burn on source - calls
TokenMessengerV2.depositForBurn(amount, destDomain, recipient, burnToken, ...). - Wait for Circle's IRIS attestation, then mint on destination - calls
MessageTransmitterV2.receiveMessage(message, attestation). Oneliq submits the receive automatically when the attestation arrives.
Trade panel features
- Source picker. One dropdown - wallet on any chain or Circle Gateway pre-deposits - ranked by available balance.
- Slippage. Default 0.5%. Presets 0.1% / 0.5% / 1% / custom (hard cap 5%).
- Route box. Shows rate, price impact, network fee, min received, ETA.
- Resumability. A burn tx hash is the only thing needed to mint on the destination later. Close the tab mid-flight, return to
/tradewith the same wallet - the pending mint appears automatically. - Activity rail. Live tx ledger on the right - last 10 actions deep-linked to per-chain explorer.
Unified Balance
The /balance page is the centerpiece of Oneliq. It uses
Circle Gateway V1 to give you a single USDC balance that's
spendable on every supported chain - no bridge clicks, no chain switching, no wrapped tokens.
How it works
Each Gateway-supported chain has a GatewayWallet contract at the same deterministic
address (CREATE2 with the same salt). You deposit USDC into the wallet on whichever chain you
currently hold it. Circle's Gateway service issues attestations that authorize a fresh mint of
native USDC on the destination chain - the USDC you spend is always native USDC, not a wrapped
derivative.
Deposit flow
- Select a source chain with a USDC balance (Sepolia, Base, Arbitrum, OP, Polygon Amoy, Fuji, Unichain).
- Approve the GatewayWallet to pull USDC (one-time per chain per token).
- Deposit - your USDC moves from your wallet into the
GatewayWalletcontract on that chain. - Done. Your unified balance updates in seconds (Fuji ~30s, Sepolia ~12-15 min). Spendable everywhere Gateway is supported.
Spend flow (mint on Arc)
- Submit an EIP-712 signed burn intent to Circle's Gateway service via
POST /v1/transfer. - Gateway validates available balance across all your deposits, signs an attestation.
- Your wallet calls
GatewayMinter.gatewayMint(attestation, signature)on the destination chain. - Native USDC appears on the destination, ready to spend or hold.
Multi-source spend (the killer flow)
The Spend modal has a toggle: ⚡ Unified (auto, multi-source) vs Single chain. Unified mode lets Gateway draw from N different chain deposits in one transfer - one attestation, one mint on the destination, combined amount. Single mode forces a specific source chain (useful for testing or when you want to drain one balance).
Withdrawals
Withdrawals are two-step. You initiate a withdrawal on the source chain, which queues it through Gateway's safety delay (~minutes on testnet). Then you finalize to receive USDC back in your wallet. The pending list shows everything in flight with countdown timers.
Direct deposits on Arc
Arc's USDC is the native gas token, which lives in the L1 ledger rather than in an ERC-20 wrapper.
GatewayWallet.deposit relies on standard approve/transferFrom,
which can only move ERC-20 balances, so direct deposits from Arc are disabled. To fund Arc, deposit
from any other supported chain and let Gateway mint native USDC on Arc.
Auto-Replenish Agent PREVIEW
The /agent page is the autopilot layer for your USDC. Two modes
today: Auto Top-Up (keep a target wallet above a floor) and Scheduled
Send (recurring USDC transfers across chains and wallets, once/daily/weekly/monthly).
Both run on Circle Programmable Wallets with Circle Paymaster-sponsored gas - you sign once, the
agent runs forever, you can pause or revoke at any moment.
How it works
- You sign once. One EIP-712 typed signature defines the rule (floor, refill amount, daily cap, target chains). One EIP-2612 permit authorizes the agent's Circle Programmable Wallet to pull USDC from your wallet via
transferFrom. - Agent watches. A Cloudflare cron Worker scans active rules every minute. When a target wallet drops below its floor (or a scheduled time arrives), the rule fires.
- Funds move. The agent's smart account assembles a userOp - USDC pull, optional CCTP V2 burn-and-mint to the destination chain (~30s fast finality), final delivery to the target wallet. Gas is sponsored by Circle Paymaster, so the user pays nothing in their gas token.
- Pause / resume / revoke. One-click in the agent drawer. Revoke yanks the permit; every future execution fails closed.
Safety rails
- Daily safety cap. Hard upper bound on USDC the agent can move in any rolling 24h window. The agent will not exceed it, ever.
- Auto-pause after failures. 5 consecutive execution failures (RPC outage, balance drained, etc.) auto-pause the agent. You're notified, fix the issue, resume manually.
- Revoke wipes future risk. Revoke removes the permit on-chain. The agent literally cannot pull from your wallet anymore - even if our server is compromised.
- No private keys held. The agent runs from a Circle Programmable Wallet (smart account); we never custody your EOA key. Your EOA signature is the only authorization.
Modes
| Mode | When it fires | Use case |
|---|---|---|
| Auto Top-Up | Target wallet's USDC drops below your floor | Keep an ops wallet, a hot wallet, or a treasury sub-account always funded |
| Scheduled Send | Calendar: once / daily / weekly / monthly | Recurring payouts, payroll, subscription disbursements |
History
The /history page is your personal stablecoin operations
explorer. Every transfer, swap, bridge, and agent execution renders as a clean receipt - title,
source → destination chain tags, status pill, relative time, amount, tx hash linkable to the
right chain explorer.
Tabs
- All - every event across all three surfaces, newest first.
- Trade - same-chain swaps and bridge originations.
- Balance - deposits, withdrawals, multi-source unified spends.
- Agent - every agent execution (succeeded, pending, failed) with run-ID for debugging.
Data sources
Trade and Balance events come from your browser's local activity log (arc.trade.activity.v1),
so they're fully local-first - no server round-trip, no privacy leak. Agent events come from the
backend /api/agent/* endpoints which only return rows where you're the rule
owner (server-side auth).
Create Token
The /token page deploys a custom ERC-20 to Arc Testnet in under
a minute. No coding, no Hardhat, no Foundry - pick your params in a form, sign one tx, get back
a contract address linkable to testnet.arcscan.app.
What you can configure
- Basics - name, symbol (A-Z, 2-8 chars), one-line description.
- Economics - total supply (1K to 10B), decimals (18 default, or 6/8/0).
- Features - Mintable, Burnable, Pausable, Capped - combine any subset.
- Advanced - initial recipient address (defaults to your connected wallet).
Gas is paid in USDC (Arc's native gas token). A typical deploy costs a few cents in USDC.
Dashboard soon
The /dashboard page is the operator control center -
a read-only aggregator over your unified balance, your agent fleet, and your settlement
activity. Five metric cards (Portfolio Value, Unified Balance, Active Chains, Active Agents,
24h Settlement Volume) with sparklines, plus modules for portfolio analytics, recent
settlements, agent fleet, and a quick-actions tile grid (Swap / Deposit / Spend / New Agent /
Create Token / Faucet).
It's a pure aggregator - no Gateway writes happen on this page. Every action button deep-links to Balance, Trade, Agent, or Create Token.
Arc L1
Arc is a purpose-built Layer 1 blockchain optimized for stablecoin-denominated finance. Three defining design choices set it apart from a generic EVM chain:
- USDC-denominated gas. Transaction fees are paid in USDC, so costs are predictable in USD terms regardless of any token's price action.
- Sub-second deterministic finality. No reorgs, no probabilistic finality. Once a transaction is finalized, it cannot revert.
- Opt-in privacy. Confidential transfers and selective disclosure for regulated counterparties (not yet integrated by Oneliq).
Arc is fully EVM-compatible: existing Solidity contracts, Hardhat / Foundry / Viem / ethers tooling all work without modification. Reference docs at docs.arc.network.
Circle Gateway
Circle Gateway is the protocol that powers Unified Balance. It replaces "I bridged my USDC to chain X and now I have to bridge it back" with "my USDC is already everywhere I need it."
The two on-chain contracts
GatewayWalletat0x0077777d7EBA4688BDeF3E311b846F25870A19B9on every Gateway chain. You deposit USDC into this contract; balances are held per-chain but indexed globally by the Gateway service.GatewayMinterat0x0022222ABE238Cc2C7Bb1f21003F0a260052475Bon every Gateway chain. Anyone with a valid Circle-signed attestation can callgatewayMintto materialize USDC on the destination chain.
Both addresses are deterministic across chains (CREATE2 deploy with the same salt), which is why Unified Balance can address every chain uniformly without a per-chain registry.
Gateway vs. CCTP - when to use which
| Gateway | CCTP V2 | |
|---|---|---|
| Best for | Multi-chain treasury, "I want my USDC available everywhere" | One-shot move from chain A to chain B |
| Latency | Seconds (off-chain attestation + one mint tx) | ~20s (Fast) or 13–19 min (Standard, free) |
| State held | Yes - balance lives in GatewayWallet until you spend it | No - fully transactional, USDC moves directly between user wallets |
| Min flow | 1 tx (deposit) + 1 tx (mint at spend time) | 2 txs (burn + receive) |
CCTP V2
Cross-Chain Transfer Protocol V2 is Circle's official bridge for native USDC. Unlike lock-and-mint bridges (which create wrapped tokens backed by frozen liquidity), CCTP burns native USDC on the source chain and mints native USDC on the destination - every USDC stays "real USDC" all the way through.
Why this matters
- No wrapped USDC variants. No
USDC.e, noaxlUSDC, no synthetic IOU. - No bridge TVL to drain - there's no pool of locked tokens for an attacker to target.
- Issuer-attested. Only Circle's signed attestation can authorize the destination mint.
Finality modes
- Fast (V2-only) - Circle's enhanced attestation pipeline issues the attestation ahead of full source-chain finality for supported pairs. Small Circle fee. Typical end-to-end: ~20 seconds.
- Standard - Circle waits for source-chain finality (two beacon epochs on Ethereum, instant on Arc). Zero fee. Typical: 13–19 minutes when Sepolia is the source.
Programmable Wallets & Paymaster
Circle Programmable Wallets are smart-account wallets Circle issues on demand via REST API. Oneliq's Auto-Replenish Agent uses them as the executor account - every scheduled or threshold-triggered USDC move is a userOp signed by a Programmable Wallet under server-side custody, paid for by Circle Paymaster.
Why this is safe
- The executor wallet doesn't hold your funds. It only spends what you've explicitly permitted via EIP-2612 - and only along the rule you signed. No discretionary access.
- Permits are revocable. One on-chain call (the standard ERC-2612 path or our UI's Revoke button) zeroes the allowance. The executor cannot pull a single USDC unit afterward.
- Paymaster is gas-only. Circle Paymaster sponsors gas for the userOp; it doesn't sign or authorize value transfers. The agent's executor still has to satisfy your permit + rule.
- Daily cap is enforced server-side AND in the smart-account. Two layers of defense - even a backend bug can't exceed the on-chain limit you signed.
USDC as native gas
Most chains use a volatile native token for gas (ETH, MATIC, AVAX). Arc uses USDC. The practical impact:
- Gas costs are predictable in USD terms - a transfer that costs $0.001 today costs $0.001 tomorrow, regardless of any token's price action.
- You don't need to maintain a "gas reserve" in a separate token. The same USDC you spend with pays for the transaction.
- Internally, native USDC has 18 decimals (to match standard EVM gas math), distinct from the canonical 6-decimal Circle USDC. The frontend handles the conversion at the burn/mint boundary using a
cctpDecimalshint on the token registry.
Implementation note
Arc's USDC lives at 0x3600000000000000000000000000000000000000 as a precompile-style
ledger token, not a deployed ERC-20. Standard balanceOf/transfer/
approve all work, but the token cannot be deposited via transferFrom
to any contract that wasn't designed for native gas - which is why Gateway deposits originate
from other chains.
Network info - Arc Testnet
| Field | Value |
|---|---|
| Chain ID | 5042002 (0x4cef52) |
| RPC URL | https://rpc.testnet.arc.network |
| Currency | USDC (18-decimal native gas) |
| Explorer | testnet.arcscan.app |
| Faucet | faucet.circle.com |
| Finality | Sub-second deterministic |
| CCTP domain | 26 |
| EVM compatibility | Full (Solidity, Foundry, Hardhat, Viem, ethers) |
Supported chains
Oneliq surfaces eight testnets - Arc as the home chain plus seven external chains for Unified Balance, CCTP bridging, and the Auto-Replenish Agent.
| Chain | Chain ID | CCTP domain | RPC | Role |
|---|---|---|---|---|
| Arc Testnet | 5042002 | 26 | rpc.testnet.arc.network | Home - Trade, Mint destination, Token Deployer |
| Ethereum Sepolia | 11155111 | 0 | ethereum-sepolia-rpc.publicnode.com | Gateway · CCTP · Agent |
| Base Sepolia | 84532 | 6 | sepolia.base.org | Gateway · CCTP · Agent |
| Avalanche Fuji | 43113 | 1 | api.avax-test.network | Gateway · CCTP · Agent · fastest |
| Arbitrum Sepolia | 421614 | 3 | sepolia-rollup.arbitrum.io | Gateway · CCTP · Agent |
| OP Sepolia | 11155420 | 2 | optimism-sepolia.publicnode.com | Gateway · CCTP · Agent |
| Polygon Amoy | 80002 | 7 | rpc-amoy.polygon.technology | Gateway · CCTP · Agent |
| Unichain Sepolia | 1301 | 10 | sepolia.unichain.org | Gateway · CCTP · Agent |
Contract addresses
All contracts Oneliq interacts with on Arc Testnet (chain ID 5042002):
Tokens
| Token | Address | Decimals | Issuer |
|---|---|---|---|
| USDC (native gas) | 0x3600000000000000000000000000000000000000 | 18 / 6 (CCTP) | Circle / Arc |
| EURC | 0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a | 6 | Circle |
Circle Gateway V1
Same deterministic addresses on every Gateway-supported chain.
| Contract | Address |
|---|---|
| GatewayWallet | 0x0077777d7EBA4688BDeF3E311b846F25870A19B9 |
| GatewayMinter | 0x0022222ABE238Cc2C7Bb1f21003F0a260052475B |
Circle CCTP V2
Same addresses on every CCTP V2 chain.
| Contract | Address |
|---|---|
| TokenMessengerV2 | 0x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA |
| MessageTransmitterV2 | 0xE737e5cEBEEBa77EFE34D4aa090756590b1CE275 |
Uniswap V2 (Arc Foundation deploy - App Kit fallback)
Used by Trade as the same-chain swap fallback if Circle App Kit's SDK is unreachable.
| Contract | Address |
|---|---|
| Router | 0x48a9bd1644ac67fbef4183261c466bea3eb333fc |
| Factory | 0x45dd35611179ae6663ae47791175d7d598ced086 |
Arc-native
| Contract | Address |
|---|---|
| FxEscrow (StableFX - roadmap) | 0x867650F5eAe8df91445971f14d89fd84F0C9a9f8 |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 |
Oneliq does not own or operate any smart contracts. All contracts above are operated by Circle or the Arc Foundation, and verified on the Arc explorer.
API endpoints
Oneliq exposes a handful of Cloudflare Pages Functions. Two are read-only proxies to Circle's public APIs; the others are the minimal backend the Auto-Replenish Agent needs (rule storage, cron triggers, execution log). None hold private keys, none custody funds.
/api/circle-proxy/*
Proxies Circle's IRIS attestation API for CCTP. Used by the Trade module to poll for attestations after a burn transaction.
# Fetch attestation by burn message hash
GET /api/circle-proxy/v2/messages/{sourceDomain}?transactionHash={txHash}
↓ proxies to https://iris-api-sandbox.circle.com/v2/messages/...
/api/gateway-proxy/*
Proxies Circle's Gateway public REST API. Used by Unified Balance to fetch balances and submit signed transfer intents.
# Read multi-chain balance
POST /api/gateway-proxy/v1/balances
# body: { token, sources: [{ domain, depositor }] }
# Submit a signed burn-intent for cross-chain spend
POST /api/gateway-proxy/v1/transfer
# body: signed EIP-712 BurnIntent
/api/agent/*
The agent backend. Reads are filtered by your connected-wallet signature; writes require an EIP-712 typed signature matching the rule payload.
# Register a new rule (Auto Top-Up or Scheduled Send)
POST /api/agent/register
# body: { rule, eip712Signature, permitSignature }
# List agents owned by the connected wallet
GET /api/agent/list?owner={address}
# Execution log for a single agent
GET /api/agent/{id}/executions
# Pause / resume / revoke
POST /api/agent/{id}/pause
POST /api/agent/{id}/resume
POST /api/agent/{id}/revoke
/api/metrics/*
Read-only telemetry rollup used by status.oneliq.xyz. Compute-on-write so a
single /summary call doesn't trigger 273× KV reads.
Supported wallets
Any browser wallet announcing itself via EIP-6963 appears in the picker. Tested with:
- MetaMask - most common, widest compat.
- Rabby - recommended for active DeFi users (better tx simulation, native multi-chain UX).
- Coinbase Wallet - extension or injected.
- Frame - desktop-native, hardware-wallet friendly.
- Ledger / Trezor - through MetaMask, Rabby, or Frame.
- Brave Wallet - works via the standard injected provider.
Mobile wallets via WalletConnect / Reown AppKit are on the near-term roadmap (see Changelog).
Tech stack
Deliberately minimal. Every choice was made to maximize auditability and minimize attack surface.
ethers.js v6 via SRI-pinned UMD CDN - the only runtime dependency.agent-cron) runs every minute to scan and fire active agent rules.Why no framework?
- Auditability. Every line shipped to your browser is in the repo as written, not generated by a bundler. You can diff the served HTML against the GitHub source byte-for-byte.
- SRI integrity. The only third-party script (ethers.js) is pinned by SHA-384. Any tamper at the CDN fails to load instead of executing.
- Performance. No runtime, no hydration. The Balance page is interactive in < 200 ms after first byte.
- Footprint. No
node_modules, no supply-chain blast radius fromnpm install, no dependency CVEs.
Security
Oneliq takes a defense-in-depth approach. Highlights:
- Non-custodial. No user funds ever flow through Oneliq-controlled addresses. The agent executor is a Circle Programmable Wallet bound to permits you explicitly signed.
- Open source. The entire frontend is published. Verify the served build matches the committed source.
- Strict CSP. A
Content-Security-Policyheader constrains script, style, image, font, and connect origins per page. There is no'unsafe-eval'. - SRI on every CDN script. ethers.js (and any other CDN asset) carries a SHA-384 integrity hash; CDN tampering fails closed.
- Host security headers. HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy - all set via Cloudflare Pages
_headers. - No third-party tracking. No analytics, no fingerprinting scripts, no marketing pixels. The only third-party origins reachable are the chain RPCs and Circle's APIs explicitly allowlisted in the CSP.
- Pre-flight checks. Every deploy runs
scripts/preflight-check.sh- six gates covering CSP, SRI, secrets hygiene, redirects, and host headers. - Agent safety rails. Daily cap (signed on-chain), revocable permit, auto-pause after 5 consecutive failures, two-layer cap enforcement (server + smart-account).
Found a vulnerability? Report it via SECURITY.md - bug-bounty rewards from $100 (low) to $50,000 (critical), depending on impact. Coordinated disclosure expected.
FAQ
When should I use Unified Balance vs. Trade (CCTP)?
Use Unified Balance when you want USDC ready to spend on multiple chains over time. Deposit once, spend many times - latency at spend is in the seconds. Use the Trade cross-chain mode (CCTP V2) for a one-shot move from chain A to chain B where you don't need to pre-fund.
Why is my CCTP bridge taking 13 minutes?
You're on Standard finality. Circle waits for source-chain finality before issuing the attestation - sub-second on Arc, but ~13 min on Ethereum Sepolia (two beacon-chain epochs). Switch to Fast finality for supported pairs to bring this down to ~20s for a small fee.
Can the agent drain my wallet?
No. The agent can only pull what your EIP-2612 permit explicitly authorizes - bounded by the daily cap you signed on-chain. Revoke the permit at any time and the agent literally cannot pull a single USDC unit. The executor's smart account holds no private keys you didn't authorize via signature.
Where do agent rules live?
Rules and execution logs are stored in Cloudflare KV, keyed by your wallet address with the EIP-712 signature serving as ownership proof. We never see your private key - only your public address and the typed-data signature.
Does Oneliq have its own token?
No. Oneliq is a frontend, not a protocol. There is no ASWP token, no airdrop campaign, no governance token sale. Anyone telling you otherwise is running a scam.
When mainnet?
Arc mainnet is governed by the Arc Foundation; Oneliq deploys on mainnet shortly after Arc launches. See the homepage roadmap for current milestones.
Why don't you use a bigger frontend framework?
We optimized for auditability and minimum supply-chain risk. See Tech stack.
Changelog
v0.10.x - Public Beta on Arc Testnet
- 2026-05-20 - Docs rewrite. Dropped Vault / Pools / Points sections (no longer being built). Added Trade, Agent, History, Create Token, Dashboard reference pages. Updated contract registry - USYC removed, App Kit fallback noted on the Uniswap V2 entry.
- 2026-05-18 - Trade declutter - removed App Kit ready pill, Gateway hint pill, Liquidity card. Quote latency cut via 150ms debounce + SDK prefetch.
- 2026-05-15 - Balance polish - circular chain logos, Unichain added to the chain registry, CCTP-domain subtext dropped.
- 2026-05-12 - History page launched. Receipt-feed aesthetic across Trade / Balance / Agent activity, segmented tabs, deep-link to chain explorer.
- 2026-05-08 - Agent v0.9 - auto-pause after 5 consecutive failures; admin diagnostic endpoint for failure log; Cloudflare cron rollout.
- 2026-05-04 - Real Unified Balance with multi-source spend; wallet picker (EIP-6963 + RDNS-based ranking).
- 2026-04-25 - Security baseline: CSP, SRI, host headers, vulnerability disclosure policy, pre-flight check script.
- 2026-04-20 - Initial homepage launch.
Upcoming
- Balance / Agent / Trade - UX deepening - Q2 2026 focus on polishing the three live surfaces. Intent / approval / revoke flows, quote & route polish.
- Dashboard GA - operator control center moves from soon to public.
- WalletConnect / Reown AppKit - mobile wallet support.
- Circle Wallets onboarding - non-crypto-native users land directly on a Programmable Wallet.
- StableFX - RFQ-driven USDC ⇄ EURC ⇄ USDP PvP settlement via the Arc
FxEscrowcontract. - Mainnet - shipping shortly after Arc Foundation launches Arc L1 mainnet.