Opening Price
The first tick, and how it is derived.
Nobody chooses the token's price. The creator chooses a valuation; the protocol reads the quote's oracle and derives everything else in fixed-point Solidity.
- 01Opening FDV (USD)
- 02Token USD price
- 03Quote USD price (oracle)
- 04Token / quote ratio
- 05Uniswap price
- 06sqrtPriceX96
- 07Valid tick
Worked example
- Supply
- 1,000,000,000
- Opening FDV
- $10,000
- Implied token USD price
- $0.00001
- Quote (NVDA) oracle answer
- $250.00
- Token price in NVDA
- $0.00001 / $250.00 = 4e-8
That ratio is then adjusted for the two tokens' decimals and for their ordering in the pool — Uniswap sorts currencies by address, so whether the launch token is currency0 or currency1 inverts the price — converted to a sqrtPriceX96, and snapped to a valid tick for the pool's tick spacing.
Rounding has a direction
The reason is the first buyer. A market that opened rich would hand them a worse price than the composer previewed, which would make the preview a lie. So the arithmetic rounds down, always, and the composer shows the resulting tick rather than the requested one.
Refused, not fudged
If the oracle cannot supply a price the protocol trusts, the launch reverts. There is no fallback price and no last-known-good value.
| Condition | Result |
|---|---|
| answer is zero or negative | revert |
| answer older than the quote's max staleness | revert |
feed decimals() no longer matches the registry | revert |
quote decimals() no longer matches the registry | revert |
| an ERC-8056 multiplier lands inside the buffer | revert |
| the feed call itself reverts | revert |
Floating point is not used
No part of the security-relevant derivation runs in JavaScript. The interface previews the opening price by calling TapePreviewer on-chain, so the number a creator reads and the number the launch produces come from the same code.
TAPEZERO is an independent protocol and is not affiliated with Robinhood, Uniswap or Chainlink. The contracts are unaudited. Nothing here is investment advice.