Call options on any token, settled in kind.
A writer locks tokens and names a strike, a premium and an expiry. A buyer pays the premium and may, any time up to expiry, pay the strike and take the tokens. If nobody does, the tokens go back to the writer, who keeps the premium either way.
No oracle: the buyer looks at the market and decides. No house: the only thing at risk is the writer's own tokens. So it works for a memecoin listed five minutes ago as well as for a tokenized stock, and nothing can be manipulated into settling wrong.
Calls
| call | who | what |
|---|---|---|
write(token, amount, quote, strike, premium, expiry) | writer | lock the lot and list the right. Amount in the token's units, strike and premium in the quote's units, expiry as a unix time. |
buy(id) | anyone | pay the premium, less the fee, to the writer and hold the right |
exercise(id) | holder | pay the strike to the writer and take the lot, up to expiry |
close(id) | anyone | after expiry, send an unexercised lot home |
cancel(id) | writer, or anyone once expired | take an unsold lot off the board |
pass(id, to) | holder | hand the right to somebody else |
calls(id) returns the whole record. Events: Written, Bought, Exercised, Closed, Passed.
The fee
One percent of every premium, fixed in the contract at deploy and sent to the vault. The strike carries nothing.
Fair values
The site shows a fair value next to every ask. It is Black-Scholes on the realized volatility of the token's own last week of prices, from its deepest pool or, for stocks with a Chainlink feed, from the feed's own prints. A reference for both sides, nothing the contract reads.
Reading it from code
| request | gives you |
|---|---|
GET /board | every open call with its fair value |
GET /quote?token=&amount=&strike=&expiry="e= | the fair premium for a call you are thinking of writing |
GET /history?token= | the token's recent prices, oldest first |
GET /positions?account= | the calls a wallet wrote or holds |