Skip to content
Protocol contracts not yet configured for this build
Enter app

Pons V2 integration

Launch lifecycle

Every Pons launch has a phase field in its factory record. Plouto reads it before every buyback and behaves differently in each one.

solidity
enum PonsPhase { Curve, Swept, PoolCreated, Rescued }

The four phases

PhaseValueTradeable by PloutoWhat it means
Curve0Yes — bonding curvePre-graduation. Trading happens on the curve.
Swept1NoMid-graduation. Liquidity has been swept out of the curve.
PoolCreated2Yes — Uniswap v4 poolGraduated. Trading happens in the canonical pool.
Rescued3NoA graduation that was rescued rather than completed.

Reading the phase

solidity
PonsLaunchedToken memory record = ponsFactory.getLaunchedToken(token);uint8 phase = record.phase;

The full record also carries the curve address, the deployer, the creator-fee recipient, the pair token, the pool fee and tick spacing — everything the executor needs to reconstruct a route.

How the executor branches

solidity
if (phase == uint8(PonsPhase.Curve)) {    _buyOnCurve(curve, token, ethIn, minTokensOut);} else if (phase == uint8(PonsPhase.PoolCreated)) {    _buyOnPool(record, token, ethIn, minTokensOut);} else {    // SWEPT (mid-graduation) and RESCUED are not tradeable routes.    revert UnexpectedPhase(phase);}

An unknown phase

If Pons ever introduces a phase value the executor does not recognise, it falls into the same revert UnexpectedPhase branch. That is deliberate: the failure mode for an unknown state is stop, not improvise.

The consequence is that a Pons upgrade could pause Plouto buybacks until the executor is reviewed. This is listed in Pons dependency.

Where the phase is visible

The status page shows the live phase, and the Core page tags it alongside the fee pipeline. Every buyback execution also records the phase it ran in, so the history shows which route each purchase used.

Further reading