Skip to content

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.

On this page

The npm package

hookr-sdk 1.1.1 is the TypeScript package for building on Hookr from any app, launcher or agent. It runs on viem, holds no wallet and signs nothing.

npm install hookr-sdk viem
What it gives youExports
The addresses, deployment and chain for viemHOOKR_1, RELEASES, CHAIN_ID, ROBINHOOD_CHAIN, releaseAddress
The release manifest every builder takes, read from the chainreadReleaseManifest, releaseManifest
A token launch with Hook Blocks, or pools for an existing tokenbuildLaunch, buildLaunchAdvised, buildLaunchFamily
Quotes through HookrQuoter and swaps through HookrRouterbuildQuote, buildSwap, poolId
The approvals a swap or a launch needsswapAllowance, launchFunding, buildApprovals
The gas floor a swap on a pool with arb recapture needslaneGasFloor

Each builder returns the chain id, the contract, the call data and the value; your wallet sends it.

This page covers what hookr-sdk wraps.

Router and quoter

A Hookr pool is an ordinary Uniswap v4 pool on HookrRoot, so it trades through the Universal Router or through Hookr's own router, HookrRouter. HookrQuoter quotes it either way. Their addresses, and every other address, render below from the release book the app ships; none is typed into this page.

Hookr’s contracts

The table lists Hookr’s 35 core contracts, rendered from the hookr-1 release book the app ships, source commit 412960b37a631ce145d49fb4a1887f04a4d1fa74, in deployment order.

Each one’s source is verified on RobinScan, on Sourcify as an exact match and on Blockscout as a full match. The arb recapture table below repeats HookrLane and adds What The Hook’s executor and the whole-pot King of the Pool contracts, and the Wallet Cap table adds Wallet Cap’s core and its module. None of the contracts they add is in the release book.

ContractAddress
HookrRegistryChecks0xB9F5c54E5Cc7ac6c7a96335E5A334Cf4eA496E98
HookrRegistryAdmin0x675ac2102E8c69E2467F64656E3c235AF3901Ac1
HookrRegistry0x463c82beA1a52F4Cc05ca0741a24F0AD24bA4602
HookrTreasury0x2242F7FC75606500503075f29ea8cDA684EfB4a9
HookrForwarder0xe7863CC0E2Fb783b44c279aB159bcD812c2ceA1c
HookrRouter0xC2Bc9a3fe6c4Ce8C2F7EB4655b0869b01D8c93C9
HookrQuoter0x445D7891381Aa7F91F5048EdBC6a611ccBDe7865
HookrLaunchChecks0x8567369a70100828611BB6F44ec051B48F10fb59
HookrTokenDeployer0x1B23D6d7beBcB61E39317E9F0Bc02AEB91aFCcAe
HookrLauncher0x1cf2748A6670572425eAbf9Ab9e5BC4eb2eB8Ef4
HookrReferralRegistry0xefD1DfBA80c06E72F793601706c3a1c71aab3057
HookrProgramsAdmin0x40B40D65543E70a9C757eda1A2208517a8BC7292
HookrPrograms0x9fA204AC99176782Fd20615b2b2A516D1F8C328F
HookrMilestoneNFTFactory0xa340F964F1E685c681dC3ABB5B0405E608914d00
HookrProgramValidator0x33e0249083Be7Cd8bD2fe175E0671AcfD0516850
HookrReferralDistributor0x690539c53212899A9c6AEEE3b4B6737A5c4851d9
HookrRoot0x89c9FB50d1f03192230FFB1c279BB6E7d3Fe6aCc
HookrRules0x4a71c270b1520F94064268102AebD744b0DE7942
HookrFamilyRouter0x854f3Fa7AC342B244DF0d9A8c8F597b051aAE559
HookrFamilyLock0xfAFEcE64099C1E791C4B46189c277f00c0c7e00b
HookrLane0x9A8a1006469BA196f8FEfc017a53505C83A060BB
HookrRecapture0xF83569E564d70daebc35950f66a73f2e2B915583
HookrCompliance0x9D205e8a68464761A9d84bdeCcEa0C3CB1e7B1EC
HookrComplianceGuard0x6CD70db1ac99344416a6fD7184e23FA8f09f313A
HookrAccountCalls0x0579a95A7760070E2d6D34e5beCe571e5F1c4818
HookrPaymasterAdmin0x1d81F4B131832f741392edf7B91b4CF099FbB008
HookrPaymaster0x1c4682915092E742231ea038C4fcA61e96a83c99
HookrRootFactory0x21E438FaBE10770afb4407cF6b09d32369CBdCE4
HookrSessionAdvisory0x78Bc6b7302Dda8632e661c8d74966bdBea1c66b1
HookrFeeAdvisory0x3B6b3f00684987B831fcF9EB5f0d5B806afF7306
HookrLiquidityVault0xA408923EF811945Ef119Bc700B1950Dab65467Fc
HookrOwnedProfiles0xb46c318B6AEA2d6274f5566da414b09fDa6CC325
HookrOwnedRootsLens0x6Bb5c9d21dD095F788cb8373d0143429ad277366
HookrOwnedRootFactory0xA6c2a401597301dFf57A59bC8F70a9622499f3ec
HookrLpBoost0x52536F5F4E5BC7cEA2197c8F1BB49bf2B133E7f1

Arb recapture

The registry opened the lane on HookrRoot on 2026-10-07. The executor is What The Hook’s contract, not Hookr’s. King of the Pool is live on ETH/HOOKR (0xd7cc047d…bc99), on the whole-pot Rules: each arb profit splits What The Hook 25% · Hookr 25% · Pot 50%, with nothing to traders or LPs, and the round’s winner takes the whole pot.

ContractAddress
HookrLane, the arb recapture lane on HookrRoot0x9A8a1006469BA196f8FEfc017a53505C83A060BB
What The Hook's arb recapture executor, 25% of each arb recapture's profit0x4B4c16681401454140a9dBca55e5c186BBE8D728
HookrRules, King of the Pool whole-pot Rules0x10f684361b35c8411a2c07f68a6fb1f4b7e555f7
HookrRecapture, the whole-pot Rules' module0x60efc4a41498e9433be2155b6cc1677aec31d649

Wallet Cap

Wallet Cap runs on a core of its own: the whole-pot core with a cap on each wallet’s buys while a pool’s launch guard lasts. Hookr’s hook admits it, and a Wallet Cap pool’s claims are made on it.

ContractAddress
HookrRulesWalletCap, Wallet Cap's core0xb67b73e28c522a3aac438be970bf94976deee52a
HookrRecapture, the module of Wallet Cap's core0xbbc43dc2f01f5e7882cacd78ef094a44ef0e4d23

hookr-sdk carries the ABIs with the addresses.

Approvals

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

PathNative inputERC-20 input
HookrRoutermsg.value equal to the inputa plain ERC-20 approve to the router, which swapAllowance returns
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. A direct HookrRouter swap is the opposite: it pulls with transferFrom and does not read Permit2. Only a gasless swap, which the payer signs and a relayer sends, pulls through Permit2 (permit2Allowance).

Quoting

Swapping and quoting covers both: the V4Quoter-shaped functions for the Universal Router, and quote for HookrRouter, which buildQuote builds.

On a pool with arb recapture on, a swap must also carry the lane's gas floor plus its own gas: laneGasFloor in the SDK, or gasFloor from laneOf(id) on the root. eth_estimateGas includes the floor. Send the estimate plus a sixth.

Reading a Pool

A pool's Hook Blocks are frozen at launch, so one read at any block is correct for the life of the pool. Read the release first with readReleaseManifest(client, HOOKR_1), which refuses any contract whose code is not the code the release deployed, then read the pool against it.

Do not reconstruct a configuration from events.

Before You Ship

  • Check that the pool's hooks is HookrRoot. buildSwap and buildQuote refuse any other.
  • Give every swap an amount bound, a price bound and a deadline within the next hour; the builders refuse a swap without them.
  • Quote the path you route: the V4Quoter-shaped functions for the Universal Router, quote for HookrRouter.
  • Check the wallet's chain, the payer, the token approvals and the slippage yourself.
  • Put the lane's gas floor on a swap against a pool with arb recapture on.