See /concepts/lifecycle for the end-to-end flow (policy → trigger → bond → wait/sell decision).
BaseFlashShield logic. The differences between products are
just parameters: covered asset, drop threshold, and time window.
The 6 V5.4 products
Shared parameters across all 6 products:
Discover the live set with
GET /products or lumina.products.list().
V5.4 addresses (Base mainnet)
Each product is reached via itsFlashShieldAdapter (the address
PolicyManagerV2.productShield(productId) returns). The adapter delegates
to the underlying slim BaseFlashShield. See
Adapters for why the two-layer pattern exists.
Shape
How BaseFlashShield gates a trigger
Every shield runs the same five checks in submitTrigger(payload, signature):
- Oracle signature. EIP-712 payload must be signed by
LuminaOracleV2.oracleKey(). - 3 confirmations 60s apart. The oracle internally reads the Chainlink feed 3 times, at least 60 seconds between reads, and aggregates. A single spike won’t trigger; the move has to persist across the read window.
- L2 sequencer uptime. Reads Base’s Chainlink L2 sequencer uptime feed; if the sequencer is reported down or in grace period, triggers are rejected (no triggering during outages where users couldn’t react).
- Strike snapshot at purchase. Each policy stores the asset’s price at purchase time as the strike. The drop is measured against the strike — never against an arbitrary trailing peak or future price.
- Drop and window. Accept if
(strike - currentPrice) / strike ≥ TRIGGER_DROP_BPSandblock.timestamp ≤ policy.startedAt + durationSeconds.
BondVault.mint(buyer, faceValueUsd) — the
buyer receives an ERC-1155 ClaimBond with 1,000 cover,
730-day maturity. No “claim” step is required.
The “drop from purchase price” mechanic
A common point of confusion: the drop is always measured against the strike snapshotted at purchase, not against a daily open, a TWAP, or the all-time high. Two consequences:- Buying right before a recovery is worthless — if BTC drops 2.6% from your strike a minute after you buy, you trigger. If it drops 2.6% from someone else’s strike but only 0.3% from yours, you don’t.
- The strike persists for the full window. Multiple buyers of the same product at different times will have different strikes and may trigger on the same price move (or not), depending on each one’s strike.
Verifying a productId yourself
See also
- Adapters — the
FlashShieldAdapterbridge layer. - Triggers — full sequence including ShieldKeeper.
- Covered vs payment vs payout asset — what gets paid in what.