TremorDocs
Docs menu
Market mechanics

Series parameters

Every SeriesParams field, its type and what it controls.

A series is fully described by one struct, passed to VarianceSeriesFactory.createSeries(vault, params) and baked into all three program byte strings.

struct SeriesParams {
    address feed;           // Chainlink AggregatorV3 proxy (8 dec)
    address quoteToken;     // USDC
    uint40  start;          // observation window start T0
    uint40  expiry;         // window end T1 (> start); finalization allowed from here
    uint40  saleEnd;        // ISSUE leg deadline (<= expiry)
    uint32  sampleInterval; // seconds; (expiry-start) % sampleInterval == 0, >= 300
    uint128 unitNotional;   // USDC (6 dec) per unit per 1.0 (1e18) variance
    uint64  capVariance;    // WAD, max variance paid (1e18 = 100% vol)
    uint64  anchorVariance; // WAD, the market's resting forward variance
    uint64  impactPerUnit;  // WAD forward-variance move per 1e18 units of net inventory
    uint32  halfLife;       // seconds for the inventory skew to halve (0 = no decay)
    uint16  halfSpreadBps;  // half the bid/ask spread, in bps of projected variance
    uint128 maxUnits;       // receipt units minted to the vault (18 dec)
}

Fields

FieldTypeMeaning
feedaddressChainlink AggregatorV3 proxy for ETH/USD (8 decimals). Must equal the controller's configured feed.
quoteTokenaddressUSDC (6 decimals). Premiums are paid in it; exits and redemptions pay it out. Must equal the controller's configured token.
startuint40Observation window start T₀. Sample 0 is taken here.
expiryuint40Window end T₁ > start. The EXIT leg's deadline, and the earliest finalization.
saleEnduint40ISSUE-leg Deadline. Production creation requires now ≤ saleEnd ≤ expiry.
sampleIntervaluint32Δ in seconds. (expiry − start) % Δ == 0 and Δ ≥ 300. n = (expiry − start)/Δ samples, 2 ≤ n ≤ 256.
unitNotionaluint128USDC (6 dec) paid per receipt unit per 1.0 (1e18) of variance.
capVarianceuint64WAD, 0 < cap ≤ 4e18 (200% vol). The payout ceiling, and therefore the writer's per-unit liability.
anchorVarianceuint64WAD, 0 < anchor ≤ cap. Where the market's forward variance rests with no inventory sold.
impactPerUnituint64WAD, ≤ cap. How far the forward variance moves per 1e18 units of net inventory sold.
halfLifeuint32Seconds for the inventory skew to halve. 0, or 300 ≤ halfLife ≤ 30 days.
halfSpreadBpsuint1610 ≤ s ≤ 2000. Half the bid/ask spread as a fraction of projected variance.
maxUnitsuint128Receipt units minted to the vault at creation (18 decimals; 1e18 = one unit).

Creation additionally requires that the whole-inventory liability

maxSeriesLiability = ceil(maxUnits · unitNotional · capVariance / 1e36)

is non-zero, fits uint248, and is available as free collateral in the writer's vault. See Collateral and the vault.

Fixed-point conventions

  • Variance and vol are WAD (1e18). variance = 1e18 means 100% annualized vol (σ² = 1); vol = √variance.
  • USDC has 6 decimals; receipts have 18, and 1e18 is one unit.
  • Every executable number is computed in integers. There is no floating point anywhere in the pricing path — not in the contracts, not in the Lens, and not in the numbers the trade tickets show.
  • Rounding always favours the maker, which is the writer's collateralized vault: buyers round up on what they pay and down on what they receive; liabilities round up.

What /write derives for you

The write flow takes three decisions — how long, how much collateral, and at what price — and derives the other ten fields exactly, in integers:

DerivedRule
startThe next whole hour at least five minutes out, so the sampling grid lands on clean clock times
expirystart + days · 86,400
sampleIntervalThe finest grid on the ladder at or under 84 samples, the measured gas envelope for bounded checkpointing
saleEndstart + a quarter of the window, snapped to the grid
unitNotional100 USDC — a protocol constant, so a "unit" means the same thing in every series
capVarianceA round vol at least 2× trailing realized and at least √(2 · anchor), so buyers keep meaningful upside
anchorVarianceTrailing realized vol × the chosen stance (cheap / fair / rich), squared into variance
impactPerUnitmin(lift · anchor, cap − anchor) / maxUnits, so clearing the whole inventory is a bounded, stated move
halfLifeThree sampling steps, held between 1 h and 12 h
halfSpreadBps200 bps — a 4% round trip in variance terms
maxUnitscollateral / maxPayoutPerUnit, floored to 0.01 units so the reservation never exceeds what you deposited

Every one of them is editable under Advanced, and every override runs back through the same derivation, so the audit table, the ticket and the transaction can never disagree about what ships.