NOIR on Pons
What NOIR is, the Pons V2 terms it trades under, who receives its fees and how to check them on-chain, and how the noircash contracts are deployed around it.
NOIR is created by the Pons V2 launchpad on Robinhood Chain (chain 4663). noircash adds nothing to the token: it is a plain ERC-20, and noircash is a set of contracts deployed around it.
The token
| Item | Value |
|---|---|
NOIR (0xDa2E4659dA030AEd0285F9Ed3496ec07058b2319) | PonsV2LauncherToken: OpenZeppelin ERC20 + ERC20Burnable, 18 decimals, no owner, no transfer restrictions; the whole supply is minted once, in its constructor |
| Name, symbol | noircash, NOIR. The name is also the vault's EIP-712 domain name |
| Supply | 1,000,000,000 NOIR, all minted to the bonding curve |
| Team allocation | None: no treasury, no reserve. Every NOIR starts in the curve; the team can hold NOIR 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 (0x7D1e90200654C2BE3e3a0eC035bC7Fa3C55f026f) | Trades NOIR for ETH until graduation. See The market |
| Graduation | When the curve has collected 4.2 ETH (graduationThreshold), into a Uniswap v4 pool: native ETH / NOIR, 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 (0x76d4979272019475b7eD690d5943E14296bDcDd6) as NOIR'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 NOIR for the notes. See The vault and Gas.
The wallet that made the launch has no special rights over NOIR: it cannot sweep NOIR'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(noir);
// t.exists true
// t.creatorFeeRecipient the FeeHarvester
// t.pairToken address(0): native ETH
// t.creatorTaxBps 0
// t.buybackEnabled false
// t.curve NOIR's bonding curveThe curve reports the same terms (feeBps, creatorTaxBps), and IERC20(noir).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 NOIR'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 noircash deployment
Every noircash 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 NOIR's Pons record, then, in order:
Deploys the Poseidon2 hasher and the verifier.
Deploys FeeHarvester with NOIR's address and the vault's planned address, since the vault does not exist yet. It
reads NOIR's curve, pool fee, tick spacing and the factory's meme hook to build the graduated pool key.
Deploys PrivateVault with every address fixed: NOIR, 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 NOIR.
Buys the locked seed, 0.001 ETH of NOIR on the curve, once Pons' opening snipe tax is over, and shields it with
stub = keccak256("noircash/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 NOIR.
What buyers see
| At the start | Value |
|---|---|
| Where NOIR 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 |
| NOIR held by noircash | The locked seed only |
| Where a purchase lands | A private note through PrivateRouter.buy; public NOIR through any other route, shielded with one call. See Public NOIR 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.