NOMS logoNOMS°

Contracts

Everything the protocol runs on, deployed and verified. Supply splits, fee routing and burns are enforced in code — not by us.

8
Live on Robinhood Chain
4
Deployed per coin
1% / 1%
Protocol fee

How the pieces fit together

One coin's full lifecycle, and which contract owns each step.

  1. 1 · ProposeCreator pays 0.0004 ETH to NomsTreasury and escrows their first-block buy in NomsEscrow. The proposal opens in NomsProposals with a 24h clock.
  2. 2 · ProveVoters each post a refundable ~$1 stake and commit $10–$200. Pass = 100 unique voters AND $4,500 committed before the clock runs out.
  3. 3 · LaunchAnyone can call the launch. NomsLauncher mints supply, initialises the pool, locks 97% as single-sided liquidity, seeds 3% to staking, then runs the creator's escrowed buy in the same transaction.
  4. 4 · TradeNomsRouter and NomsQuoter power in-app buys and sells against the 1% pool. Every trade generates fees on the locked position.
  5. 5 · SplitFeeSplitter collects those fees and routes 60% creator / 10% stakers / 30% treasury, minus the creator's burn share.
  6. 6 · CompoundStakingFeeRouter swaps the staker slice into the coin and drips it through NomsStaking over a rolling 30 days. Failed proposals instead refund every stake and the escrowed buy.

Security hardening

Fixes applied in the current deployment after a full review of the suite.

  • Vote stakes are refunded at the exact amount each wallet paid, so a fee-parameter change can never over- or under-refund.
  • The fee crank is price-bounded to a 10% move from spot — a permissionless call cannot be sandwiched for profit.
  • The router's swap callback validates the caller against the Uniswap V3 factory, so spoofed pools cannot pull funds.
  • launch() is callable only by NomsProposals, so no coin can go live without clearing its window.
  • Reward rates are 1e18-scaled so even tiny fee top-ups accrue instead of truncating to zero.
  • Treasury signers are immutable and all three must sign; the LP NFT has no transfer path at all.

Protocol addresses

Robinhood Chain
NomsProposalsdeployed

The 24h proof window

Where every coin starts. propose() charges the flat 0.0004 ETH fee (to the treasury) and escrows the creator's first-block buy. Each voter pays a refundable ~$1-worth of ETH anti-bot stake and commits $10–$200. A proposal passes only when it clears 100 unique voters AND $4,500 committed inside 24h — then anyone can trigger the launch. Miss it and every stake and the escrowed buy are refundable in full.

Holds
Vote stakes (refundable) + a pointer to each creator's escrowed buy
Who can call it
propose: creators · vote: anyone · finalize/launch: permissionless · refunds: the payer
0x2ee940744c98d64b42d0111affaca4ea99f19a36Explorer
NomsLauncherdeployed

The factory — go-live in one transaction

Mints the fixed 1,000,000,000 supply, creates and initialises the coin/WETH V3 pool at the start tick that was committed on-chain when the proposal was created (the launch caller cannot change the opening price), deposits 97% of supply as a single-sided token-only range (so the pool needs zero seeded ETH), seeds the coin's staking vault with the other 3%, deploys that coin's FeeSplitter and StakingFeeRouter through NomsPeriphery, and finally executes the creator's escrowed first-block buy behind a price limit — all before any outside wallet can trade. The LP NFT stays in this contract forever: there is no transfer, burn or withdraw path, so liquidity is permanently locked while fees keep flowing.

Holds
Every coin's LP position NFT — permanently, with no exit function
Who can call it
launch: only NomsProposals (or the owner before wiring)
0x38af135550f5683e0ffa2bec9117f60e7601cf16Explorer
NomsPeripherydeployed

Per-coin contract factory

Deploys each coin's staking vault, fee crank and fee splitter on the launcher's behalf, keeping NomsLauncher under the 24 KB contract-size limit. It is callable only by the launcher, holds no funds and has no privileges over any coin once the contracts exist.

Holds
Nothing
Who can call it
Only NomsLauncher
0xe337a266f8df470d200710e66012810161b70d64Explorer
NomsTreasurydeployed

3-of-3 platform multisig

The only destination for platform money: the 0.0004 ETH proposal fee and the 30% protocol slice of trading fees. Signers are fixed at deploy and cannot be added, removed or rotated. ETH or any ERC-20 leaves only when all three signers confirm the exact same withdrawal — one compromised key moves nothing.

Holds
Platform fee revenue in ETH and WETH
Who can call it
propose/withdraw: anyone can pay in, only 3-of-3 can pay out
0xc3914ebbe26d5c6370eb2e8ccbfb115e24362c7bExplorer
NomsEscrowdeployed

Tagged vault for creator first-block buys

Holds each creator's launch buy against a (proposal id, creator wallet) tag. The funds have exactly two possible destinations, both hard-coded: spent on that specific coin at launch, or refunded to the depositing wallet after a failed proposal. Nobody — including us — can redirect them anywhere else.

Holds
Creator first-block buy ETH, tagged per proposal
Who can call it
deposit: creators · release: only NomsProposals · refund: the depositor
0x4eb28fc6c0cabecfb6cc7c0d5cb7c72aa2d858c9Explorer
NomsRouterdeployed

In-app buy / sell

Swaps ETH ⇄ coin directly against each coin's 1% V3 pool so you never leave the site. Stateless: it holds no balances between transactions and its swap callback verifies the calling pool is a canonical Uniswap V3 factory pool, so a fake pool cannot trick it into moving funds.

Holds
Nothing — funds pass through inside a single transaction
Who can call it
Anyone
0x56dded9d4839a1bcb711ebdbb50859452bf6b5a6Explorer
NomsQuoterdeployed

Read-only price quotes

Simulates a swap and reverts inside the callback to return the exact output, which is what powers the live price, slippage and impact numbers in the trade box. It can never hold or move tokens.

Holds
Nothing — view-only
Who can call it
Anyone (read)
0x65d67c6c94bf846af7250af1193295edc151e0a3Explorer
NomsBuybackdeployed

Protocol buy-&-burn sink

The end of the line for every abandoned balance in NOMS°: creator fees left unclaimed for 30 days, vote stakes never reclaimed 30 days after a proposal resolves, and first-block escrow a creator never pulled back. Anyone (or the daily cron) can trigger it — the contract wraps whatever ETH it holds, market-buys RICE through the deepest canonical V3 pool with a 10% price bound, and sends the coins straight to the burn address. The target coin and the burn destination are immutable, so a swept balance can only ever end up destroyed.

Holds
Swept ETH and WETH, briefly, until the next burn
Who can call it
Anyone — permissionless, plus a daily cron
0xff17a6a8a7bebd45f0bc9a269967d72d4fa13b0dExplorer
NomsTokenper coin

The coin itself

Plain fixed-supply ERC-20 minted once, in full, at launch. No mint function, no owner, no pause, no blacklist, no transfer tax. What exists at block one is all that will ever exist.

Holds
Nothing beyond holder balances
Who can call it
Standard ERC-20 — anyone
Deployed per coin by NomsLauncher
FeeSplitterper coin

Trading-fee routing

Collects the locked LP position's accrued fees (it is approved to collect fees only — never to touch liquidity) and applies the immutable 60 / 10 / 30 split: creator, staking vault, platform treasury. The creator's chosen burn share is peeled off and routed into buy-&-burn.

Holds
Fees in transit for one collect call
Who can call it
claim: anyone — the split is hard-coded, so a stranger cranking it just pays everyone
Deployed per coin by NomsLauncher
StakingFeeRouterper coin

Fee → staking rewards crank

Takes the WETH slice (10% stakers plus the creator's burn points), swaps it into the coin on its own pool, streams the staker portion into the vault and burns the rest. Permissionless, with the swap price-bounded to a 10% move from spot so the crank cannot be sandwiched.

Holds
Pending fee WETH until someone cranks it
Who can call it
crank / crankMin: anyone — destinations are hard-coded
Deployed per coin by NomsLauncher
NomsStakingper coin

Per-coin reward vault

Lock tiers flexible / 7 / 14 / 30 / 45 / 180 days carrying 1x–5x reward weight, with a mandatory 7-day cooldown on every withdrawal (the principal, not the rewards — rewards are claimable at any time). Funded by the 3% supply seed plus the 10% fee stream, and every inflow is spread as a rolling 30-day linear drip so the pool can't be drained on day one.

Holds
Staked coins + the undistributed reward pool
Who can call it
stake / claim / requestWithdraw / withdraw: stakers · sync: anyone
Deployed per coin by NomsLauncher
Uniswap V3 Factoryexternal

Pool creation

Creates the coin/WETH pool at the 1% fee tier — the source of every fee the protocol splits.

Holds
Nothing
Who can call it
NomsLauncher
0x1f7d7550B1b028f7571E69A784071F0205FD2EfAExplorer
Position Managerexternal

LP position NFT

Mints and custodies the single-sided liquidity position. The NFT owner is NomsLauncher, which has no path to move it, so the lock is structural rather than a promise.

Holds
The locked LP position for every coin
Who can call it
NomsLauncher (mint) · FeeSplitter (collect fees only)
0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3Explorer
WETHexternal

Pair asset

Every NOMS pool is coin/WETH. Fees accrue in WETH before they are split.

Holds
Wrapped ETH
Who can call it
Anyone
0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73Explorer