ZERO on Pons
What ZERO is, the Pons V2 terms it trades under, who receives its fees and how to check them on-chain, and how the zerotrace contracts are deployed around it.
ZERO is created by the Pons V2 launchpad on Robinhood Chain (chain 4663). zerotrace adds nothing to the token: it is a plain ERC-20, and zerotrace is a set of contracts deployed around it.
The token
| Item | Value |
|---|---|
ZERO (0x316fa3AB9A8FD8d7567a823DedecF28d9FEE2894) | PonsV2LauncherToken: OpenZeppelin ERC20 + ERC20Burnable, 18 decimals, no owner, no transfer restrictions; the whole supply is minted once, in its constructor |
| Name, symbol | zerotrace, ZERO. The name is also the vault's EIP-712 domain name |
| Supply | 1,000,000,000 ZERO, all minted to the bonding curve |
| Team allocation | None: no treasury, no reserve. Every ZERO starts in the curve; the team can hold ZERO only by buying it like anyone else |
Its Pons terms
Pons fixes these terms when it creates a token, and they cannot change afterwards.
| Term | Value |
|---|---|
| Quote asset | Native ETH (pairToken = address(0)) |
| Standard fee | 1% of every trade (curve.feeBps()), the same on the curve and after graduation, in ETH |
| Pons' share | 30% of the standard fee (protocolFeeShareBps 3000): 0.3% of a trade |
| Creator tax | 0 (creatorTaxBps) |
| Buybacks | Off (buybackEnabled false): the whole creator share is paid in ETH |
Curve (0xE276F7E250bC2cD45f1e344d9adc9c9687c2c897) | Trades ZERO for ETH until graduation. See The market |
| Graduation | When the curve has collected 4.2 ETH (graduationThreshold), into a Uniswap v4 pool: native ETH / ZERO, fee 0, tick spacing 200, the Pons meme hook |
| Opening snipe tax | Pons' rule for every launch: 99% of a buy, decaying to 0 over the first 5 seconds; addresses named at launch are exempt, as Pons allows |
Who receives the fees
Pons records FeeHarvester (0x8416DA7325cc619A5E560D8Ef6f413e94950CAd5) as ZERO's creator fee recipient. The creator share of every
trade fee, 0.7% of the trade, goes to it in ETH, and its permissionless harvest turns that ETH into gas for the
vault and ZERO for the notes. See The vault and Gas.
The wallet that made the launch has no special rights over ZERO: it cannot sweep ZERO's fees or redirect them. Only Pons' owner can change the creator fee recipient, after a 3-day timelock; see Trust model.
Check it on Pons
Everything above is in Pons' own record of the token, which anyone can read from the factory
(0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e):
PonsLaunchedToken memory t = ponsFactory.getLaunchedToken(zero);
// t.exists true
// t.creatorFeeRecipient the FeeHarvester
// t.pairToken address(0): native ETH
// t.creatorTaxBps 0
// t.buybackEnabled false
// t.curve ZERO's bonding curveThe curve reports the same terms (feeBps, creatorTaxBps), and IERC20(zero).totalSupply() is
1,000,000,000 × 10^18. pendingCreatorFeeRecipient on the factory shows any redirect Pons' owner has started.
The harvester only accepts a token that pays it
FeeHarvester takes ZERO's address in its constructor and reads Pons' record of it. Its deployment reverts unless
Pons launched the token (NotAPonsLaunch), names the harvester as creator fee recipient (NotTheFeeRecipient) and
pairs it with ETH (NotAnEthPair). A harvester therefore exists only for a token whose fees it receives. See
FeeHarvester.
The zerotrace deployment
Every zerotrace contract is deployed through CreateX's CREATE3 (0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed), with a
salt only the deployer can use and that includes the chain ID. Its address depends only on the deployer, the chain
and a salt label, so each address is fixed before anything is deployed, and nobody else can deploy at it. See
Deployments.
The deployment first checks ZERO's Pons record, then, in order:
Deploys the Poseidon2 hasher and the verifier.
Deploys FeeHarvester with ZERO's address and the vault's planned address, since the vault does not exist yet. It
reads ZERO's curve, pool fee, tick spacing and the factory's meme hook to build the graduated pool key.
Deploys PrivateVault with every address fixed: ZERO, the Pons factory, the curve, the PoolManager, the graduated
pool ID, the verifier, the hasher, the EntryPoint, the router's planned address and the harvester.
Deploys PrivateRouter with the PoolManager, the Pons factory, the vault and ZERO.
Buys the locked seed, 0.001 ETH of ZERO on the curve, once Pons' opening snipe tax is over, and shields it with
stub = keccak256("zerotrace/locked-seed") mod p and an empty ciphertext. Nobody can spend it; see
The vault.
Calls vault.poke(), which sets the price average from the curve's reserves, and deposits 0.1 ETH in the
EntryPoint for the vault.
The seed is the deployment's only purchase of ZERO.
What buyers see
| At the start | Value |
|---|---|
| Where ZERO trades | The Pons bonding curve, until graduation |
| Fees on a trade | 1% standard fee, in ETH: 0.3% to Pons, 0.7% to the harvester |
| First 5 seconds | The Pons snipe tax on buys |
| ZERO held by zerotrace | The locked seed only |
| Where a purchase lands | A private note through PrivateRouter.buy; public ZERO through any other route, shielded with one call. See Public ZERO and shielding |
Early on few notes exist, so the set of notes a spend could come from is small; see Staying private.
Gas and ERC-4337
How the vault pays for its users' gas as its own ERC-4337 account, what validation checks, how sales settle, and how the fee harvester keeps the deposit funded.
The note tree
The append-only Poseidon2 Merkle tree that holds every note commitment - depth, pair insertion, root history, rollover and how wallets rebuild it.