Mint & Redeem
P10 is minted and redeemed directly against its on-chain Net Asset Value (NAV), with oracle guards and clear limits.
TL;DR
Mint = you deposit assets → receive P10 at NAV minus a small fee.
Redeem = you return P10 → receive underlying exposure at NAV minus a small fee.
Two UX modes (permissionless):
Single-asset “Zap” (most users): pay with BNB/USDT/USDC/XPGN; we route into the target basket using the Flow (best-execution) router, rebate any surplus, and mint P10.
Basket-in/Basket-out (pro users/bots): you provide or receive the exact constituent mix pro-rata to the current weights; no AMM swaps needed.
Fees (default): 10 bps to mint, 10 bps to redeem.
Guards: on-chain oracle freshness/deviation/TWAP checks; mint pauses automatically if any feed fails, while redeem remains open (pro-user unwind).
Testnet (now, 3–4 weeks): synthetic backing with a tight error band; same UX and guards.
Mainnet: basket-backed (preferred) or delta-neutral synthetic (governance choice).
The price you pay (NAV per P10)
At a given snapshot SSS (see P10: What it Tracks):
Let wiw_iwi be the current weight fraction for asset iii (capped free-float market cap, post-redistribution).
Let PiP_iPi be the on-chain oracle price for asset iii (USD-denominated).
Then the NAV per P10 (USD terms) is:
NAVP10=∑i=1Nwi⋅Pi\text{NAV}_{P10} = \sum_{i=1}^{N} w_i \cdot P_iNAVP10=i=1∑Nwi⋅Pi
We publish a discrete composition snapshot periodically (weekly on testnet / monthly on mainnet). Between events, P10 floats with the market; we don’t constantly reweight intraday.
Implementation note: the contracts compute target units-per-P10 qi=wiPiq_i = \frac{w_i}{P_i}qi=Piwi (adjusted for decimals), so the system always knows how much of each asset corresponds to 1 P10 at the current snapshot.
Modes: Single-asset vs Basket
1) Single-asset Mint/Redeem (Zap)
Best for most users.
Mint: Pay with BNB / USDT / USDC / XPGN (whitelist can expand). The router atomically swaps into the basket mix using Paragon Flow (batch-auction best execution). You receive P10 at NAV minus the mint fee.
Any surplus achieved by Flow (price improvement vs quoted route) is rebated per our Surplus & Rebates split (e.g., 60% to you, 30% to LPs used, 10% to stXPGN lockers).
Redeem: You send P10; choose “Pro-rata basket” or “One asset”.
One asset = router swaps your pro-rata basket into a single token (BNB/USDT/USDC/XPGN), with Flow surplus rebates applied.
Pro-rata basket = you receive each constituent directly, proportionally (no AMM swaps).
Pros: simplest UX, automatic best-execution, surplus rebates. Trade-offs: single-asset variant introduces normal AMM swap costs (but Flow minimizes these and shares the upside).
2) Basket-in / Basket-out
For advanced users, funds, and arbitrageurs.
You provide exact constituent amounts matching qiq_iqi proportions (within a small tolerance) to mint P10 without any AMM trades.
You redeem P10 into exact pro-rata constituent amounts.
No “Flow” swaps happen in this path, so there’s no routing slippage; you only pay the mint/redeem fee and gas.
Pros: tightest tracking and cheapest path for large size. Trade-offs: you must source the basket yourself.
Step-by-step (what the contracts do)
Mint flow (single-asset)
Quote: UI fetches NAV from Pricing & Oracles, shows P10 out and fee.
Guards prepared: min-out is derived (NAV − fee − guard buffer).
Approve/Permit: we support ERC-20 approvals and Permit2 (when available).
Batch intent: your swap is submitted to the Flow batcher; solver(s) compete to route at best net price.
Settlement:
FlowSettlement
validates oracles & min-out, executes swaps, mints P10 to you, splits any surplus (cashback to you + LP + stXPGN).Events:
Minted(user, p10Out, feePaid, surplusRebate)
emitted.
Redeem flow (single-asset or basket)
Quote: UI shows expected assets out (basket or chosen token) at NAV minus fee.
Guards prepared: min-out guard enforced per asset (basket) or per route (single-asset).
Approve P10: via ERC-20 approve/permit.
If single-asset: Flow solves best route to your chosen token and rebates surplus.
If basket-out: no swaps; you receive each token in the right proportions.
Events:
Redeemed(user, p10In, feePaid, surplusRebate)
.
Fees, rebates & where they go
Mint fee: 10 bps of P10 value.
Redeem fee: 10 bps of P10 value.
Routing costs: normal AMM fees on single-asset paths; minimized via Flow.
Surplus rebates (Flow): e.g., 60% trader / 30% LPs of used hops / 10% stXPGN lockers (configurable by governance).
Protocol take: a small slice of captured surplus can be reserved for Treasury/Shield if governance chooses (e.g., 5%).
Fees fund Treasury/Shield, development, and real yield for lockers via surplus share. Exact splits live in Tokenomics.
Oracle & safety guards (always on)
Before any mint/redeem settles:
Freshness: each constituent price feed must be newer than a chain-specific threshold (e.g., < 60s).
Deviation: primary vs secondary (Chainlink vs Pyth/Redstone) must be within max deviation (e.g., 1.5–2.5%).
TWAP cross-check: on-chain DEX TWAP must not diverge beyond a bound.
Circuit breakers: if any check fails, mint pauses (no new P10), redeem remains open.
Snapshot lock: if a new composition snapshot is pending activation, mints settle against the current snapshot until the timelock ends.
See Pricing & Oracles for exact parameters.
Limits & caps
Per-tx mint cap: lower of $50k or 0.5% of supply (tunable; tighter on testnet).
Daily mint cap: 2% of supply (rolling 24h).
Min mint/redeem: small USD equivalent floor (e.g., $50) to avoid dust.
Pause reasons: stale oracles, extreme deviation, supply cap, governance emergency; redeem stays open unless chain halts.
Full policy in Risk & Limits.
Testnet vs Mainnet behavior
Testnet (current 3–4 weeks)
Synthetic P10: A backing account tracks a basket proxy within a ±3% error band (published).
Same UX: single-asset mint/redeem, basket option, Flow routing & surplus rebates, all guards active.
Faster cadence: weekly reconstitution/rebalance snapshots.
Goal: battle-test quotes, guards, surplus accounting, and UI/SDK.
Mainnet (phase 2+)
Basket-backed (preferred): contracts custody the canonical BNB-chain representations of the Top 10; permissionless arb via basket-in/out.
OR Delta-neutral synthetic (hedged) if governance chooses; requires extra transparency (oracle attestations, hedging proofs).
How peg is kept close (why price ≈ NAV)
Permissionless mint/redeem at NAV ± fee creates arbitrage bands.
If DEX price of P10 > NAV: arb mints P10 and sells on DEX → price falls to NAV.
If DEX price of P10 < NAV: arb buys P10 on DEX and redeems for basket value → price rises to NAV.
Flow’s best-execution reduces friction, tightening the band further.
Developer notes (interfaces & events)
Core methods (names illustrative; final ABIs in the repo):
quoteMintSingle(assetIn, amountIn) -> p10Out, minOut, fee, routePreview
mintSingle(assetIn, amountIn, minP10Out, recipient)
quoteRedeemSingle(p10In, assetOut) -> amountOut, minOut, fee, routePreview
redeemSingle(p10In, assetOut, minAmountOut, recipient)
mintBasketExact(amounts[])
/redeemBasketProRata(p10In)
Events:
SnapshotProposed
,SnapshotActivated
,MintPaused(reason)
,Minted
,Redeemed
,SurplusSplit
.
All mint paths consume the current snapshot id; a new snapshot is time-locked before activation.
UX tips (what users will see)
“Oracle OK” badge (freshness/deviation/TWAP checks).
“Expected surplus rebate” on single-asset routes.
Clear min-out shown before they sign.
Choice of “Simple (one token)” or “Pro (basket)” tabs.
Etherscan links + event receipts (Minted/Redeemed/SurplusSplit).
Disclaimers
P10 does not include stablecoins; it tracks Top 10 non-stables by free-float mcap with caps and risk filters.
Membership and weights change at each snapshot; published ahead with time-lock.
In severe oracle incidents or chain issues, mint pauses; redeem remains open whenever technically possible.
Related pages
P10: What it Tracks – eligibility, weighting, cadence
Pricing & Oracles – feeds, guards, and parameters
Risk & Limits – caps, pauses, and emergency actions
Surplus & Rebates – how Flow rebates are calculated and shared
Last updated