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
| Product | Trigger | Window | Premium /$1k cover |
|---|---|---|---|
| Flash BTC 1h | BTC drops ≥ 2.5% from purchase price | 1 h | $2.92 |
| Flash BTC 24h | BTC drops ≥ 6% from purchase price | 24 h | $52.60 |
| Flash BTC 48h | BTC drops ≥ 10% from purchase price | 48 h | $148.67 |
| Flash ETH 1h | ETH drops ≥ 4% from purchase price | 1 h | $1.68 |
| Flash ETH 24h | ETH drops ≥ 8.5% from purchase price | 24 h | $45.80 |
| Flash ETH 48h | ETH drops ≥ 14% from purchase price | 48 h | $123.01 |
| Parameter | Value |
|---|---|
| Deductible | 20% |
| Payout ratio | 80% (= 1,000 cover) |
| Bond maturity | 730 days |
| Margin multiplier | 2.00x (effective premium multiplier ≈ 1.60x after deductible) |
| Oracle | Chainlink BTC/USD + ETH/USD on Base mainnet |
| Bond face | $1 per token |
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.
| Product | Adapter (the one PM points to) | BaseFlashShield |
|---|---|---|
| Flash BTC 1h | 0x5d50310B9166184e822cD5368F51C1409713054f | 0x7d1615C90d01712a3b86Df26312aC6D8EFa0d0b3 |
| Flash BTC 24h | 0x475b3F712707F61824122a94fE78b106260F8882 | 0x18e2D3b8Ff4D194CDB9862f8e6239E5e1145961d |
| Flash BTC 48h | 0xdc6387E86F7D852D1f99F4009cFd8AdC2d500298 | 0xe206dd8fb02b1C2A0507566c3d03a27554E8CBeB |
| Flash ETH 1h | 0x57869AD3E7C56B0c96F357179DD231b407C88338 | 0xfF1a1B20153019C22f97278204Ccfc1b1409a518 |
| Flash ETH 24h | 0x4fD09cF98F6814Cc8b33C2E491429f59d0bCf089 | 0x2832b5543f6F2a055312654739F0ae03F5b0b582 |
| Flash ETH 48h | 0x9696CFFD7dE8B1e16F83Dcc798c5CE69a61C884C | 0x60dFC6610c64aC84e12afA943737Cf7733215B75 |
Shape
| Field | Meaning |
|---|---|
productId (bytes32) | keccak256(canonicalName) — e.g. keccak256("FLASHBTC1H-001") |
payoutRatioBps | Cents-on-the-dollar paid out when triggered (8000 = 80%) |
marginBps | Safety margin built into premium pricing |
durationSeconds | Coverage window length (1h / 24h / 48h) |
active | Whether new policies can be purchased |
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.