Open the app

SDK, router and quoter

Read about the two trusted integrations an interface calls into, what each one needs from it, and the approvals behind them.

The npm package

hookr-sdk is the typed TypeScript package for building on the new Hookr from any app, launcher or agent. It runs on viem and ships the live addresses, the ABIs, the rule catalog with its bounds, and builders for the four calls an integration makes.

npm install hookr-sdk viem
What it gives youExports
Addresses and chain facts for Robinhood Chain 4663ADDRESSES, CHAIN_ID, RPC_URL
The rules a pool may compose, their parameters and bounds, and a validator for a stackRULES, PARAMS, defaultBlock, validateStack
The fee model, so a UI can show a trader the exact split before signingfees helpers
Market creation for both lanes, ready for writeContractbuildNewTokenMarketCall, buildExistingTokenMarketCall
Quotes through the trusted quoter and swaps through the trusted routerswap and quote builders
Reads of a pool's frozen configuration and market statereads helpers
Claims of pot payouts and creator feesclaims builders
Deep links into hookr.fun for a pool, a token or a prefilled builderlinks helpers

The package targets one root today, HookrModularHookV6, which is ADDRESSES.root; the recapture root is added in the next version once its first pool opens. Every value in it is checked against the app's own encoders by a parity test on each release, so the SDK and hookr.fun never disagree on an address, a bound or a calldata layout. The package README on npm carries a worked example for each builder, and the contracts behind it are public at github.com/Hookr-fun/hookr-contracts.

The rest of this page is what the SDK wraps: the two contracts that are the whole integration surface for trading a Hookr pool.

Two contracts are the whole integration surface for trading a Hookr pool: the trusted router and the trusted quoter. Everything else a pool needs is ordinary Uniswap v4 periphery.

RoleContractAddress
Trusted routerHookrKernelRouterV30xf0E528c39f33F565876cbaa7e0DFaCa38Df966E9
Trusted quoterHookrKernelQuoterV10x5Ba8FBbB4aB20Ff6Daf0ecDEBe3784f869BcB1B5
Root hook, the hooks field of every Hookr PoolKeyHookrModularHookV60xb3cA29cF721380CEe8b8e4755F3865Ebc68Fe8cC
Uniswap v4 PoolManagerPoolManager0x8366a39CC670B4001A1121B8F6A443A643e40951

Their ABIs are at /api/v2-abi/HookrKernelRouterV3 and /api/v2-abi/HookrKernelQuoterV1. See ABIs for the rest.

Why These Two Are Special

A pool's frozen stack names one router and one quoter, each pinned by runtime code hash. The accounting kernel decodes hookData only from those two addresses, at those code hashes. That is what lets the hook credit the Nth-buy pot to a wallet rather than to a router contract.

HookrStackRegistryV2 at 0x5b7f1A117A83aaac15B0698Aa4eB9D53fE5f5BA3 holds the registration. The registry identifiers are:

IdentifierValue
Router integration id0xc9ddc18b51d83cdafa6da985c67b4db41895dcde37b719597bdda9db6396c455
Quoter integration id0x6e5a5b6aa6d141ccaf3b9f25f60e87919fc7a724cc845d146581eb49c079a9a9
Kernel id0x1be0c118b1c6520d97de31ee9f0c33069f0e715ffcdcb16c87a343752bb5be14
Module id0x961091565aaf4eaa4996296fda9772957e61d18d90b965111a59ded2bbb5e774

HookrKernelRouterV3.integrationVersion() returns 3 and HookrKernelQuoterV1.integrationVersion() returns 1. Read them rather than assuming.

Approvals

The two paths do not share an approval model, and mixing them up is the most common integration failure.

PathNative inputERC-20 input
Hookr routermsg.value equal to the inputa plain ERC-20 approve to the router; the router uses transferFrom
Universal Routermsg.value equal to the inputapprove the token to Permit2, then approve the Universal Router as a Permit2 spender with an amount and an expiry
PositionManager mintmsg.value up to amount0Maxapprove the token to Permit2, then approve PositionManager as a Permit2 spender

A plain ERC-20 approval to the Universal Router or to PositionManager is not read, and the swap or mint fails to settle. The Hookr router is the opposite: it does not use Permit2 at all.

For the creator's initial buy on a new-token launch, the approval goes to the router, not to the coordinator. The coordinator pulls no quote on either lane; the router pulls the creator's quote inside the launch transaction, so a missing allowance reverts the whole launch including the token deployment.

Quoting

Use HookrKernelQuoterV1 for anything routed through the Hookr router. It runs the real hook callbacks, the real module walk and the real fee override, then reverts with the result. It is not a view function, because it calls poolManager.unlock: call it with eth_call, or with a static call from another contract.

Pass the real recipient. The pot leg is recipient-specific, so a different recipient can produce a different result.

Use Uniswap's V4Quoter for anything routed through the Universal Router. It sees the same pool without the pot cut, which is exactly what a Universal Router swap pays. Quoting through the Hookr quoter and then routing through the Universal Router makes the two disagree by potBps on a pool with a pot.

The full call shapes are in Swapping and quoting.

Reading a Pool

A pool's rules are frozen, so one read at any block is correct for the life of the pool.

HookrModuleTypesV1.StackCore memory core = registry.stack(poolId);
(HookrModuleTypesV1.ModuleSnapshot memory m, bytes memory config) = registry.moduleAt(poolId, 0);
HookrNativeMechanicsBlockV2.Config memory cfg =
    abi.decode(config, (HookrNativeMechanicsBlockV2.Config));

Do not reconstruct a configuration from events. Events for indexers covers what the events are actually for.

Before You Ship

  • Read marketCoordinator.marketOpeningPaused() on 0x53A192A3fCeE94Da77916B461E0cCa2Dd6402442 before showing a launch control. While it is true, only the owner can open a market.
  • Read protocolShareBps(creator) in the same transaction you launch in. Admission reverts ProtocolShareTierMismatch on any other value.
  • Use amountOutMinimum for slippage on a pool with input cuts, not a price limit. A non-canonical sqrtPriceLimitX96 reverts PartialFillUnsupportedWithInputCuts.
  • Show a Universal Router price and a Hookr router price as two different numbers on a pool with a pot. They are.