Overview
The Geocurve is Geode’s first asset template: a bonding curve for Uniswap v4 hook coins. Inspired by the hook format pioneered by tokens like SATO, a Geocurve token has a simple mechanic — the full supply is pre-minted to the hook, and the curve dispenses tokens to buyers and absorbs them back from sellers. The curve handles primary issuance; secondary pools create natural spread dynamics. No upfront liquidity, no presales, no hidden allocations. No unsold supply problem, no awkward AMM migration. Just a permanent curve that defines the primary market.The game: The curve creates primary issuance. Secondary pools on other venues create market trading. The spread between them — the divergence between the curve price and secondary market prices — becomes the game.
How It Works
The Bonding Curve
The Geocurve uses a virtual constant-product formula — the samex × y = k math as Uniswap, but with virtual reserves that anchor the curve:
- Vt = virtual token reserve (immutable, set at launch, ≥ totalSupply)
- Ve = virtual ETH reserve (immutable, set at launch)
- S = cumulative tokens distributed to buyers
- E = cumulative real ETH raised from sales
- K = invariant constant (Vt × Ve)
Starting Price
At launch (S = 0, E = 0), the price is simply:Price Movement
Buys dispense tokens from the curve. As tokens leave (S increases), the effective token-side reserve shrinks, and the price rises:Curve Math
ETH Cost to Buy
How much ETH does it cost to buyΔs tokens from the current state?
Δs approaches (Vt - S), the price approaches infinity — you can never buy the entire virtual supply.
Tokens for ETH
How many tokens do you get for spendingethIn ETH?
ETH Return on Sell
How much ETH do you get back for sellingΔs tokens?
Launch Flow
Deploy
The deployer calls
GeodeFactory.launch() with:- Token name and symbol
- Total supply (e.g., 1 billion tokens, 18 decimals)
- Virtual reserves (Vt, Ve) that define the curve shape
GeodeToken ERC20, mints the entire supply to the hook contract, initializes the v4 pool as an empty shell, and registers the permanent bonding curve. All in one transaction.Dual-Path Trading
The pool enters the Active phase and supports two trading paths immediately:
- Direct swaps via
beforeSwap→ the hook computes curve output and returns the full delta - Intent-based batch settlement via
geodeSettleBatch()→ batched intents settle at the curve price
- 1/3 → curve ETH reserve (permanently increases floor price)
- 1/3 → protocol treasury
- 1/3 → surplus pool (funds settler gas reimbursement)
Permanent Primary Market
The curve is the permanent primary market for the token. The floor price rises naturally as the reserve fee accumulates. As the token gains traction, secondary pools can emerge on other Uniswap v4 pools or DEXs — and the spread between the curve price and secondary prices becomes the trading game.
The Spread Game
This is what makes Geocurve tokens interesting beyond simple bonding curves. The curve and secondary markets answer different questions:| Curve (Primary) | Secondary Pools | |
|---|---|---|
| What it reflects | Cumulative dispense/absorb demand on the hook | Broader market sentiment and trading |
| Price movement | Deterministic: follows x × y = k | Market-driven: order flow, arbitrage, speculation |
| Floor price | Ratchets up via reserve fees | No inherent floor |
| Liquidity source | Bonding curve reserves | LP positions from other market makers |
- When secondary trades above the curve → arbitrageurs can buy from the curve and sell on secondary
- When secondary trades below the curve → arbitrageurs can buy on secondary and sell back to the curve
- This arbitrage loop keeps the two prices loosely tethered, but the spread itself is a feature — it reflects the difference between fundamental demand (curve) and speculative sentiment (secondary)
Why this matters: Unlike traditional launchpad models that graduate into an AMM (creating an awkward translation from virtual curve price to real pool price), the Geocurve stays. The curve IS the primary market. Secondary pools are additive, not a replacement. The spread between them is the game.
Batch Settlement on the Curve
During batch settlement,ConstantProductCurveLib.computeLaunchSettlement() replaces the standard clearing price algorithm. The key differences:
- Clearing price = current curve spot price (not AMM spot price)
- Internal matching works the same way — opposing flow crosses at the curve price
- Residual flow routes to/from the hook’s reserve via the curve (no AMM swap)
- Net buy residual → hook dispenses tokens, ETH goes to
launchEthReserve - Net sell residual → hook absorbs tokens, ETH returns from
launchEthReserve
Pricing Mechanics
The clearing price for a batch is the pre-trade curve spot price — the price at the current state before any trades execute:- Slippage checks — each intent’s
minAmountOutis evaluated against this price to determine if the intent fills - Internal matching — when buys and sells cross each other, they exchange at this price
Price Impact Socialization
In sequential execution (a standard AMM), each trade moves the price before the next trade executes. Whoever trades first gets the best price, and whoever trades last bears the most impact. This ordering advantage is what MEV bots exploit — they frontrun your trade to capture the price difference. In batch execution, there is no ordering. All participants in a batch receive tokens at the same effective price — their pro-rata share of the total output, proportional to their input. The price impact of the entire batch is socialized equally across all participants.- Sequential Execution
- Batch Execution
Why This Is Fair
The batch model trades ordering fairness for price uniformity:| Property | Sequential (AMM) | Batch (Geode) |
|---|---|---|
| Who gets the best price? | Whoever trades first | Everyone gets the same price |
| MEV/frontrunning | Profitable — ordering = value | Eliminated — no ordering exists |
| Price impact | Concentrated on later traders | Socialized equally across batch |
| Total output | Same (path-independent) | Same (path-independent) |
Invariant preservation: The curve constant
K = Vt × Ve is preserved exactly after every batch settlement. This has been verified across hundreds of production batches with zero drift. The curve math is provably correct — no value leaks in or out of the reserve regardless of batch composition or size.GeodeFactory
The factory contract handles the one-transaction launch:- Deploy
GeodeTokenERC20 (full supply to hook) - Compute the PoolKey deterministically
- Initialize the v4 pool as an empty shell (
sqrtPriceAtTick(0)) - Call
geodeInitializePool()on the hook with curve configuration - Call
registerLaunch()to set up permanent curve state tracking
Permissionless
Anyone can launch a token. No whitelisting, no approval process. The deployer pays only gas.
Fair Launch
No presales, no hidden allocations. The entire token supply goes to the bonding curve. Every buyer gets tokens at the current curve price.
Rising Floor Price
1/3 of every direct swap fee goes to the curve’s ETH reserve, permanently increasing the floor price. The curve gets stronger with every trade.
Buyer of Last Resort
The curve always has a bid — tokens can be sold back at any time. The virtual ETH reserve ensures the price never reaches zero, even if every distributed token is sold back.
GeodeToken
The minimal ERC20 deployed by the factory:- Full supply minted to the hook contract at deployment
- Standard ERC20 interface (name, symbol, 18 decimals)
- Supports burn and transfer-from-hook operations
- No admin functions, no minting after deployment
Permanent by design: The Geocurve is the primary market. There is no “next phase” — the curve provides primary issuance, price discovery, and a rising floor for the lifetime of the token. Secondary markets emerge naturally and create the spread dynamics that make the game interesting.