Ballast
Somnia testnetDocsLanding pageDashboardRepo

What it is

You hold something. It can fall while you are not watching. Ballast buys the cover for that fall, every window, without anyone pressing anything.

On this page
  1. The problem
  2. The three steps
  3. The load line is a break-even
  4. Measured exposure
  5. A worked example, end to end

The problem#

You hold ETH. It can fall while you sleep. Instruments that would cover that fall exist on dreamDEX — Event Contracts, which pay a fixed amount if a price closes below where it opened — but they are tied to a window, and the windows expire and are replaced constantly. The shortest roll every sixty seconds.

Cover bought against one window is worthless once that window closes. Keeping a position covered therefore means re-buying, correctly sized, every single window, forever. In practice nobody does this. That is the gap Ballast fills, and it is a gap about diligence rather than about cleverness.

The three steps#

  • Hold something. Ballast only ever covers exposure it can measure on chain. It reads your spot position from the venue; it never accepts a number you type in.
  • Set a load line. How deep a fall you want made whole, and the most you are willing to pay per window for it. That is the whole of the policy, and it is a contract state rather than a setting in a database of ours.
  • The chain does the rest. When dreamDEX opens a window, Somnia’s reactivity precompile invokes Ballast’s handler inside that same block. There is no keeper in the money path.

The load line is a break-even, not a kink#

This distinction matters more than any other on this page. An Event Contract pays a fixed amount if it wins. Because the strike is pinned to the window’s opening price, the bend in the payoff sits at a 0% move and cannot be moved.

What you set is quantity, and quantity moves the break-even — the depth of fall at which the payout exactly equals your loss. It does not flatten the line, and no quantity ever will. What it pays works through why, and what the residual gap is.

Measured exposure#

Ballast reads the position from the exposure source contract at 0x83923535…, which reports what the account actually holds on the venue. Cover is sized against that reading and nothing else.

Why it is never a number you typeA self-declared exposure would let anyone buy a payout unrelated to a position they hold, which is a bet rather than cover. Reading the position instead means the size is always defensible, and it means Ballast can refuse when there is nothing to cover — which it does, often. See Refusals.

A worked example, end to end#

Every figure below is read live: the exposure from the chain, the make-whole point from the policy actually set on the demonstration account, and the cover price q = 0.494 from a position that really settled.

exposure E = 5,107.22 tUSDC of ETH (2 WETH, read from the venue) make-whole x* = 2.50% (the policy on this account) cover price q = 0.494 (paid on a real settled position) contracts N = E · x* / (1 − q) = 5,107.22 × 0.025 / 0.506 = 252 contracts premium = N · q = 124.65 tUSDC payout if won = N · 1 = 252.33 tUSDC net if won = 127.68 tUSDC

So on a fall of exactly 2.50% the position loses 127.68 and the cover nets 127.68 — the same number, which is what “made whole” means. Away from that depth the two stop matching:

FallPositionCover, netYou end upWhich is
1.00%−51.07+127.68+76.61over-compensated
2.50%−127.68+127.68+0.00exactly whole
5.00%−255.36+127.68−127.68under-compensated
And if the price risesThe cover pays nothing and the premium is gone. That is not a malfunction — it is the cost of cover that turned out not to be needed, and in the recorded history it happened 51 times out of 128. Those 51 are shown on the dashboard alongside the 77 that paid.