⏮️Genesis Value & Compound Factor
How every position rolls at maturity with a single storage update
These two constructs let the protocol roll all positions at maturity by updating one number per market, instead of touching every position — the accounting core of Auto-Roll and Lazy Evaluation.
Compound Factor
At each quarterly roll, the protocol records the roll's effective discount rate as a multiplier and chains it onto a running product — the Compound Factor. Two are maintained per currency, differing by the roll fee:
Lending Compound Factor (LCF):
Borrowing Compound Factor (BCF):
The asymmetry (− fee for lenders, + fee for borrowers) is how the auto-roll fee is charged without a separate transaction.
Genesis Value
A position's Genesis Value (GV) expresses it in terms of the market's Genesis Date (the protocol's reference start date). When a position is created or rolls past maturity:
and at any later time its Future Value is recovered by:
A lender's GV is positive and never changes — their FV grows purely through the LCF. A borrower's GV is negative and grows in magnitude with each roll, reflecting the fee spread between BCF and LCF:
Worked example
Roll occurs at AutoRollPrice 0.98 (a unit price of 98.00) with fee rate 0.001. A lender's LCF goes from 1.20 → 1.20 × (1/0.98 − 0.001) ≈ 1.2233.
A lender with GV = 500: FV moves from 600 → 500 × 1.2233 ≈ 611.6 — the position grew through the roll with zero per-position computation.
For 1,000 positions, a naive roll would cost ~20M gas (20k × 1,000 writes). Updating the Compound Factor once costs ~50k gas — a 99.7% reduction — and individual FVs are derived on read.
Design notes
One Genesis Date for everyone standardizes the reference point; individual entry dates are captured by the LCF value at entry, not by per-user anchors.
GV is protocol-computed, immutable per position, and fully auditable on-chain.
ZC perpetual tokens (Tokenization) are GV made transferable: an ERC-20 denominated in Genesis Value terms.
Related
Auto-Roll Price Discovery — where AutoRollPrice comes from
Lazy Evaluation — the read-time derivation this enables
Last updated