Contracts
Foundry project layout, deploy order around the Pons launch, and how a new pair goes live.
Layout
contracts/
src/SnowmanNFT.sol ERC-721 + ERC-6551 accounts + merge src/SnowballController.sol harvest, per-gene index, timelock mirror src/SnowmanFactory.sol one call deploys NFT + controller for a pair src/Deployers.sol stateless creators (keeps factory under EIP-170) src/adapters/UniswapV3*.sol swap + liquidity venue adapters script/DeployFactory.s.sol once per chain script/Deploy.s.sol once per pair abi/*.json exported for the front-end
Deploy order
- 1Factory (done)Deployed on Robinhood Chain at
0xD0637f5323F16E16F453cB1fCa2524DEae807c9f. - 2Launch the token on Pons v2Against USDG or a tokenized stock. This produces the launch token address.
- 3Deploy the pair
Deploy.s.solwithSNOWMAN_FACTORY,LAUNCH_TOKEN,QUOTE_TOKEN, the venue router and position manager. It creates the NFT and controller, installs adapters, and hands ownership toOWNER. - 4Point Pons at the controllerSet the token's
creatorFeeRecipientto the new controller. - 5Register on the siteAdd the pair to
addresses.jsonor theSNOWPONS_ADDRESSESenv. Reads, mint, merge and claim switch from simulated to live. - 6Renounce
renounce()on the controller once adapters are final. No withdraw path exists at any point.
Tests
73 Foundry tests run against the real ERC-6551 reference registry and account, not stubs: account derivation from the raw initcode, gene caps, supply exhaustion, burned ids unreachable, merge sweeping 6-decimal and 18-decimal ERC-20s plus a position plus ETH in one call, phantom-transfer reverts, harvest credited per gene, and every deployed contract fitting under the EIP-170 size limit.
run
cd contracts forge build forge test