Skip to content

chore: allowlist GlueHook V3 hook (replaces #1408) - #1414

Open
lalilulel0x wants to merge 3 commits into
Uniswap:mainfrom
lalilulel0x:gluehook-v3-allowlist
Open

lalilulel0x wants to merge 3 commits into
Uniswap:mainfrom
lalilulel0x:gluehook-v3-allowlist

Conversation

@lalilulel0x

@lalilulel0x lalilulel0x commented Sep 16, 2026 •

Copy link
Copy Markdown

Allowlist GlueHook V3 — 0x03d482cb3ff339c2d29736818d0f72c66dd6a040 — on the 11 mainnets where it is deployed and the routing API has a ChainId — Ethereum, Optimism, BNB Chain, Polygon, Avalanche, Base, Arbitrum, Unichain, World Chain, Soneium, X Layer — and on the 4 testnets with a ChainId: Sepolia, Base Sepolia, Unichain Sepolia, Arbitrum Sepolia (same address; landed 2026-09-16). Same address on every chain (plain CREATE from a nonce-0 deployer), source-verified on each explorer. Also live on Robinhood, MegaETH and Arc (5042), which have no ChainId here yet.

Address change — replaces #1408. #1408 (closed) asked for the previous GlueHook address; this PR asks for the V3 address instead:

Address Bits
#1408 0xbb021554c5294328b04fa313669715bd201ba040 (V3 pre-release build, retired before launch) · earlier revision: V2 0x0f41…20c8
this PR 0x03d482cb3ff339c2d29736818d0f72c66dd6a040 0x2040

The retired builds stay deployed but are not the hook new pools use, so they are not the ones we are asking to allowlist.

What the hook does. A free, keyless, general-purpose Uniswap v4 hook: every pool that adopts it gets a permissionless buyback pot that buys the pool's own token behind every swap (sized by fee × depth, volume-paced, gated on a time-weighted reference tick), plus an optional auto-compounding LP program. Site: https://gluehook.trade · source: https://github.com/glue-finance/glueHook · audit: https://github.com/glue-finance/glueHook/tree/main/audit

Why it is safe to route through. Permission bits 0x2040 = beforeInitialize + afterSwap only. No beforeSwap, no *ReturnDelta flags, no dynamic fees (dynamic-fee pools are refused at beforeInitialize). The hook never touches the swapper's amounts, so the quoter's result is exactly what the swap settles; the buyback is the hook's own swap in afterSwap, run through a try/catch self-call, so no pool state can make a routed swap revert. Gas overhead is bounded (idle ~10k, a firing pump ~+88k, in-swap harvest + compound ~+111k). No owner, no upgrade path, 0% protocol fee.

Why V3 (what changed vs V1/V2)

Launch write-up with the full numbers: https://x.com/glue_fi/status/2100237021264450020

  • The pot can no longer empty itself in one transaction. V1/V2 ran two modes — buying on buys and defending on sells — and the defence could spend 100% of the pot at whatever price was on screen. V3 turns the defence into a buy and puts a TWAP underneath it: the most it spends behind any one swap is 0.8·f·R (0.8% of pool depth at a 1% pool), measured against its own ten-minute time-weighted reference. It buys in slices — hard into dips, pulling back as a rally runs ahead of the reference. Same money, more supply bought.
  • One mechanism, behind every swap, in both directions. Behind a buyer it adds to the buy; behind a seller it buys the dip that seller just made. Traffic is the trigger and the pump runs inside the swapper's own transaction — nothing in the mempool to front-run.
  • 20× to 67× harder to play. The sandwich was already closed in V2 (a −40% loss on fees). V3 closes the other two doors: unlocking the pot costs 50% of it in fees instead of 2.5%, round-trip farming needs a bag of ~16% of pool depth instead of ~1.25%, a pushed premium d shrinks the pump to f/d, and the reference rises at most 3% a minute. Spend = 0.8 · min(f·R, f·R·bucket, s(d)·B, pot) — derivations in the repo README ("The pump math").
  • The before-swap path is gone. V3 runs on permission bits 0x2040 — beforeInitialize + afterSwap only. No beforeSwap, no return delta: the swapper's trade is the pool's plain execution and the buyback happens after it. Quotes are exact (vanilla V4 math, nothing to model), swaps cannot be blocked (every hook action is a try/catch self-call — a failing buyback is skipped, never the swap), the surface shrank.
  • Cheaper Glue integration. Burns go through the Glue Protocol directly (wrapper-aware), and native programs stream live harvest data to Glue's staking/locking engines.

Example pool + quoter output: see the comment below (Base pool 0xa2827…8d9c, V4Quoter result, StateView state, and one PoolId per chain). The example-pool line is in the allowlist file, as in #1390 / #1391.

@graphite-app
graphite-app Bot requested a review from jsy1218 September 16, 2026 10:53
@graphite-app
graphite-app Bot requested a review from a team September 16, 2026 10:53
@graphite-app

graphite-app Bot commented Sep 16, 2026

Copy link
Copy Markdown
Contributor

Graphite Automations

"Request reviewers once CI passes on routing-api repo" took an action on this PR • (09/16/26)

3 reviewers were added and 1 assignee was added to this PR based on Siyu Jiang (See-You John)'s automation.

@lalilulel0x

Copy link
Copy Markdown
Author

V3 pools are live. Example pool on Base:

https://app.uniswap.org/explore/pools/base/0xa282783bd0613414d3d2a87817b5e666d46d5cb2d8cc86c0e9062d97159a8d9c

PoolKey currency0 = ETH (0x0), currency1 = CLAWD 0x9f86dB9fc6f7c9408e8Fda3Ff8ce4e78ac7a6b07, fee = 10000, tickSpacing = 200, hooks = 0x03d482cb3ff339c2d29736818d0f72c66dd6a040
PoolId 0xa282783bd0613414d3d2a87817b5e666d46d5cb2d8cc86c0e9062d97159a8d9c
Launch tx https://basescan.org/tx/0x68b499aa259b1361e1009ac85cea4ccc00d89c0f6977bc4df15c54515f8e41f5
Swap ETH → CLAWD (Universal Router 0x6ff5…9b43) https://basescan.org/tx/0xc4bd7eaa3cab3f0a41144235fe83283e4de41d5e735be15c4d7c12706e6fd994
Swap CLAWD → ETH https://basescan.org/tx/0x968fadf32537fa431ee5abbdfb5f830a61d48f8545c50c4e9b99dda619f7bc9c
Remove 50 % LP https://basescan.org/tx/0x05449c2ea094e3551b8270edc95971b8f717e68f0cad2faee7fc5d08abdb7e00

V4Quoter.quoteExactInputSingle on Base (0x0d5e0f971ed27fbff6c2837bf31316121532048d) for 0.00001 ETH → CLAWD through this pool: amountOut = 3158240849540724827262, gasEstimate = 407514. StateView.getSlot0: sqrtPriceX96 1524311072061476823130495031862906, tick 197304, lpFee 10000; getLiquidity = 1188064404788448523.

The /quote call with hooksOptions=HOOKS_INCLUSIVE&poolsToManuallyRouteThrough=0xa282783b…8d9c is left for a maintainer to run (the execute-api endpoint used in #1390 / #1391 answers 403 from outside), same shape as before.

Same PoolKey shape (currency0 = native, fee = 10000, tickSpacing = 200, hooks = 0x03d4…a040) launched, swapped both ways and 50 % LP removed on every other chain:

Chain Pair PoolId
Ethereum ETH / PEPE 0x6982…1933 0x1caa9755cda02dbc9f7228f7ada41b123aab26991596a990cef9a2dbc5a66351
Arbitrum ETH / PEPE 0x25d8…bb00 0x81dc97c82ff1a644635158fc4432a729df8a207df3071e8beb197b9f1adcda81
BNB Chain BNB / PEPE 0x25d8…bb00 0x81dc97c82ff1a644635158fc4432a729df8a207df3071e8beb197b9f1adcda81
Optimism ETH / OP 0x4200…0042 0x42151aaddb5a099bebeadae4a0d30703a7b341bb1097605770db96b25286c271
Polygon POL / APEPE 0xA3f7…3D3A 0x1795b4d9a1ca3ca876e6ed9e870492fffefacae2779ff5d36a6dcfe3f363f199
Avalanche AVAX / COQ 0x420F…2329 0x865c72d46d8ab2b55b90427cf4989de19c4d464da29c61bcf834079da75888ce
Unichain ETH / HYPE 0x15D0…f68d 0x772484866a00aa82819c2fc9b0242cc7088d7cf1035a243fb72bec3dd5ead3ee
World Chain ETH / WLD 0x2cFc…3003 0x55ae82304ad9b542e063ec5baf94265ad296d0997a96e587a34523895464f296
Soneium ETH / ASTR 0x2CAE…9441 0x902f1156c5344f46576ff7ca92793a7b91ac70d897c9e9f302c9955fbccddf98
X Layer OKB / USDC 0x74b7…6d22 0x5d5a71c5b1ee8506e75aa6913b89ad1c198d4a45f0b0a5f080eb292b99953cd8
Robinhood (no ChainId here) ETH / FRONG 0x6245…0c47 0x379942326fb165e0fad582afb3e485d67c994be347af4c3658af6f6ce81f0ae9
MegaETH (no ChainId here) ETH / USDm 0xFAfD…79E7 0xef9799ca9be09a2e3ae9d1451309a4d0379b310d31475c8602013e439f4a443f
Arc (no ChainId here) USDC / ARK 0xcC1c…50f6 0xe21f9e830e4b8eaca61c990df679332ec811b2ca2937bce687e40147c31f9c3a

The example-pool comment is now in the allowlist file as well.

@lalilulel0x lalilulel0x changed the title chore: allowlist GlueHook V3 hook chore: allowlist GlueHook V3 hook (replaces #1408) Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant