Technical documentation
The protection system, deployed and settling.
Pararail lets a prediction-market participant buy protection on a position: they pay a small premium up front, and if the outcome goes against them, the contract pays out a pre-agreed coverage amount automatically — no claims process, settled on-chain by an oracle result.
This page documents the system as it exists today: live contracts on the Polygon Amoy testnet, a single real policy that was purchased and settled end-to-end, and the full address registry so anyone can verify it on the block explorer.
Deployment verified on Polygonscan · deploy block 46,976,274 · manifest status: verified · Polygon Amoy testnet, Circle test USDC.
01 — Worked example
A policy, from purchase to payout
In the settled example, a participant holds a 0.10 USDC position on a market outcome and insures 80% of it. Here is the entire quote:
| Quote field | Value | Meaning |
|---|---|---|
| notional | 0.10 USDC | the participant's position being protected |
| coverageBps | 8,000 (80%) | share of the position they chose to insure |
| coverageAmount | 0.08 USDC | notional × 80% — the amount paid out on an adverse result |
| premium | 0.01 USDC | what they pay for the protection |
The premium and the payout are different things — this is ordinary insurance. The 0.01 premium is the price; the 0.08 coverage is the insured amount. When the adverse outcome resolved, the buyer received the full 0.08.
The 0.01 figure here was a fixed value chosen to exercise the settlement path. The premium a real participant would pay is produced by the pricing engine from live order books — shown next, and independently verifiable against the deployed contract.
What the buyer nets
| Outcome | On the position | From Pararail | Net vs. unprotected |
|---|---|---|---|
| Pick loses (adverse) | −0.10 | +0.08 payout − 0.01 premium | −0.03 (vs −0.10) |
| Pick wins | position intact | −0.01 premium | −0.01 |
Where the premium goes
The 0.01 premium is split on-chain the moment the policy is bought:
| Recipient | Share | Amount |
|---|---|---|
| Treasury (platform fee, 15%) | 1,500 bps | 0.0015 USDC |
| Room A vault (senior) | 80% of vault premium | 0.0068 USDC |
| Room B vault (junior, 20% share) | 2,000 bps | 0.0017 USDC |
The vaults that take the payout risk keep 85% of every premium; the treasury takes 15%. On the adverse settlement, Room A's assets moved from 2.006801 → 1.926801 USDC — down exactly the 0.08 payout.
The four on-chain steps
- Purchase protection — buyer submits a signed quote; premium is collected and split; coverage becomes an active liability.
tx 0x4f6db8…d650877 - Finalize resolution — the oracle result is proposed, the challenge window passes, and the outcome is locked in.
tx 0x07562a…cd4704 - Settle & pay out — because the outcome was adverse, the 0.08 coverage is paid to the buyer from the vaults; the liability clears.
tx 0xcf0239…eaa650 - Result —
PolicySettledfor policy0xebe17241…f3a876e0: premium 0.01 in, payout 0.08 out, utilization back to zero. No manual intervention.
02 — How the premium is priced
The premium comes from the pricing engine, off real order books
Pararail's pricing engine reads captured CLOB order books from a real prediction market and computes
the premium as the cost to hedge the coverage plus the market's fee and a margin. For the market
"Spread: Al Hazem SC (−1.5)" (captured 2026-09-07, condition
0x31daa8…57c5ef4), the engine priced protection at 1,398 bps of notional. Applied to a
testnet notional of 1.00 USDC at 85% coverage:
| Component | Amount | Source |
|---|---|---|
| Hedge cost (before fees) | 0.107090 USDC | book VWAP × coverage (executable depth) |
| Market fee | 0.004679 USDC | the venue's trading fee |
| Surcharge / margin | 0.028063 USDC | collateral basis and buffer |
| Premium (total) | 0.139832 USDC | 1,398 bps of notional |
This premium is assembled into an EIP-712 Quote — bound to the demo's on-chain market and signed
by the same quoter key the contract trusts — and the deployed controller accepts it: its on-chain
hashQuote returns exactly the signed digest
0x5e4b18…ed901af, recovered to the on-chain quoter
0xA9f988…22e0320. That check is reproducible (read-only, no funds) via
scripts/verify-demo-quote.sh in the contracts repo.
03 — What's verified on-chain
Every step is a real transaction
A premium is collected and split, coverage is tracked as a liability, an oracle outcome is finalized, and the payout settles with the vault accounting decrementing by exactly the payout. Every step above is a real, verifiable transaction on Polygon Amoy — linked to the block explorer.
04 — Contract registry
Deployed addresses (Polygon Amoy, chain 80002)
All Pararail contracts are source-verified on Polygonscan. External contracts are reused, not deployed by Pararail.
| Contract | Address | |
|---|---|---|
| PararailDualVaultController | core | 0xb88650FBae8501CF1ef3956066185a7C07070A8a |
| Room A vault — pROOM-A (senior) | vault | 0x4ef76619AB04Ac390E46377892c91A69cd076324 |
| Room B vault — pROOM-B (junior) | vault | 0x7D2966cbf561Fa210dfca8491d312Ac2e0503F98 |
| ManualResolutionSource (oracle) | oracle | 0x689e1dE488C2CdD3b2e322aD7C6e5be4c3370d71 |
| DemoDispenser (testnet faucet) | demo | 0x8f0016c46B450A78789F4D4fc2f6095Da0B86d5B |
| Circle test USDC (collateral) | external | 0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582 |
| Gnosis ConditionalTokens | external | 0x69308FB512518e39F9b16112fA8d994F4e2Bf8bB |
Roles
| Role | Address |
|---|---|
| Owner / deployer / keeper / pauser | 0x24095345779aaf91bD58F7463d8683861d049233 |
| Quoter signer (signs quotes) | 0xA9f988d1674E698C7AA24c594ab32748622e0320 |
| Resolver (reports outcomes) | 0x83F19701D829Cfc717add7e155ab595Cf4359B1F |
| Treasury (platform fees) | 0x1eB97f3dfDB11A44B69a4616faA4d02fED0c06bB |
Parameters (as configured on-chain)
| Parameter | Value | Note |
|---|---|---|
| Platform fee | 15% | of each premium, to treasury |
| Room B premium share | 20% | of the vault portion of premium |
| Max utilization | 80% | coverage cap vs. vault assets |
| Volatility feed max age | 300 s | writes revert if the feed is staler |
| Claim grace period | 30 days | window before an unsettled policy can expire |
| Challenge window | 1 s | demo only — production would be longer |
| Min resolution age | 1 s | demo only — production would be longer |
Deploy transaction: 0x7e345c…71433a (block 46,976,274).
05 — The two-vault mechanism
Who pays the payouts
Coverage is backed by two vaults. Room A (senior, pROOM-A) and Room B (junior, pROOM-B) both hold USDC collateral and both earn a share of every premium. When a payout is owed, it is drawn from vault assets; the split of premium and of loss between the senior and junior rooms is how capital providers choose their risk/return. In this record the adverse payout was drawn against Room A. The controller enforces a utilization cap so total outstanding coverage can never exceed 80% of vault assets.