Docs
Contracts
Four contracts, no admin keys after deployment, no upgrade path, no proxy. Robinhood Chain (Arbitrum Orbit L2, chainId 4663). Everything below is checkable on-chain.
Addresses
- factory 0xfffe4C5Adf8422F95A5577835eC71af6b251Dd78
- registry 0x0BC6962c79a85F9A17C0dbbB631738E4f06b3dF7
- locker 0xE091472d7c5D68FAA7603F2420976C419e4AD809
- WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
EverypadRegistry
Spawns one ERC-20 per image and opens its WETH pool. spawnAsset is permissionless given a valid attestation, and reverts AssetExists() if the image already has a token. Keys an asset as keccak256(abi.encode(EVERY, uint256(keccak256(image bytes)))), where EVERY is the ASCII sentinel 0x…4556455259.
EverypadFactory
Launches coins. launch opens a pool quoted in the pair token, spawning that token first if it does not exist. launchUniswap is the same launch quoted in WETH instead. Neither is payable and neither takes a fee — the factory holds no funds at any point and has no owner.
EverypadLocker
Owns every liquidity position forever. It can collect fees and nothing else — there is no burn path, so liquidity cannot be withdrawn by anyone. Coin-pool fees go 100% to the launcher; pair-pool fees are locked and earned by nobody.
EverypadToken
Fixed supply of 1,000,000,000 with 18 decimals, minted once to its deployer, which places it immediately into a pool. No owner, no mint, no tax, no blacklist. Carries an immutable metadataURI.
Why Uniswap V3 only
Every other launchpad on this chain gates its quote asset to an owner-curated allowlist, so none of them can quote a pool in an arbitrary image token. Pons v2 approves 27 first-party Robinhood assets and reverts on anything else. Flaunch has approved exactly two assets in its lifetime. Uniswap V3's factory has no allowlist and no owner gate, which makes it the only venue where this product is possible at all.
Supply and pricing
- Every token, pair or coin, is a fixed 1,000,000,000 with 18 decimals.
- Pools are the 1% fee tier, tick spacing 200.
- Liquidity is single-sided above the floor tick, so a pool holds only the new token at launch and behaves like a bonding curve — tradeable from block one, price discovery from the bottom.
- The single-sided mint cannot place the last few thousand wei of the supply (~4e-24 of it). That dust stays with the deploying contract and is unreachable. All four pads in this line behave identically.
Off-chain: what the site adds
Three routes, and none of them can sign a transaction for you. /api/upload sniffs magic bytes (never the filename or the declared content-type, both of which the uploader controls), stores the file content-addressed, and returns its hash. /api/attest derives the asset id server-side from that hash — never from what the caller claims — fetches the stored URL back, confirms those bytes hash to the same image, and only then signs. /api/rpc is a read-only proxy that exists because the public RPC returns a malformed CORS header every browser rejects.
The attestation is not an identity check. Anyone may upload anything. Its only job is that a token's frozen metadataURI points at an image the site has actually seen and stored, so the URL stays a promise it can keep.
Security posture
- No external audit. These contracts have not been reviewed by anyone but their authors.
- Locks are permanent by design, so any bug in the locker is permanent too. That is the trade.
- No admin key, no pause, no upgrade path, no blocklist — after deploy, nothing about the system can be changed by anybody.
- The locker's one privileged call registers the registry and factory as position sources; it is used once at deploy and then frozen forever.
- Everypad does not vet coins and cannot remove them. Anyone can launch anything and dev-buy a large share of it.
Verify
cd contracts && forge test # 17 tests, real local Uniswap V3
cd web && npx tsc --noEmit # types
cd web && npm run build # production build
cd web && node scripts/ui-check.mjs # every page in a real browser
cd web && node scripts/check-upload.mjs # assetId: JS vs Solidity, via castcheck-upload re-derives the asset id through Solidity's own abi.encode using cast rather than through the same library the site uses, so it is a real cross-check and not the app agreeing with itself. If those ever diverge, every launch would revert.
