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.
See /concepts/shields for the products themselves, and
/concepts/triggers for how a trigger reaches the adapter.
FlashShieldAdapter) is a thin UUPS-upgradeable
proxy that sits in front of every V5.3 flash shield. Its only job is to
expose the legacy IShieldV2 surface that PolicyManagerV2 was built
against, while delegating the actual condition logic to the slim
BaseFlashShield underneath.
Why the adapter exists
V5.3 introducedBaseFlashShield (sprint T-30a): a slim, common
implementation that all 6 flash shields share. The new surface is
narrower than IShieldV2 — it doesn’t carry triggerProbBps,
old-style asset enum fields, or the per-shield admin functions
PolicyManagerV2 calls during purchasePolicyFor / recordTrigger.
Two choices were available:
- Migrate
PolicyManagerV2to the new ABI — but PM is the most-integrated contract in the protocol (router, indexer, agents-API, SDK, dashboards all read it). A breaking ABI change there would force every downstream to redeploy in lockstep. - Insert a tiny adapter that bridges legacy IShieldV2 → BaseFlashShield per shield. The PM surface stays identical; the slim shield gets its clean ABI; the adapter is the only thing that knows both.
Where the adapter sits
PolicyManagerV2.productShield(productId), you get the
adapter address, not the underlying BaseFlashShield. Calls land
on the adapter, which decodes the legacy ABI and forwards to the slim
shield. Most agents never need to touch the inner BaseFlashShield
directly — but the address is published (see below) for verifiability.
Properties
| Property | Value |
|---|---|
| Pattern | UUPS upgradeable (one proxy per product) |
| Surface | IShieldV2 (legacy) — submitTrigger, productId, payoutRatioBps, etc. |
| Backing | One BaseFlashShield instance per adapter |
| Owner | Governance (same multisig as the rest of the protocol) |
| Upgrade scope | Adapter-only; upgrading the adapter does not redeploy the underlying shield, and vice versa |
The 6 adapters (Base Sepolia, V5.3)
| Product | Adapter (what PM points to) | Underlying BaseFlashShield |
|---|---|---|
| Flash BTC 1h | 0x5fC732D28c09DfcA2e7eF0AAd6C9491c8474eAdB | 0x06ED1ffB6bA493c036472bf1C58EC9301B5A2363 |
| Flash BTC 24h | 0x844A5fDb3C910DC33Eb720fDB5387C3d55eC867d | 0x9E4C1E799AA41a36ae074768b33198b9D8aCC173 |
| Flash BTC 48h | 0x0840d638a3E79919afE3b1AB589E6D4b5E8C45Bb | 0x815802E93cD7fB0C4Ce49f290F1A1Ee9473F0406 |
| Flash ETH 1h | 0xeC42c7169B4D80F4D8A113607367F75c2df02935 | 0xF858b572De264DF8980dF57A680762B7cb88E351 |
| Flash ETH 24h | 0xb0f143beF75F32BcAB569766e9159366f8fD69C4 | 0x18ccC1eE644C8A79DD93D0F4694960FeC5348eFA |
| Flash ETH 48h | 0x26db224D3Ddc00F4bFcF8ab26A92B9f7c81A47E6 | 0xC42360BC94401B07ca337Bc4d0Fb338604F8f4cE |
Calling pattern from an agent
You almost never call the adapter directly. The flow that matters:- Purchase.
CoverRouterV2.purchasePolicy(productId, …)→ PM looks upproductShield(productId)→ calls the adapter, which forwards toBaseFlashShield.recordPolicy(...). - Trigger.
ShieldKeeper(or any caller) callsadapter.submitTrigger(payload, signature). The adapter forwards toBaseFlashShield.submitTrigger(...)for the actual signature + sequencer + drop checks. On accept, the base shield callsBondVault.mint(...).
productShield(productId)
on PM, treat the returned address as “the shield”, call submitTrigger on it.
Verifying the adapter → shield link
To confirm an adapter is wired to the expectedBaseFlashShield:
BaseFlashShield.
Upgradeability and safety
Because the adapter is UUPS, governance can upgrade the legacy-ABI translation layer without touching the underlying shield (e.g. add a new field to the legacy ABI, change the way oracle proofs are routed) — and vice versa. Each adapter has its own upgrade timelock; an upgrade to one adapter does not affect the other five.See also
- Shields — per-product drop thresholds + addresses.
- Triggers — the full submitTrigger path.
- BondVault throttle — what happens after a successful trigger.