How it works
A TAPER market runs the same cycle every New York trading day.
1. Before the open: deposit
deposit(amount) moves xStock from the holder into the market's vault and mints vault shares. Shares are priced from the vault's own accounting (total_assets), never from its token balance, so sending tokens to the vault cannot move the share price.
Deposits and withdrawals are only accepted while no day is live. Everyone who holds shares when calls are sold carries them to the close and shares that day's premium.
2. At the open: list the day
open_day(ny_day) can be called by anyone once the session has started. It reads the xStock's Raydium pool: the higher of the pool's price now and its 10-minute mean, per real share. It records:
| Field | Meaning |
|---|---|
listed_price | The price used to set the strikes |
vol | The daily volatility used all day: the square root of the market's learned variance, never below its floor |
strikes | Five strikes, see below |
cover | Every share in the vault: the most calls that can be sold today |
close_ts | 4:00 pm New York time, or 1:00 pm on an early-close day |
Strikes: the listed price rounded up to the strike tick ($0.50 for NVDAx, $1 for AAPLx and TSLAx), then the price plus 0.5, 1, 1.5 and 2 daily standard deviations, each rounded up and at least one tick apart.
3. During the day: buy calls
buy_call(strike_index, quantity, max_cost) prices the call from the pool's price (the higher of now and its 10-minute mean), charges the premium plus a 10% fee in USDC, and records a ticket. The buyer sets max_cost, so the price cannot move against them between quote and execution. Sales close ten minutes before the bell.
4. At the bell: settle
settle_day() takes the pool's mean price over the 15 minutes before 4:00:00 pm New York time from the pool's own observation ring. Nobody chooses it: the ring is what it is, and one swap at the bell barely moves a 15-minute mean. It must be called within about 25 minutes of the close, while the ring still reaches 15:45. For each strike under the settlement price S, calls pay (S - K) / S of a share each, in the xStock. That reserved payout leaves the holders' assets, the day's premium is credited to vault shares, and the day's fee moves to the burn account.
If nobody settles within the hour, anyone can call void_day() and every buyer is refunded in full, premium and fee.
5. After the bell: claim
- Call buyers call
claim_call()and receive their shares. - Holders call
claim_premium()for their USDC, whenever they like. - Anyone can call
burn(amount)to spend collected fees on TAPER and burn it. close_day()returns the day account's rent to whoever opened it, once every ticket is claimed.
A worked day
NVDAx lists at $214.00 with the launch volatility of 1.42% a day. Strikes: $214.00, $216.00, $217.50, $219.00, $220.50 (214 x 1.42% / 2 = $1.52 a step, rounded up to the $0.50 tick). At the open a $216.00 call costs $0.5078 of premium plus $0.0508 of fee, so $5.00 buys 8.95 calls. NVDAx ends at $218.04: each call pays $2.04 worth of NVDAx, $18.26 in all, paid as 0.0837 NVDAx. Had it ended at or under $216.00, the calls would end at zero. The holders keep the $4.55 of premium either way.
