DOCS
On this page10 sections

Start

How to use FLIP

The release-safe workflow for connecting, quoting, playing, tracking, and claiming.

Normative V3 workflow

Connect to Robinhood Chain Testnet

Network name
Robinhood Chain Testnet
Chain ID
46630
Native currency
ETH
Official public RPC
https://rpc.testnet.chain.robinhood.com
Explorer
https://explorer.testnet.chain.robinhood.com

Before you start

  • Use a wallet that supports Robinhood Chain Testnet 46630.
  • Read the Status page. Do not send funds unless the exact release and game mode are ready.
  • Testnet FLIP, USDG, and reward tokens are synthetic and have no real-world value.
  • Confirm every token and contract address against the accepted release manifest, not a ticker, screenshot, or chat message.

Check live readiness

Place and follow a game

  1. 01

    Choose game and mode

    Select Coin or ODD · EVEN, then Manual or Mystery. Mystery has separate holding, usage, budget, and readiness requirements.

  2. 02

    Choose all-in amount

    Manual accepts 1–200 USDG equivalent; Mystery accepts 1–10. The settlement quote states the exact FLIP input and the USDG principal/fee result.

  3. 03

    Freeze the choices

    Manual freezes the side/market/reward. Parity also freezes the horizon and future target. Catalog and rules identities are part of the Ticket.

  4. 04

    Review allowance and signature

    Set no more than the displayed FLIP limit. Check chain, Gateway, deadline, policy, exact amount, and one-time nonce before signing.

  5. 05

    Submit once

    The Gateway atomically swaps FLIP for exact USDG, locks Reserve/JIT/Bond capacity, records the Ticket, and only then requests randomness or waits for a price report.

  6. 06

    Track finalized state

    Use the receipt-derived Bet/Ticket ID. Follow randomness/report state, settlement, liability, JIT delivery, refund, or cash fallback from finalized data.

  7. 07

    Finish permissionlessly

    Where the state allows it, settlement, refund, JIT retry, fee flush, or evidence reads do not depend on the original browser session.

Get Testnet assets safely

  1. 01

    Get native Testnet gas

    Use a Robinhood Chain Testnet ETH source published by Robinhood or the accepted release operator. The FLIP asset faucet distributes ERC-20 inventory only; it cannot provide native gas.

  2. 02

    Resolve the accepted address book

    Read the accepted manifest for testnetFaucet, flipToken, testUsdg, and the synthetic reward tokens. Verify chain 46630, runtime hashes, and current Status before interacting.

  3. 03

    Read the drip before claiming

    Call assetConfigs(token) and lastClaimAt(account, token). Continue only when the asset is enabled, the cooldown has elapsed, and faucet inventory covers dripRaw.

  4. 04

    Claim one asset

    Call TestnetTokenFaucetV3.claim(token) from the receiving wallet. Decode FaucetClaimed(account, token, amountRaw, nextClaimAt) from the finalized receipt; never assume a ticker identifies the token.

  5. 05

    Treat every asset as synthetic

    Test FLIP, Test USDG, synthetic stocks, and Community fixtures have no real-world value. The faucet cannot mint, fund Reserve/Bond obligations, or prove a public V3 release is accepted.

Trade FLIP in the canonical market

  1. 01

    Verify the canonical PoolKey

    Load FLIP, USDG, CanonicalV4SwapRouter, Hook, PoolManager, fee, tick spacing, and PoolKey hash from one accepted manifest. A side pool is not canonical revenue.

  2. 02

    Choose an order shape

    Use swapExactInput when spend is fixed and set minAmountOut; use swapExactOutput when receipt is fixed and set maxAmountIn. Set flipForUsd=false to buy FLIP with USDG and true to sell FLIP for USDG.

  3. 03

    Quote all market costs

    Include the immutable 3% USDG-side Hook fee, the 0.30% V4 LP fee, price impact, slippage, and gas. The Hook math differs when a net USDG amount must be grossed up.

  4. 04

    Approve only the input limit

    Approve the exact-input amount or exact-output maximum to the manifest Router, set a short deadline, simulate at the current block, then submit once.

  5. 05

    Verify the receipt

    Check CanonicalSwapExecuted and CanonicalSwapFeeRouted, payer/recipient balance deltas, PoolKey, and finalized block. The Router must retain no FLIP or USDG residue.

Claim a Holder stock reward

  1. 01

    Find an active entitlement

    Read /v3/players/:player/holder-rewards or /v3/holder/epochs/:epochId?account=:player. Require the same release, manifest, and finalized identity as Status.

  2. 02

    Verify before sending

    Check the snapshot block/hash, stock asset, Merkle root, index, account, amount, proof, epoch status, and isClaimed. A 503 means evidence is unavailable, not that the amount is zero.

  3. 03

    Submit the proof

    Call HolderRewardsV3.claim(epochId, index, account, amount, merkleProof). Any address may relay the proof, but the contract always transfers to the account encoded in the leaf.

  4. 04

    Confirm final state

    Decode RewardClaimed, verify the stock-token balance delta and claimed bitmap, and expect EpochExhausted when the final entitlement is paid.

Create and trade a Community RWA

  1. 01

    Commit the object record

    Prepare name/symbol, nonzero itemId, schema/data/provenance hashes, a content-addressed metadata URI, a fresh salt, fixed supply, creator allocation, and the remaining token plus USDG liquidity amounts.

  2. 02

    Inspect, approve, and verify

    Use the Source-A launchpad:write formal CLI to inspect the manifest-bound runtime, prepare the exact USDG approval, submit only its unsigned walletRequest through an external wallet, and verify its finalized receipt before preparing create.

  3. 03

    Create atomically

    Prepare RwaEverythingFactoryV3.create(params) only after the approval verifies. Submit the exact wallet request, then verify CommunityAssetLaunched, LaunchEconomicsFrozen, LaunchLiquiditySettled, identity registration, registered PoolKey, actual spend/refunds, permanent LP ownership, and zero Factory residue.

  4. 04

    Trade the registered pool

    For exact-input, approve the known input first. For exact-output, run preview, approve its exact approval.amountRaw, verify that receipt, then prepare swap with the same suggestedLimitAmountRaw. Community markets charge the fixed 0.30% LP fee and no FLIP 3% Hook fee.

  5. 05

    Keep reward review separate

    Creation submits an eligibility candidate only. Tradeability is not official-stock status and does not place the token in a game Catalog; approval and a new active Catalog are separate governance actions.

Unsigned CLI entry
npm run launchpad:write -w @stockflip/indexer -- <inspect|preview|approve|revoke|create|swap|verify> \
  --manifest <absolute-release-or-rehearsal-manifest> \
  --rpc-url <credential-free-rpc-or-loopback-capability-url> \
  --output <fresh-absolute-json-path>

# The CLI prepares and verifies. It never receives a key, signs, or broadcasts.
# Submit only the exact walletRequest through an external wallet.

Recover a stuck or expired position

Observed statePermissionless next actionTerminal result
Coin AwaitingRandomness past either frozen timeoutCall refundExpired(betId)B + F returned; Bond pays separate additionalReserveRaw; late VRF is ignored
Parity AwaitingReport after inclusive deadlineCall voidExpired(ticketId) one second laterB + F returned; responsible Reporter Bond pays separate additionalReserveRaw
Parity Mystery AwaitingRandomness/Report after deadlineCall voidExpired(ticketId)B + F returned; responsible VRF/Reporter namespace is slashed; Mystery use is restored best-effort, or remains retryable through retryMysteryAccess
Winner PurchasePending before SLACall attemptJitPurchase(game, id) with a fresh authorized quote availableStockDelivered, or liability remains retryable
Winner PurchasePending after SLAAnyone may call makeCashClaimable(game, id); only the winner may call claimCash(game, id)Full prize notional paid in USDG exactly once
Terminal reward paid but JIT capacity close failedCall retryJitCapacityClose(game, id)Capacity close becomes idempotently complete

Always read the current finalized state first. Invalid*State, RefundNotReady, VoidNotReady, or CashFallbackNotReady means the requested transition is not currently legal; do not resubmit blindly.

Never guess these values

  • Do not predict Bet, Ticket, Request, liability, quote, Catalog, or Epoch IDs. Decode them from receipts or read them from finalized protocol state.
  • Do not reuse expired settlement or JIT quotes. Nonces and quote IDs are one-time.
  • Do not treat a capacity preview as a reservation. The transaction performs the final atomic admission check.
  • Do not treat PurchasePending as a loss or refund. A winner remains fully owed until stock delivery or USDG cash claim completes.

Authority sources

These repository paths were used to derive this page. They link only when an explicitly configured public repository and immutable Source A commit are both available; otherwise they remain plain paths. Release addresses and live status still require an accepted manifest and finalized evidence.

  • docs/FLIP_V3_USER_API.md
  • src/v3/game/StockFlipGameGatewayV3.sol
  • src/v3/parity/PriceParityGatewayV3.sol
  • v4/src/V4ExactOutputSettlementRouter.sol