Start
How to use FLIP
The release-safe workflow for connecting, quoting, playing, tracking, and claiming.
Normative V3 workflowConnect 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
- 01
Choose game and mode
Select Coin or ODD · EVEN, then Manual or Mystery. Mystery has separate holding, usage, budget, and readiness requirements.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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.
- 02
Resolve the accepted address book
Read the accepted manifest for
testnetFaucet,flipToken,testUsdg, and the synthetic reward tokens. Verify chain46630, runtime hashes, and current Status before interacting. - 03
Read the drip before claiming
Call
assetConfigs(token)andlastClaimAt(account, token). Continue only when the asset is enabled, the cooldown has elapsed, and faucet inventory coversdripRaw. - 04
Claim one asset
Call
TestnetTokenFaucetV3.claim(token)from the receiving wallet. DecodeFaucetClaimed(account, token, amountRaw, nextClaimAt)from the finalized receipt; never assume a ticker identifies the token. - 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
- 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.
- 02
Choose an order shape
Use
swapExactInputwhen spend is fixed and setminAmountOut; useswapExactOutputwhen receipt is fixed and setmaxAmountIn. SetflipForUsd=falseto buy FLIP with USDG andtrueto sell FLIP for USDG. - 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.
- 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.
- 05
Verify the receipt
Check
CanonicalSwapExecutedandCanonicalSwapFeeRouted, payer/recipient balance deltas, PoolKey, and finalized block. The Router must retain no FLIP or USDG residue.
Claim a Holder stock reward
- 01
Find an active entitlement
Read
/v3/players/:player/holder-rewardsor/v3/holder/epochs/:epochId?account=:player. Require the same release, manifest, and finalized identity as Status. - 02
Verify before sending
Check the snapshot block/hash, stock asset, Merkle root,
index,account,amount, proof, epoch status, andisClaimed. A503means evidence is unavailable, not that the amount is zero. - 03
Submit the proof
Call
HolderRewardsV3.claim(epochId, index, account, amount, merkleProof). Any address may relay the proof, but the contract always transfers to theaccountencoded in the leaf. - 04
Confirm final state
Decode
RewardClaimed, verify the stock-token balance delta and claimed bitmap, and expectEpochExhaustedwhen the final entitlement is paid.
Create and trade a Community RWA
- 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. - 02
Inspect, approve, and verify
Use the Source-A
launchpad:writeformal CLI to inspect the manifest-bound runtime, prepare the exact USDG approval, submit only its unsignedwalletRequestthrough an external wallet, and verify its finalized receipt before preparing create. - 03
Create atomically
Prepare
RwaEverythingFactoryV3.create(params)only after the approval verifies. Submit the exact wallet request, then verifyCommunityAssetLaunched,LaunchEconomicsFrozen,LaunchLiquiditySettled, identity registration, registered PoolKey, actual spend/refunds, permanent LP ownership, and zero Factory residue. - 04
Trade the registered pool
For exact-input, approve the known input first. For exact-output, run
preview, approve its exactapproval.amountRaw, verify that receipt, then prepareswapwith the samesuggestedLimitAmountRaw. Community markets charge the fixed 0.30% LP fee and no FLIP 3% Hook fee. - 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.
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 state | Permissionless next action | Terminal result |
|---|---|---|
| Coin AwaitingRandomness past either frozen timeout | Call refundExpired(betId) | B + F returned; Bond pays separate additionalReserveRaw; late VRF is ignored |
| Parity AwaitingReport after inclusive deadline | Call voidExpired(ticketId) one second later | B + F returned; responsible Reporter Bond pays separate additionalReserveRaw |
| Parity Mystery AwaitingRandomness/Report after deadline | Call 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 SLA | Call attemptJitPurchase(game, id) with a fresh authorized quote available | StockDelivered, or liability remains retryable |
| Winner PurchasePending after SLA | Anyone 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 failed | Call 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
PurchasePendingas a loss or refund. A winner remains fully owed until stock delivery or USDG cash claim completes.
