Parameters
Five values define a contract. They are fixed when the offer is posted and never change.
| Field | Symbol | Unit | Meaning |
|---|---|---|---|
| Market | — | token | The tokenized equity whose pool is marked. |
| Term | T | hours | How long marks are collected before settlement. 24 to 720. |
| Strike | K | vol points | The annualised volatility the two sides disagree about. |
| Size | N | USDG per point | What one vol point of difference is worth. |
| Band | W | vol points | The cap on the transfer, and the escrow each side posts. At most K. |
On chain, strike and band are stored as vol points × 100 (so 52 points is 5200) and size in USDG
base units, which have six decimals.
Reading a quote
A ticket of NVDA · 7d · K 52 · N 25 · W 20 means: over the next seven days one side thinks NVDA
settles above 52 annualised vol points and the other thinks below. Each point of difference is worth 25 USDG,
capped at 20 points, so each side escrows 500 USDG and that is the most either can lose.
To turn a strike into something a chart shows, divide by the square root of 365. A strike of 52 asks for an average day of roughly 2.7%.
Marking rules
- At most one mark per hour per market. The call is permissionless.
- The price is the pool's own, derived from
sqrtPriceX96in the Uniswap v4 PoolManager and quoted in USDG. - A pool whose in-range liquidity is under the depth floor is not marked. The previous mark carries forward.
- A skipped hour carries forward. Carried hours contribute no return and do not count as observations.
- Accepting an offer marks the pool in the same transaction, and fails if it cannot.
- Settlement needs at least 24 observed returns. A term that never got marked does not settle at zero volatility: it voids and returns both escrows.
- Marks recorded after the expiry hour are ignored by that position.
Contract interface
The full source is in contracts/TremoVol.sol. The functions a trader touches:
// escrow size·band/100 and rest an offer; returns its id post(uint32 market, bool makerLong, uint32 termHours, uint32 strike, uint32 band, uint128 size) → uint256 cancel(uint256 offerId) // maker only, refunds escrow accept(uint256 offerId) → uint256 // take the other side; marks the pool mark(uint256 market) → bool // anyone, once per hour settle(uint256 positionId) // anyone, after the expiry hour preview(uint256 positionId) → (rv, observations) spot(uint256 market) → (priceE18, markable)
Approve the contract to spend USDG before posting or accepting. The desk does both steps for you.
Chain
Everything the site reads comes from one place, and these are the values it is reading with right now.
Connecting a wallet asks it to switch to that chain, and to add it if it has never seen it. Tremo asks for an account and a network. It never asks for a seed phrase, and there is no server behind this site that could receive one.
Listed markets
A name is listed when it has a Uniswap v4 pool against USDG deep enough to mark hourly. Depth is the USDG it took to move that pool's price by one percent when the market file was built, not a live reading. A market whose pool has since drained is retired: it stays on the contract so open positions settle, and the desk stops offering it.
| # | Ticker | Name | Token | Depth | State |
|---|---|---|---|---|---|
| loading |
Fees
The contract charges none. Settlement is one subtraction on data the contract already holds, and whoever pokes an hourly mark pays the gas for it.
Status
- Working. Price reads against the Uniswap v4 PoolManager, the desk's pricing, wallet connection, and the contract with its test suite.
- Depends on deployment. The order path on the desk lights up when
markets.jsoncarries a contract address. Until then it prices only. - Not done. An audit. Listing is not frozen until the owner calls
freezeListing(). - Undecided. Whether a position can change hands mid-term, and whether strikes come from a maker or from a book.
Glossary
Vol point. One percentage point of annualised volatility. A market at 52 points is expected to have days of about 2.7%.
Realized volatility. What actually happened, measured from the marks. The opposite of implied volatility, which is what a price says people expect.
Band. The cap on how far a settlement can travel from the strike, and therefore the escrow.
Mark. One hourly price observation taken from the pool.
Carry forward. Reusing the previous mark when an hour cannot be observed honestly.
