Overview
The protocol turns a single statement — this is worth X — into a market. A creator names an asset, sets its floor value in US dollars, and AnyQuote mints a fixed supply into a Uniswap V3 position whose lower bound is that value. The position is locked permanently. Above the floor the token trades freely; below it the pool simply has no liquidity to sell into.
Every asset is quoted in something: USDC, an Arc ecosystem token, or another AnyQuote asset. That lets markets stack — a speculative token can be quoted in a priced one, so its volume is also demand for the asset underneath it.
A floor value is a statement by the creator. AnyQuote does not appraise, verify or endorse any asset. The floor is a structural property of the pool, not a promise about the thing it represents.
Arc and USDC
Arc is an EVM chain whose gas token is USDC. The native balance and the ERC-20 at 0x3600000000000000000000000000000000000000 are one and the same: sending USDC as msg.value (18 decimals) makes it spendable as ERC-20 USDC (6 decimals) in the same call. AnyQuote uses this throughout:
- Buys are paid in native USDC — no approval step, one transaction.
- The launch fee (1 USDC) and the optional first buy ride along as
msg.value. - Sells pay out in USDC by default, or in the asset's quote token on request.
Blocks are about half a second apart, and a single transaction is capped at 224 gas. A launch uses roughly 6M.
Architecture
Four contracts, one transaction. The Router forwards a launch to the Factory, which clones a fixed-supply token, creates its Uniswap V3 pool, and hands the whole supply to the Lock, which mints it into the pool as single-sided ranges. Nothing is held outside the pool once the transaction ends.
Every asset is two ranges in its pool: a main range that gives the asset its shape (a tight floor band for floors, a ~16× curve for curves) and an open tail to the highest tick. The tail is what lets the pool keep trading like an ordinary DEX pool once the main range is bought out — there is no migration step and no ceiling.
Asset classes
| Floor | Curve | |
|---|---|---|
| Purpose | A priced asset with a hard floor | A curve-launched asset on top |
| Supply | 100,000,000 | 1,000,000,000 |
| Quoted in | USDC or an ecosystem token | A floor asset, USDC or an ecosystem token |
| Price floor | Floor value set at launch | Launch price |
| Price ceiling | None | None |
| Pool fee | 1% | 1% |
| Token contract | Fixed supply. No minting, pausing or administrative privileges. | |
The Markets page groups floors into series: Arc official (curated), Platform tokens (floors quoted in an ecosystem token rather than USDC) and Agriculture (category: "agriculture" in the token metadata). Everything else lands in Other.
Floor assets
A floor asset represents something with an explicit value: a physical object, a claim, a project, a concept. At launch the creator sets the floor value; the full supply is minted into a single-sided Uniswap V3 position whose lower tick corresponds to that value divided by supply.
- Below the floor the pool holds no quote-side liquidity, so there is nothing to sell into. Inside the AnyQuote pool the price cannot print below the floor value.
- Above the floor price is set by supply and demand. There is no upper bound and no separate “graduation” event — the same position serves the market from the first trade onward.
- Quoted in an ecosystem token the floor is fixed in that token; its dollar value moves with the token.
Curve assets
A curve asset is a speculative token that starts on a launch curve. It can be quoted directly in USDC or an ecosystem token, or in a floor asset, in which case buying and selling routes through that floor.
- Launch curve. A curve quoted in USDC or an ecosystem token starts at a $3,000 fully diluted value. Price rises as the curve fills and walks back down the same curve on sells, never below the launch price. Filling the curve takes roughly 3.2× the start FDV in net buying and lands at about 16× — for a $3,000 start, ≈ $9,600 of buys and ≈ $48,000 FDV. The Fill figure on the site shows how much has been bought.
- Continuous trading. Once the curve is filled the token keeps trading in the same pool with no ceiling. Liquidity is never migrated.
- Quoted in a floor. The start is the same $3,000, converted into floor tokens at the floor price, not the market price — so trading in the floor before launch cannot move where the curve starts. If the floor trades above its floor, the curve's dollar figures scale with that premium; the site always displays live values.
Pricing
All dollar figures follow a fixed set of rules.
- USDC is counted at exactly $1.
- An ecosystem token is converted with a 30-minute time-weighted average price from its pinned token/USDC Uniswap V3 pool, so short-term volatility does not affect launch pricing. Each pinned pool keeps 4,500 observation slots — enough history for the window at Arc's block rate.
- Uniswap V3 prices live on a tick grid. A floor value is aligned to the nearest tick; the launch form shows the exact aligned value before you sign.
- Amounts use the quote asset's native decimals: USDC and EURC have 6, the other ecosystem tokens and every AnyQuote token have 18. Native USDC sent as
msg.valuehas 18.
Trading
- Buy with USDC whatever the asset is quoted in: the Router walks USDC → quote token → floor → curve as needed, all inside the AnyQuote pools and the pinned quote/USDC pool. Holders of the quote token can pay with it directly and skip the first hop.
- Swaps are bounded to the position. If a sell would cross the floor, the part that cannot be filled is refunded in the same transaction rather than reverting.
- The floor exists only in the AnyQuote pool. Anyone may create other Uniswap pools for a token; prices there are unconstrained and the protocol does not read them.
- Every AnyQuote token is a standard ERC-20 and remains tradable directly on Uniswap without the router.
Liquidity lock
The entire supply of every asset is minted into one Uniswap V3 position at launch. That position is owned by the Lock contract, which has no function to burn liquidity or move principal. Its only capability is to collect accrued fees and forward them to the parties described below. The Lock is not upgradeable; its owner can change the protocol treasury address and nothing else.
Earnings
Each trade pays a 1% pool fee into the locked position. Collection is permissionless — anyone can callcollect for any pool — and every party is paid in the same call:
- Creator of the asset.
- Floor creator, when the asset is a curve quoted in a floor.
- Protocol treasury.
Creators choose at launch how their share is handled:
- Pay to address — sent to the recipient named at launch (the creator by default).
- Buy back & burn — the quote-side share is swapped into the token inside its own pool and sent to
0x…dEaD.
Collectable amounts are previewed on the Earnings page.
Risk
- A floor value is not an appraisal. Above the floor, price is set by trading and can fall back to it.
- The floor is enforced only by the AnyQuote pool; other venues may trade below it.
- Curve assets have no floor other than their launch price and can lose most of their value.
- Assets quoted in an ecosystem token carry that token's price risk, and its USDC pool may be thin.
- The Factory and Router are upgradeable by the protocol. Upgrades are visible on chain and cannot reach the pools or the locked liquidity of assets already launched.
Trust model
| Component | Mutability | Scope |
|---|---|---|
| Token | Immutable | Plain ERC-20, EIP-1167 clone of a verified implementation. Fixed supply minted once into the Lock. |
| Lock | Immutable | Holds every LP position. Can only collect fees; cannot burn liquidity or move principal. |
| Factory | UUPS upgradeable | Rules for new launches, curve parameters, quote-asset list and fee routing. Cannot touch existing pools or locked liquidity. |
| Router | UUPS upgradeable | Convenience entry point for trading and launch-and-buy. Never custodies funds between transactions. |
| Pools | Uniswap V3 | Standard, unmodified, permissionless. |
Contracts
Arc mainnet, chain ID 5042. Sources are verified on Sourcify.
| AnyQuoteFactory | 0x6F549DCf38292F8Bc799cDfe6976fd3Fec1543df |
| AnyQuoteRouter | 0xAfEDbcC0e4695700A10567307A7ED477eEc22e89 |
| AnyQuoteLock | 0x3682000c4B1272280a42E2C15B9B63Beb46af46D |
| AnyQuoteToken (implementation) | 0x52ffC465172DDDeC99380583106089910982cE1b |
| Uniswap V3 Factory | 0xf0db7b58379503491d857dB50AC9ece64c653918 |
| Uniswap QuoterV2 | 0x7DfD4F31be6814D2906BDE155c3e1B146EAc1468 |
| USDC | 0x3600000000000000000000000000000000000000 |
Quote assets
| Token | Address | Pinned USDC pool |
|---|---|---|
| EURC | 0xbef5f6d51cb62b58e6a8f77868681825c6fe21c1 | 0x88f97E21c423261244d6D661fBd569b2bd69539f · 0.3% |
| ARGUS | 0xece5ca8bf9220718e5727754026757512212cb3c | 0x6A3bAcAa6493734c1Ac221EBF42CF530A96C1e02 · 1% |
| TOLLY | 0xbc43ce8dec648ea298c4275559b81d6261c90b67 | 0x162Df51C504e7b8321e07387932f333D9be16a72 · 1% |
| COOL | 0xeb64987643db71c76b2a2be7e723decc995e5b37 | 0x40732e01ba7A829DEA44f51a10e7C58cd9F37765 · 1% |
| Architects | 0x8bcb94279fc2c984ec34e0c1f2192df8c69ea4f0 | 0x0069cb6F70e2f848405f4483f232274c720CE6f9 · 1% |
Announcements and support: @AnyQuoteARC on X.
Integration
Factory.getAssets(offset, limit)— paginated, newest first; returns token, pool, parent, creator and template. Single lookups viaFactory.getAsset(token).Router.buy(token, amountIn, minOut, to, fromUsdc)— payable: sendamountIn × 1e12asmsg.valueto pay in native USDC, or approve the quote token and send no value.Router.sell(token, amountIn, minOut, to, toUsdc). Swaps are bounded to the position; unused input is refunded.Router.launchAndBuy(params[], amountIn, minOut, fromUsdc)— launches in order (a curve may reference the floor launched immediately before it as parent) and buys the last one.msg.valuecovers one launch fee per entry plus the native buy amount.valuationUsdis always 18-decimal USD regardless of quote asset.Lock.collect(pool)is permissionless and returns(amount0, amount1); simulate it to preview collectable earnings.- Token metadata is an inline JSON string on the token:
{ description, image, category, socialMediaUrls[] }.