Design decisions, corrections, and field notes from building a launchpad on Robinhood Chain. Every post describes code that is in the repository, including the mistakes.
One transaction deploys a token into a permanently locked Uniswap V3 position on Robinhood Chain. No bonding curve, no graduation migration, no liquidity anyone can withdraw. Here is what that means and why we built it this way.
Read →We shipped a constant-product bonding curve with anti-snipe tax, TWAP caps, and an atomic migration to a V2 pool. Then we deleted it from the code path. A post-mortem on a design that worked and still lost.
Our UI, our docs and our internal notes all said the creator could take at most 5% of supply at launch. A fork test proved the contract does the opposite. What the code actually does, why, and what we changed.
We deleted every seed file, every growth engine and every random walk. What is left is an indexer with two rules it will not bend, a price chart that goes flat when nothing trades, and a volume figure that is honestly a count.
Deriving a minimum output from the displayed price reverts every large trade on a steep curve. Why the swap panel simulates Quoter V2 for every quote, and how sells unwrap to ETH with the floor on the unwrap.
Uniswap V3 has no view for a position’s pending fees. The profile page shows them anyway, by simulating collectFees against the current block. On the difference between “zero” and “already paid”, and why the split is snapshotted.
Per-wallet caps cannot stop a sniper with a hundred wallets. Block numbers can. A walk through the token’s transfer hook, the launch-block lockout, and the one exemption.
Field notes from putting a Uniswap V3 launchpad on an Arbitrum Orbit chain: a public RPC that 429s eth_blockNumber, a factory that would not compile without viaIR, a contract 600 bytes over the limit until shanghai, and no testnet to rehearse on.