How Scrip works, in plain terms — and exactly where it lives on-chain.
Robinhood Chain mainnet, chain ID 4663. Every address below was confirmed to hold real, deployed bytecode, and the hook and factory were confirmed to reference each other correctly, directly against the chain at the time of writing.
| ScripFactory | 0x83006ece5EdD8AD1A5658E804A0246F52e77fBC8copyLaunches new tokens — deploys the ERC20, initializes its pool, seeds liquidity. |
| ScripFeeHook | 0x2FFFd130c97D87aa30fD1FC47cCC21E7Da3dc0CccopyThe Uniswap v4 hook that captures and distributes the 5% trading fee. |
| ScripRouter | 0x99e215419c629001698B68d04F9F3be59991a98DcopyA thin, unmodified wrapper so a browser wallet can execute swaps. No logic of Scrip's own lives here. |
| PoolStateLens | 0x9C048b6F2B7D226Cf041aB96642A3d9F56151e35copyRead-only helper for fetching a pool's live price and liquidity. |
| Uniswap v4 PoolManager | 0x8366a39CC670B4001A1121B8F6A443A643e40951copyNot ours — the shared, official Uniswap v4 singleton every pool on the chain uses. |
Filing an application deploys a plain ERC20 with a fixed supply of one billion, and puts the entire supply into a Uniswap v4 pool as a single-sided liquidity position — no ETH or other asset is required from the creator to do this. The position holds 100% token at the moment of filing; the first buyer is what brings any ETH into the pool at all.
This mirrors the instant-liquidity model pioneered by launchpads like Vein — nothing is held back off-market, and there is no separate presale or allocation step.
Every trade — buy or sell — carries a fixed 5% fee, split three ways:
The fee is captured directly from the ETH (or other quote asset) leg of the trade by the hook itself — never from the token side, and never by a separate conversion swap. Holder rewards accrue proportionally to how much of the circulating supply each address holds, and are paid in whatever the pool's quote asset is.
On a sell, the fee is taken from real, already-settled ETH the trader is receiving — it lands as spendable ETH instantly.
On a buy, the trader's ETH hasn't actually settled
into the pool yet at the exact moment the fee is captured (Uniswap v4
runs this check before the swap executes). The hook can still credit
itself correctly for that fee via the pool's internal accounting, but
turning that credit into spendable ETH takes one additional,
permissionless step called redeemPendingFees() — callable
by anyone, at any time, for any token.
This never touches the token's own contract, so it is never visible as a "sell" on the token's chart or activity feed — the one problem this design was built specifically to avoid.
A token doesn't have to pair against ETH. Pasting any contract address on the Create page checks — live, on-chain — whether that asset already has real, liquid trading against ETH at one of the standard fee tiers. If it does, the new token can launch paired against it directly, and all fees for that token settle in that same asset rather than ETH.
If no live market is found, the launch is refused before any gas is spent — pairing against an asset nobody can actually trade would make the new pool worthless from the first block.
These contracts have been tested extensively — locally and against this exact mainnet deployment — but have not undergone an independent third-party security audit. Interacting with any new, unaudited contract carries risk, financial or otherwise. Nothing here is financial advice, and past behavior of these contracts is not a guarantee of future behavior.