Zenzen docs

Zenzen protocol · live contracts

Protocol

Bonding curve

Constant-product virtual reserves. The curve holds the whole supply and always trades.

A new launch mints its full supply to the curve. The price is not set by a person. It is x / y where x = virtualBase + realBase and y = virtualTokens − tokensSold. The live $ZNZF curve was seeded with 800,000,000, not the whole mint. The treasury wallet holds 200,000,000.

ETH pairs open with virtualBase = 30 ETH and virtualTokens = 1,073,000,000. Other pairs scale those virtual reserves to the quote (USDG 12,500 / 1.073B, $ZNZF 1,250,000 / 1.073B, stock pairs similarly). The first buy is therefore not free, and a large buy moves the price because it walks the product k = x · y.

Buy and sell

  • buyFor(amount, minTokensOut) — native quote is msg.value; ERC-20 quote is transferFrom. Snipe tax (if any) is taken first. The 2% fee is taken from what remains. minTokensOut is the sandwich bound.
  • sellFor(tokensIn, minQuoteOut) — pulls the launch token, returns quote after the 2% fee. Snipe tax does not apply to sells.
  • quote == address(0) means native gas (ETH on Robinhood, USDC on Arc). Anything else is an ERC-20 pair.

The one moment you cannot sell is after graduation. Reserves are held for the pool. Before that, the curve always trades.

The live $ZNZF curve

The live curve is 0xda1650faaec372925c9211e6625ba5d9a4397d57. It charges 2% and does not migrate to Uniswap.