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

Pons V2 integration

Fee accrual

Before a fee reaches the escrow, it lives inside Pons contracts in a form Plouto cannot read as a balance. This page explains what is actually happening there, and why the interface shows an em dash rather than a number.

Pre-graduation

Trades on the bonding curve pay curveFeeBps — 100 bps (1%) in the live configuration. The curve accumulates it internally, exposed through its own accessors:

text
quoteFeeBalance()      // fees held in the quote assetcreatorTaxBalance()    // creator tax accrued (zero for Plouto)

These are per-curve totals, not per-recipient balances. There is no view function that answers "how much of this is owed to the creator-fee recipient", because the division happens at sweep time.

Post-graduation

Fees accrue on the Pons meme hook instead, tracked per pool:

solidity
function pendingFees(bytes32 poolId, address currency) external view returns (uint256);function pendingCreatorTax(bytes32 poolId, address currency) external view returns (uint256);function pendingBuyback(bytes32 poolId, address currency) external view returns (uint256);

Closer to readable, but still pool-level and still pre-split. And because the hook may hold fees in the memecoin rather than in ETH, converting them requires a sweep that may involve the operator.

Why Plouto shows nothing there

Any number displayed in that slot would be a guess, and a guess sitting next to four accurate figures reads as a fifth accurate figure.

The formatting layer enforces this — undefined renders as , never as 0, and there are tests asserting exactly that.

The sweep

Moving fees from accrual into escrow is a Pons operation:

solidity
function sweepPoolFees(bytes32 poolId, uint256 minConversionQuoteOut, uint256 minBuybackTokensOut) external;function rescuePoolFees(bytes32 poolId) external returns (uint256 protocolAmount, uint256 creatorAmount);function rescueCurveFees(address token) external;   // on the factory

Plouto does not call these and has no permission to. See sweeps.

What Plouto tracks instead

The four states it can read, all separately:

StateSource
Credited in escrowfeeEscrow.balanceOf(revenueRouter)
Claimedrouter.totalRevenueClaimed()
Claimed, unallocatedrouter.unallocatedRevenue()
Allocatedrouter.totalRevenueRouted()

Those four are exact. The fifth is honestly unknown.