Permanent market
Native ETH/SHOOK trading in one canonical Uniswap v4 pool.
Pool identity
| PoolKey field | Value |
|---|---|
| currency0 | Native ETH: address(0) |
| currency1 | Deployed SHOOK token |
| fee | 10,000 in v4 millionths = 1% |
| tickSpacing | 60 |
| hooks | Deployed SHOOKVanillaHook |
Locked liquidity
LiquidityVault owns a full-range position between the minimum and maximum usable ticks for spacing 60. It exposes no principal-removal method, transferable owner role, or arbitrary-call escape hatch. Permissionless harvesting collects fees using a zero liquidity delta; it does not remove the position’s principal.
Permanent liquidity does not guarantee a fixed price, a minimum market value, or unlimited trade size. The asset composition changes as trades execute.
A minimal hook
The hook sets only beforeInitialize. It checks native ETH, the SHOOK address, the 1% fee, tick spacing 60, its own hook address, and the designated liquidity initializer. It has no swap callback or swap-return-delta permission.
The official hook address uses only the beforeInitialize permission bit and excludes the 0x91 prefix. These are implementation properties, not a promise of inclusion by every third-party router or interface.
Trading and fee collection
PermanentMarketRouter supports exact-input and exact-output swaps in both directions. The router uses PoolManager unlock accounting and settles native ETH or SHOOK obligations. Quotes should use the canonical pool and configured quoter.
The pool charges fees in the input currency. Harvested ETH is divided between creator revenue and reserve; harvested SHOOK goes entirely to reserve. See Fees and revenue. Anyone can call harvestFees once the vault is active.
Price encoding
With native ETH as currency0 and SHOOK as currency1, sqrtPriceX96 encodes the square root of SHOOK units per ETH unit. Both assets use 18 decimals, but the direction still matters: an ETH-per-SHOOK display must invert the raw token1/token0 ratio. LiquidityVault.terminalPrice computes sqrt(floor(shookAmount × 2¹⁹² / ethAmount)).
Source reference
Checked against the source shipped with this documentation. Contract calls and units are detailed in the contract reference.
Imported source files 41
Supporting contracts, interfaces, and libraries imported by the sources above, including their dependencies.