noircashdocs

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

ItemValue
NOIR (0xDa2E4659dA030AEd0285F9Ed3496ec07058b2319)PonsV2LauncherToken: OpenZeppelin ERC20 + ERC20Burnable, 18 decimals, no owner, no transfer restrictions; the whole supply is minted once, in its constructor
Name, symbolnoircash, NOIR. The name is also the vault's EIP-712 domain name
Supply1,000,000,000 NOIR, all minted to the bonding curve
Team allocationNone: 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.

TermValue
Quote assetNative ETH (pairToken = address(0))
Standard fee1% of every trade (curve.feeBps()), the same on the curve and after graduation, in ETH
Pons' share30% of the standard fee (protocolFeeShareBps 3000): 0.3% of a trade
Creator tax0 (creatorTaxBps)
BuybacksOff (buybackEnabled false): the whole creator share is paid in ETH
Curve (0x7D1e90200654C2BE3e3a0eC035bC7Fa3C55f026f)Trades NOIR for ETH until graduation. See The market
GraduationWhen 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 taxPons' 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 curve

The 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 startValue
Where NOIR tradesThe Pons bonding curve, until graduation
Fees on a trade1% standard fee, in ETH: 0.3% to Pons, 0.7% to the harvester
First 5 secondsThe Pons snipe tax on buys
NOIR held by noircashThe locked seed only
Where a purchase landsA 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.

On this page