Every transaction, including the ones the contracts refused.
The proof run, in the order it was sent. Each row prints what was expected next to what happened, and links to the explorer so you can check it yourself.
- Transactions
- 30
- Mined as intended
- 22
- Refused as intended
- 8
- Matched expectation
- 30/30
- Contracts verified
- 15
Seeding
Underwriting capital in, the drill accounts funded, the canary vault seeded, and one underwriter exit queued so its cooldown could be tested.
- 01Underwriter approves the Rider USDC poolmined0xa4e62345…a55629 ↗
- 02Underwriter deposits into the Rider USDC poolmined0xc76614f0…9b6d17 ↗
- 03Underwriter approves the drill poolmined0x68200ff7…8ddf24 ↗
- 04Underwriter deposits into the drill poolmined0x3ca5b300…7e3c13 ↗
- 05Fund the drill relayermined0xe34f683f…11b902 ↗
- 06Fund the demo policyholdermined0x55d212d5…f2ce1c ↗
- 07Drill operator approves the canary vaultmined0x34d520fe…c322f1 ↗
- 08Drill operator seeds the canary vaultmined0x0cfd9310…eac0fe ↗
- 17Underwriter requests a redemption (ERC-7540)mined0xb09068fb…acf235 ↗
Real cover on live markets
Cover sold on all four live markets. The first row is a deposit into Galaxy's Morpho vault and its cover in one Multicall3From transaction, with the depositor as the sender of every call.
- 09Protected deposit: Galaxy USDC vault + cover, one Multicall3From txmined0xa1035312…b4a7bb ↗
- 10Cover: Keyrock Prime USDC vault drawdownmined0x3c851e22…b7c95b ↗
- 11Cover: EURC peg to the euromined0x50d3cbaa…bc0676 ↗
- 12Cover: cirBTC reserve backingmined0xeaee70ed…feab32 ↗
Refused on-chain
Sent on purpose, expected to revert, and mined as reverted. Each one hit the custom error printed next to it.
- 13Refused: cover beyond the market's capacity
CapacityExceeded(1000000, 500000)Asked for 1.00 USDC of cover; the market could back 0.50 USDC more.refused0x00078c7d…8de8da ↗ - 14Refused: premium above the buyer's limit
PremiumAboveMax(606, 0)The premium came to 0.000606 USDC, above the buyer's limit of 0.00 USDC.refused0xcd8d8506…f0b578 ↗ - 15Refused: incident on a healthy reading
NotFiring(0)The trigger read a 0.00% loss, below its line. There was nothing to open.refused0x430603b9…cf1598 ↗ - 16Refused: claim with no incident
WrongStatus(0)The market was active. Claims exist only after a confirmed incident.refused0x1c4856e4…df52c3 ↗ - 18Refused: redemption before the cooldown
NotClaimable(50000000000, 0)None of the requested shares were past the 3-day cooldown.refused0x3107a47f…97cc27 ↗ - 20Refused: outsider buys cover on the drill market
BuyerNotAllowed(0x73c37EF65789B50511656F3ec4F22E21FFddc549)The drill market sells only to its drill runner; this address is not it.refused0x2d1af97b…13a072 ↗ - 22Refused: cover on a burning house
TriggerFiring(2000)The canary already read a 20.00% loss. No cover is sold on a burning house.refused0x5d9aa379…a8309d ↗ - 25Refused: underwriter exit while an incident is open
PoolFrozen()Exits close while an incident is open, so no underwriter leaves ahead of a loss.refused0xcacfe224…6206d2 ↗
Live drill
The whole claims path on the canary market: buy, break, open, confirm, pay, settle, repair, rearm. An underwriter's exit during the open incident is refused in the same run.
- 19Drill: buy canary cover (approve + buy, one Multicall3From tx)mined0x4588fea0…329c24 ↗
- 21Drill: break the canary vault (-20%)mined0xc0b9a03a…5c6e37 ↗
- 23Drill: open incidentmined0xb73f9be0…094345 ↗
- 24Drill-pool underwriter queues an exit during the incidentmined0x3a29f0fd…d62d1b ↗
- 26Drill: confirm incident after the delaymined0x995ec5ad…4c0856 ↗
- 27Drill: pay the policyholdermined0xf3aba7fb…a11474 ↗
- 28Drill: settle and retire the roundmined0x2bb91c51…f9c50c ↗
- 29Drill: repair the canary vaultmined0xb974bc77…e31631 ↗
- 30Drill: rearm the marketmined0x37531e96…128381 ↗
Contracts
All 15 contracts are verified on Sourcify, so the source behind every address can be read and recompiled. The contracts are immutable: there is no proxy and no upgrade path.
- RiderPolicyOne ERC-721 per policy, with on-chain art. The token is the claim.
0xe1c34dC766499a379Ec7c05ee0E8F1c28C9c1AdB - RiderFactoryDeploys markets and wires them into a pool and the policy NFT.
0xcBCAF27Ce7B90c630e838D5bF47B1888487436FD - RiderPool · rUSDCUnderwriting capital for the four live markets.
0x0cE73d0DFB401eB62498c2a49994B40a48c2Cd52 - RiderPool · rDRILLThe drill pool, fenced off from underwriting capital.
0xe0c1fe5A321FD8C8b228Fe59AB84BcE07Ba21c98 - CanaryVaultThe vault the live drill breaks on purpose.
0x94981CddA8EFD8Aef008DfD8aF650B938613fc44 - RiderMarket · Galaxy USDC vaultSells the cover, runs the incident, pays the claims.
0xdFC4922A0498f97Dcd3788c701a38084847Ec2f1 - RiderMarket · Keyrock Prime USDC vaultSells the cover, runs the incident, pays the claims.
0x00b489A45d6922FcE8fa559C2747F31a5d541743 - RiderMarket · EURC peg to the euroSells the cover, runs the incident, pays the claims.
0xeBf07458fd00cD0ecAfF5B3816975a29c18E376D - RiderMarket · cirBTC reserve backingSells the cover, runs the incident, pays the claims.
0xf5E377960A9c690d85d9ab4831Edc7F88C7667f9 - RiderMarket · Canary drill vaultSells the cover, runs the incident, pays the claims.
0x0A223bf13D5FFcA9F056af57169D88fAa34058fB - VaultDrawdownTrigger · Galaxy USDC vaultTurns the reading into a loss. Read from the market's trigger().
0xc11594072c8DB5aFa0991E54f4eff2951DFfE349 - VaultDrawdownTrigger · Keyrock Prime USDC vaultTurns the reading into a loss. Read from the market's trigger().
0x5cC26c4d5BCBfC1D2ff5FDC01d1DEfBB11183095 - PegTrigger · EURC peg to the euroTurns the reading into a loss. Read from the market's trigger().
0x0639f0b29408a68508e499486457FbdB574cE7Bb - ReserveTrigger · cirBTC reserve backingTurns the reading into a loss. Read from the market's trigger().
0xF13ece37519Aef639bF5bC05C6417a2931DF5a93 - VaultDrawdownTrigger · Canary drill vaultTurns the reading into a loss. Read from the market's trigger().
0x5E6A7B7310518A464640F85d52cfe95dFE519953
Tested
Foundry tests in the repository. The fork tests run against live Arc mainnet state through Arc Foundry.
- 39market tests: buying, refusals, incidents, claims, premium vesting
- 17pool tests: async redemptions, freezing, operators, fencing
- 12trigger tests: vault drawdown, peg cross-rate, reserve backing, stale and broken feeds
- 2handler tests, including one proving the invariant run reaches paid claims
- 5solvency invariants, 128 runs × 64 calls each
- 3fork tests against live Arc mainnet state
An independent review found 2 high and 5 medium issues before deployment. Each was fixed with a regression test, except caller-chosen sampling, which cannot be closed in code and is mitigated and listed below.
Honest limits
What Rider does not claim, so nobody has to guess.
- One key owns the protocol during the grant period.
It can pause sales and add markets. A new market waits a 4-day notice before it can sell, longer than the 3-day underwriter exit, so an underwriter who objects can leave first. It can never block a claim or move pool funds.
- Callers choose when incidents are sampled.
Anyone may open and resolve an incident, so the two moments the trigger is read are picked by whoever calls. The confirmation delay and pricing claims at the healthier of the two readings limit that freedom; they do not remove it.
- The canary is controlled by Rider.
The paid claim on mainnet is on a vault Rider breaks on purpose. No live market has fired yet.
- A quiet feed stops, it does not pay.
Chainlink feeds on Arc have a 24-hour heartbeat. A stale feed closes sales and incidents rather than paying; a real depeg during a feed outage is not claimable until the feed resumes.
- Pool capital is small.
The pools hold what was needed to prove the mechanism: 1.50 USDC of underwriting and 0.50 USDC in the drill pool at seeding.
- Reviewed, not audited; experimental, not insurance.
The contracts had an independent adversarial review, not a professional audit. Rider pays parametric cover by code; it is not a regulated insurance contract.