Three rails,
one interface

Every calldata builder here is proven against a real historical mainnet transaction — never guessed. Neither NOXA nor The Odyssey publishes a verified ABI on Blockscout, so every selector and argument layout was recovered by decoding real signed transactions and confirmed byte-for-byte in tests/unit/*-calldata.test.ts, which re-run every proof on every npm test.

noxa — instant listing

Mainnet 4663 only. One transaction, one confirmation, trading from block one.

launchToken((string name, string symbol, string logo, string description, (string telegram, string twitter, string discord, string website, string farcaster) socials, address devWallet), uint256 launchConfigId, uint256 dexId, bytes32 salt) deploys the ERC-20, creates a Uniswap v3 pool via the launcher's configured DEX (currently the WETH pair at the 1% fee tier — read live from getDexConfig(0)), seeds single-sided liquidity, and permanently locks the LP NFT. There is no bonding curve and no graduation step.

The ABI was extracted from NOXA's own production frontend bundle (fun.noxa.fi/assets/index-*.js). Proof: encoding it with the exact inputs decoded from a real, successful launch tx (ROBINDOG launch) reproduces that transaction's calldata byte-for-byte, selector 0x686399cb included — confirmed by round-tripping the decode through viem's own decodeFunctionDataencodeFunctionData, not hand-transcribed.

Launch fee: read live from launchFactory.launchFee() (0.0005 ETH when this was built). launchEnabled() is also read live before every preflight — NOXA can pause new launches on-chain, and this rail surfaces that as a blocker rather than letting the transaction revert.

odyssey — instant and bonding-curve factories

Mainnet 4663 only. Two independent factories, two different launch shapes.

Instant factory

One payable call, f(string name, string symbol, uint256 buyAmount), selector 0x548eb31b. The invariant msg.value === buyAmount held across every sampled create — the initial buy folds directly into creation, and lists to a Uniswap v3 pool immediately. Proven byte-for-byte against two real txs (a 0.03 ETH buy and a zero-buy creation).

Bonding-curve factory

A native-ETH virtual-reserve curve. Creation — f(string name, string symbol, uint256, uint256), selector 0x56f698a3 — is a separate zero-value call from the initial buy; every sampled create replayed the same two trailing constants (0.5e18, 0), so this rail replays them rather than inventing new values. Buying is buy(address token, uint256 minTokensOut) payable, selector 0xcce7ec13.

A full survey of every historical TokenCreated emission on the bonding factory (47 logs, eth_getLogs from block 0) found four distinct create selectors, not one: 0x8680ce63 (22 uses, an unexplained extra numeric parameter with no consistent relationship to msg.value), 0x59a35641 (20 uses, requires a 65-byte trailing ECDSA signature from an off-chain backend signer this rail has no way to produce), 0xc56f3820 (3 uses, undecoded), and 0x56f698a3 (2 uses — the one this rail ships). Shipping either majority selector would mean guessing a signature scheme or an unverified parameter, which this build refuses to do. The Odyssey publishing a verified ABI or an official SDK is the only thing that would change this.

reflectionFactory and legacyFactory were not sampled for creates during this build and are intentionally not exposed.

direct — clean-room ERC-20 + Uniswap v3

Mainnet AND testnet. No launchpad, no ABI reverse-engineering — just audited-pattern code this project wrote and compiled itself.

Deploys HoodToken — OpenZeppelin v5 ERC20, fixed supply minted once in the constructor, no mint function anywhere in the contract, no owner, nothing to renounce because there is nothing privileged to begin with. Then creates + initializes a Uniswap v3 pool at the configured fee tier, seeds a full-range LP position, and burns or time-locks the LP position NFT per config (HoodLPLocker — a permissionless timelock that never touches a locked position before its unlock timestamp, no admin override exists).

Every deployed contract is submitted for Blockscout source verification as the final step, using a self-contained standard-json-input embedded in the compiled artifact at build time (npm run compile:contract) — the exact input that produced the deployed bytecode, replayed byte-for-byte, not reconstructed from a template.

ConfigDefaultNotes
totalSupply1,000,000,000Whole tokens; 18 decimals applied
feeTier10000 (1%)Matches NOXA's default pairing behavior on this chain
lpSupplyBps10000 (100%)Fraction of supply deposited as the LP's token side
lpDispositionburnburn · lock (180-day timelock) · keep