Docs

How AcasioPay works.

Launch flow

A launch is one transaction to AcasioLaunchFactory.launch. In order, inside that call: the pair-asset deposit is pulled to the position locker (native ETH travels as value; an ERC-20 needs an exact-amount allowance and must arrive in full, so fee-on-transfer tokens are rejected); the token is deployed with CREATE2 and its whole supply minted once (liquidity allocation to the locker, creator allocation to the creator); the Uniswap v4 pool is initialized at the price implied by the deposit ratio, with currencies ordered as v4 requires; the locker mints one full-range position and records who may withdraw it and when; the launch is recorded and LaunchCreated is emitted. If any step reverts, the whole transaction reverts.

  • Supply: fixed, 1,000 to 1,000,000,000,000 tokens, 18 decimals. There is no mint function.
  • Creator allocation: at most 50% of the supply. It is unlocked; no vesting contract exists in this release and the UI says so.
  • Pool fee tiers: 0.05% / 0.30% / 1.00% (tick spacing 10 / 60 / 200). Range: full range only.
  • Lock duration: at least 30 days on this network, at most 10 years, or permanent.
  • Platform launch fee: none configured; any configured fee is read from the factory and shown on the review step before signing.
  • Rounding: the pool takes at most one wei less than the deposit per side plus a tiny full-range remainder; the leftovers return to the creator in the same transaction and the recorded amounts are the deposited ones.

Pair assets

Paired with, not backed by: a pool gives the token a market against the pair asset. It creates no collateralization, claim or redemption right.

The factory only accepts pair assets that the on-chain AcasioPairRegistry lists as allowed. Admission is an owner action taken after a review documented in docs/PAIR_ASSETS.md: standard ERC-20 behaviour (no transfer fee, no rebasing balance, decimals ≤ 18), a verifiable issuer or deployer, and an understanding of transfer restrictions. Before a restricted asset (a Stock Token) is offered, the app also checks live that the token is not paused and that neither the locker, the PoolManager, the factory nor the router is on the issuer’s blocklist.

SymbolCategoryAddressDecimalsIssuer / feed
ETHnativenative18 · ETH / USD
USDGother0x5fc5360D0400a0Fd4f2af552ADD042D716F1d1686Paxos (Global Dollar) · USDG / USD
NVDAstock0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC18 · Robinhood NVDA / USD
AAPLstock0xaF3D76f1834A1d425780943C99Ea8A608f8a93f918 · Robinhood AAPL / USD
TSLAstock0x322F0929c4625eD5bAd873c95208D54E1c003b2d18 · Robinhood TSLA / USD
SPYstock0x117cc2133c37B721F49dE2A7a74833232B3B4C0C18 · Robinhood SPY / USD
MSFTstock0xe93237C50D904957Cf27E7B1133b510C669c2e7418 · Robinhood MSFT / USD
AMZNstock0x12f190a9F9d7D37a250758b26824B97CE941bF5418 · Robinhood AMZN / USD
GOOGLstock0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE318 · Robinhood GOOGL / USD
METAstock0xc0D6457C16Cc70d6790Dd43521C899C87ce02f3518 · Robinhood META / USD
QQQstock0xD5f3879160bc7c32ebb4dC785F8a4F505888de6818 · Robinhood QQQ / USD
AMDstock0x86923f96303D656E4aa86D9d42D1e57ad2023fdC18 · Robinhood AMD / USD

No memecoin has been admitted to the AcasioPay pair registry on Robinhood Chain. Admission requires the review in docs/PAIR_ASSETS.md (standard ERC-20, no transfer fee, no rebasing balance, verifiable deployer) and an owner transaction; until then the category is listed but not selectable.

Every official Stock Token is a BeaconProxy whose beacon slot holds the issuer's AccessControlsRegistry. balanceOf/transfer are raw units and never rebase (uiMultiplier is display-only), there is no transfer fee, transfers revert with Blocked() for blocklisted from/to/spender and with IsPaused() while the token or the registry is paused; the issuer holds adminBurn, pause and upgrade roles. A pool paired with a Stock Token gives the new token a market against it and nothing more: no ownership of the underlying share, no redemption right. Terms: https://robinhood.com/stocktoken/rhj.

Liquidity lock & fee entitlement

What is locked. Exactly one position per launch: the full-range Uniswap v4 position the launch created, owned by AcasioPositionLocker in the PoolManager, keyed by (locker, tickLower, tickUpper, salt = launch id). Anyone can verify it with StateView.getPositionInfo or AcasioPositionLocker.onChainLiquidity(launchId). Liquidity that other people add later is not locked and is never described as locked; the market page shows the locked position’s share of the pool’s in-range liquidity instead of a blanket “liquidity locked” claim.

Fees. LP fees accrue to the locked position. collectFees(launchId) is permissionless and pays the accrued fees — and only the fees; the position’s liquidity is unchanged, which the tests assert — to the launch’s fee beneficiary. The beneficiary is chosen at launch (the app defaults it to the creator) and may hand the entitlement to another address with setFeeBeneficiary. Fees do not automatically go to the creator; they go to whoever the beneficiary is.

After expiry. Once unlockAt has passed, the position owner (the creator) may call withdraw(launchId), which removes the whole position and pays principal on both sides plus any uncollected fees to the owner. Permanent locks (unlockAt = 2^64 − 1) can never be withdrawn. There is no transfer function, no owner, no pause and no rescue path on the locker.

Swaps

The app trades through AcasioSwapRouter, a minimal exact-input router with no fee and no custody: pay amountIn (native as value, ERC-20 through an exact allowance), receive at least minAmountOut before deadline or the whole call reverts. Quotes come from the network’s V4Quoter (0x8Dc1…8F94), expire after 25 seconds and are invalidated by any change of account, network, asset or amount. Minimum received applies your slippage tolerance to the quote; price impact compares the quote with the pool’s spot price after the pool fee. Every swap is simulated before the wallet prompt, and success is shown only after the receipt confirms it. AcasioPay pools are plain hookless v4 pools, so other v4 routers can trade them too.

Data & indexing

An indexer (a long-running worker, or bounded index-on-read plus a daily cron on Vercel) reads factory, locker, registry and router events plus the PoolManager’s Swap / ModifyLiquidity / Initialize events for launch pools into PostgreSQL. Rows are keyed by (chain, tx hash, log index) and idempotent; a checkpoint advances only after a range commits; block hashes form a reorg trail that triggers rollback and replay. Volume is the sum of swap amounts; the chart is the pool price after each indexed swap; lock state is read from the chain at the checkpoint block. When the database is unavailable, the API serves current on-chain state and marks history as unavailable rather than zero.

Contracts & addresses

Build: solc 0.8.26+commit.8a97fa7a, EVM cancun, via-IR true, 44444444 optimizer runs. Network: Robinhood Chain (chain 4663), verified 2026-09-28.

Uniswap v4 PoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951
PositionManager (official)0x58daec3116aae6D93017bAAea7749052E8a04fA7
V4Quoter (official)0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
StateView (official)0xF3334192D15450CdD385c8B70e03f9A6bD9E673b
UniversalRouter (official)0x06AfBA43Fd06227fA663b0DAecF536f6EaA6bf99
Permit20x000000000022D473030F116dDEE9F6B43aC78BA3
AcasioLaunchFactory0xEF8AbfDf5B761EaA66B99aEcD306177d0c1163b5
AcasioPositionLocker0x2aBD89052963bcCf3Df1584Ce25ECFe61Ce84712
AcasioPairRegistry0x120ca71D4AfC6ABce3d5478D94d551B1F284cE8c
AcasioSwapRouter0xDa904343bFB156E1e3a864AA6C396c753eeE42B5
Quoter used by the app0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94
Deployment block74778033

Sources for the network facts: — https://docs.robinhood.com/chain/connecting — chain id 4663 (testnet 46630), gas in ETH, public RPC rpc.mainnet.chain.robinhood.com, explorer robinhoodchain.blockscout.com— https://developers.uniswap.org/deployments.json (generatedAt 2026-07-15) — 48 records for chainId 4663, tier labs-supported: v4 PoolManager, PositionManager, PositionDescriptor, V4Quoter, StateView, UniversalRouter, Permit2 (addresses below). ZERO records for chainId 46630.— https://sourcify.dev/server/v2/contract/4663/<address> — PoolManager (deployment block 9070, tx 0x4fb28d49…c44c41), PositionManager, V4Quoter, StateView and UniversalRouter are all Sourcify matches of solc 0.8.26 builds— eth_call on 4663 at block 74694280: StateView.poolManager(), V4Quoter.poolManager() and PositionManager.poolManager() all return the PoolManager; every address below carries bytecode (sizes: PoolManager 24009 B, PositionManager 23877 B, V4Quoter 6118 B, StateView 3531 B, UniversalRouter 24546 B, Permit2 9152 B)— Stock Tokens: beacon-proxy identity check + issuer registry https://api.robinhood.com/rhj/assets; implementation `Stock` 0xb35490d6…5ae2 is a Sourcify exact match (solc 0.8.33). The AccessControlsRegistry 0xe10b…1b00 (also exact match) exposes isBlocked(address) and paused()— Chainlink feeds: https://docs.robinhood.com/chain/oracles-and-price-feeds and the Chainlink feed directory for robinhood-mainnet (8 decimals, 24 h heartbeat)

Operators: see /deploy for the wallet-signed deployment and docs/DEPLOYMENT.md for the script path and the verification step that publishes a manifest.

$ACASIO

A plain token. It gives no fee share, discount, allow-list access or governance in AcasioPay. Only the address published here and on @AcasioPay is official; anything else using the name is not.

Status: CA: Soon. No contract address has been published. When it is, it appears on the landing page, in the footer, at /api/token and on @AcasioPay first.

How it is published: an operator runs pnpm token:ca 0x…, which verifies the address on chain (code present, ERC-20 views answer, symbol ACASIO, not a pair asset or protocol contract), sets NEXT_PUBLIC_ACASIO_TOKEN_ADDRESS on the Vercel project, redeploys and reads the live site back. Nothing types an address into a page by hand.

Risks

  • AcasioPay contracts are unaudited software. Trading availability does not mean every trade can execute. Nothing here is investment advice.
  • Trading availability does not guarantee that every trade can execute: a paused or blocklisted pair asset stops swaps in that pool.
  • The creator allocation is unlocked. A creator can sell it at any time.
  • Only the initial position is locked. Other liquidity can leave at any time, and the locked position can be withdrawn after its unlock time unless it is permanent.
  • The factory owner can pause new launches, change the launch fee and admit or delist pair assets. None of those powers reach existing pools, tokens or locked positions.
  • Prices shown in USD come from Chainlink feeds where they exist and carry the feed’s timestamp; where no feed exists no USD figure is shown.

API

GET /api/health                       chain + index freshness, deployment, build
GET /api/pairs                        pair assets with registry + live restriction status
GET /api/launches?q=&pair=&lock=&sort= indexed markets (or chain-direct when the index is down)
GET /api/launches/<id|token|poolId>    launch detail with trades, position events, liquidity events
GET /api/launches/<key>/trades         paginated trades (index only)
GET /api/launches/<key>/candles?bucket= OHLC from indexed swaps (index only)
GET /api/portfolio/<address>           balances (live), launches, positions, attributed swaps
POST /api/metadata  POST /api/media    creator metadata + logo upload (validated, size-limited)
POST /api/rpc                          same-origin JSON-RPC relay (read methods + sendRawTransaction)