# Blindhook > An order book nobody can read. Blind limits and stops, enforced by a Uniswap v4 hook. Bring SOL from Phantom. Your coins stay in your wallet until it fills. Blindhook is one immutable contract on Robinhood Chain (chain id 4663) that is both a Uniswap v4 hook and the fill executor for blind limit, take-profit and stop-loss orders. On-chain there is only a hash until an order fills; then the fill transaction emits the whole order. There is no owner, admin, pause, upgrade, fee switch or withdraw function, and no token is needed. ## Addresses - Blindhook: 0x01CaB5e48B450644838BF92faAC247FfEd84c080 - Uniswap v4 PoolManager: 0x8366a39CC670B4001A1121B8F6A443A643e40951 - Uniswap v4 StateView: 0xf3334192d15450cdd385c8b70e03f9a6bd9e673b - Permit2: 0x000000000022D473030F116dDEE9F6B43aC78BA3 - Explorer: https://robinhoodchain.blockscout.com ## From Solana - Phantom already has a Robinhood Chain address: the same address it uses for Ethereum and Base. If Phantom refuses the switch, turn on Robinhood Chain in Phantom: Settings → Active Networks. - The site connects Phantom's Robinhood Chain side for orders. Its Solana side connects only when you open "Bring SOL". - On a phone without a wallet, "Open in Phantom" opens this page inside Phantom's browser (Backpack works too). - Bring SOL: "Gas only" turns SOL into enough ETH on Robinhood Chain for at least 20 commits and 20 cancels; "USDG + gas" turns SOL into USDG plus a little ETH for gas. Relay moves it, from its public API; Blindhook adds no fee, no referrer, and never holds it. The browser checks Relay's quote before Phantom signs: the deposit goes to Relay's depository, for exactly the SOL shown, and pays only your Robinhood Chain address. - Relay can't send NVDA. Bring USDG, then leave a blind buy on the USDG/NVDA pool. - Every amount shows its dollar value; order sizes and Bring SOL also show SOL. Gas is shown in dollars and cents. - Using Blindhook needs no token: no gating and no perks. ## The rules ## The order - A limit / take-profit sells (or buys) when the pool price reaches a level at or better than the trigger. It works on any Uniswap v4 pool on Robinhood Chain. - A stop-loss sells when the price falls to the trigger. It works only on Blindhook pools, because only there can the trigger be checked against the price the block opened at. - An order holds: the owner, the pool, the direction, the amount in, the trigger price, the minimum amount out, the keeper tip, an expiry from 1 hour to 30 days, a one-time Permit2 number and a random salt. - You sign one Permit2 permission that names this exact order, Blindhook as the only spender, the amount in, and the expiry. Those coins can only ever be pulled to fill this order. You let Permit2 move each coin once, never us. - You commit the order’s hash with one cheap transaction. On-chain, the public sees the hash, the time and your wallet, never the coin, the side, the size or the trigger. This site shows which pool the order is in, so it can draw that pool’s book. - Your browser encrypts the order and your signature to the keeper’s public key. Only the keeper can open it. Your browser keeps its own copy, locked with a key from a wallet signature, so /me can show it. - The coins have to be in your wallet, with Permit2 allowed to move them. If either drops, the order shows “Paused: not enough” until it’s back. ## The fill - The keeper checks the pools with open orders every few seconds. It fills when the trigger is met, and never in the same block as the commit. - On Blindhook pools, the hook records each pool’s price before the first swap of every block. A stop fires only when that block-open price is at or past the trigger, so a price pushed inside one block can’t set it off. A block here is the block number contracts see on Robinhood Chain, which follows Ethereum, about every 12 seconds. - The contract refuses a fill for an order that wasn’t committed in an earlier block; one that’s filled, cancelled or expired; a trigger that isn’t met on-chain (the block-open price for stops, the current price for limits); a signature that doesn’t match; an output under the minimum. - A fill pulls the amount in through Permit2, swaps exact-input through the PoolManager, pays the keeper tip from the output and sends the rest to the owner. - The fill emits the whole order, so it opens from that block on. Anyone can check it against the hash committed before. - Anyone can call fill with the order and its signature. The keeper is just the only one who has them before the fill. - To cancel, the owner cancels the hash on-chain, and the site also offers to void the order’s Permit2 permission in the same flow. Both are final. A cancelled order stays blind. - The contract refuses a second fill. The keeper follows the commit, fill and cancel events and resumes from them after any restart. ## Costs - Blindhook charges nothing and keeps nothing. No token is needed to use it. - The only thing an order can pay is a fixed keeper tip in the coin it receives. You choose it and see it before you sign, and it only pays for the fill’s gas. - Every fill is a normal public transaction, and the order opens after it. What stays blind is your stop and your target, until it fills. ## What's published per fill - the transaction - the trigger and the price it filled at - for stops, the block-open price that triggered it - the order, opened next to its commitment ## Pages - / : the live blind book of every pool, the counts, and a search box for a coin or a pool id - /p/ : a pool's book and price, the order form, the review screen, the rules - /me : your open orders (opened in your browser after you sign a message), each with Cancel, and your fills - /o/ : "Blind until it fills"; after the fill, the opened order next to its commitment, its transaction and its card ## Read API (JSON) - /api/book?pool= : open blind orders (hash, pool, commit time) and opened fills - /api/order/ : one order: blind before the fill, opened after it - /api/pool/ : a pool's coins and live price - /api/search?q= : live v4 pools