Skip to main content
InkyPump V2 uses a linear bonding curve. Price grows in a straight line from the starting price to the target price as tokens get sold. The slope of that line is set by the curve gain multiplier you choose at launch.

The basics

When you launch a token on V2, the contract calculates two prices.
PriceMeaning
Start priceThe price of the first token sold on the curve.
End priceThe price of the last token sold before the curve fills and the token bonds.
The curve gain multiplier (gainBps in the contract) controls how much higher the end price is compared to the start price.
Gain multiplierEnd price relative to startNotes
1xSame as start (flat)Constant price along the curve.
5x5 times start priceModerate growth.
11x11 times start priceSteep.
21x21 times start priceThe contract maximum (MAX_GAIN_BPS = 200000).

What the multiplier actually changes

Steeper curves mean later buyers pay more and earlier buyers see their position appreciate faster on paper. Flatter curves mean later buyers pay closer to the same as early buyers. Steep curves can feel rewarding to early supporters but they front load risk. If the token bonds and the V4 pool opens at a higher price, late curve buyers can be underwater immediately. Flat curves spread the entry price more evenly and reduce the “pump on the curve then dump on the pool” pattern.

Sale supply vs liquidity supply

Of the 1,000,000,000 token total supply, the contract splits the supply into two parts based on your target raise and gain multiplier. SaleSplitCalculator decides how many tokens are sold on the curve versus how many are paired with ETH in the post bond V4 pool. The split is not fixed at 80 / 20 like V1. It is calculated per launch to make the marginal price at the end of the curve match the opening price of the V4 pool. This avoids a price jump at the bond. You can preview the split for any target and gain combination with previewSaleSplit(targetRaise, gainBps) on the hook.

Math reference

The curve is implemented in LinearBondingCurve.sol. The forward integral (ETH paid for N tokens) and the inverse (tokens received for E ETH) both have closed forms. The contract uses these directly, so there is no off chain solver involved. Constants from LaunchSharedState.sol:
uint256 public constant MIN_RAISE      = 1 ether;
uint256 public constant MAX_RAISE      = 5 ether;
uint32  public constant MAX_GAIN_BPS   = 200_000;   // 21x ceiling
uint256 public constant MIN_BUY_ETH    = 0.00001 ether;
uint128 public constant MIN_SELL_TOKENS = 1 ether;  // 1 token
uint256 public constant TOTAL_SUPPLY   = 1_000_000_000 ether;

How to read the curve in the UI

The trade page shows a curve chart with three reference points.
  • Starting market cap (left end of the curve)
  • Current market cap (where the curve has been bought up to so far)
  • Bonding market cap (right end of the curve, the point at which the token bonds)
As trades happen, the current marker moves along the curve. When it reaches the right end, the token bonds and the chart transitions to the V4 pool view.