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.
| Symbol | Category | Address | Decimals | Issuer / feed |
|---|---|---|---|---|
| ETH | native | native | 18 | · ETH / USD |
| USDG | other | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 | 6 | Paxos (Global Dollar) · USDG / USD |
| NVDA | stock | 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC | 18 | · Robinhood NVDA / USD |
| AAPL | stock | 0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9 | 18 | · Robinhood AAPL / USD |
| TSLA | stock | 0x322F0929c4625eD5bAd873c95208D54E1c003b2d | 18 | · Robinhood TSLA / USD |
| SPY | stock | 0x117cc2133c37B721F49dE2A7a74833232B3B4C0C | 18 | · Robinhood SPY / USD |
| MSFT | stock | 0xe93237C50D904957Cf27E7B1133b510C669c2e74 | 18 | · Robinhood MSFT / USD |
| AMZN | stock | 0x12f190a9F9d7D37a250758b26824B97CE941bF54 | 18 | · Robinhood AMZN / USD |
| GOOGL | stock | 0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3 | 18 | · Robinhood GOOGL / USD |
| META | stock | 0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35 | 18 | · Robinhood META / USD |
| QQQ | stock | 0xD5f3879160bc7c32ebb4dC785F8a4F505888de68 | 18 | · Robinhood QQQ / USD |
| AMD | stock | 0x86923f96303D656E4aa86D9d42D1e57ad2023fdC | 18 | · 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 PoolManager | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| PositionManager (official) | 0x58daec3116aae6D93017bAAea7749052E8a04fA7 |
| V4Quoter (official) | 0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94 |
| StateView (official) | 0xF3334192D15450CdD385c8B70e03f9A6bD9E673b |
| UniversalRouter (official) | 0x06AfBA43Fd06227fA663b0DAecF536f6EaA6bf99 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 |
| AcasioLaunchFactory | 0xEF8AbfDf5B761EaA66B99aEcD306177d0c1163b5 |
| AcasioPositionLocker | 0x2aBD89052963bcCf3Df1584Ce25ECFe61Ce84712 |
| AcasioPairRegistry | 0x120ca71D4AfC6ABce3d5478D94d551B1F284cE8c |
| AcasioSwapRouter | 0xDa904343bFB156E1e3a864AA6C396c753eeE42B5 |
| Quoter used by the app | 0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94 |
| Deployment block | 74778033 |
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)