Home  /  Documentation

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.

Public Beta · Arc Testnet Version 0.10.0 Updated 2026-05-20

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:

SurfaceWhat it doesBuilt on
TradeSpend 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 BalanceOne 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 previewSign 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
HistoryA 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 TokenDeploy a custom ERC-20 to Arc in under a minute. Name, symbol, supply, decimals, mintable / burnable / pausable / capped toggles.Arc Testnet ERC-20
Dashboard soonOperator control center. Live portfolio across chains, agent fleet view, settlement volume, quick-actions tile grid.Read-only aggregator

Who is this for?

Design principles

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.

# Oneliq layered architecture
┌─ UI Layer ────────────────────────────────────────────────────────────┐
│  index · trade · balance · agent · history · token · dashboard        │
│   plain HTML + CSS + vanilla JS, no framework, no build step          │
└────────────────────────────────────────────────────────────────────────┘
                                  
┌─ Shared JS modules (assets/) ─────────────────────────────────────────┐
│  arc-core.js       → chain registry, token registry, ABIs, RPC      
│  arc-gateway.js    → Circle Gateway client (deposit, transfer, mint)
│  arc-appkit.js     → Circle App Kit wallet picker (EIP-6963)        
│  arc-ui.js / .css  → shared UI atoms (modal, toast, skeleton, nav)  
└────────────────────────────────────────────────────────────────────────┘
                                  
┌─ Cloudflare Pages Functions (proxies + agent API) ────────────────────┐
│  /api/circle-proxy/*   → CCTP V2 IRIS attestation API                 
│  /api/gateway-proxy/*  → Circle Gateway public REST API               
│  /api/agent/*          → register / list / pause / revoke agents      
│  /api/metrics/*        → aggregated read-only telemetry rollup        
└────────────────────────────────────────────────────────────────────────┘
                                  
┌─ Cloudflare Worker (cron, every minute) ──────────────────────────────┐
│  agent-cron       → scans rules, fires Programmable Wallet executions  
└────────────────────────────────────────────────────────────────────────┘
                                  
┌─ External protocols (we don't operate any of these) ──────────────────┐
│  Arc L1                  → EVM execution + USDC native gas               
│  Circle Gateway          → GatewayWallet / GatewayMinter + REST API      
│  Circle CCTP V2          → TokenMessenger / MessageTransmitter + IRIS    
│  Circle App Kit Swap     → same-chain USDC ⇄ EURC routing on Arc         
│  Circle Programmable     → smart-account executor + Paymaster gas        
│      Wallets               sponsorship for the agent                     
└────────────────────────────────────────────────────────────────────────┘

What "non-custodial" means in practice

Quick start

From a fresh browser to your first cross-chain USDC spend in five steps.

  1. Install a wallet. MetaMask, Rabby, Coinbase Wallet, Frame, or any EIP-6963-compliant browser wallet. See Supported wallets.
  2. Add Arc Testnet. Open oneliq.xyz/trade, click Connect, and approve the network prompt. Manual params are in the Network info table below.
  3. 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.
  4. Open Balance. Deposit USDC from any supported chain (Sepolia, Base, Fuji, Arbitrum, OP, Polygon, Unichain) into the Gateway. Your unified balance updates in seconds.
  5. 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.
Tip
For fastest testnet deposits, use Avalanche Fuji as your source chain - Gateway credits show up in ~30 seconds. Ethereum Sepolia takes 12–15 minutes (two beacon-chain epochs of finality).

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:

FieldValue
Network nameArc Testnet
RPC URLhttps://rpc.testnet.arc.network
Chain ID5042002 (0x4cef52)
Currency symbolUSDC
Block explorertestnet.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.

  1. Visit faucet.circle.com.
  2. Select Arc Testnet from the network dropdown.
  3. Paste your wallet address - delivery is typically under 30 seconds.
  4. 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.
Testnet only
Every asset on this network is a testnet token with no monetary value. Never send mainnet USDC or real funds to a testnet address - they are unrecoverable.

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)

  1. Choose source chain and destination chain (any pair from the 8 supported).
  2. Enter USDC amount and recipient address (defaults to your own).
  3. Pick a finality mode - Fast (~20 s, small Circle fee) or Standard (13–19 min, zero fee).
  4. Burn on source - calls TokenMessengerV2.depositForBurn(amount, destDomain, recipient, burnToken, ...).
  5. 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

Latency is dominated by the slowest chain
Arc has sub-second deterministic finality, so an Arc → other-chain bridge waits only on the destination's finality clock. An Ethereum Sepolia → Arc bridge waits 13+ minutes for two beacon-chain epochs before Circle issues the attestation. Fast-finality mode short-circuits this for supported pairs.

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

  1. Select a source chain with a USDC balance (Sepolia, Base, Arbitrum, OP, Polygon Amoy, Fuji, Unichain).
  2. Approve the GatewayWallet to pull USDC (one-time per chain per token).
  3. Deposit - your USDC moves from your wallet into the GatewayWallet contract on that chain.
  4. Done. Your unified balance updates in seconds (Fuji ~30s, Sepolia ~12-15 min). Spendable everywhere Gateway is supported.

Spend flow (mint on Arc)

  1. Submit an EIP-712 signed burn intent to Circle's Gateway service via POST /v1/transfer.
  2. Gateway validates available balance across all your deposits, signs an attestation.
  3. Your wallet calls GatewayMinter.gatewayMint(attestation, signature) on the destination chain.
  4. 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.

Why this is different from a normal bridge
A traditional bridge holds your USDC in a custodian contract and gives you a wrapped IOU. Gateway burns and re-issues native USDC attested by Circle. There's no bridge TVL to drain, no wrapped derivative to unwrap, and the USDC you spend is the same USDC accepted everywhere else.

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

  1. 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.
  2. 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.
  3. 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.
  4. Pause / resume / revoke. One-click in the agent drawer. Revoke yanks the permit; every future execution fails closed.

Safety rails

Modes

ModeWhen it firesUse case
Auto Top-UpTarget wallet's USDC drops below your floorKeep an ops wallet, a hot wallet, or a treasury sub-account always funded
Scheduled SendCalendar: once / daily / weekly / monthlyRecurring payouts, payroll, subscription disbursements
Preview status
The agent is in preview. Mainnet flows wait on Arc mainnet + the Circle Programmable Wallets production GA. Dry-run executions, telemetry, and feedback are all welcome - Discord is the fastest channel.

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

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

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:

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

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

GatewayCCTP V2
Best forMulti-chain treasury, "I want my USDC available everywhere"One-shot move from chain A to chain B
LatencySeconds (off-chain attestation + one mint tx)~20s (Fast) or 13–19 min (Standard, free)
State heldYes - balance lives in GatewayWallet until you spend itNo - fully transactional, USDC moves directly between user wallets
Min flow1 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

Finality modes

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

USDC as native gas

Most chains use a volatile native token for gas (ETH, MATIC, AVAX). Arc uses USDC. The practical impact:

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

FieldValue
Chain ID5042002 (0x4cef52)
RPC URLhttps://rpc.testnet.arc.network
CurrencyUSDC (18-decimal native gas)
Explorertestnet.arcscan.app
Faucetfaucet.circle.com
FinalitySub-second deterministic
CCTP domain26
EVM compatibilityFull (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.

ChainChain IDCCTP domainRPCRole
Arc Testnet504200226rpc.testnet.arc.networkHome - Trade, Mint destination, Token Deployer
Ethereum Sepolia111551110ethereum-sepolia-rpc.publicnode.comGateway · CCTP · Agent
Base Sepolia845326sepolia.base.orgGateway · CCTP · Agent
Avalanche Fuji431131api.avax-test.networkGateway · CCTP · Agent · fastest
Arbitrum Sepolia4216143sepolia-rollup.arbitrum.ioGateway · CCTP · Agent
OP Sepolia111554202optimism-sepolia.publicnode.comGateway · CCTP · Agent
Polygon Amoy800027rpc-amoy.polygon.technologyGateway · CCTP · Agent
Unichain Sepolia130110sepolia.unichain.orgGateway · CCTP · Agent

Contract addresses

All contracts Oneliq interacts with on Arc Testnet (chain ID 5042002):

Tokens

TokenAddressDecimalsIssuer
USDC (native gas)0x360000000000000000000000000000000000000018 / 6 (CCTP)Circle / Arc
EURC0x89B50855Aa3bE2F677cD6303Cec089B5F319D72a6Circle

Circle Gateway V1

Same deterministic addresses on every Gateway-supported chain.

ContractAddress
GatewayWallet0x0077777d7EBA4688BDeF3E311b846F25870A19B9
GatewayMinter0x0022222ABE238Cc2C7Bb1f21003F0a260052475B

Circle CCTP V2

Same addresses on every CCTP V2 chain.

ContractAddress
TokenMessengerV20x8FE6B999Dc680CcFDD5Bf7EB0974218be2542DAA
MessageTransmitterV20xE737e5cEBEEBa77EFE34D4aa090756590b1CE275

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.

ContractAddress
Router0x48a9bd1644ac67fbef4183261c466bea3eb333fc
Factory0x45dd35611179ae6663ae47791175d7d598ced086

Arc-native

ContractAddress
FxEscrow (StableFX - roadmap)0x867650F5eAe8df91445971f14d89fd84F0C9a9f8
Multicall30xcA11bde05977b3631167028862bE2a173976CA11

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.

No API key on the client
Circle's Gateway API requires a server-issued bearer token. The Pages Function injects it server-side; the browser never sees it. The token is scoped to read-only and intent-submission endpoints - it cannot move user funds.

Supported wallets

Any browser wallet announcing itself via EIP-6963 appears in the picker. Tested with:

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.

Frontend
Plain HTML + CSS + vanilla JavaScript. No framework, no JSX, no transpiler, no build step.
On-chain library
ethers.js v6 via SRI-pinned UMD CDN - the only runtime dependency.
Hosting
Cloudflare Pages - edge CDN, DDoS protection, automatic HTTPS.
Functions
Cloudflare Pages Functions for the proxy + agent API routes.
Cron
Cloudflare Worker (agent-cron) runs every minute to scan and fire active agent rules.
Source
~12 HTML files + four shared JS modules. First paint < 1s on 4G.

Why no framework?

Security

Oneliq takes a defense-in-depth approach. Highlights:

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

Upcoming

© 2026 Oneliq · Arc Testnet · v0.10.0
Home  ·  Blog  ·  Security  ·  X  ·  Discord