Launching an index
Launching is permissionless — anyone can create an index token from the app or by calling the factory directly. The supply (1,000,000), the fee schedule, and the launch curve are all protocol constants; what you choose is the identity, the basket, and how each fee splits. Those choices are fixed forever at launch.
From the app
The Create wizard walks through:
- Basics — name, symbol. (Supply is fixed at 1,000,000 and shown read-only.)
- Basket — pick 1–16 tokenized stocks/ETFs from the governance allow-list (search box included). On mainnet these are the 25 official Robinhood Chain tokenized equities; on testnet, mock equivalents.
- Fee split — allocate the 90% non-protocol share of each fee across the USDG reserve (
rfvShareBps), the in-kind buyback (buybackShareBps), and the basket stocks (the remainder), with two clamped sliders (rfv + buyback ≤ 90%). The protocol's 0.30% base + 10% cut is shown fixed. - Pre-buy (optional) — a USDG amount to buy at launch as a real market buy (no premine — this is the only way to hold tokens at t=0).
- Review — confirm and submit. One transaction deploys everything and seeds the curve.
What one launch deploys
IndexFactory.createIndex(cfg, creatorBuyUsdg) performs, atomically:
- Clones the
IndexTokenat a CREATE2 address mined above USDG (so USDG iscurrency0), and initializes it — validating basket size, allow-list membership, duplicates, and rejecting USDG or the token itself as basket members. - Deploys the index's
IndexTreasuryand clones itsBondDepository, wiring the depository as the treasury's one-shot inventory spender. - Mints the entire 1,000,000 supply to the factory and initializes the
USDG/indexV4 pool at the 20k-mcap floor tick, registering it on theIndexFeeHook. - Seeds the full supply as 5 stepped single-sided liquidity positions from $0.02 up to $1.00.
- Optionally runs your pre-buy as a real market buy, refunds any unconsumed tokens/USDG, forwards the native launch fee, and emits
IndexCreated+IndexLaunched.
There is no separate "add liquidity" or "register pair" step — the launch is the liquidity, seeded single-sided by the factory. The token is tradable the moment the transaction lands.
Launching from a contract or script
IndexConfig memory cfg = IndexConfig({
name: "Mag Seven",
symbol: "MAG7",
creator: address(0), // overwritten with msg.sender by the factory
stocks: stocks, // 1..16 allow-listed stock token addresses
rfvShareBps: 3000, // 30% of each fee → USDG reserve floor
buybackShareBps: 3000 // 30% of each fee → in-kind buyback inventory
}); // basket share = 90% − 30% − 30% = 30%
// approve the factory for `creatorBuyUsdg` first if pre-buying
(address token, address treasury) =
IndexFactory(FACTORY).createIndex{value: launchFee}(cfg, creatorBuyUsdg);
Constraints enforced on-chain (reverting errors in parentheses):
| Parameter | Constraint |
|---|---|
stocks | 1–16 entries (EmptyBasket / BasketTooLarge), no duplicates (DuplicateAsset), each on the allow-list (AssetNotAllowed), never USDG or the token itself |
rfvShareBps + buybackShareBps | ≤ 9000 (RfvShareTooHigh) — immutable |
msg.value | ≥ FeeRegistry.launchFeeWei (InsufficientLaunchFee) |
creatorBuyUsdg | Optional; requires a prior USDG approval to the factory |
Choosing the fee split
The 90% non-protocol share splits three ways; the remainder after your two choices buys the basket:
| Profile | rfv / buyback | Character |
|---|---|---|
| Reserve-heavy | 90% / 0% | Every fee deepens the redeemable USDG floor; basket-light |
| Basket-heavy | 10% / 0% | Most of the fee buys tokenized stocks as backing |
| Buyback-heavy | 20% / 60% | Fees accumulate index-token inventory for future bond markets |
| Balanced (a common default) | 30% / 30% | Even split across reserve / buyback / basket |
There is no wrong answer — it's a product decision about whether your index leans on a stable USDG floor, equity backing, or bond-market inventory. All three raise backing-per-token over time; only the mix differs.
After launch
- Trading starts immediately against the seeded pool — see Trading & fees.
- Redemption is live from the first fee — see RFV & redemption.
- Bond markets are optional and off by default; open them later as the index
admin(see BondDepository).