anypool.fun
Concepts

How the zap works

The split math, min-out, and the trace line by line.

The split

A full-range position needs equal value on both sides. If you pay amount A in ETH, we swap an amount s into the coin and keep A − s. The swap pays a fee f (the pool's hook fee plus the coin's creator tax) and some price impact, so s is a little more than half:

s × (1 − f − impact) = A − s
s = A ÷ (2 − f − impact)

We solve this from a fresh quote right before you sign, then the contract checks the result on chain.

Worked example: 0.5 ETH into TARDI

0.4987 ETH landed on 4663swap 0.2511keep 0.24761% hook fee + 0.4% impact= 2.66M TARDI (worth 0.2476 ETH)= 0.2476 ETH
0.5 ETH from Base. Relay lands 0.4987 ETH. 0.2511 is swapped, 0.2476 is kept, both sides are worth 0.2476 ETH.
You pay 0.5 ETH on Base
Landed on Robinhood Chain after Relay0.4987 ETH
Fee + impact on the swap (1% + 0% tax + 0.4%)1.4%
Swapped, s = 0.4987 ÷ 1.9860.2511 ETH
Kept0.2476 ETH
Received from the swap2.66M TARDI (worth 0.2476 ETH)
Your position0.2476 ETH + 2.66M TARDI, full range

TARDI price and the fee split above are example values. Your quote shows the real ones.

Slippage and min-out

Every zap carries three guards, set from the quote:

  • minTokenOut: the swap reverts if it would return less than the quote minus your slippage (0.5% by default).
  • minLiquidity: the mint reverts if the position would be smaller than expected.
  • deadline: the whole zap reverts after it.
High creator tax
Some Pons coins set a creator tax on every swap. The swap half pays it. We warn above 2% and will refuse above a cap.

The trace, line by line

// TARDI/ETH · 0.5 ETH from Base
relay.deposit("base", 0.5)
// 0.4987 ETH landed on 4663
PoolManager.swap(TARDI/ETH, zeroForOne, -0.2511)
// got 2.66M TARDI
posm.modifyLiquidities(MINT_POSITION, SETTLE_PAIR)
emit ModifyLiquidity(tickLower: -887200, tickUpper: 887200)
// LP #4812 is yours
  1. relay.deposit: you sign a deposit on Base. Relay fills it on Robinhood Chain with ETH, minus its fee. Skipped when you pay on Robinhood Chain.
  2. PoolManager.swap: the swap half goes through the coin's own pool. ETH is currency0 (native ETH sorts first), so selling ETH is zeroForOne; the negative amount means exact input.
  3. posm.modifyLiquidities: the Uniswap v4 PositionManager mints the position (MINT_POSITION) and pays both sides in (SETTLE_PAIR). Leftover dust is swept back to you.
  4. ModifyLiquidity: the PoolManager event. Graduated Pons pools use tickSpacing 200, so full range is −887200 to 887200.
Not affiliated with Robinhood, Pons, Uniswap or Relay. Sample numbers on the home page are illustrations.