LUMINA.

Parametric on-chain insurance for autonomous AI agents and humans. Premiums burn $LUMINA. Triggers mint zero-coupon ClaimBonds. Settled by Chainlink-grade oracles.

Whitepaper · English · v5.3 · 2026-05-22
Network: Base Sepolia (chainId 84532) · Mainnet pending
github.com/org-lumina
6 Flash Shields Live 100M Fixed Supply Chainlink Oracle Open Source

Table of Contents

  1. 01Executive Summary
  2. 02Introduction
  3. 03Protocol Architecture
  4. 04Insurance Products — the 6 Flash Shields
  5. 05Pricing & Premium Model
  6. 06BondVault, ClaimBond & Maturity
  7. 07Oracle & Verification
  8. 08Token Economics
  9. 09Adaptive Burn Distribution
  10. 10Burn Engine & Deflationary Flow
  11. 11Secondary Marketplace
  12. 12Security Model
  13. 13For AI Agents
  14. 14Roadmap
  15. 15Risks & Disclaimer
  16. 16Legal Framework
  17. AAppendix A — Deployed Addresses
  18. BAppendix B — Glossary
  19. CAppendix C — References

1. Executive Summary

Lumina Protocol is a parametric on-chain insurance system deployed on Base. It pays out automatically when an oracle confirms a measurable event — a price drop, a stablecoin depeg, a sustained borrow-rate spike — without claims adjusters, voting, or human intervention.

The protocol is built around four primitives:

The current architecture is fully operational on Base Sepolia: six Flash Shields are live, premiums flow into the burner, the marketplace is open (3% fee burn — 1.5% seller + 1.5% buyer — USDC settlement), the Chainlink-backed oracle (BTC/USD + ETH/USD) feeds shields via the FlashShieldAdapter UUPS bridge, and a self-service onboarding endpoint lets agents mint API keys with a single wallet signature.

This whitepaper documents what is deployed today on V5.3. Forward-looking statements are confined to Section 14 (Roadmap) and Section 15 (Risks). Every numeric claim, contract address, and function signature is grounded in the protocol source code and the live /health endpoint of the production API.

2. Introduction

2.1 The problem: DeFi without protection for autonomous agents

Decentralized finance has matured into a programmable economy where bots and AI agents now execute the majority of on-chain volume. They can borrow, lend, swap, hedge, and rebalance — but they cannot insure themselves against the few events that wipe entire strategies in a single block: flash crashes, stablecoin depegs, rate spikes that force forced liquidations.

Existing crypto insurance — Nexus Mutual, InsurAce, Sherlock — is built around discretionary claims: an event is reported, a committee votes, a payout is issued (or denied) days or weeks later. That is fundamentally incompatible with autonomous agents that need a deterministic, sub-minute response.

2.2 What Lumina does differently

Lumina is parametric: every policy specifies an objective trigger condition (e.g., “BTC drops ≥ 5% in any rolling 1-hour window”). When an oracle confirms the condition, the payout fires automatically inside the same transaction. There is no claim form, no committee, no delay, no possibility of subjective denial.

Lumina is also agent-first. The API exposes a relayer pattern (POST /api/v1/policies) where the protocol pays the gas and an agent only needs an x-api-key header. Maintaining 24 individual skill files to streamline the most common operations means an agent can integrate Lumina end-to-end in under one hour.

3. Protocol Architecture

3.1 Component map

Twelve smart contracts collaborate to form the live protocol. They split across five concerns:

ConcernContractsRole
TokenLuminaTokenV2 · FounderVesting · TreasuryVestingFixed-supply ERC-20, founder lock with AltSeason gates, treasury drip
BondsBondVault · ClaimBondSingle 70M reserve; ERC-1155 zero-coupon bonds, $1 face, 730d maturity
CoreCoverRouterV2 · PolicyManagerV2 · TWAPBurner · AdaptiveFeeDistributorBuy / redeem / cancel; premium math; routes 100% of premiums to burn
ProductsBaseFlashShield + 6 Flash shield implementations behind FlashShieldAdapterOne contract per BTC/ETH trigger window; UUPS proxies; adapter bridges to the legacy IShieldV2 surface
MarketplaceLuminaBondMarketplace · BuybackEngineSecondary trading of ClaimBonds; commit-reveal MEV protection
Oracles & automationLuminaOracleV2 · CapacityOracle · SolvencyOracle · ShieldKeeperEIP-712 signed proofs; LUMINA TWAP price; solvency-ratio monitoring (200/100/70% bands); trigger automation

3.2 Policy purchase flow

The end-to-end flow from a buyer's perspective is four steps:

  1. Buyer queries CoverRouterV2.quotePremium(productId, coverageAmount) — returns expected premium and payout.
  2. Buyer approves the router to spend the premium in USDC.
  3. Buyer calls CoverRouterV2.purchasePolicy(productId, coverageAmount, asset) (or purchasePolicyFor(...) via the relayer).
  4. The router pulls premium USDC, forwards 100% of it to the TWAPBurner, then calls PolicyManagerV2.recordPolicy(...) to register the policy. PolicyCreated is emitted.

3.3 Trigger-payout flow

Triggers are permissionless: anyone can submit a valid oracle proof.

  1. An off-chain signer (operated by Lumina or a third-party keeper) reads Chainlink price feeds.
  2. It constructs an EIP-712 PriceProof(int256 price, bytes32 asset, uint256 verifiedAt) and signs it with the trusted oracleKey.
  3. Anyone calls CoverRouterV2.submitTrigger(productId, policyId, oracleProof).
  4. The router forwards to PolicyManagerV2.triggerPayout, which calls the shield's verifyAndCalculate. The shield checks the EIP-712 signature against LuminaOracleV2.oracleKey(), validates the proof timestamp window, the asset, the policy's coverage window, and the trigger condition.
  5. If everything passes, BondVault.issueBond(buyer, payoutUSD) mints ERC-1155 ClaimBonds for the buyer in the corresponding maturity epoch.

3.4 Bond redemption flow

Bonds mature exactly 730 days after issuance. After maturity:

  1. Holder calls BondVault.redeemBond(epochId, usdAmount).
  2. The vault burns the holder's ERC-1155 balance for that epoch.
  3. It transfers usdAmount worth of $LUMINA at the current TWAP price (read from CapacityOracle).

Bonds remain transferable through the secondary marketplace before maturity. Once they mature, they can no longer be listed (the marketplace's list() rejects matured bonds).

4. Insurance Products — the 6 Flash Shields

Lumina V5.3 ships six parametric Flash products: three BTC drawdown windows and three ETH drawdown windows. Each shield is a UUPS proxy inheriting from BaseFlashShield; each verifies its own trigger condition inside _doVerifyAndCalculate. The on-chain product registry uses canonical names of the form FLASHBTC1H-001 — the productId a caller passes is keccak256(canonicalName).

The FlashShieldAdapter (UUPS) is a bridge contract: it exposes the slim T-30a Flash shields through the legacy IShieldV2 surface that PolicyManagerV2 still calls, so the new shields plug into the existing core without redeploying it.

4.1 Flash Crash Shields (BTC, 3 windows)

Pay out when BTC's spot price drops from the strike snapshot taken at createPolicy by the configured threshold inside the policy window. Premium is quoted per $1,000 of cover (payout = $800 LUMINA per $1,000 cover after the 20% deductible).

ShieldTriggerWindowPremium / $1kCanonical name
Flash BTC 1hBTC −2.5% from strike1h$2.92FLASHBTC1H-001
Flash BTC 24hBTC −6% from strike24h$52.60FLASHBTC24-001
Flash BTC 48hBTC −10% from strike48h$148.67FLASHBTC48-001
ShieldAdapter address (Base Sepolia)
Flash BTC 1h0x5d50310B9166184e822cD5368F51C1409713054f
Flash BTC 24h0x475b3F712707F61824122a94fE78b106260F8882
Flash BTC 48h0xdc6387E86F7D852D1f99F4009cFd8AdC2d500298

4.2 Flash Crash Shields (ETH, 3 windows)

ShieldTriggerWindowPremium / $1kCanonical name
Flash ETH 1hETH −4% from strike1h$1.68FLASHETH1H-001
Flash ETH 24hETH −8.5% from strike24h$45.80FLASHETH24-001
Flash ETH 48hETH −14% from strike48h$123.01FLASHETH48-001
ShieldAdapter address (Base Sepolia)
Flash ETH 1h0x57869AD3E7C56B0c96F357179DD231b407C88338
Flash ETH 24h0x4fD09cF98F6814Cc8b33C2E491429f59d0bCf089
Flash ETH 48h0x9696CFFD7dE8B1e16F83Dcc798c5CE69a61C884C

4.3 Common parameters (all shields)

ParameterValueSource
Minimum cover$100 USDCBaseFlashShield._minCoverage()
Deductible20% (DEDUCTIBLE_BPS = 2000)Payout = $800 LUMINA per $1,000 cover
Margin2.00× (marginBps = 20000) — effective multiplier ~1.60×configureProduct(...)
Strike snapshotSpot at createPolicyBaseFlashShield._strikeAt(...)
Bond maturity730 days from triggerBondVault.BOND_MATURITY_SECONDS
L2 sequencer checkactive in BaseFlashShield; address(0) on Base Sepolia → no-opChainlink L2 Sequencer Uptime Feed (mainnet wiring)

Earlier V5.1 testnet builds also exposed a Flash BTC 4h window, a USDT Micro Depeg shield, and an Aave USDC Rate Shock shield. In V5.3 those products are not user-facing: the 4h BTC window was retired, the Micro Depeg product was dropped, and Rate Shock remains paused on-chain pending real-Aave wiring.

5. Pricing & Premium Model

5.1 Premium quote

V5.3 publishes a flat premium per $1,000 of cover for each shield. The buyer-facing surface is:

premium = cover × premiumPer1k / 1000

The protocol still applies a deterministic risk-loading inside the shield (marginBps = 20000, i.e. 2.00×) before the payout is computed; the published $/$1k figure already incorporates that loading. There is no probability factor exposed to callers — the buyer only ever needs to read the premium per $1k and the multiplier.

If the formula evaluates to zero (very small covers), the contract floors the premium at 1 micro-USDC ($0.000001).

5.2 Capacity check

Before recording a policy, PolicyManagerV2 queries BondVault.availableCapacityUSD(). If the policy's potential payout would push the vault below its backing floor (committed ≤ 50% of reserve value, i.e. ~200% backing), the purchase reverts with InsufficientCapacity.

Capacity is computed on a 1-hour TWAP of LUMINA price, not the spot price. This anti-MEV safeguard prevents an attacker from manipulating spot to either deny coverage or force the protocol into thin reserves.

BondVault enforces an additional throttle on burns/redemptions: cap 1.08% per week, FIFO queue, so a single block cannot drain the reserve even if a large cohort triggers simultaneously.

5.3 Auto-pause circuit breaker

If the LUMINA TWAP price falls below 0.005 USD, isProtocolAutoPaused() returns true and new purchases revert. The breaker uses hysteresis: once tripped, it requires the price to recover above 0.008 USD (the RESET_PRICE_FOR_NEW_POLICIES) before re-arming. This avoids flapping near the threshold.

5.4 Calibration table (current Sepolia, V5.3)

ShieldWindowDrop from strikePremium / $1kmarginBps
Flash BTC 1h3600s2.5%$2.9220000
Flash BTC 24h86400s6%$52.6020000
Flash BTC 48h172800s10%$148.6720000
Flash ETH 1h3600s4%$1.6820000
Flash ETH 24h86400s8.5%$45.8020000
Flash ETH 48h172800s14%$123.0120000

6. BondVault, ClaimBond & Maturity

6.1 The single-vault model

Earlier versions of Lumina used four separate vaults (one per asset class). The current architecture collapses them into a single BondVault holding 70 million $LUMINA. The vault is never funded directly by users; it receives its allocation at LuminaTokenV2.initialize() as part of the genesis distribution.

The vault has only two state-changing surfaces:

6.2 ClaimBond — ERC-1155 zero-coupon

ClaimBonds are ERC-1155 tokens grouped by monthly maturity epoch. The tokenId is the epoch identifier, computed as year × 100 + month (e.g., 202805 = May 2028). All bonds maturing in the same calendar month share the same tokenId and are fungible within that epoch.

Critically, 1 token = $1 USD face value at maturity. Quantities are integer dollars, NOT 6-decimal USDC base units. A bond row with balance 4000 represents $4,000 of face value, not $0.004.

Bonds are non-transferable peer-to-peer by design. The contract overrides _update to allow only mints (from == 0), burns (to == 0), and transfers via authorized operators. The LuminaBondMarketplace is the only authorized operator, ensuring the protocol captures the secondary-trade fee.

6.3 Maturity period

BOND_MATURITY_SECONDS = 730 days. A bond minted today by a triggered policy matures exactly two years from now. Maturity is fixed at issuance and does not change if the bond is sold on the marketplace — the buyer redeems at the same date.

6.4 Solvency floor

The protocol tracks totalCommittedUSD (sum of issued bonds) and totalReservedUSD (sum of capacity reservations from active policies). Their sum may never exceed SAFETY_FACTOR_BPS × reserveValueUSD / 10000. burnFromReserves — an admin path used to retire excess collateral — is capped at 5% of vault reserves per transaction.

7. Oracle & Verification

7.1 LuminaOracleV2 (Chainlink-backed on Base Sepolia)

The shield oracle is LuminaOracleV2.sol at 0x9bfa2f7A5098C89b8740D1694d1f716A0Bd871dD (Base Sepolia). It reads live Chainlink BTC/USD and ETH/USD feeds directly — no off-chain EIP-712 signer is required on the path; the legacy EIP-712 verifier remains in the contract for backwards compatibility and for future feeds that lack a Chainlink aggregator.

The legacy EIP-712 envelope (kept for upgrade compatibility) is:

DOMAIN = { name: "LuminaOracle", // literal in the contract — NOT "LuminaOracleV2" version: "2", chainId: block.chainid, // captured at deploy: 84532 on Sepolia verifyingContract: address(this), }

For Flash BTC and Flash ETH the shield calls Chainlink's latestRoundData() path inside FlashShieldAdapter; the legacy EIP-712 path is only invoked when the asset has no native Chainlink feed.

7.2 PriceProof typed data

PriceProof { int256 price // signed feed answer (8-decimal Chainlink format) bytes32 asset // right-padded UTF-8 (e.g. ethers.encodeBytes32String("BTC")) uint256 verifiedAt // unix seconds when the API observed the feed }

The shield calls IOracleV2(oracle).verifyPriceProofEIP712(price, asset, verifiedAt, signature) inside _doVerifyAndCalculate. The returned signer must equal the oracle's oracleKey().

7.3 Off-chain signer service

The lumina-api service exposes POST /api/v1/oracle/sign-proof, which:

  1. Reads the current Chainlink price feed for the requested asset.
  2. Constructs the EIP-712 envelope with verifiedAt = now.
  3. Signs with the ORACLE_PRIVATE_KEY held in Railway's secret store.
  4. Returns the ABI-encoded oracleProof ready to pass into submitTrigger.

The signer's address is auditable on-chain via LuminaOracleV2.oracleKey(). Any agent can fetch it via GET /api/v1/oracle/signer before submitting a trigger.

7.4 Permissionless trigger submission

submitTrigger has no access control. The argument is solely the cryptographic proof — a forged or stale proof reverts in the shield's verification path. This means anyone (the policy buyer, a keeper bot, an MEV searcher) can submit a valid proof and trigger a payout. The policy buyer is the sole beneficiary regardless of who calls.

7.5 Capacity oracle & solvency oracle

Two additional oracles serve internal protocol needs:

8. Token Economics

8.1 Supply & standard

$LUMINA is an ERC-20 + ERC-20Burnable token deployed behind a UUPS proxy. Maximum supply is 100_000_000 * 1e18, fixed at construction. There is no mint function. Supply only decreases via burn.

The constructor enforces assert(totalSupply() == MAX_SUPPLY) after the genesis distribution, and totalBurned() returns MAX_SUPPLY - totalSupply().

8.2 Initial distribution (100M)

Minted exactly once in initialize() across five immutable address arguments:

AllocationTokens%RecipientBehaviour
Bond Reserve70,000,00070%BondVaultBacks all claims; only leaves via redeemBond at maturity.
CEX/DEX Liquidity14,000,00014%CEX Liquidity ReserveEarmarked for centralized + decentralized exchange listings.
Founder8,000,0008%FounderVestingLocked behind 2-of-3 AltSeason oracle gates — see § 8.4.
LBP5,000,0005%LBP DepositLiquidity Bootstrapping Pool (Fjord Foundry) at TGE.
Treasury3,000,0003%TreasuryVesting180-day lock, then 250k/month drip — see § 8.5.
Total100,000,000100%

8.3 BURNER_ROLE

Only the TWAPBurner contract holds BURNER_ROLE on the token. This role allows burnFrom to be called on any address — necessary because the burner pulls $LUMINA from the protocol's intermediate buffers and burns it. DEFAULT_ADMIN_ROLE manages role assignments. Renouncing DEFAULT_ADMIN_ROLE permanently locks BURNER_ROLE management; the deployer should only renounce after the final TWAPBurner deployment is confirmed.

8.4 FounderVesting V2 (8M, three independent paths)

The 8M founder allocation unlocks via FounderVesting V2: three independent gates, first-to-trigger wins, then three tranches of ~3.333M each release every 31 days.

FounderVesting V2 is deployed at 0xfF4Db529bBCd4E3CC091E07b7845241EB4762832 and is wired to LuminaOracleV2 for the live ETH/USD and ETH/BTC reads.

8.5 TreasuryVesting (3M, drip)

Releases are onlyOwner; one release per 30-day window, capped at the monthly maximum.

9. Adaptive Burn Distribution

The 100% of USDC routed to the TWAPBurner is not always burned outright. Before any LUMINA is bought and burned, the burner consults AdaptiveFeeDistributor to decide how the incoming USDC should split across four buckets:

The split is not static. It adapts on two axes: protocol solvency and LUMINA market momentum. The 4×4 product of these two axes yields 16 possible distributions, each pre-tuned to one regime. The full matrix is implemented in AdaptiveFeeDistributor._lookupDistribution(sLevel, mLevel) and verified by 16-of-16 quadrant unit tests.

9.1 The two axes

Solvency tiers — computed by SolvencyOracle as the ratio of (BondVault LUMINA reserve × spot price) to total committed obligations in USD, expressed in basis points:

Momentum buckets — computed from the ratio between the short-window TWAP (30 minutes) and the long-window TWAP (1 day) of LUMINA's spot price:

9.2 The 16-quadrant matrix

Each cell shows the basis points routed to burn / buyback / ops / maintenance, summing to 10000 (100%):

Solvency \ Momentum RALLY STABLE DECLINE CRASH
ULTRA 9500/0/0/500 9000/500/0/500 8500/1000/0/500 7500/2000/0/500
HEALTHY 9000/500/0/500 8500/800/200/500 7000/2100/200/700 5500/3500/200/800
STRESSED 7500/1800/200/500 5500/3500/200/800 3800/5500/200/500 1800/7500/200/500
CRISIS 4800/4500/200/500 2800/6500/200/500 800/8500/200/500 0/9600/200/200

Bold cell = HEALTHY/STABLE = the default operating regime. The four FALLBACK_*_BPS constants in TWAPBurner mirror this cell as the safety net if the distributor reverts.

9.3 Worked examples

9.4 Implementation status (Sepolia testnet)

⚠ Honest disclosure
The 16-quadrant matrix is fully implemented in AdaptiveFeeDistributor.sol and exercised by 16-of-16 quadrant unit tests in AdaptiveFeeDistributorTest.t.sol. However, on Sepolia today, the momentum input is held at neutral (10000 bps) in SolvencyOracle.sol: a deep LUMINA/USDC liquidity pool has not yet been deployed on Sepolia, so the momentum oracle has no real on-chain TWAPs to read.

In practice, this means the matrix runs on its solvency axis only: at runtime it collapses to the STABLE column. The full 16-quadrant behavior activates automatically once three pieces ship together:

  1. A real LUMINA/USDC Uniswap V3 pool is deployed and seeded with liquidity on the target chain.
  2. The momentum oracle hunk (already written on branch release/v5.1-pre-mainnet, audit fix H-10) is cherry-picked into SolvencyOracle.sol.
  3. The BuybackSpender contract is deployed and wired as the consumer of buybackReserve — the missing piece that converts accumulated USDC back into LUMINA buybacks on price drawdowns.

The sequencing is intentional: deploying momentum logic before a deep liquidity pool exists would produce a dead signal indistinguishable from neutral, with no off-chain symptom to flag the regression. Each piece lands when its dependency is in place.

9.5 References

10. Burn Engine & Deflationary Flow

9.1 Two burn paths

Every USDC entering the protocol routes through TWAPBurner:

  1. PremiumsCoverRouterV2._purchase calls twapBurner.receivePremium(premium) after each policy purchase. The transfer is atomic with the purchase.
  2. Marketplace feesLuminaBondMarketplace.executeBuy deducts a 3% fee on every secondary trade, also routed via receivePremium.

USDC accumulates inside the burner until executeBurn() is called.

9.2 executeBurn parameters

ParameterDefaultEffect
burnCooldown900s (15 min)Minimum gap between burns.
minBurnAmount1 USDCBelow this, the call reverts with "Below minimum".
maxBurnAmount10,000 USDCHard cap per call to limit slippage in a single swap.
adaptiveModeEnabledtrueRoutes to AdaptiveFeeDistributor for dynamic 4-bucket split. Falls back to fixed bps if the distributor reports unhealthy.

9.3 Default 4-bucket distribution (when adaptive falls back)

BucketBPS%Constant
Burn (USDC → buy LUMINA → burn)850085%FALLBACK_BURN_BPS
Buyback Reserve8008%FALLBACK_BUYBACK_BPS
Maintenance Reserve5005%FALLBACK_MAINTENANCE_BPS
Ops Reserve2002%FALLBACK_OPS_BPS

The Burn bucket buys $LUMINA via Uniswap V3 (with Aerodrome as a sequential fallback) and sends to 0xdead. Each successful burn emits:

event BurnExecuted( uint256 usdcSpent, uint256 luminaBurned, uint256 effectivePrice, uint256 timestamp )

9.4 Permissionless caller

executeBurn is external nonReentrant — no onlyAuthorized. Any wallet can call it. The cooldown gates how often, and the min/max amounts gate per-call slippage. Anyone can be the burn keeper.

11. Secondary Marketplace

10.1 Purpose

ClaimBonds mature in 730 days. Holders who want liquidity sooner sell on the secondary market at a discount; buyers earn an implied yield by waiting for maturity. The market is permissionless and on-chain.

10.2 Listing flow

  1. Seller sets ClaimBond.setApprovalForAll(marketplace, true) (one-time per epoch family).
  2. Seller calls LuminaBondMarketplace.list(epochId, amount, priceUSDC). The contract verifies balanceOf(seller, epochId) ≥ amount and that block.timestamp < maturityDate(epochId).
  3. The marketplace pulls the ERC-1155 amount via safeTransferFrom, stores a Listing struct, and emits Listed(listingId, seller, epochId, amount, priceUSDC).

10.3 Buy flow

  1. Buyer approves USDC to the marketplace for priceUSDC.
  2. Buyer calls executeBuy(listingId).
  3. The marketplace transfers USDC from buyer, deducts a 3% fee (routed to TWAPBurner), pays the seller, and transfers the ERC-1155 amount to the buyer.
  4. Maturity does not change — the buyer redeems at the original date, just like the original holder would have.

10.4 Cancel flow

The seller can cancel any of their own listings via cancel(listingId). The bond returns to the seller's wallet. There is no on-chain self-buy enforcement, but the frontend disables the Buy button when seller == connected wallet.

10.5 BuybackEngine (commit-reveal MEV protection)

A separate BuybackEngine consumes the buyback bucket from TWAPBurner using a commit-reveal scheme to prevent front-running. Operations are batched and revealed in a separate transaction; private mempool routing is recommended on the ops side.

12. Security Model

11.1 Upgradeability

All core contracts are UUPS upgradeable with _authorizeUpgrade gated by DEFAULT_ADMIN_ROLE. Upgrades require a single signer today and will move to a multisig before mainnet (see Roadmap).

11.2 Audit posture

Internal audit reports are public:

The protocol carries an accepted risk note: no Tier-1 third-party audit pre-mainnet. The founder's bug bounty + multisig + cold-storage key go live at T+30d post-mainnet deploy.

11.3 Access control matrix

docs/ACCESS-CONTROL-MATRIX.md documents every privileged role, its current holder, and rotation policy. Key roles:

11.4 Threat model

Documented in docs/audit/THREAT-MODEL.md. Highest residual risks:

13. For AI Agents

12.1 Self-service onboarding

An autonomous agent can mint its own API key without human intervention. The flow is two on-line operations:

  1. Sign the EIP-191 envelope "Lumina onboarding for {wallet} at {timestamp}" with the agent's wallet.
  2. POST /api/v1/agent/onboard with {walletAddress, label?, signature, timestamp}.

The API verifies the signature, mints a lk_<64hex> key (SHA-256 hashed at rest), and returns the plaintext exactly once. Limits: max 3 active keys per wallet, 10 onboard attempts per IP per hour.

12.2 Relayer-paid policy purchase

The signature feature for agents: POST /api/v1/policies. The API's relayer wallet signs purchasePolicyFor on-chain on the agent's behalf. The agent does not need ETH for gas; only USDC for the premium (held by the agent's wallet, pulled by the contract). Idempotency keys prevent double-spend on retry.

12.3 Skill files

The lumina-api repo ships 24 skill files at docs/skills/ — one per common operation. Each file follows a fixed structure: a "What this does" plain-English block, a copy-pasteable LLM prompt, env vars, curl + TypeScript + Python examples, request/response schemas, and error codes. Designed to be dropped straight into an agent's tool list or system prompt.

12.4 Endpoint surface

MethodPathAuthPurpose
GET/healthnoneLive state — chain, relayer, contract addresses
GET/productsnoneList 6 active Flash shields + capacity
GET/products/:id/quote?cover=NnonePremium & payout for a coverage amount
POST/api/v1/agent/onboardEIP-191 sigSelf-service mint API key
GET/api/v1/agent/keysx-api-keyList caller's keys
DELETE/api/v1/agent/keys/:keyIdx-api-keyRevoke caller's own key
POST/api/v1/policiesx-api-keyBuy policy via relayer (agent pays no gas)
GET/api/v1/policiesx-api-keyList caller's policies
GET/api/v1/bonds/:walletx-api-keyCaller's bond positions
POST/api/v1/redeemx-api-keyIndex a redemption (on-chain redeem signed by agent)
POST/api/v1/marketplace/listx-api-keyIndex a listing
POST/api/v1/marketplace/buyx-api-keyIndex a buy
POST/api/v1/oracle/sign-proofx-api-keyGet a fresh EIP-712 PriceProof for submitTrigger
GET/api/v1/oracle/signerx-api-keyRead the current oracle signer address

14. Roadmap

Phases 1-4 — V5.3 deployed ✅ (Base Sepolia, 2026-05-14)

Phase 5 — Testnet usage & bake (current)

Phase 6 — Pre-mainnet hardening

Phase 7 — Mainnet launch

15. Risks & Disclaimer

⚠ Testnet only
The current deploy runs on Base Sepolia. The USDC contract is a mock; the BTC and ETH oracle reads are real Chainlink feeds on Base Sepolia, but no real money is at risk because no real money should be deposited. Do not transfer mainnet assets to any address listed in this document.

14.1 Smart contract risk

The protocol is unaudited by a Tier-1 firm at the time of writing. Internal audits are public but not a substitute. A reentrancy, storage-collision, or oracle-manipulation bug in the BondVault or shield path could result in loss of all collateral.

14.2 Oracle risk

Triggers depend on signed EIP-712 proofs from an off-chain signer. If the signer's key is compromised, every active policy can be falsely triggered, draining the BondVault. Mitigations are roadmap items (HSM, multisig signer).

14.3 Liquidity risk

Bond redemption pays out in $LUMINA at the current TWAP price. If LUMINA's secondary market liquidity is thin at the moment of redemption, holders may receive less USD-equivalent than the bond's nominal face value.

14.4 Regulatory risk

Parametric on-chain insurance is novel. It may be classified as a security, a derivative, or a regulated insurance product in some jurisdictions. The protocol's use is at the user's own legal risk.

14.5 Disclaimer

This whitepaper describes the protocol as deployed on 2026-05-14 to Base Sepolia (V5.3). It is not an offer to sell or a solicitation to buy any token, security, or insurance product. It is provided for technical and educational purposes. Forward-looking statements in Section 14 are aspirational; nothing in this document is a guarantee of future deployment, merger of features, or financial return.

16. Legal Framework

15.1 Protocol structure

Lumina Protocol is open-source software published under the MIT license at github.com/org-lumina. The contracts are deployed and operated by the founder team during testnet; on mainnet, governance and parameter authority migrate to a multisig and ultimately to on-chain governance.

15.2 Product nature

ClaimBonds are parametric payout instruments, not insurance contracts in the regulated sense. There is no claims adjuster, no underwriter, no policyholder agreement. A trigger is a deterministic on-chain event; a payout is a deterministic on-chain transfer.

15.3 Token nature

$LUMINA is a utility token with three programmatic uses: (i) it is the asset paid out by ClaimBond redemptions; (ii) the protocol's burn engine permanently destroys it as premiums and marketplace fees flow through; (iii) it is the unit of account for the BondVault's solvency. It is not designed or marketed as an investment; any speculative trading is outside the protocol's intent.

15.4 Jurisdiction

The protocol does not target users in any specific jurisdiction. Operators, integrators, and end users are responsible for their own regulatory compliance.

Appendix A — Deployed Addresses (Base Sepolia, chainId 84532)

V5.3 keeps the V5.2 core addresses (no redeploy of BondVault, PolicyManager, etc.) and adds six new shield adapters. The canonical source is always https://lumina-api-production-ac85.up.railway.app/health; if any address in this document drifts from /health, treat /health as authoritative.

Core protocol (V5.2 addresses, vigentes)

ContractAddress
LuminaTokenV20x62C0b58bB30CA857674ec593F1e23B3F15266680
BondVault0x193acBc1EdC5E565a4aBE96941C7E7AeF637B6EC
ClaimBond0xaa57Ab52Eb00f296Ad4CFA9E9c201f3737271FB4
CoverRouter0xcdB70B40e6a3DEac3189185d947A0e458518F566
PolicyManager (proxy)0x546C07e07DeBCdbf7a2A7Ef12C38c8c8fcAFcDd8
PolicyManager (Sprint Cleanup impl)0xdE41D414eD191A1090546078DF8e120c196Be22F
FounderVesting V20xfF4Db529bBCd4E3CC091E07b7845241EB4762832
LuminaOracleV20x9bfa2f7A5098C89b8740D1694d1f716A0Bd871dD
TWAPBurner0x242d76082856901b4ba1E7c50C022D46a6941bC0
AdaptiveFeeDistributor0xeC7841A4a9ecfb8cA58391E233A645B021c59D54
BuybackEngine0x56B5a1115B0d9781E7358521204d927d2F80d8B4
LuminaBondMarketplace0x0938205f4cBe5F572656533FC930FFce6F5F4345

AdaptiveFeeDistributor split: 85% Burn / 8% Buyback / 2% Operations / 5% Maintenance.

Flash shield adapters (V5.3, deployed 2026-05-14)

AdapterAddress
Flash BTC 1h0x5d50310B9166184e822cD5368F51C1409713054f
Flash BTC 24h0x475b3F712707F61824122a94fE78b106260F8882
Flash BTC 48h0xdc6387E86F7D852D1f99F4009cFd8AdC2d500298
Flash ETH 1h0x57869AD3E7C56B0c96F357179DD231b407C88338
Flash ETH 24h0x4fD09cF98F6814Cc8b33C2E491429f59d0bCf089
Flash ETH 48h0x9696CFFD7dE8B1e16F83Dcc798c5CE69a61C884C

API + relayer

ServiceEndpoint / address
API base URLhttps://lumina-api-production-ac85.up.railway.app
Block explorersepolia.basescan.org
RPChttps://sepolia.base.org
Note on address drift
V5.3 reuses the V5.2 core addresses and adds only the six Flash shield adapters above. Earlier deploy artifacts referencing V5.1 addresses are obsolete. Always verify against /health before integrating.

Appendix B — Glossary

BondVaultThe single contract holding the 70M $LUMINA reserve that backs every ClaimBond.
ClaimBondAn ERC-1155 zero-coupon bond, $1 face value, 730-day maturity, redeemable in $LUMINA.
CoverRouterV2The user-facing entry point: quotePremium, purchasePolicy, submitTrigger.
EIP-191The "personal_sign" standard used for the agent onboarding signature.
EIP-712The typed-data signing standard used for oracle PriceProofs.
EpochA monthly maturity bucket. Encoded as year × 100 + month. All bonds maturing in the same calendar month share an epoch.
FlashShieldOne of the six price-drop products covering BTC and ETH across 1h, 24h, and 48h windows (three per asset).
FlashShieldAdapterUUPS bridge contract that exposes the slim T-30a Flash shields through the legacy IShieldV2 surface consumed by PolicyManagerV2.
Kink ModelThe capacity-driven pricing model that tightens premium as utilization rises.
LuminaOracleV2The EIP-712 verifier that authorizes shield triggers from a trusted off-chain signer.
oracleKeyThe Ethereum address whose private key signs every PriceProof; rotatable by the contract owner.
ParametricInsurance whose payout depends solely on a measurable, objective trigger — no claims adjustment.
RelayerThe API wallet that signs purchasePolicyFor transactions on the agent's behalf, paying gas.
Skill fileA Markdown document at lumina-api/docs/skills/ with a copy-pasteable LLM prompt + code examples.
TWAPBurnerThe contract that converts USDC premiums into $LUMINA via Uniswap V3 and burns it.
UUPSUniversal Upgradeable Proxy Standard. Allows in-place implementation upgrades by an admin.

Appendix C — References

All technical claims in this whitepaper trace to one of these sources: