Skip to main content

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:

  1. Basics — name, symbol. (Supply is fixed at 1,000,000 and shown read-only.)
  2. 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.
  3. 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.
  4. 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).
  5. Review — confirm and submit. One transaction deploys everything and seeds the curve.

What one launch deploys

IndexFactory.createIndex(cfg, creatorBuyUsdg) performs, atomically:

  • Clones the IndexToken at a CREATE2 address mined above USDG (so USDG is currency0), and initializes it — validating basket size, allow-list membership, duplicates, and rejecting USDG or the token itself as basket members.
  • Deploys the index's IndexTreasury and clones its BondDepository, 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/index V4 pool at the 20k-mcap floor tick, registering it on the IndexFeeHook.
  • 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):

ParameterConstraint
stocks1–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.valueFeeRegistry.launchFeeWei (InsufficientLaunchFee)
creatorBuyUsdgOptional; 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:

Profilerfv / buybackCharacter
Reserve-heavy90% / 0%Every fee deepens the redeemable USDG floor; basket-light
Basket-heavy10% / 0%Most of the fee buys tokenized stocks as backing
Buyback-heavy20% / 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).