Documentation Index
Fetch the complete documentation index at: https://docs.lumina-org.com/llms.txt
Use this file to discover all available pages before exploring further.
TL;DR
A buyer pays a small USDC premium for an active policy. If the parametric condition fires inside the cover window, the Shield mints a ClaimBond (ERC-1155, $1 face/unit, 730-day maturity) to the buyer. From there the holder has two settlement paths:- Option A — Hold to maturity. After 730 days, redeem on-chain for **1 / luminaPriceUsdSnapshot`, so a cheaper LUMINA at redemption time = more LUMINA per bond unit.
- Option B — Sell now. List the bond on the secondary marketplace and exit early in USDC. A new holder takes over the same hold-or-redeem decision.
End-to-end flow
The 6 steps
Buyer pays a USDC premium
The agent (or a human) calls
POST /api/v1/policies with productName,
coverageAmount, and buyer. The relayer signs purchasePolicyFor
on-chain; the buyer’s wallet only spends USDC. The policy is recorded
in PolicyManagerV2 and the LUMINA/USD price is snapshotted at
purchase time (audit fix H-6) so future redemption math uses a price
the buyer accepted.Active policy
The policy is live for
durationSeconds. During this window, anyone can
submit an EIP-712 signed price proof to the Shield via
submitTrigger(payload, signature). See Triggers.Event fires (or doesn't)
If the cover window ends without the condition holding, the policy
expires and the premium is consumed by the protocol — there is no
refund. If the Shield’s price-condition logic accepts the proof, it
calls
BondVault.mint(buyer, faceValueUsdc).ClaimBond minted
BondVault mints an ERC-1155 ClaimBond to the buyer. tokenId == epochId,
one unit = $1 face value, maturity = 730 days from mint. Bonds with the
same epoch share a maturity date.Holder decides — wait or sell
Two paths are available to the bond holder at any moment before
maturity:
- Hold until 730d, then call
BondVault.redeem(epochId)and receive $LUMINA (Option A). - List on the marketplace at a chosen
pricePerUnitin USDC; on fill the seller receives USDC and the buyer takes over the bond (Option B).
Option A — Worked example: hold to maturity
A concrete walkthrough with round numbers.| Step | Detail |
|---|---|
| Premium | $3 USDC |
| Cover | $800 USDC face value |
| Trigger | Condition fires inside the policy window |
| Bond minted | 800 units of ClaimBond (each unit = $1 face) |
| Wait | 730 days (maturity) |
| LUMINA price at redeem | $0.50 |
| Payout per unit | $1 / $0.50 = 2 LUMINA |
| Total redemption | 800 × 2 = 1,600 LUMINA |
The redemption formula uses
BondVault’s LUMINA/USD reference at maturity,
with the protocol’s solvency floor and audit-fix C-3 alignment. It is not
the spot price at the millisecond of redeem(); it is sourced from the
oracle reference the contract trusts.Option B — Sell on the marketplace
If the holder doesn’t want 730-day duration risk, they can list:$0.97 × 800 × (1 - 1.5%) = $764.88.
Buyer pays $0.97 × 800 × (1 + 1.5%) = $787.92 and now owns 800 units of
the bond, which they can redeem at maturity for $LUMINA — same choice the
seller had.
Fees: 1.5% maker + 1.5% taker = 3% per fill. Anti-spam floor:
pricePerUnit ≥ $1 (audit fix M-3). See
Marketplace for the full surface.
Why this design
ERC-1155 bonds with LUMINA redemption (instead of direct USDC payouts on trigger) buy three properties:- Vault liquidity. A flash of simultaneous triggers can’t drain the USDC reserves: bonds queue payouts against a maturity date, and marketplace listings let bond holders exit in USDC against other buyers’ wallets — not the vault’s. (See BondVault docs.)
- Settlement flexibility. Holders pick the asset they want to hold: USDC today via marketplace, or $LUMINA at maturity.
- Price alignment with the token. Payouts denominated in $LUMINA tie the protocol’s insurance load to its token economics. The purchase-time price snapshot (audit fix H-6) protects buyers from oracle drift between purchase and redemption.
For AI agents
- Decide based on
bond.maturityEpoch - nowand your own duration tolerance. - Use webhooks (
bond_minted,bond_redeemed,listing_purchased) instead of polling. - The SDK exposes
lumina.bonds.list()and the fulllumina.marketplace.*surface; redemption itself is on-chain viaBondVault.redeem(epochId)(see SDK / bonds). - Premium pricing is in USDC; do not quote a user in LUMINA at 730d if the bond is held.
For humans
- The hosted UI at lumina-org.com/app/human walks through purchase, monitoring, and marketplace listing.
- If 730 days is too long, list the bond on the marketplace today and receive USDC.
- Redemption in $LUMINA means upside if LUMINA appreciates between trigger and maturity, and downside if it depreciates — but the bond’s on-chain face is denominated in dollars, not in tokens.
FAQ
If the condition never fires, do I get the premium back?
If the condition never fires, do I get the premium back?
Why is redemption in $LUMINA and not USDC?
Why is redemption in $LUMINA and not USDC?
Aligning the protocol’s payout obligations with its native token frees
the BondVault from holding 1:1 USDC reserves against the entire
outstanding face value. USDC reserves still exist (used by the
marketplace and partial liquidity needs), but redemption mints LUMINA.
See “Why ERC-1155 bonds” for the
full reasoning.
What price of LUMINA is used at redemption?
What price of LUMINA is used at redemption?
The contract uses the protocol’s trusted LUMINA/USD reference at the
moment of
redeem() — sourced from the oracle and bounded by the
snapshot taken at policy purchase (audit fix C-3 + H-6). It is not the
spot DEX price.Can I sell a partial bond?
Can I sell a partial bond?
Yes. ClaimBond is ERC-1155 — list any
amount ≤ balance and keep the
remainder for redemption.What happens if the bond matures and I don't call redeem?
What happens if the bond matures and I don't call redeem?
Nothing bad. The bond remains valid; you can call
redeem(epochId)
later. There’s no expiry on the right to redeem.Marketplace pays USDC. Why?
Marketplace pays USDC. Why?
Because the marketplace counterparty is another USDC holder, not the
protocol’s reserve. Sellers receive USDC because that’s what the buyer
paid. Only
BondVault.redeem(epochId) interacts with $LUMINA.See also
- Claim Bonds — the ERC-1155 token itself.
- Bond Marketplace — fees, anti-spam floor, SDK.
- Triggers — how a Shield decides to mint.