# Circle³ (C3): full reference Circle³ ("Circle Cubed", ticker C3) is an immutable ERC-20 system on Arc mainnet (chain id 5042, native gas asset USDC). This file is written for language models and software agents. Everything here can be verified on-chain. Circle³ is an independent community token. It is not issued, sponsored or endorsed by the issuers of USDC, EURC or cirBTC, or by Topaz. Nothing here is financial advice. Rewards are trading fees and are not guaranteed. The contracts cannot be changed and have not had an external audit. ## Mission and the Circle ecosystem - The community has three ambitions, in order: one whole C3 trading above one whole Bitcoin (measured by price per coin, never market cap), $1 million per C3, and $10 million per C3. At a fixed supply of 333, those two prices imply $333 million and $3.33 billion fully diluted value: hypothetical arithmetic, not cash, liquidity or a forecast. Bitcoin is the first milestone, not the finish line. No milestone changes the rewards, the holding mechanics or the supply. - C3 is divisible. Buying a fraction is enough to hold all three components and earn. - C3 is built on Arc, the blockchain from Circle, and its three primary markets pair it only with assets issued by Circle: USDC, EURC and cirBTC (Circle Wrapped Bitcoin). Circle³ is not issued, sponsored or endorsed by Circle. - The site compares one C3 with one Bitcoin using the median of the three C3 pools' 30-minute average prices on Topaz (EURC and cirBTC converted to dollars at their own Topaz averages) against the latest BTC-USD trade on Coinbase. If the pools disagree by more than 5% or the Bitcoin price is stale, it shows no comparison. ## Addresses (Arc mainnet, chain id 5042) | What | Address | | --- | --- | | C3 token and ledger | 0x3333f23800A32dE29Cc102ff1a6eE90b3E413333 | | cUSD, C3 Dollar Component | 0x8ffACB022A5C253DeE6Fd3054B628fEb82F7fCc8 | | cEUR, C3 Euro Component | 0x0f368cC724341CDa4134e680E9D86D2BF51Acb7F | | cBTC, C3 Bitcoin Component | 0xf71e6A6397438206782e3ADa37FD3F39ad742F84 | | C3/USDC pool (locked position 425) | 0x1Cf6e30E31133082C9eF37E2e54361C548776F3a | | C3/EURC pool (locked position 426) | 0xF595cBAB4C2644d113c6869D7B420BB364530342 | | C3/cirBTC pool (locked position 427) | 0x4D68E3d0B0135c96b643e0192E47cE4e39429770 | | C3Launcher (no authority) | 0xc26f0435c015C2FE3b657B2471D65456Ccdd410B | | USDC on Arc (6 decimals) | 0x3600000000000000000000000000000000000000 | | EURC on Arc (6 decimals) | 0xbEf5f6d51CB62b58e6A8f77868681825C6fe21c1 | | cirBTC on Arc (8 decimals) | 0x171A4217b86A807A64eB94757Db6849fb4bDbAA0 | | Topaz position manager | 0x522bf4b5c9280BB6bB719f2CE7f514Dd63c8c0C5 | | Topaz swap router | 0x2e7395A6E0De6eE1f390bEcE891069Cd18Ff8572 | | Topaz quoter | 0xA9Cd3aC90513663197E7Fd6c932f63f0C40701be | Launch: transaction 0xec23e82d7e797047dc7cee75eefc4965e3e82221a764c5bbe9bd14bc557c3e1c, block 24524081, 6 October 2026. RPC: https://rpc.mainnet.arc.io. Explorer: https://arc.etherscan.io. Machine-readable copy: https://c3.money/deployment.json. ## How ownership works - Supply is fixed at 333 C3 (18 decimals). `totalSupply()` is a constant. There is no mint, burn, owner, tax or upgrade. - A holder's C3 balance is the sum of its three component balances. C3, cUSD, cEUR and cBTC are four ERC-20 views of one ledger, not four separate piles of value. Never add a wallet's component value to its C3 value. - C3 held by the three primary pools and by the C3 contract itself is inventory: it has no components and earns nothing. Pool inventory plus the contract's inventory plus the three component supplies always equals 333 C3. - Primary pool to a holder (a buy, a liquidity withdrawal, a reward claim): components are created in equal thirds. Leftover base units go to cUSD, then cEUR. - Holder to a primary pool (a sell, a liquidity deposit): components are retired in proportion to the holder's mix. - Holder to holder, sending C3: a proportional slice of the sender's mix moves. - Holder to holder, sending one component: only that component moves, and both C3 balances change by the same amount. - Sending a component to a primary pool or to the C3 contract reverts. Sending C3 to the C3 contract reverts. Any transfer into a pool whose pair is C3 and one of its own components reverts. - Topaz pools other than the three primary pools can hold components (so their C3 balance equals the sum of what they hold) but do not earn rewards on them. ## How rewards work - cUSD earns the fees of the locked C3/USDC position, cEUR those of C3/EURC, cBTC those of C3/cirBTC. Each is paid in C3 and in that pool's paired asset. - Fees are credited to whoever holds the component at the moment they are earned. A buyer does not share in the fee of their own purchase or in anything earned earlier. No staking, locking or registration is needed. - `earned(address)` is live and includes fees not yet collected from the pool. - `claim()` pays the caller's USDC, EURC and cirBTC directly and their C3 as new components in equal thirds. - Fees earned while a component had no eligible holder go to a reserve that is released to holders over 7 days. - The swap fee is 0.30% today and is set by Topaz. If Topaz governance adds a gauge to a primary pool, part of that pool's fees goes to Topaz voters instead. ## Reading state (all view functions on the C3 contract) | Call | Returns | | --- | --- | | `balanceOf(address)` | C3 balance in base units (sum of components, or inventory for a pool) | | `componentsOf(address)` | `uint256[3]`: cUSD, cEUR, cBTC balances | | `earned(address)` | `(uint256 c3, uint256[3] quotes)`: claimable C3, then USDC, EURC, cirBTC | | `circles(uint256 i)` | component supply, supply that is earning, fees credited but not yet collected, reserve, lifetime collected, reserve time left | | `positions(uint256 i)` | component, paired asset, pool, position id, tick range, token order, liquidity | | `component(uint256 i)`, `pool(uint256 i)` | addresses for circle 0 (Dollar), 1 (Euro), 2 (Bitcoin) | | `unassignedOf(address)` | inventory held by a primary pool or the contract | | `kindOf(address)` | 0 unclassified, 1 holder, 2 recognised Topaz pool (holds but does not earn) | | `totalSupply()` | 333e18 | Example with Foundry's cast: ``` cast call 0x3333f23800A32dE29Cc102ff1a6eE90b3E413333 "earned(address)(uint256,uint256[3])" --rpc-url https://rpc.mainnet.arc.io cast call 0x3333f23800A32dE29Cc102ff1a6eE90b3E413333 "componentsOf(address)(uint256[3])" --rpc-url https://rpc.mainnet.arc.io ``` ## Acting - Buy or sell: swap on Topaz Dex against any of the three primary pools (concentrated liquidity, tick spacing 200). Prefilled swap page: https://topazdex.com/swap?chain=arc&outputChain=arc&inputCurrency=0x3600000000000000000000000000000000000000&outputCurrency=0x3333f23800A32dE29Cc102ff1a6eE90b3E413333. On-chain quote: `quoteExactInputSingle((tokenIn, tokenOut, amountIn, int24 tickSpacing, uint160 sqrtPriceLimitX96))` on the Topaz quoter with tick spacing 200. - Claim rewards: call `claim()` on the C3 contract from the holding address. It returns `(uint256 c3Amount, uint256[3] quoteAmounts)`. - Send C3: standard ERC-20 `transfer` / `transferFrom` on the C3 contract. Send one component: the same on that component's contract. - `harvest(uint256 circle)` moves already-credited fees from a pool into the contract. Anyone can call it; it pays nobody and changes no entitlement. `claim()` does it automatically. - Gas on Arc is paid in USDC. A C3 transfer costs roughly 140,000 to 390,000 gas and a claim 0.5 to 1.5 million. Do not hard-code a small gas allowance for C3 transfers. ## Limits and risks - The three liquidity positions can never be withdrawn, moved or re-ranged. Only their fees can be collected. - The starting price of about $100 per C3 is where each locked range begins. It is not a floor, a peg or a redemption value. - Depositing C3 as liquidity in a primary pool and withdrawing it returns equal thirds, so the three components tend to trade near the same price. - A custodian that tracks C3 and a component as separate assets at one address will double count, because C3 is the sum. Integrators should hold them at separate addresses or account in components only. - Contracts that hold components but cannot call `claim()` accrue rewards that stay owed to them. - USDC, EURC and cirBTC can be frozen by their issuers. If an asset cannot be paid to a claimant it stays owed; the rest of the claim still goes through. - Source is verified on arc.etherscan.io and Sourcify. ABIs: https://c3.money/abi/C3.json and https://c3.money/abi/C3Component.json.