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.

Live · Arc Mainnet Version 0.11.0 Updated 2026-10-03

Introduction

Oneliq is a unified stablecoin platform that simplifies how people use USDC across chains. Built on Circle's infrastructure and designed for the Arc Layer 1, Oneliq brings trading, cross-chain balance management, automation, and onboarding into one seamless experience. 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. The output can be parked straight into your Unified Balance.OneliqRouter → Uniswap v4/v3 + CCTP V2
Unified BalanceOne USDC balance across every supported chain. Deposit from any chain, spend instantly on Arc - no bridge clicks, no wrapped tokens. Batch Pay and Consolidate sit on top of the same engine.Circle Gateway V1
ExploreEvery token trading on Arc with live price, 1H/1D change, FDV and volume read from the pools. Each token opens a detail page with an on-chain chart, real 24h stats and an inline swap.GeckoTerminal + DexScreener + Arc RPC
HistoryA receipt-style feed of every Trade and Balance moment on your USDC activity. Filter by surface, jump to the chain explorer in one click.Per-wallet history API
DashboardYour portfolio home. Total value with 24h change, holdings per token, allocation donut, unified balance across Gateway chains, and recent activity.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. We deploy exactly two small contracts on Arc - OneliqRouter (the swap fee router) and OneliqCheckIn (the daily check-in contract) - and neither can hold your balance. Everything that moves value is Circle's. What lives on our origin is static HTML, a few KB of shared JavaScript, a handful of stateless proxy routes, and two Cloudflare Workers.

# Oneliq layered architecture
┌─ UI Layer ────────────────────────────────────────────────────────────┐
│  index · trade · explore · balance · history · dashboard · docs       │
│   plain HTML + CSS + vanilla JS, no framework, no build step          │
└────────────────────────────────────────────────────────────────────────┘
                                  ↓
┌─ Shared JS modules (assets/) ─────────────────────────────────────────┐
│  arc-core-v2.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, history, metrics) ──────────────┐
│  /api/circle-proxy/*   → CCTP V2 IRIS attestation API                 │
│  /api/gateway-proxy/*  → Circle Gateway public REST API               │
│  /api/history/*        → per-wallet Trade / Balance receipts          │
│  /api/recipients/*     → saved payees for Batch Pay                   │
│  /api/metrics/*        → aggregated read-only telemetry rollup        │
│  /auth/*               → Discord linking + wallet profile             │
└────────────────────────────────────────────────────────────────────────┘
                                  ↓
┌─ Cloudflare Workers (scheduled) ──────────────────────────────────────┐
│  kv-backup        → nightly KV snapshot of profiles and history        │
└────────────────────────────────────────────────────────────────────────┘
                                  ↓
┌─ 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         │
└────────────────────────────────────────────────────────────────────────┘

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 Mainnet. Open oneliq.xyz/trade, click Connect, and approve the network prompt. Manual params are in the Network info table below.
  3. Get USDC onto Arc. Arc uses USDC as native gas, so the same balance pays fees and funds whatever you do with it. There is no faucet on mainnet - bring USDC in from a chain you already hold it on. See Get USDC on Arc.
  4. Open Balance. Deposit USDC from any supported chain (Ethereum, Base, Avalanche, Arbitrum, OP, Polygon, Unichain) into the Gateway. Your unified balance updates in seconds.
  5. Spend from Balance. Pick a destination chain and recipient. Multi-source unified spend pulls from N chains in one signature and mints native USDC on the destination. Trade is the surface for swapping and bridging instead.
Tip
Gateway credits a deposit once the source chain reaches the finality it requires, so the source chain sets the wait. Avalanche is the quickest of the supported set; Ethereum is the slowest, because it waits two beacon-chain epochs. Both are a one-time cost - once the USDC is in your unified balance, spending from it is instant.

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 Mainnet manually

If your wallet doesn't auto-prompt or you prefer to add the network by hand:

FieldValue
Network nameArc Mainnet
RPC URLhttps://rpc.mainnet.arc.io
Chain ID5042 (0x13b2)
Currency symbolUSDC
Block explorerexplorer.arc.io

Get USDC on Arc

Arc uses USDC as the native gas token, so a single balance pays transaction fees and funds everything else - deposits, swaps, agent funding. Mainnet has no faucet: USDC has to come from a chain you already hold it on. Three routes, in the order most people want them:

  1. Unified Balance (recommended). Open Balance, deposit USDC from any supported chain into Circle Gateway, then spend to Arc. The spend mints native USDC on Arc, which is exactly the balance that pays gas. This is the path that works even with an empty Arc wallet, because Gateway's forwarder can mint for you without you holding Arc gas first.
  2. Trade (CCTP V2). Open Trade, pick a source chain and Arc as the destination. Burns on the source, attests, mints on Arc.
  3. Circle's own bridge. bridge.usdc.com lists Arc as a destination if you would rather not use Oneliq for the first hop.
This is mainnet
Every balance here is real money and every transaction is final. Check the chain ID is 5042 before you sign, and send only to addresses you control. Arc still has a testnet faucet if you want to rehearse a flow first - switch the network on that page, not here.

Trade

The /trade page is the spend surface. It unifies same-chain swap (any Arc pair via OneliqRouter into Uniswap) 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)

Swaps that stay on Arc route through our own OneliqRouter contract, which forwards the trade into Uniswap - v4 through the Universal Router and Permit2, or v3 through SwapRouter02 - and takes a transparent 0.30% on-chain protocol fee, hard-capped at 1%. The quote comes from the Uniswap quoter for whichever version holds the deeper pool, and is debounced at 150 ms on the source-amount input. Explore lists every Arc pool the router can reach.

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 → 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 (Ethereum, Base, Arbitrum, OP, Polygon, Avalanche, 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 once the source chain finalises - quickest on Avalanche, slowest on Ethereum, which waits two beacon-chain epochs. 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.

Spend: three modes

The ↗ Spend modal lets you choose how the source funds are allocated. You enter a recipient, an amount, and a destination chain; the mode decides where the USDC comes from.

ModeSourcingUse case
⚡ AutoOneliq picks source chains for you, available-USDC first. If no single chain covers the amount, it aggregates several into one BurnIntentSet and settles in one signature.The default - just spend without thinking about where funds sit.
SingleThe full amount is drawn from one chain you pick.Predictable draw-down when you know which balance to drain.
ManualYou set an amount from each chain individually; the spend is assembled from your custom allocation.Full control over exactly how each leg settles.

In every mode, a partial-liquidity route that spans several chains is still a single EIP-712 signature: one BurnIntentSet → one attestation → one mint on the destination. No popup-per-chain.

Estimate before you sign

Before the wallet popup, Oneliq shows the route, the per-intent fee, and the recipient outcome via ARC.gateway.estimateSpend(). Cost is visible up front. When a spend can't be fully covered, the UI names why - insufficient balance, no viable route, or needs aggregation across sources - instead of a generic error.

⇉ Batch Pay

Batch Pay sends USDC to many recipients from one Unified Balance. Each recipient has its own address, amount, and destination chain. Oneliq runs a non-overlapping allocation across your balances so no chain's funds are double-spent, then groups recipients by destination chain: one signature per destination. Recipients that all land on the same chain settle in a single signature; a payout spanning K destination chains becomes K signatures, one click each. Built for payroll, contributor payouts, or fanning funds out to a set of wallets.

Rows can be typed one at a time or pasted in bulk - address, amount, chain per line, with the chain column optional. Everyone you successfully pay is remembered in a recipient book stored against your wallet address, so the list follows you to another browser or device instead of living in one browser's storage.

Circle's per-request rules
A single BurnIntentSet must share one destination domain, so cross-chain batches are grouped per destination. Each group is also capped at 16 intents per request. Note the cap counts intents, not recipients: every source chain a recipient draws from is its own intent, so a fragmented balance uses the budget faster. Oversized groups are split into extra signatures automatically, and the preview says how many and why.

⤵ Consolidate

Consolidate is the mirror of Batch Pay. It sweeps your entire spendable balance from every chain except a chosen destination onto that one chain, in a single signature, minting back to your own wallet. It reuses the Auto-spend engine with the recipient set to you. Chains whose balance is too small to clear their per-intent fee floor are skipped automatically (and listed in the preview) rather than failing the whole sweep. Use it to tidy dust across chains or stage liquidity where you need it next.

If you close the tab mid-transfer

A forwarded spend is recorded locally the moment it is submitted, together with the attestation needed to finish it. Reconnect the same wallet and Oneliq re-checks the transfer with Gateway: already minted, it just clears the record; still pending, it waits for the forwarder and falls back to a self-mint if that fails. Terminal outcomes (failed or expired) are cleared rather than retried forever.

Gasless mint, on by default
Cross-chain spends route the destination mint through Circle's Forwarding Service, so Circle submits and pays for the mint. The recipient receives USDC without holding gas first - which matters on Arc, where gas is USDC. The per-intent source burn fee is separate and always applies.

Withdrawals

Withdrawals are two-step. You initiate a withdrawal on the source chain, which queues it through Gateway's safety delay. 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.

History

The /history page is your personal stablecoin operations explorer. Every transfer, swap and bridge 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 are recorded local-first in your browser's activity log (arc.trade.activity.v1) and also mirrored to /api/history/*, keyed by your wallet address, so the feed follows your wallet across browsers and devices. Agent events come from the backend endpoints which only return rows where you're the rule owner (server-side auth).

Dashboard

The /dashboard page is your portfolio home - a read-only aggregator over everything a connected wallet holds. It shows your profile (deterministic avatar + address), total portfolio value with 24h change, a Holdings table (USDC / EURC on Arc Mainnet, with live price and value), an allocation donut, your unified USDC balance across Gateway chains, and a recent-activity feed mirrored from History.

It's a pure aggregator - no Gateway writes happen on this page. Prices come from CoinGecko (USDC pinned to $1) and every card deep-links to Balance, Trade, or History.

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

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 Mainnet

FieldValue
Chain ID5042 (0x13b2)
RPC URLhttps://rpc.mainnet.arc.io
CurrencyUSDC (18-decimal native gas)
Explorerexplorer.arc.io
FinalitySub-second deterministic
CCTP domain26
EVM compatibilityFull (Solidity, Foundry, Hardhat, Viem, ethers)

Arc Testnet (chain ID 5042002, rpc.testnet.arc.network, CCTP domain 26) is still reachable for rehearsal, with USDC from faucet.circle.com. Mainnet is the default everywhere in the app.

Supported chains

Oneliq surfaces eight mainnets - Arc as the home chain plus seven external chains for Unified Balance and CCTP bridging.

ChainChain IDCCTP domainUSDCRole
Arc Mainnet504226native gasHome - Trade, Mint destination
Ethereum100xA0b8…eB48Gateway · CCTP · Agent
Base845360x8335…2913Gateway · CCTP · Agent · Uniswap v3
Avalanche C-Chain4311410xB97E…8a6EGateway · CCTP · Agent
Arbitrum One4216130xaf88…5831Gateway · CCTP · Agent
OP Mainnet1020x0b2C…Ff85Gateway · CCTP · Agent
Polygon PoS13770x3c49…3359Gateway · CCTP · Agent
Unichain130100x078D…7AD6Gateway · CCTP · Agent

Contract addresses

All contracts Oneliq interacts with on Arc Mainnet (chain ID 5042). Every address below is readable on explorer.arc.io.

Tokens

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

USDC appears twice on purpose. The balance that pays gas is the L1 native ledger with 18 decimals; 0x3600…0000 is its ERC-20 face, and CCTP moves it in 6-decimal units. Oneliq converts between the two at every boundary rather than assuming one of them.

Circle Gateway V1

Same deterministic addresses on every Gateway-supported mainnet.

ContractAddress
GatewayWallet0x77777777Dcc4d5A8B6E418Fd04D8997ef11000eE
GatewayMinter0x2222222d7164433c4C09B0b0D809a9b52C04C205

Circle CCTP V2

Same addresses on every CCTP V2 mainnet.

ContractAddress
TokenMessengerV20x28b5a0e9C621a5BadaA536219b3a228C8168cf5d
MessageTransmitterV20x81D40F21F12A8F0E3252Bccb954D722d4c464B64

OneliqRouter (Oneliq swap router → Uniswap on Arc)

Used by Trade, Explore and the Agent for swaps that stay on Arc. It wraps Uniswap and takes a transparent 0.30% on-chain protocol fee, hard-capped at 1% in the bytecode. Verified at deploy: feeBps() reads 30 and paused() reads false on chain.

The live router carries two paths: swap() goes to Uniswap v4 through the Universal Router and Permit2, and swapV3() goes to Uniswap v3 through SwapRouter02 directly - Arc's Universal Router v3 handler reverts with SliceOutOfBounds on every input shape, so v3 pairs are routed around it. It measures the pool's actual output by balance delta instead of trusting the number the pool reports, keeps a fee ledger a withdrawal can never exceed, and carries a deadline, a reentrancy guard, a pause switch and two-step ownership. The earlier v4-only deployment stays on chain so its swaps remain verifiable, but nothing routes to it.

ContractAddress
OneliqRouter (live, v4 + v3)0x3635F71daA996e22867647cC58358c5803133A69
OneliqRouter (v4-only, superseded)0xB1Ed79ee288C4631176440b7f4e624C6B4f078F0

Uniswap on Arc

Uniswap's official Arc deployment. Oneliq quotes against these and routes through them; it operates none of them.

ContractAddress
v4 PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
v4 Quoter0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
v4 Universal Router0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1
v4 PositionManager0x6049c9a0e26405C0985f9E3685C87d0aE917f82B
v4 StateView0xF3334192D15450CdD385c8B70e03f9A6bD9E673b
v3 SwapRouter020x53bf6b0684ec7ef91e1387da3d1a1769bc5a6f77
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3

OneliqCheckIn (check-in contract)

Immutable, no owner and no upgrade path. Counts days in UTC, which is why the streak logic in the app does the same.

ContractAddress
OneliqCheckIn0x0cccbe2F3acEc01d71B38249a1d103117c8473Ac

Arc-native

ContractAddress
FxEscrow (StableFX - roadmap)0xe2E5F173576B513d994073CCbDaCBE027d43DFe6
Multicall30xcA11bde05977b3631167028862bE2a173976CA11

Oneliq deploys exactly two contracts - OneliqRouter and OneliqCheckIn - and both are published and verified. Neither can hold your balance: the router forwards a swap within a single transaction, and the check-in contract moves no funds at all. Every other contract above is operated by Circle or the Arc Foundation.

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 app 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 https://iris-api.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/history/* and /api/recipients/*

Per-wallet storage, keyed by address and capped in size: the receipt feed behind History, and the recipient book behind Batch Pay. Both exist so the data follows your wallet across browsers instead of being trapped in one browser's local storage. Neither can move funds.

/auth/*

Discord account linking for the wallet profile - the Connect Discord option in the Profile menu and the profile record it writes. Identity only: it holds no funds and has no signing authority.

/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. Headline counters are re-derived from Arc itself - router swaps and check-in totals read straight off-chain - rather than trusted from our own store.

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 proxies, the per-wallet history and recipient stores, and the telemetry rollup.
Cron
kv-backup snapshots KV nightly.
AI
Cloudflare Workers AI via the platform binding - no third-party model provider, no model key.
Theming
One shared token set drives a light and a dark theme across every page; the choice is remembered.
Source
~20 HTML pages + a handful of 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. There is no funded bug-bounty program today; a valid report gets triage and a fix, credit in the Hall of Fame, and a discretionary thank-you in proportion to 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 (two beacon-chain epochs). Switch to Fast finality for supported pairs to bring this down to ~20s for a small fee.

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.11.x - Live on Arc Mainnet

Upcoming

© 2026 Oneliq · Arc Mainnet · v0.11.0
Home  ·  Blog  ·  Security  ·  X  ·  Discord