From fd49ebd2f3ceeb6755d17a591dafc1f60832b443 Mon Sep 17 00:00:00 2001 From: Alex Francisci Date: Thu, 9 Oct 2025 17:12:13 -0400 Subject: [PATCH 1/5] reformatted all allowed hooks into new hook schema and added new hook directory --- lib/util/hooks/prod/bunni.json | 357 +++++++++++++++++++++++++++++++ lib/util/hooks/prod/clanker.json | 174 +++++++++++++++ lib/util/hooks/prod/flaunch.json | 83 +++++++ lib/util/hooks/prod/general.json | 257 ++++++++++++++++++++++ lib/util/hooks/prod/uniswap.json | 107 +++++++++ lib/util/hooks/prod/zora.json | 237 ++++++++++++++++++++ 6 files changed, 1215 insertions(+) create mode 100644 lib/util/hooks/prod/bunni.json create mode 100644 lib/util/hooks/prod/clanker.json create mode 100644 lib/util/hooks/prod/flaunch.json create mode 100644 lib/util/hooks/prod/general.json create mode 100644 lib/util/hooks/prod/uniswap.json create mode 100644 lib/util/hooks/prod/zora.json diff --git a/lib/util/hooks/prod/bunni.json b/lib/util/hooks/prod/bunni.json new file mode 100644 index 0000000000..36e079fef4 --- /dev/null +++ b/lib/util/hooks/prod/bunni.json @@ -0,0 +1,357 @@ +{ + "name": "Bunni Hooklist", + "timestamp": "2025-10-09T16:33:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": [ + "Bunni" + ], + "description": "Bunni hooks for multi-purpose liquidity management including dynamic fees, rehypothecation, liquidity density functions, and autonomous rebalancing", + "logoURI": "https://bunni.pro/assets/img/favicon-32x32.png", + "chains": { + "1": [ + { + "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", + "name": "Bunni Hook v1.0 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x77f73405a72f844e46d26a0bfd6f145c1a45ffcf6e4af5c86811405f29d2e615", + "tvlUSD": 1553028, + "tvlETH": 338.4 + }, + { + "id": "0x9148f00424c4b40a9ec4b03912f091138e9e91a60980550ed97ed7f9dc998cb5", + "tvlUSD": 729657, + "tvlETH": 158.99 + } + ] + }, + { + "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", + "name": "Bunni Hook v1.1 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x68306351b1155f7329bc4428657aa73b8a32e87e916f897b7dcb1328f2ec60a3", + "tvlUSD": 3548170, + "tvlETH": 773.13 + }, + { + "id": "0x00ef227c44fdb9dead9e5249abacfd8236ff375e84f6578e4c64743643a90447", + "tvlUSD": 18205, + "tvlETH": 3.97 + } + ] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xd9f673912e1da331c9e56c5f0dbc7273c0eb684617939a375ec5e227c62d6707", + "tvlUSD": 23777373, + "tvlETH": 5181 + }, + { + "id": "0xa27d94eb334faeb7e65b2b861d4ea4dc3ddce9bdea10bff37fac9f9f095d2148", + "tvlUSD": 169447, + "tvlETH": 36.92 + }, + { + "id": "0x54ff1fd1d62f3bc6224082ecfdb3190a34e8428611b058ade19ce6c083cb608b", + "tvlUSD": 101866, + "tvlETH": 22.2 + }, + { + "id": "0x896895226e2cde763d53496363ef5af1d6d60f0df7960d658c1d0c6251db6c66", + "tvlUSD": 252320, + "tvlETH": 54.98 + }, + { + "id": "0xbc472c63afae4d891699e56a0e1ce6b4c7b71a1830494c214a739de06c49384f", + "tvlUSD": 52137, + "tvlETH": 11.36 + } + ] + } + ], + "42161": [ + { + "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", + "name": "Bunni Hook v1.0 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", + "tvlUSD": 30061, + "tvlETH": 6.55 + } + ] + }, + { + "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", + "name": "Bunni Hook v1.1 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000eb22c45bdb564f985ace0b4d05a64fa71888", + "name": "Bunni Hook v1.2.1 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x75c55eda2c37c47eaf1db8b500171f72f23dc5b16404e904866a6ad1b3a3e537", + "tvlUSD": 208654, + "tvlETH": 45.46 + } + ] + } + ], + "8453": [ + { + "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", + "name": "Bunni Hook v1.0 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", + "tvlUSD": 32813, + "tvlETH": 7.15 + } + ] + }, + { + "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", + "name": "Bunni Hook v1.1 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xbb10cb59b736ab186d8a17d8459bf93503cf820f701884e0154c429057bd7227", + "tvlUSD": 0, + "tvlETH": 0 + }, + { + "id": "0x6dbb5d653f8e11f406adf38091138546f70bc352ccf1115983520d1fe4284449", + "tvlUSD": 0, + "tvlETH": 0 + }, + { + "id": "0x153695fdc96c0a3152b166ed2183c61268bb94e81aa21f1fde4304e277c49755", + "tvlUSD": 16816, + "tvlETH": 3.66 + }, + { + "id": "0xdea704e5d90cec9defc31ce88a1d06033fd7a02297fd5852ac103027e30134cb", + "tvlUSD": 22654, + "tvlETH": 4.94 + } + ] + } + ], + "56": [ + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on BNB", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on BNB", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "130": [ + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Unichain", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x38eeae8c6d1c205eff7c18ca631c9c65afa357e83fa130ec215aff81741d2408", + "tvlUSD": 30, + "tvlETH": 0.01 + } + ] + }, + { + "address": "0x005af73a245d8171a0550ffae2631f12cc211888", + "name": "Bunni Hook v1.2.0 on Unichain", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xeec51c6b1a9e7c4bb4fc4fa9a02fc4fff3fe94efd044f895d98b5bfbd2ff9433", + "tvlUSD": 28813605, + "tvlETH": 6278.38 + } + ] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on Unichain", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x6923777072439713c7b8ab34903e0ea96078d7148449bf54f420320d59ede857", + "tvlUSD": 13395486, + "tvlETH": 2918.83 + }, + { + "id": "0x39bd03115d5482eefbf43b1f3f3c48188f32bcb09b43fd4722f4c86d399e282a", + "tvlUSD": 106, + "tvlETH": 0.02 + } + ] + } + ] + } + } diff --git a/lib/util/hooks/prod/clanker.json b/lib/util/hooks/prod/clanker.json new file mode 100644 index 0000000000..a0b0186e97 --- /dev/null +++ b/lib/util/hooks/prod/clanker.json @@ -0,0 +1,174 @@ +{ + "name": "Clanker Hooklist", + "timestamp": "2025-10-08T22:28:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": [ + "Clanker" + ], + "description": "Clanker static and dynamic fee hooks for token launching", + "logoURI": "https://www.clanker.world/logo_circle.png", + "chains": { + "8453": [ + { + "address": "0x34a45c6b61876d739400bd71228cbcbd4f53e8cc", + "name": "Clanker Dynamic Fee Hook on Base", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x15ddaf96b657ff1a7815670d4945164d71c7f0b3387124df662d99e5ce33dbde", + "tvlUSD":0, + "tvlETH":0 + } + ] + }, + { + "address": "0xdd5eeaff7bd481ad55db083062b13a3cdf0a68cc", + "name": "Clanker Static Fee Hook on Base", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x82b4518a84dbec4f49ebffc1e01274ecc1f3e16c42e49fb39d96f9224df74957", + "tvlUSD":0, + "tvlETH":0 + } + ] + }, + { + "address": "0xd60d6b218116cfd801e28f78d011a203d2b068cc", + "name": "Clanker Dynamic Fee Hook on Base - v2", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "", + "version": { + "major": 2, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x525d8e2619c2a9f8c12240c469c194e0a3099126c2f3a6aa56c9590dd8174592", + "tvlUSD":0, + "tvlETH":0 + } + ] + }, + { + "address": "0xb429d62f8f3bffb98cdb9569533ea23bf0ba28cc", + "name": "Clanker Static Fee Hook on Base - v2", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "", + "version": { + "major": 2, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x53fdb765a953dadb6123c01b4d5a099d67e0f6ac83aa7c5a4f03c43cf63e56df", + "tvlUSD":0, + "tvlETH":0 + } + ] + } + ], + "42161": [ + { + "address": "0xfd213be7883db36e1049dc42f5bd6a0ec66b68cc", + "name": "Clanker Dynamic Fee Hook on Arbitrum", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x70b7962b63b7fe4b5da331d3173f7e1a4f223f09499dc056018f93c9dfa0667e", + "tvlUSD":0, + "tvlETH":0 + } + ] + }, + { + "address": "0xf7ac669593d2d9d01026fa5b756dd5b4f7aaa8cc", + "name": "Clanker Static Fee Hook on Arbitrum", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x32eccafdb852eaedba8456e371dea6bf6f6156b7c3d4ba89ea923c1ce8dc4d68", + "tvlUSD":0, + "tvlETH":0 + } + ] + } + ], + "130": [ + { + "address": "0x9b37a43422d7bbd4c8b231be11e50ad1ace828cc", + "name": "Clanker Dynamic Fee Hook on Unichain", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x656d6be9fc559c9bc8dd165556b5ca2bdc1157a717ac4fd6e54ed23757c5669d", + "tvlUSD":0, + "tvlETH":0 + } + ] + }, + { + "address": "0xbc6e5abda425309c2534bc2bc92562f5419ce8cc", + "name": "Clanker Static Fee Hook on Unichain", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools":[ + { + "id":"0x5fe1d0744945cc9019178b6c779c1d83701ff4e09e1e1e2c3ac6c0097ffa36c0", + "tvlUSD":0, + "tvlETH":0 + } + ] + } + ] + } + } \ No newline at end of file diff --git a/lib/util/hooks/prod/flaunch.json b/lib/util/hooks/prod/flaunch.json new file mode 100644 index 0000000000..6c0b0fd203 --- /dev/null +++ b/lib/util/hooks/prod/flaunch.json @@ -0,0 +1,83 @@ +{ + "name": "Flaunch Hooklist", + "timestamp": "2025-10-09T15:05:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": [ + "Flaunch" + ], + "description": "Flaunch hooks for token launching on Base", + "logoURI": "https://flaunch.gg/_next/image?url=%2Flogo.png&w=96&q=100&dpl=dpl_52G4pnK6czCLFZQsPxMBRzxuSCsH", + "chains": { + "8453": [ + { + "address": "0x9e433f32bb5481a9ca7dff5b3af74a7ed041a888", + "name": "ETH-flETH Auto Wrap Hook on Base", + "description": "Automatic wrapping functionality for ETH and Flaunch ETH (flETH) tokens on Base", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x51bba15255406cfe7099a42183302640ba7dafdc", + "name": "Flaunch Hook on Base", + "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xf785bb58059fab6fb19bdda2cb9078d9e546efdc", + "name": "Flaunch Hook on Base - v1.0.1", + "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xb903b0ab7bcee8f5e4d8c9b10a71aac7135d6fdc", + "name": "Flaunch Hook on Base - v1.0.2", + "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 2 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x8dc3b85e1dc1c846ebf3971179a751896842e5dc", + "name": "Flaunch Hook on Base - v1.0.3", + "description": "Flaunch memecoin launchpad liquidity management. Position manager for importing external tokens.", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 3 + }, + "hookStatsAddress": "", + "pools": [] + } + ] + } + } diff --git a/lib/util/hooks/prod/general.json b/lib/util/hooks/prod/general.json new file mode 100644 index 0000000000..7160344e41 --- /dev/null +++ b/lib/util/hooks/prod/general.json @@ -0,0 +1,257 @@ +{ + "name": "General Hooklist", + "timestamp": "2025-10-09T19:37:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": [ + "General" + ], + "description": "General collection of various hooks for different protocols and functionalities", + "logoURI": "", + "chains": { + "42161": [ + { + "address": "0xc4bf39a096a1b610dd6186935f3ad99c66239080", + "name": "Slippage Fee Hook on Arbitrum", + "description": "Dynamic slippage-based fee adjustment hook for reducing imparement loss incurred by LPers.", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x582387e095a7fbcba58222b6f9f56cc3e6177d766d10dd0d96a70dab70f66be9", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xd73339564ac99f3e09b0ebc80603ff8b796500c0", + "name": "Gamma Limit Order Hook on Arbitrum", + "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", + "audit": "https://docs.gamma.xyz/gamma/learn/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x015537a47e3865bd59fa4b0feed5546f1b5d27660447dddcdf86808bce384d98", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ], + "8453": [ + { + "address": "0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000", + "name": "Graduation Hook", + "description": "", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xed1698c29928a6c44cddb0c75ab0e5d47eb72a80", + "name": "Zaha TWAMM Hook", + "description": "Time-Weighted Average Market Maker for large order execution on Base.", + "audit": "https://github.com/akshatmittal/v4-twamm-hook/tree/main/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x8e91947e425341e3ec516628c32340f680656c8569a065d51388553eb328b560", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x5cd525c621afca515bf58631d4733fba7b72aae4", + "name": "Coinbase Verified Hook on Base", + "description": "Hook to only allow swapping by Coinbase verified wallets.", + "audit": "https://docs.verifiedpools.com/security/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x704268ac7043aeef50f47b6a03ae68ccf808e044", + "name": "BtcAcc", + "description": "btc/acc is a protocol that helps you automatically accumulate Bitcoin while trading. Instead of losing all your profits in memecoins, btc/acc ensures you're building a position in Bitcoin over time. The hook can be attached to any token pair on Uniswap v4 and takes 1% of each trade on behalf of the swapper, buys them Bitcoin, and deposits it in the protocol.", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xbd4f3968b6cd846ee2be64765e0edb3fe1238d3c35d3c5404fc20937b7901230", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x77bb2a8f1ab2a384918a4c090cd8ae82dc5078e0", + "name": "Doppler", + "description": "Doppler is a token launchpad utilizing dynamic bonding curves to mitigate sniping for large projects", + "audit": "https://docs.doppler.lol/resources/security-and-bug-bounties", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x9cd78cc37624a69c32bc554d98460f9290bde0a3067583afaa7ec8de0a753ee3", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x9d11f9505ca92f4b6983c1285d1ac0aaff7ec0c0", + "name": "GammaLimit Order Hook on Base", + "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", + "audit": "https://docs.gamma.xyz/gamma/learn/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xdfb2536ba09a004b32db0a1a15f73676b5e356d831c4ea1e843cd9433b080ab6", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ], + "130": [ + { + "address": "0x09dea99d714a3a19378e3d80d1ad22ca46085080", + "name": "Renzo exLP Dynamic Fee", + "description": "The Renzo ezLP Dynamic Fee hook allows the Uniswap Pool to actively react to market conditions. As the pool price depegs from the exchange rate, fees are increased in a linear fashion when ezETH is sold into the pool (from 0.01% to 1%). This incentivizes market participants to provide liquidity and defend the peg. Buying ezETH from the pool always utilizes the minimum pool fee (0.01%).", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x7dbe9918ba991e7c2b078ec8ce882a060024a6126927cf66553a359e427f2f6a", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x27bfccf7fdd8215ce5dd86c2a36651d05c8450cc", + "name": "AEGIS Dynamic Fee Hook for Unichain", + "description": "The AEGIS Dynamic Fee Hook implements dynamic fee management and full range liquidity management for Uniswap v4 pools. It manages dynamic fees using a TruncGeoOracleMulti for price feeds, handles full range liquidity provision through a FullRangeLiquidityManager, integrates with a PoolPolicyManager for governance and policy management, and provides automated fee adjustments based on market conditions", + "audit": "https://docs.aegis.markets/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x0e3a702c43b613fe8c635e375ca4f0b8d4870526c1e6f795d379f0fb6041ed91", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xa0b0d2d00fd544d8e0887f1a3cedd6e24baf10cc", + "name": "AEGIS Dynamic Fee Hook for Unichain - v1.1", + "description": "The AEGIS Dynamic Fee Hook implements dynamic fee management and full range liquidity management for Uniswap v4 pools. It manages dynamic fees using a TruncGeoOracleMulti for price feeds, handles full range liquidity provision through a FullRangeLiquidityManager, integrates with a PoolPolicyManager for governance and policy management, and provides automated fee adjustments based on market conditions", + "audit": "https://docs.aegis.markets/audits", + "version": { + "major": 1, + "minor": 1, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x410723c1949069324d0f6013dba28829c4a0562f7c81d0f7cb79ded668691e1f", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x2016c0e4f8bb1d6fea777dc791be919e2eda40c0", + "name": "Gamma Limit Order Hook on Unichain", + "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", + "audit": "https://docs.gamma.xyz/gamma/learn/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x2289791ab3c4a90c741427c52ea9411ba13bf8184c0b7bae4fea26262f400357", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x79330fe369c32a03e3b8516aff35b44706e39080", + "name": "Panoptic Oracle Hook on Unichain", + "description": "This hook records and exposes both standard and truncated Uniswap V3-like price observations for Uniswap V4 pools. Additionally, adapter contracts are deployed upon pool creation to allow for use as a drop-in replacement to the Uniswap V3 oracle in protocols leveraging that information. ", + "audit": "https://blog.openzeppelin.com/v3styleoraclehook-audit?hs_preview=hmquOpll-190369323392", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x348860e4565d7e3eb53af800a8931b1465a7540cdb5fa7f4dfd1e4d0bb2aa7f8", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ] + } + } diff --git a/lib/util/hooks/prod/uniswap.json b/lib/util/hooks/prod/uniswap.json new file mode 100644 index 0000000000..8e19f1dd2f --- /dev/null +++ b/lib/util/hooks/prod/uniswap.json @@ -0,0 +1,107 @@ +{ + "name": "Uniswap WETH Hooklist", + "timestamp": "2025-10-09T19:17:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": [ + "Uniswap", + "WETH" + ], + "description": "Uniswap WETH hooks for native ETH and WETH wrapping/unwrapping functionality", + "logoURI": "https://app.uniswap.org/favicon.ico", + "chains": { + "1": [ + { + "address": "0x57991106cb7aa27e2771beda0d6522f68524a888", + "name": "WETH Hook on Mainnet", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Ethereum mainnet", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "10": [ + { + "address": "0x480dafdb4d6092ef3217595b75784ec54b52e888", + "name": "WETH Hook on Optimism", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Optimism", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "42161": [ + { + "address": "0x2a4adf825bd96598487dbb6b2d8d882a4eb86888", + "name": "WETH Hook on Arbitrum", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Arbitrum", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "8453": [ + { + "address": "0xb08211d57032dd10b1974d4b876851a7f7596888", + "name": "WETH Hook on Base", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Base", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "130": [ + { + "address": "0x730b109bad65152c67ecc94eb8b0968603dba888", + "name": "WETH Hook on Unichain", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Unichain", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "11155111": [ + { + "address": "0x0000000000000000000000000000000000000020", + "name": "Extra Hook on Sepolia", + "description": "General purpose hook for testing and development on Sepolia testnet", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ] + } + } diff --git a/lib/util/hooks/prod/zora.json b/lib/util/hooks/prod/zora.json new file mode 100644 index 0000000000..f83a7de32e --- /dev/null +++ b/lib/util/hooks/prod/zora.json @@ -0,0 +1,237 @@ +{ + "name": "Zora Hooklist", + "timestamp": "2025-10-09T18:42:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": [ + "Zora" + ], + "description": "Zora Creator and Post hooks for NFT creation and social interactions on Base", + "logoURI": "https://zora.co/assets/favicon/apple-touch-icon.png", + "chains": { + "8453": [ + { + "address": "0xfbce3d80c659c765bc6c55e29e87d839c7609040", + "name": "Zora Creator Hook on Base", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x854f820475b229b7805a386f758cfb285023d040", + "name": "Zora Creator Hook on Base - v1.0.0", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x9301690be9ac901de52c5ebff883862bbfc99040", + "name": "Zora Creator Hook on Base - v1.1.1", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x5e5d19d22c85a4aef7c1fdf25fb22a5a38f71040", + "name": "Zora Creator Hook on Base - v1.1.1", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress":"", + "pools": [ + { + "id": "0xc42d1a19441f4d29e1e87533958cf0afe16c9cc6ef3e2ce5ff67c3f291555fa0", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xd61a675f8a0c67a73dc3b54fb7318b4d91409040", + "name": "Zora Creator Hook on Base - v1.1.2", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 2 + }, + "hookStatsAddress":"", + "pools": [ + { + "id": "0xd1c0665cb7cc9168b64f9d13099b5e72b26d18bbf984fe66df4c34326f50fec2", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x8218fa8d7922e22aed3556a09d5a715f16ad5040", + "name": "Zora Creator Hook on Base - v2.2", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 0 + }, + "hookStatsAddress":"", + "pools": [ + { + "id": "0x8da3f098fae427a9aa3647f3e81798c61897f3bf67d100a270c00198b1771a4c", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x1258e5f3c71ca9dce95ce734ba5759532e46d040", + "name": "Zora Creator Hook on Base - v2.2.1", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress":"", + "pools": [] + }, + { + "address": "0xa1ebdd5ca6470bbd67114331387f2dda7bfad040", + "name": "Zora Post Hook on Base", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": null, + "pools": [] + }, + { + "address": "0xb030fd8c2f8576f8ab05cfbbe659285e7d7a1040", + "name": "Zora Post Hook on Base - v1.0.0", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools": [] + }, + { + "address": "0xe61bdf0c9e665f02df20fede6dcef379cb751040", + "name": "Zora Post Hook on Base - v1.0.0", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress":"", + "pools": [] + }, + { + "address": "0x81542dc43aff247eff4a0ecefc286a2973ae1040", + "name": "Zora Post Hook on Base - v1.1.1", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress":"", + "pools": [] + }, + { + "address": "0x5bf219b3cc11e3f6dd8dc8fc89d7d1deb0431040", + "name": "Zora Post Hook on Base - v1.1.1", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress":"", + "pools": [] + }, + { + "address": "0x9ea932730a7787000042e34390b8e435dd839040", + "name": "Zora Post Hook on Base - v1.1.2", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 2 + }, + "hookStatsAddress":"", + "pools": [ + { + "id": "0x36C114F3C641031C837427A8CE7BFCE351FFD6C0ED2F2241BE0F1079E79E3B06", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xff74be9d3596ea7a33bb4983dd7906fb34135040", + "name": "Zora Post Hook on Base - v2.2", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 0 + }, + "hookStatsAddress":"", + "pools": [] + }, + { + "address": "0x2b15a16b3ef024005ba899bb51764fcd58cf9040", + "name": "Zora Post Hook on Base - v2.2.1", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress":"", + "pools": [] + } + ] + } + } From 569e4fab87455736977480521f725435883a756f Mon Sep 17 00:00:00 2001 From: Alex Francisci Date: Fri, 10 Oct 2025 11:49:11 -0400 Subject: [PATCH 2/5] updating hook logic which uses the new hooklist dictionaries --- lib/util/bunni-pools.ts | 1177 ----------------- ...xtraV4FeeTiersTickSpacingsHookAddresses.ts | 3 +- lib/util/hooksAddressesAllowlist.ts | 350 +++-- lib/util/v4HooksPoolsFiltering.ts | 119 +- 4 files changed, 187 insertions(+), 1462 deletions(-) delete mode 100644 lib/util/bunni-pools.ts diff --git a/lib/util/bunni-pools.ts b/lib/util/bunni-pools.ts deleted file mode 100644 index 0f2ec11639..0000000000 --- a/lib/util/bunni-pools.ts +++ /dev/null @@ -1,1177 +0,0 @@ -import { ChainId } from '@uniswap/sdk-core' -import { V4SubgraphPool } from '@uniswap/smart-order-router' - -export type BunniPool = V4SubgraphPool & { - chainId: ChainId - comment: string -} - -// Bunni pools -export const BUNNI_POOLS_CONFIG: BunniPool[] = [ - // Bunni USDC-USDT Unichain - { - id: '0xeec51c6b1a9e7c4bb4fc4fa9a02fc4fff3fe94efd044f895d98b5bfbd2ff9433', - chainId: ChainId.UNICHAIN, - tvlUSD: 28813605, - tvlETH: 6278.38, - comment: 'Bunni USDC-USDT Unichain', - feeTier: '0', - tickSpacing: '1', - hooks: '0x005af73a245d8171a0550ffae2631f12cc211888', - liquidity: '173747248900', - token0: { - symbol: 'USDC', - id: '0x078d782b760474a361dda0af3839290b0ef57ad6', - name: 'USDC', - decimals: '6', - }, - token1: { - symbol: 'USD₮0', - id: '0x9151434b16b9763660705744891fa906f660ecc5', - name: 'USD₮0', - decimals: '6', - }, - }, - // Bunni USDC-USDT Mainnet - { - id: '0xd9f673912e1da331c9e56c5f0dbc7273c0eb684617939a375ec5e227c62d6707', - chainId: ChainId.MAINNET, - tvlUSD: 23777373, - tvlETH: 5181, - comment: 'Bunni USDC-USDT Mainnet', - feeTier: '0', - tickSpacing: '1', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'USDC', - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - name: 'USD Coin', - decimals: '6', - }, - token1: { - symbol: 'USDT', - id: '0xdac17f958d2ee523a2206206994597c13d831ec7', - name: 'Tether USD', - decimals: '6', - }, - }, - // Bunni ETH-weETH Unichain - { - id: '0x6923777072439713c7b8ab34903e0ea96078d7148449bf54f420320d59ede857', - chainId: ChainId.UNICHAIN, - tvlUSD: 13395486, - tvlETH: 2918.83, - comment: 'Bunni ETH-weETH Unichain', - feeTier: '0', - tickSpacing: '1', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'weETH', - id: '0x7dcc39b4d1c53cb31e1abc0e358b43987fef80f7', - name: 'Wrapped eETH', - decimals: '18', - }, - }, - // USR-USDC Mainnet - { - id: '0x77f73405a72f844e46d26a0bfd6f145c1a45ffcf6e4af5c86811405f29d2e615', - chainId: ChainId.MAINNET, - tvlUSD: 1553028, - tvlETH: 338.4, - comment: 'USR-USDC Mainnet', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - symbol: 'USR', - id: '0x66a1e37c9b0eaddca17d3662d6c05f4decf3e110', - name: 'Resolv USD', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - name: 'USD Coin', - decimals: '6', - }, - }, - // USND-USDC Arbitrum - { - id: '0x75c55eda2c37c47eaf1db8b500171f72f23dc5b16404e904866a6ad1b3a3e537', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 208654, - tvlETH: 45.46, - comment: 'USND-USDC Arbitrum', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0000eb22c45bdb564f985ace0b4d05a64fa71888', - liquidity: '173747248900', - token0: { - symbol: 'USND', - id: '0x4ecf61a6c2fab8a047ceb3b3b263b401763e9d49', - name: 'US Nerite Dollar', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0xaf88d065e77c8cc2239327c5edb3a432268e5831', - name: 'USD Coin', - decimals: '6', - }, - }, - // ETH-BUNNI #1 Mainnet - { - id: '0x9148f00424c4b40a9ec4b03912f091138e9e91a60980550ed97ed7f9dc998cb5', - chainId: ChainId.MAINNET, - tvlUSD: 729657, - tvlETH: 158.99, - comment: 'ETH-BUNNI #1 Mainnet', - feeTier: '1', - tickSpacing: '60', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'BUNNI', - id: '0x000000c396558ffbab5ea628f39658bdf61345b3', - name: 'Bunni', - decimals: '18', - }, - }, - // USDC-USDT #1 Unichain - { - id: '0x38eeae8c6d1c205eff7c18ca631c9c65afa357e83fa130ec215aff81741d2408', - chainId: ChainId.UNICHAIN, - tvlUSD: 30, - tvlETH: 0.01, - comment: 'USDC-USDT #1 Unichain', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - symbol: 'USDC', - id: '0x078d782b760474a361dda0af3839290b0ef57ad6', - name: 'USDC', - decimals: '6', - }, - token1: { - symbol: 'USDT', - id: '0x588ce4f028d8e7b53b687865d6a67b3a54c75518', - name: 'Tether USD', - decimals: '6', - }, - }, - // USDT-USDf #55 Mainnet - { - id: '0x68306351b1155f7329bc4428657aa73b8a32e87e916f897b7dcb1328f2ec60a3', - chainId: ChainId.MAINNET, - tvlUSD: 3548170, - tvlETH: 773.13, - comment: 'USDT-USDf #55 Mainnet', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - symbol: 'USDT', - id: '0xdac17f958d2ee523a2206206994597c13d831ec7', - name: 'Tether USD', - decimals: '6', - }, - token1: { - symbol: 'USDf', - id: '0xfa2b947eec368f42195f24f36d2af29f7c24cec2', - name: 'Falcon USD', - decimals: '18', - }, - }, - // ETH-MET #83 Mainnet - { - id: '0xa27d94eb334faeb7e65b2b861d4ea4dc3ddce9bdea10bff37fac9f9f095d2148', - chainId: ChainId.MAINNET, - tvlUSD: 169447, - tvlETH: 36.92, - comment: 'ETH-MET #83 Mainnet', - feeTier: '0', - tickSpacing: '100', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'MET', - id: '0x2ebd53d035150f328bd754d6dc66b99b0edb89aa', - name: 'MET', - decimals: '18', - }, - }, - // Bunni USD0-USD0++ Mainnet - { - id: '0x54ff1fd1d62f3bc6224082ecfdb3190a34e8428611b058ade19ce6c083cb608b', - chainId: ChainId.MAINNET, - tvlUSD: 101866, - tvlETH: 22.2, - comment: 'Bunni USD0-USD0++ Mainnet', - feeTier: '0', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'USD0++', - id: '0x35d8949372d46b7a3d5a56006ae77b215fc69bc0', - name: 'USD0 Liquid Bond', - decimals: '18', - }, - token1: { - symbol: 'USD0', - id: '0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5', - name: 'Usual USD', - decimals: '18', - }, - }, - // ETH-USDC #289 Base - { - id: '0xbb10cb59b736ab186d8a17d8459bf93503cf820f701884e0154c429057bd7227', - chainId: ChainId.BASE, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #289 Base', - feeTier: '0', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - name: 'ETH', - id: '0x0000000000000000000000000000000000000000', - symbol: 'Ethereum', - decimals: '18', - }, - token1: { - name: 'USDC', - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - symbol: 'USD Coin', - decimals: '6', - }, - }, - // hwHLP-USDT #95 Mainnet - { - id: '0x896895226e2cde763d53496363ef5af1d6d60f0df7960d658c1d0c6251db6c66', - chainId: ChainId.MAINNET, - tvlUSD: 252320, - tvlETH: 54.98, - comment: 'hwHLP-USDT #95 Mainnet', - feeTier: '0', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'hwHLP', - id: '0x9fd7466f987fd4c45a5bbde22ed8aba5bc8d72d1', - name: 'hwHLP', - decimals: '6', - }, - token1: { - symbol: 'USDT', - id: '0xdac17f958d2ee523a2206206994597c13d831ec7', - name: 'Tether USD', - decimals: '6', - }, - }, - // ETH-PRL #80 Mainnet - { - id: '0xbc472c63afae4d891699e56a0e1ce6b4c7b71a1830494c214a739de06c49384f', - chainId: ChainId.MAINNET, - tvlUSD: 52137, - tvlETH: 11.36, - comment: 'ETH-PRL #80 Mainnet', - feeTier: '2', - tickSpacing: '100', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'PRL', - id: '0x6c0aeceedc55c9d55d8b99216a670d85330941c3', - name: 'Parallel Governance Token', - decimals: '18', - }, - }, - // ETH-USDC #293 Base - { - id: '0x6dbb5d653f8e11f406adf38091138546f70bc352ccf1115983520d1fe4284449', - chainId: ChainId.BASE, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #293 Base', - feeTier: '1', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - name: 'USD Coin', - decimals: '6', - }, - }, - // ETH-BUNNI #26 Base - { - id: '0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420', - chainId: ChainId.BASE, - tvlUSD: 32813, - tvlETH: 7.15, - comment: 'ETH-BUNNI #26 Base', - feeTier: '0', - tickSpacing: '60', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'BUNNI', - id: '0x000000c396558ffbab5ea628f39658bdf61345b3', - name: 'Bunni', - decimals: '18', - }, - }, - // ETH-USDC #62 Unichain - { - id: '0x39bd03115d5482eefbf43b1f3f3c48188f32bcb09b43fd4722f4c86d399e282a', - chainId: ChainId.UNICHAIN, - tvlUSD: 106, - tvlETH: 0.02, - comment: 'ETH-USDC #62 Unichain', - feeTier: '0', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0x078d782b760474a361dda0af3839290b0ef57ad6', - name: 'USDC', - decimals: '6', - }, - }, - // ETH-BUNNI #12 Arbitrum - { - id: '0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 30061, - tvlETH: 6.55, - comment: 'ETH-BUNNI #12 Arbitrum', - feeTier: '0', - tickSpacing: '60', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'BUNNI', - id: '0x000000c396558ffbab5ea628f39658bdf61345b3', - name: 'Bunni', - decimals: '18', - }, - }, - // BUNNI-USDC #33 Mainnet - { - id: '0x00ef227c44fdb9dead9e5249abacfd8236ff375e84f6578e4c64743643a90447', - chainId: ChainId.MAINNET, - tvlUSD: 18205, - tvlETH: 3.97, - comment: 'BUNNI-USDC #33 Mainnet', - feeTier: '0', - tickSpacing: '60', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - symbol: 'BUNNI', - id: '0x000000c396558ffbab5ea628f39658bdf61345b3', - name: 'Bunni', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - name: 'USD Coin', - decimals: '6', - }, - }, - // ETH-USDC #272 Base - { - id: '0x153695fdc96c0a3152b166ed2183c61268bb94e81aa21f1fde4304e277c49755', - chainId: ChainId.BASE, - tvlUSD: 16816, - tvlETH: 3.66, - comment: 'ETH-USDC #272 Base', - feeTier: '1', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - name: 'USD Coin', - decimals: '6', - }, - }, - // ETH-USDC #294 Base - { - id: '0xdea704e5d90cec9defc31ce88a1d06033fd7a02297fd5852ac103027e30134cb', - chainId: ChainId.BASE, - tvlUSD: 22654, - tvlETH: 4.94, - comment: 'ETH-USDC #294 Base', - feeTier: '2', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'USDC', - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - name: 'USD Coin', - decimals: '6', - }, - }, - /* TODO: add back those bunni pool later, once we fix the dyanmic fee hook cached routes as well as cross liquidity for zora tokens - // ETH-USDC #237 Base - { - id: '0x471931205b39f65dcf1c063761c098f7b29237af4059533e246a3545929156ed', - chainId: ChainId.BASE, - tvlUSD: 14845, - tvlETH: 3.23, - comment: 'ETH-USDC #237 Base', - feeTier: '11', - tickSpacing: '100', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // ETH-USDC #93 Mainnet - { - id: '0x60a57df13fb84af43e06a2ed44a8800e6e693e0ef9a648cac5755feb58cab1ec', - chainId: ChainId.MAINNET, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #93 Mainnet', - feeTier: '0', - tickSpacing: '20', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - }, - // ETH-DOT #238 Base - { - id: '0xec8d8d7c033f92492ab5c18272bae93324d12a5c452db1e2da0c63deb9e24dcd', - chainId: ChainId.BASE, - tvlUSD: 157.9, - tvlETH: 0.034, - comment: 'ETH-DOT #238 Base', - feeTier: '0', - tickSpacing: '60', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x8d010bf9c26881788b4e6bf5fd1bdc358c8f90b8', - }, - }, - // ETH-USDC #63 Unichain - { - id: '0xe7154d81104dc9ff8aec461c020a8cdb2cbbb0bfb910454ee020e5f43748ca6f', - chainId: ChainId.UNICHAIN, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #63 Unichain', - feeTier: '1', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x078d782b760474a361dda0af3839290b0ef57ad6', - }, - }, - // ETH-USDC #52 Unichain - { - id: '0xe0326777ba1df8f4b5c522b58a669910e78efb1aa5596741dc224b4ac4ac1105', - chainId: ChainId.UNICHAIN, - tvlUSD: 289, - tvlETH: 0.06, - comment: 'ETH-USDC #52 Unichain', - feeTier: '1', - tickSpacing: '15', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x078d782b760474a361dda0af3839290b0ef57ad6', - }, - }, - // ETH-DOT #82 Mainnet - { - id: '0xec8d8d7c033f92492ab5c18272bae93324d12a5c452db1e2da0c63deb9e24dcd', - chainId: ChainId.MAINNET, - tvlUSD: 85, - tvlETH: 0.0185, - comment: 'ETH-DOT #82 Mainnet', - feeTier: '0', - tickSpacing: '60', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x8d010bf9c26881788b4e6bf5fd1bdc358c8f90b8', - }, - }, - // ETH-USDC #97 Mainnet - { - id: '0xc50a93437d1519f973138b2969583871bea0a6a9840d192c612d3cdd767fa70c', - chainId: ChainId.MAINNET, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #97 Mainnet', - feeTier: '0', - tickSpacing: '5', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - }, - // USDC-USN #81 Mainnet - { - id: '0x5195b3bf1daf25337b0db638c9c7dee112c9e4ddad39e9d7a1e706ba36183e73', - chainId: ChainId.MAINNET, - tvlUSD: 10108, - tvlETH: 2.2, - comment: 'USDC-USN #81 Mainnet', - feeTier: '0', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - token1: { - id: '0xda67b4284609d2d48e5d10cfac411572727dc1ed', - }, - }, - // ETH-USDC #247 Base - { - id: '0xe321dcdee0324032c55436c4ca2a41719c9e3bed1ac3e06e64a52952a73f41bd', - chainId: ChainId.BASE, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #247 Base', - feeTier: '4', - tickSpacing: '60', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // ETH-BETS #43 Base - { - id: '0xa9f6c9c09120188ce8ec833bbe87b702a5b61996e970138040acf8066334bc19', - chainId: ChainId.BASE, - tvlUSD: 8590, - tvlETH: 1.87, - comment: 'ETH-BETS #43 Base', - feeTier: '0', - tickSpacing: '100', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x94025780a1ab58868d9b2dbbb775f44b32e8e6e5', - }, - }, - // ETH-USDC #287 Base - { - id: '0x8603a8a4283333cd5d12e657e77394f27c1c877b32ee00f644d7d6e76d229a6e', - chainId: ChainId.BASE, - tvlUSD: 0, - tvlETH: 0, - comment: 'ETH-USDC #287 Base', - feeTier: '0', - tickSpacing: '40', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // ETH-DOT #42 Arbitrum - { - id: '0x1462eda3ab4d44cd593c3e22e323bbf7058dabdc84a8d6cc8bdfb2428bd77547', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 127, - tvlETH: 0.027, - comment: 'ETH-DOT #42 Arbitrum', - feeTier: '0', - tickSpacing: '60', - hooks: '0x0000eb22c45bdb564f985ace0b4d05a64fa71888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x8d010bf9c26881788b4e6bf5fd1bdc358c8f90b8', - }, - }, - // WETH-DOT #5 BSC - { - id: '0x48323603dde908bfbd512c4c723e28ea9c7ee7f5558f7bcc9cafa798c039b9bd', - chainId: ChainId.BNB, - tvlUSD: 3, - tvlETH: 0.0006, - comment: 'WETH-DOT #5 BSC', - feeTier: '0', - tickSpacing: '60', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x2170ed0880ac9a755fd29b2688956bd959f933f8', - }, - token1: { - id: '0x8d010bf9c26881788b4e6bf5fd1bdc358c8f90b8', - }, - }, - // ETH-weETH 1.0 Base - { - id: '0xa7654bd36dd1ea5da2a6a93adc36a6ddf1b0430039ed10ec655a5ab06fc0d2a3', - chainId: ChainId.BASE, - tvlUSD: 6250, - tvlETH: 1.36, - comment: 'ETH-weETH 1.0 Base', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x04c0599ae5a44757c0af6f9ec3b93da8976c150a', - }, - }, - // ETH-wstETH 1.0 Base - { - id: '0x18851334c1315b5c92d577e50f3190e599ab6f7460b7859add5473f922c3bf54', - chainId: ChainId.BASE, - tvlUSD: 3748, - tvlETH: 0.82, - comment: 'ETH-wstETH 1.0 Base', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0xc1cba3fcea344f92d9239c08c0568f6f2f0ee452', - }, - }, - // Bunni ETH-ezETH Unichain - { - id: '0x10489138471e08ab1b1be7c2130253b18f61a1bfad6ca827199296088c6e90d6', - chainId: ChainId.UNICHAIN, - tvlUSD: 3850, - tvlETH: 0.84, - comment: 'Bunni ETH-ezETH Unichain', - feeTier: '0', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x2416092f143378750bb29b79ed961ab195cceea5', - }, - }, - // ETH-USDC #250 Base - { - id: '0x00d3f91dafdb3ebcf6df83e44542cd2db299518d582efa1e4f6ff2fed2a28bff', - chainId: ChainId.BASE, - tvlUSD: 1523, - tvlETH: 0.33, - comment: 'ETH-USDC #250 Base', - feeTier: '0', - tickSpacing: '15', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // ETH-BUNNI #2 Mainnet - { - id: '0x6fbd7ab3e52fea2a986a24990db57b8a5a90c8769bfd9cbc0c276541fcb73e53', - chainId: ChainId.MAINNET, - tvlUSD: 1973, - tvlETH: 0.43, - comment: 'ETH-BUNNI #2 Mainnet', - feeTier: '0', - tickSpacing: '100', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x000000c396558ffbab5ea628f39658bdf61345b3', - }, - }, - // USD0-USDC #75 Mainnet - { - id: '0xc2830c07fd4e4e3f50006c0663d881b082c97536c3898d65094da7f71162ab1b', - chainId: ChainId.MAINNET, - tvlUSD: 0, - tvlETH: 0, - comment: 'USD0-USDC #75 Mainnet', - feeTier: '0', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5', - }, - token1: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - }, - // cbBTC-LBTC #1 Base - { - id: '0x037fdf1d5fff3a80e2bbc6855ce5a3741c09e10d0adc5b32bcbd19a5bd25763a', - chainId: ChainId.BASE, - tvlUSD: 2550, - tvlETH: 0.55, - comment: 'cbBTC-LBTC #1 Base', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf', - }, - token1: { - id: '0xecac9c5f704e954931349da37f60e39f515c11c1', - }, - }, - // WETH-USDC #36 Base - { - id: '0x66fa569c8aa30894818043ff5e90656d8568208ee73c55cc812bdbb0b475fb71', - chainId: ChainId.BASE, - tvlUSD: 2471, - tvlETH: 0.54, - comment: 'WETH-USDC #36 Base', - feeTier: '0', - tickSpacing: '100', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - id: '0x4200000000000000000000000000000000000006', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // ETH-USDbC #30 Base - { - id: '0x940823de67ee0ba27fbea781f96acca3f5500625a28511ac1a27b62b1bb280bc', - chainId: ChainId.BASE, - tvlUSD: 1920, - tvlETH: 0.515, - comment: 'ETH-USDbC #30 Base', - feeTier: '0', - tickSpacing: '100', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca', - }, - }, - // USDC-USDT #71 Arbitrum - { - id: '0xf409b4740b3a450fcd7b8657d4064846795b91bd456c802bed2fd5c88ca12a9c', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 0, - tvlETH: 0, - comment: 'USDC-USDT #71 Arbitrum', - feeTier: '0', - tickSpacing: '5', - hooks: '0x0000eb22c45bdb564f985ace0b4d05a64fa71888', - liquidity: '173747248900', - token0: { - id: '0xaf88d065e77c8cc2239327c5edb3a432268e5831', - }, - token1: { - id: '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', - }, - }, - // USDC-frxUSD #45 Mainnet - { - id: '0x690f92bc0598b82fa7dfea7cba108f54da349da46b22bc634795a9d34617b22c', - chainId: ChainId.MAINNET, - tvlUSD: 1390, - tvlETH: 0.3, - comment: 'USDC-frxUSD #45 Mainnet', - feeTier: '0', - tickSpacing: '2', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - token1: { - id: '0xcacd6fd266af91b8aed52accc382b4e165586e29', - }, - }, - // USDT/USDC - { - id: '0xfcb95f2277ef9524fb6a2e2c38209a7a3b955c34c933d2cdb570c1e9240fc475', - chainId: ChainId.MAINNET, - tvlUSD: 249, - tvlETH: 0.05, - comment: 'USDT/USDC', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - token1: { - id: '0xdac17f958d2ee523a2206206994597c13d831ec7', - }, - }, - // Flagship ETH-USDC 1.1 - { - id: '0x278ade56e33a097c673da54989ab41bc66d79d8362c38e7c7f2ae76a1d4e4e9f', - chainId: ChainId.BASE, - tvlUSD: 947, - tvlETH: 0.21, - comment: 'Flagship ETH-USDC 1.1', - feeTier: '1', - tickSpacing: '60', - hooks: '0x0000fe59823933ac763611a69c88f91d45f81888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // USDC-USDT 1.0 - { - id: '0x52820f86a8b193cbb46184b990085535e5956003b0005569649125cc070d14d0', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 129, - tvlETH: 0.03, - comment: 'USDC-USDT 1.0', - feeTier: '1', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0xaf88d065e77c8cc2239327c5edb3a432268e5831', - }, - token1: { - id: '0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9', - }, - }, - // ETH-wstETH 1.0 - { - id: '0xccc788002cf655b20e41330bd9af113fd7df7cdebe68367574ea28cab1d59768', - chainId: ChainId.MAINNET, - tvlUSD: 63, - tvlETH: 0.03, - comment: 'ETH-wstETH 1.0', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0', - }, - }, - // ETH-wstETH 1.0 - { - id: '0xcf3e20a072e6c74916da3e57086fa0f781ff54de4f060194e19aabf4dd94f55c', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 919, - tvlETH: 0.2, - comment: 'ETH-wstETH 1.0', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0010d0d5db05933fa0d9f7038d365e1541a41888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x5979d7b546e38e414f7e9822514be443a4800529', - }, - }, - // AlphaGrowth ETH-USDC - { - id: '0x5e5bc151fdb581faf0c28ae30ceba9193da793ccd7c22a70d3feaf3408c07666', - chainId: ChainId.UNICHAIN, - tvlUSD: 839457, - tvlETH: 182.91, - comment: 'AlphaGrowth ETH-USDC', - feeTier: '3', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x078d782b760474a361dda0af3839290b0ef57ad6', - }, - }, - // ETH-GAPPY #285 Base - { - id: '0xf79d90031b6df08d90707ec0e908af750902c30339859ef77be45044607f6002', - chainId: ChainId.BASE, - tvlUSD: 13925, - tvlETH: 3.03, - comment: 'ETH-GAPPY #285 Base', - feeTier: '1', - tickSpacing: '60', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0xfca9fc2cb2dde04732ad07e4bb73db8cc8bfed1d', - }, - }, - // BOLD-USND #57 Arbitrum - { - id: '0x2edd6d9772510c6d661dae96ac65838fd18a535763aaed2b4d5311c87c1cdf95', - chainId: ChainId.ARBITRUM_ONE, - tvlUSD: 36181, - tvlETH: 7.88, - comment: 'BOLD-USND #57 Arbitrum', - feeTier: '0', - tickSpacing: '10', - hooks: '0x0000eb22c45bdb564f985ace0b4d05a64fa71888', - liquidity: '173747248900', - token0: { - id: '0x03569cc076654f82679c4ba2124d64774781b01d', - }, - token1: { - id: '0x4ecf61a6c2fab8a047ceb3b3b263b401763e9d49', - }, - }, - // USDC-SQD #20 BNB - { - id: '0xf5a8429ecdc6d0639124ebc9cc5474c79a1435d77c97bab7b007a1415446f2d0', - chainId: ChainId.BNB, - tvlUSD: 38744, - tvlETH: 8.44, - comment: 'USDC-SQD #20 BNB', - feeTier: '1', - tickSpacing: '100', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d', - }, - token1: { - id: '0xe50e3d1a46070444f44df911359033f2937fcc13', - }, - }, - // PIRATE-USDC #102 - { - id: '0x4ed145903fe1df284134dc9070825e4dea68b41917187373e664d7150c9a71d8', - chainId: ChainId.MAINNET, - tvlUSD: 21947, - tvlETH: 4.78, - comment: 'PIRATE-USDC #102', - feeTier: '0', - tickSpacing: '200', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x7613c48e0cd50e42dd9bf0f6c235063145f6f8dc', - }, - token1: { - id: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', - }, - }, - // ETH-USDC #308 Base - { - id: '0xb0370507155902bc7988b28c6a8ae35d953b49b40a19b8a72c4307a9e5e0fc3a', - chainId: ChainId.BASE, - tvlUSD: 6970, - tvlETH: 1.52, - comment: 'ETH-USDC #308 Base', - feeTier: '1', - tickSpacing: '12', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - }, - // WBTC-cbBTC #104 - { - id: '0x89c981abd756429ac958425398d4d1b04db3c8c12a7f445bdc8abcc091b7bc90', - chainId: ChainId.MAINNET, - tvlUSD: 35660, - tvlETH: 7.77, - comment: 'WBTC-cbBTC #104', - feeTier: '0', - tickSpacing: '10', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599', - }, - token1: { - id: '0xcbb7c0000ab88b473b1f5afd9ef808440eed33bf', - }, - }, - // ETH-ZORA #326 Base - { - id: '0x28ecfada08cc1e5f50b2dea41cda4d3bbc73376390ebde6fa77d4971249577eb', - chainId: ChainId.BASE, - tvlUSD: 1290, - tvlETH: 0.28, - comment: 'ETH-ZORA #326 Base', - feeTier: '2', - tickSpacing: '100', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x1111111111166b7fe7bd91427724b487980afc69', - }, - }, - // ZORA-USDC #327 Base - { - id: '0x8a989f931a7a139fb35fc58e74367d52d93fb53688c84743f20b50063720fde6', - chainId: ChainId.BASE, - tvlUSD: 1310, - tvlETH: 0.29, - comment: 'ZORA-USDC #327 Base', - feeTier: '1', - tickSpacing: '100', - hooks: '0x000052423c1db6b7ff8641b85a7eefc7b2791888', - liquidity: '173747248900', - token0: { - id: '0x1111111111166b7fe7bd91427724b487980afc69', - }, - token1: { - id: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', - }, - } - */ -] diff --git a/lib/util/extraV4FeeTiersTickSpacingsHookAddresses.ts b/lib/util/extraV4FeeTiersTickSpacingsHookAddresses.ts index 6c00ea157a..13b34f3b53 100644 --- a/lib/util/extraV4FeeTiersTickSpacingsHookAddresses.ts +++ b/lib/util/extraV4FeeTiersTickSpacingsHookAddresses.ts @@ -1,5 +1,6 @@ import { ChainId } from '@uniswap/sdk-core' -import { extraHooksAddressesOnSepolia } from './hooksAddressesAllowlist' + +const extraHooksAddressesOnSepolia = '0x0000000000000000000000000000000000000020' export const emptyV4FeeTickSpacingsHookAddresses: Array<[number, number, string]> = new Array< [number, number, string] diff --git a/lib/util/hooksAddressesAllowlist.ts b/lib/util/hooksAddressesAllowlist.ts index ab794c7e9f..c6a6bd7b8b 100644 --- a/lib/util/hooksAddressesAllowlist.ts +++ b/lib/util/hooksAddressesAllowlist.ts @@ -1,189 +1,169 @@ import { ChainId } from '@uniswap/sdk-core' import { ADDRESS_ZERO } from '@uniswap/router-sdk' +import fs from 'fs' +import path from 'path' -// all hook addresses need to be lower case, since the check in isHooksPoolRoutable assumes lower case -export const extraHooksAddressesOnSepolia = '0x0000000000000000000000000000000000000020' -export const FLAUNCH_HOOKS_ADDRESS_ON_BASE = '0x51bba15255406cfe7099a42183302640ba7dafdc' -export const FLAUNCH_HOOKS_ADDRESS_ON_BASE_v1_0_1 = '0xf785bb58059fab6fb19bdda2cb9078d9e546efdc' -export const FLAUNCH_HOOKS_ADDRESS_ON_BASE_v1_0_2 = '0xb903b0ab7bcee8f5e4d8c9b10a71aac7135d6fdc' -export const FLAUNCH_HOOKS_ADDRESS_ON_BASE_v1_0_3 = '0x8dc3b85e1dc1c846ebf3971179a751896842e5dc' -export const ETH_FLETH_AUTO_WRAP_HOOKS_ADDRESS_ON_BASE = '0x9e433f32bb5481a9ca7dff5b3af74a7ed041a888' - -export const BUNNI_HOOKS_ADDRESS_v1_0 = '0x0010d0d5db05933fa0d9f7038d365e1541a41888' -export const BUNNI_HOOKS_ADDRESS_v1_1 = '0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888' -export const BUNNI_HOOKS_ADDRESS_v1_1_1 = '0x0000fe59823933ac763611a69c88f91d45f81888' -export const BUNNI_HOOKS_ADDRESS_v1_2_0_ON_UNICHAIN = '0x005af73a245d8171a0550ffae2631f12cc211888' -export const BUNNI_HOOKS_ADDRESS_v1_2_1 = '0x000052423c1db6b7ff8641b85a7eefc7b2791888' -export const BUNNI_HOOKS_ADDRESS_v1_2_1_ON_ARBITRUM = '0x0000eb22c45bdb564f985ace0b4d05a64fa71888' - -export const GRADUATION_HOOKS_ADDRESS_ON_BASE = '0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000' -export const TWAMM_HOOKS_ADDRESS_ON_BASE = '0xed1698c29928a6c44cddb0c75ab0e5d47eb72a80' -export const COINBASE_VERIFIED_HOOKS_ADDRESS_ON_BASE = '0x5cd525c621afca515bf58631d4733fba7b72aae4' -export const BTC_ACC_ON_BASE = '0x704268ac7043aeef50f47b6a03ae68ccf808e044' - -// https://linear.app/uniswap/issue/ROUTE-580/allowlist-slippagefeehook-on-arbitrum -// example pool: 0x582387e095a7fbcba58222b6f9f56cc3e6177d766d10dd0d96a70dab70f66be9 -export const SLIPPAGE_FEE_HOOK_ON_ARBITRUM = '0xc4bf39a096a1b610dd6186935f3ad99c66239080' - -// https://linear.app/uniswap/issue/ROUTE-555/allowlist-clanker-hook -export const CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_BASE = '0x34a45c6b61876d739400bd71228cbcbd4f53e8cc' -export const CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_BASE = '0xdd5eeaff7bd481ad55db083062b13a3cdf0a68cc' -export const CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_BASE_v2 = '0xd60d6b218116cfd801e28f78d011a203d2b068cc' -export const CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_BASE_v2 = '0xb429d62f8f3bffb98cdb9569533ea23bf0ba28cc' -// https://linear.app/uniswap/issue/ROUTE-591/allowlist-additional-clanker-hooks -export const CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_ARBITRUM = '0xfd213be7883db36e1049dc42f5bd6a0ec66b68cc' -export const CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_ARBITRUM = '0xf7ac669593d2d9d01026fa5b756dd5b4f7aaa8cc' -export const CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_UNICHAIN = '0x9b37a43422d7bbd4c8b231be11e50ad1ace828cc' -export const CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_UNICHAIN = '0xbc6e5abda425309c2534bc2bc92562f5419ce8cc' - -export const WETH_HOOKS_ADDRESS_ON_OP_MAINNET = '0x480dafdb4d6092ef3217595b75784ec54b52e888' -export const WETH_HOOKS_ADDRESS_ON_UNICHAIN = '0x730b109bad65152c67ecc94eb8b0968603dba888' -export const WETH_HOOKS_ADDRESS_ON_BASE = '0xb08211d57032dd10b1974d4b876851a7f7596888' -export const WETH_HOOKS_ADDRESS_ON_MAINNET = '0x57991106cb7aa27e2771beda0d6522f68524a888' - -export const WETH_HOOKS_ADDRESS_ON_ARBITRUM = '0x2a4adf825bd96598487dbb6b2d8d882a4eb86888' - -// example pool: https://app.uniswap.org/explore/pools/unichain/0xeec51c6b1a9e7c4bb4fc4fa9a02fc4fff3fe94efd044f895d98b5bfbd2ff9433 -export const BUNNI_ON_UNICHAIN = '0x005af73a245d8171a0550ffae2631f12cc211888' -// example pool: https://app.uniswap.org/explore/pools/unichain/0x7dbe9918ba991e7c2b078ec8ce882a060024a6126927cf66553a359e427f2f6a -export const RENZO_ON_UNICHAIN = '0x09dea99d714a3a19378e3d80d1ad22ca46085080' -// example pool: https://app.uniswap.org/explore/pools/unichain/0x0e3a702c43b613fe8c635e375ca4f0b8d4870526c1e6f795d379f0fb6041ed91 -export const AEGIS_ON_UNICHAIN = '0x27bfccf7fdd8215ce5dd86c2a36651d05c8450cc' -// exmaple pool: https://app.uniswap.org/explore/pools/unichain/0x410723c1949069324d0f6013dba28829c4a0562f7c81d0f7cb79ded668691e1f -export const UPDATED_AEGIS_ON_UNICHAIN = '0xa0b0d2d00fd544d8e0887f1a3cedd6e24baf10cc' - -// example pool: https://app.uniswap.org/explore/pools/base/0xc42d1a19441f4d29e1e87533958cf0afe16c9cc6ef3e2ce5ff67c3f291555fa0 -export const ZORA_CREATOR_HOOK_ON_BASE_v1 = '0xfbce3d80c659c765bc6c55e29e87d839c7609040' -export const ZORA_CREATOR_HOOK_ON_BASE_v1_0_0_1 = '0x854f820475b229b7805a386f758cfb285023d040' -export const ZORA_CREATOR_HOOK_ON_BASE_v1_1_1 = '0x9301690be9ac901de52c5ebff883862bbfc99040' -export const ZORA_CREATOR_HOOK_ON_BASE_v1_1_1_1 = '0x5e5d19d22c85a4aef7c1fdf25fb22a5a38f71040' -export const ZORA_CREATOR_HOOK_ON_BASE_v1_1_2 = '0xd61a675f8a0c67a73dc3b54fb7318b4d91409040' -export const ZORA_CREATOR_HOOK_ON_BASE_v2_2 = '0x8218fa8d7922e22aed3556a09d5a715f16ad5040' -export const ZORA_CREATOR_HOOK_ON_BASE_v2_2_1 = '0x1258e5f3c71ca9dce95ce734ba5759532e46d040' -// example pool: https://app.uniswap.org/explore/pools/base/0x36C114F3C641031C837427A8CE7BFCE351FFD6C0ED2F2241BE0F1079E79E3B06 -export const ZORA_POST_HOOK_ON_BASE_v1 = '0xa1ebdd5ca6470bbd67114331387f2dda7bfad040' -export const ZORA_POST_HOOK_ON_BASE_v1_0_0_1 = '0xb030fd8c2f8576f8ab05cfbbe659285e7d7a1040' -export const ZORA_POST_HOOK_ON_BASE_v1_0_0_2 = '0xe61bdf0c9e665f02df20fede6dcef379cb751040' -export const ZORA_POST_HOOK_ON_BASE_v1_1_1 = '0x81542dc43aff247eff4a0ecefc286a2973ae1040' -export const ZORA_POST_HOOK_ON_BASE_v1_1_1_1 = '0x5bf219b3cc11e3f6dd8dc8fc89d7d1deb0431040' -export const ZORA_POST_HOOK_ON_BASE_v1_1_2 = '0x9ea932730a7787000042e34390b8e435dd839040' -export const ZORA_POST_HOOK_ON_BASE_v2_2 = '0xff74be9d3596ea7a33bb4983dd7906fb34135040' -export const ZORA_POST_HOOK_ON_BASE_v2_2_1 = '0x2b15a16b3ef024005ba899bb51764fcd58cf9040' - -// example pool: https://app.uniswap.org/explore/pools/base/0x9cd78cc37624a69c32bc554d98460f9290bde0a3067583afaa7ec8de0a753ee3 -export const DOPPLER_HOOKS_ADDRESS_ON_BASE = '0x77bb2a8f1ab2a384918a4c090cd8ae82dc5078e0' - -// LimitOrderHook addresses: https://linear.app/uniswap/issue/ROUTE-625 -// example pool: https://app.uniswap.org/explore/pools/arbitrum/0x015537a47e3865bd59fa4b0feed5546f1b5d27660447dddcdf86808bce384d98 -export const LIMIT_ORDER_HOOKS_ADDRESS_ON_ARBITRUM = '0xd73339564ac99f3e09b0ebc80603ff8b796500c0' -// example pool: https://app.uniswap.org/explore/pools/unichain/0x2289791ab3c4a90c741427c52ea9411ba13bf8184c0b7bae4fea26262f400357 -export const LIMIT_ORDER_HOOKS_ADDRESS_ON_UNICHAIN = '0x2016c0e4f8bb1d6fea777dc791be919e2eda40c0' -// example pool: https://app.uniswap.org/explore/pools/base/0xdfb2536ba09a004b32db0a1a15f73676b5e356d831c4ea1e843cd9433b080ab6 -export const LIMIT_ORDER_HOOKS_ADDRESS_ON_BASE = '0x9d11f9505ca92f4b6983c1285d1ac0aaff7ec0c0' - -// example pool: https://app.uniswap.org/explore/pools/unichain/0x348860e4565d7e3eb53af800a8931b1465a7540cdb5fa7f4dfd1e4d0bb2aa7f8 -export const PANOPTIC_ORACLE_HOOK_ON_UNICHAIN = '0x79330fe369c32a03e3b8516aff35b44706e39080' - -// we do not allow v4 pools with non-zero hook address to be routed through in the initial v4 launch. -// this is the ultimate safeguard in the routing subgraph pool cron job. -export const HOOKS_ADDRESSES_ALLOWLIST: { [chain in ChainId]: Array } = { - [ChainId.MAINNET]: [ - ADDRESS_ZERO, - BUNNI_HOOKS_ADDRESS_v1_0, - BUNNI_HOOKS_ADDRESS_v1_1, - BUNNI_HOOKS_ADDRESS_v1_1_1, - BUNNI_HOOKS_ADDRESS_v1_2_1, - WETH_HOOKS_ADDRESS_ON_MAINNET, - ], - [ChainId.GOERLI]: [ADDRESS_ZERO], - [ChainId.SEPOLIA]: [ADDRESS_ZERO, extraHooksAddressesOnSepolia], - [ChainId.OPTIMISM]: [ADDRESS_ZERO, WETH_HOOKS_ADDRESS_ON_OP_MAINNET], - [ChainId.OPTIMISM_GOERLI]: [ADDRESS_ZERO], - [ChainId.OPTIMISM_SEPOLIA]: [ADDRESS_ZERO], - [ChainId.ARBITRUM_ONE]: [ - ADDRESS_ZERO, - BUNNI_HOOKS_ADDRESS_v1_0, - BUNNI_HOOKS_ADDRESS_v1_1, - BUNNI_HOOKS_ADDRESS_v1_1_1, - BUNNI_HOOKS_ADDRESS_v1_2_1_ON_ARBITRUM, - SLIPPAGE_FEE_HOOK_ON_ARBITRUM, - CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_ARBITRUM, - CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_ARBITRUM, - WETH_HOOKS_ADDRESS_ON_ARBITRUM, - LIMIT_ORDER_HOOKS_ADDRESS_ON_ARBITRUM, - ], - [ChainId.ARBITRUM_GOERLI]: [ADDRESS_ZERO], - [ChainId.ARBITRUM_SEPOLIA]: [ADDRESS_ZERO], - [ChainId.POLYGON]: [ADDRESS_ZERO], - [ChainId.POLYGON_MUMBAI]: [ADDRESS_ZERO], - [ChainId.CELO]: [ADDRESS_ZERO], - [ChainId.CELO_ALFAJORES]: [ADDRESS_ZERO], - [ChainId.GNOSIS]: [ADDRESS_ZERO], - [ChainId.MOONBEAM]: [ADDRESS_ZERO], - [ChainId.BNB]: [ADDRESS_ZERO, BUNNI_HOOKS_ADDRESS_v1_1_1, BUNNI_HOOKS_ADDRESS_v1_2_1], - [ChainId.AVALANCHE]: [ADDRESS_ZERO], - [ChainId.BASE_GOERLI]: [ADDRESS_ZERO], - [ChainId.BASE_SEPOLIA]: [ADDRESS_ZERO], - [ChainId.BASE]: [ - ADDRESS_ZERO, - FLAUNCH_HOOKS_ADDRESS_ON_BASE, - FLAUNCH_HOOKS_ADDRESS_ON_BASE_v1_0_1, - FLAUNCH_HOOKS_ADDRESS_ON_BASE_v1_0_2, - FLAUNCH_HOOKS_ADDRESS_ON_BASE_v1_0_3, - ETH_FLETH_AUTO_WRAP_HOOKS_ADDRESS_ON_BASE, - BUNNI_HOOKS_ADDRESS_v1_0, - BUNNI_HOOKS_ADDRESS_v1_1, - BUNNI_HOOKS_ADDRESS_v1_1_1, - BUNNI_HOOKS_ADDRESS_v1_2_1, - GRADUATION_HOOKS_ADDRESS_ON_BASE, - TWAMM_HOOKS_ADDRESS_ON_BASE, - COINBASE_VERIFIED_HOOKS_ADDRESS_ON_BASE, - BTC_ACC_ON_BASE, - CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_BASE, - CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_BASE, - CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_BASE_v2, - CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_BASE_v2, - WETH_HOOKS_ADDRESS_ON_BASE, - DOPPLER_HOOKS_ADDRESS_ON_BASE, - LIMIT_ORDER_HOOKS_ADDRESS_ON_BASE, - ZORA_CREATOR_HOOK_ON_BASE_v1, - ZORA_CREATOR_HOOK_ON_BASE_v1_0_0_1, - ZORA_CREATOR_HOOK_ON_BASE_v1_1_1, - ZORA_CREATOR_HOOK_ON_BASE_v1_1_1_1, - ZORA_CREATOR_HOOK_ON_BASE_v1_1_2, - ZORA_CREATOR_HOOK_ON_BASE_v2_2, - ZORA_CREATOR_HOOK_ON_BASE_v2_2_1, - ZORA_POST_HOOK_ON_BASE_v1, - ZORA_POST_HOOK_ON_BASE_v1_0_0_1, - ZORA_POST_HOOK_ON_BASE_v1_0_0_2, - ZORA_POST_HOOK_ON_BASE_v1_1_1, - ZORA_POST_HOOK_ON_BASE_v1_1_1_1, - ZORA_POST_HOOK_ON_BASE_v1_1_2, - ZORA_POST_HOOK_ON_BASE_v2_2, - ZORA_POST_HOOK_ON_BASE_v2_2_1, - ], - [ChainId.ZORA]: [ADDRESS_ZERO], - [ChainId.ZORA_SEPOLIA]: [ADDRESS_ZERO], - [ChainId.ROOTSTOCK]: [ADDRESS_ZERO], - [ChainId.BLAST]: [ADDRESS_ZERO], - [ChainId.ZKSYNC]: [ADDRESS_ZERO], - [ChainId.WORLDCHAIN]: [ADDRESS_ZERO], - [ChainId.UNICHAIN_SEPOLIA]: [ADDRESS_ZERO], - [ChainId.UNICHAIN]: [ - ADDRESS_ZERO, - BUNNI_ON_UNICHAIN, - RENZO_ON_UNICHAIN, - AEGIS_ON_UNICHAIN, - UPDATED_AEGIS_ON_UNICHAIN, - WETH_HOOKS_ADDRESS_ON_UNICHAIN, - CLANKER_DYNAMIC_FEE_HOOKS_ADDRESS_ON_UNICHAIN, - CLANKER_STATIC_FEE_HOOKS_ADDRESS_ON_UNICHAIN, - BUNNI_HOOKS_ADDRESS_v1_1_1, - BUNNI_HOOKS_ADDRESS_v1_2_0_ON_UNICHAIN, - BUNNI_HOOKS_ADDRESS_v1_2_1, - LIMIT_ORDER_HOOKS_ADDRESS_ON_UNICHAIN, - PANOPTIC_ORACLE_HOOK_ON_UNICHAIN, - ], - [ChainId.MONAD_TESTNET]: [ADDRESS_ZERO], - [ChainId.SONEIUM]: [ADDRESS_ZERO], +//Expected format of HookList JSON files +interface PoolEntry { + id: string + tvlUSD: number | null + tvlETH: number | null } + +interface HookEntry { + address: string + name: string + description: string + audit: string + version: { + major: number + minor: number + patch: number + } + hookStatsAddress: string | null + pools: PoolEntry[] +} + +interface HookFile { + name: string + timestamp: string + version: { + major: number + minor: number + patch: number + } + keywords: string[] + description: string + logoURI: string + chains: { + [chainId: string]: HookEntry[] + } +} + +// A minimized hook metadata object which allows us to carry more useful details into other functions. +interface HookMetadata { + address: string + name: string + keywords: string[] +} + +function loadAllHookFiles(): HookFile[] { + const hooksDir = path.resolve(process.cwd(), 'lib', 'util', 'hooks', 'prod') + const hookFiles: HookFile[] = [] + + try { + const files = fs.readdirSync(hooksDir).filter(file => file.endsWith('.json')) + + for (const file of files) { + try { + const filePath = path.join(hooksDir, file) + const fileContent = fs.readFileSync(filePath, 'utf8') + const hookFile: HookFile = JSON.parse(fileContent) + hookFiles.push(hookFile) + } catch (error) { + console.warn(`Failed to load hook file ${file}:`, error) + } + } + } catch (error) { + console.error(`Failed to read hooks directory ${hooksDir}:`, error) + } + + return hookFiles +} + +// Create a list of hook metadata for each chain +function buildHooksAllowlist(): { [chain in ChainId]: Array } { + // Create ADDRESS_ZERO as a HookMetadata object + const addressZeroMetadata: HookMetadata = { + address: ADDRESS_ZERO, + name: 'No Hook (Regular Pool)', + keywords: [] + } + + const allowlist: { [chain in ChainId]: Array } = { + [ChainId.MAINNET]: [addressZeroMetadata], + [ChainId.GOERLI]: [addressZeroMetadata], + [ChainId.SEPOLIA]: [addressZeroMetadata], + [ChainId.OPTIMISM]: [addressZeroMetadata], + [ChainId.OPTIMISM_GOERLI]: [addressZeroMetadata], + [ChainId.OPTIMISM_SEPOLIA]: [addressZeroMetadata], + [ChainId.ARBITRUM_ONE]: [addressZeroMetadata], + [ChainId.ARBITRUM_GOERLI]: [addressZeroMetadata], + [ChainId.ARBITRUM_SEPOLIA]: [addressZeroMetadata], + [ChainId.POLYGON]: [addressZeroMetadata], + [ChainId.POLYGON_MUMBAI]: [addressZeroMetadata], + [ChainId.CELO]: [addressZeroMetadata], + [ChainId.CELO_ALFAJORES]: [addressZeroMetadata], + [ChainId.GNOSIS]: [addressZeroMetadata], + [ChainId.MOONBEAM]: [addressZeroMetadata], + [ChainId.BNB]: [addressZeroMetadata], + [ChainId.AVALANCHE]: [addressZeroMetadata], + [ChainId.BASE_GOERLI]: [addressZeroMetadata], + [ChainId.BASE_SEPOLIA]: [addressZeroMetadata], + [ChainId.BASE]: [addressZeroMetadata], + [ChainId.ZORA]: [addressZeroMetadata], + [ChainId.ZORA_SEPOLIA]: [addressZeroMetadata], + [ChainId.ROOTSTOCK]: [addressZeroMetadata], + [ChainId.BLAST]: [addressZeroMetadata], + [ChainId.ZKSYNC]: [addressZeroMetadata], + [ChainId.WORLDCHAIN]: [addressZeroMetadata], + [ChainId.UNICHAIN_SEPOLIA]: [addressZeroMetadata], + [ChainId.UNICHAIN]: [addressZeroMetadata], + [ChainId.MONAD_TESTNET]: [addressZeroMetadata], + [ChainId.SONEIUM]: [addressZeroMetadata], + } + + const hookFiles = loadAllHookFiles() + + for (const hookFile of hookFiles) { + for (const [chainIdString, hooks] of Object.entries(hookFile.chains)) { + const chainId = parseInt(chainIdString) as ChainId + + if (allowlist[chainId]) { + for (const hook of hooks) { + const hookAddress = hook.address.toLowerCase() + + // Check if this hook address is already in the allowlist + const existingHook = allowlist[chainId].find(item => item.address === hookAddress) + + if (!existingHook) { + allowlist[chainId].push({ + address: hookAddress, + name: hook.name, + keywords: hookFile.keywords || [] + }) + } + } + } + } + } + + return allowlist +} + +// Create a list of pools for each hook address +function buildHookPoolsList(): PoolEntry[] { + const pools: PoolEntry[] = [] + + const hookFiles = loadAllHookFiles() + + for (const hookFile of hookFiles) { + for (const [, hooks] of Object.entries(hookFile.chains)) { + for (const hook of hooks) { + if (hook.pools && hook.pools.length > 0) { + for (const pool of hook.pools) { + pools.push({ + ...pool, + id: pool.id.toLowerCase(), + }) + } + } + } + } + } + + return pools +} + +export const HOOKS_ADDRESSES_ALLOWLIST: { [chain in ChainId]: Array } = buildHooksAllowlist() +export const HOOK_POOLS_DATA: PoolEntry[] = buildHookPoolsList() \ No newline at end of file diff --git a/lib/util/v4HooksPoolsFiltering.ts b/lib/util/v4HooksPoolsFiltering.ts index 87a92b95ee..04290b384d 100644 --- a/lib/util/v4HooksPoolsFiltering.ts +++ b/lib/util/v4HooksPoolsFiltering.ts @@ -1,26 +1,8 @@ import { isPoolFeeDynamic, log, nativeOnChain, V4SubgraphPool } from '@uniswap/smart-order-router' import { Hook } from '@uniswap/v4-sdk' -import { - HOOKS_ADDRESSES_ALLOWLIST, - ZORA_CREATOR_HOOK_ON_BASE_v1, - ZORA_CREATOR_HOOK_ON_BASE_v1_0_0_1, - ZORA_CREATOR_HOOK_ON_BASE_v1_1_1, - ZORA_CREATOR_HOOK_ON_BASE_v1_1_1_1, - ZORA_CREATOR_HOOK_ON_BASE_v1_1_2, - ZORA_CREATOR_HOOK_ON_BASE_v2_2, - ZORA_CREATOR_HOOK_ON_BASE_v2_2_1, - ZORA_POST_HOOK_ON_BASE_v1, - ZORA_POST_HOOK_ON_BASE_v1_0_0_1, - ZORA_POST_HOOK_ON_BASE_v1_0_0_2, - ZORA_POST_HOOK_ON_BASE_v1_1_1, - ZORA_POST_HOOK_ON_BASE_v1_1_1_1, - ZORA_POST_HOOK_ON_BASE_v1_1_2, - ZORA_POST_HOOK_ON_BASE_v2_2, - ZORA_POST_HOOK_ON_BASE_v2_2_1, -} from './hooksAddressesAllowlist' +import { HOOKS_ADDRESSES_ALLOWLIST, HOOK_POOLS_DATA } from './hooksAddressesAllowlist' import { ChainId, Currency, Token } from '@uniswap/sdk-core' import { PriorityQueue } from '@datastructures-js/priority-queue' -import { BUNNI_POOLS_CONFIG } from './bunni-pools' import { ADDRESS_ZERO } from '@uniswap/router-sdk' type V4PoolGroupingKey = string @@ -106,92 +88,29 @@ export function v4HooksPoolsFiltering(chainId: ChainId, pools: Array config.id.toLowerCase() === pool.id.toLowerCase() && config.chainId === chainId + // Check if this pool is in our approved hook pools list and has override TVL + // If there is a non-zero override TVL, set the TVL of the pool to ensure it is considered by the routing algorithm + const hookPoolData = HOOK_POOLS_DATA.find( + (poolData) => poolData.id.toLowerCase() === pool.id.toLowerCase() ) - if (bunniPool) { - pool.tvlETH = bunniPool.tvlETH - pool.tvlUSD = bunniPool.tvlUSD - log.info(`Setting tvl for ${bunniPool.comment} pool ${JSON.stringify(pool)}`) + if (hookPoolData && hookPoolData.tvlUSD && hookPoolData.tvlUSD > 0 && hookPoolData.tvlETH && hookPoolData.tvlETH > 0) { + pool.tvlETH = hookPoolData.tvlETH + pool.tvlUSD = hookPoolData.tvlUSD + log.info(`Setting TVL for pool ${pool.id}: $${hookPoolData.tvlUSD}, ${hookPoolData.tvlETH} ETH`) additionalAllowedPool += 1 } let shouldNotAddV4Pool = false - const isZoraPool = - (pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v1 || - pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v1_0_0_1 || - pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v1_1_1 || - pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v1_1_1_1 || - pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v1_1_2 || - pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v2_2 || - pool.hooks.toLowerCase() === ZORA_CREATOR_HOOK_ON_BASE_v2_2_1 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v1 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v1_0_0_1 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v1_0_0_2 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v1_1_1 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v1_1_1_1 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v1_1_2 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v2_2 || - pool.hooks.toLowerCase() === ZORA_POST_HOOK_ON_BASE_v2_2_1) && - chainId === ChainId.BASE + // Check if this is a Zora pool by looking for "Zora" keyword in the allowlist + const hookMetadata = HOOKS_ADDRESSES_ALLOWLIST[chainId].find(item => + item.address === pool.hooks.toLowerCase() + ) + + const isZoraPool = chainId === ChainId.BASE && + hookMetadata && + hookMetadata.keywords.some(keyword => keyword.toLowerCase().includes('zora')) if (isZoraPool) { if (pool.tvlETH <= 0.001) { shouldNotAddV4Pool = true @@ -217,7 +136,9 @@ export function v4HooksPoolsFiltering(chainId: ChainId, pools: Array pool.id.toLowerCase())) - const allowlistedHooksAddresses = new Set(HOOKS_ADDRESSES_ALLOWLIST[chainId].map((hook) => hook.toLowerCase())) + const allowlistedHooksAddresses = new Set( + HOOKS_ADDRESSES_ALLOWLIST[chainId].map((hook) => hook.address.toLowerCase()) + ) const allowlistedHooksPools = pools.filter((pool: V4SubgraphPool) => { return allowlistedHooksAddresses.has(pool.hooks.toLowerCase()) && !topTvlPoolIds.has(pool.id.toLowerCase()) From dc288c6770b359adb37ac88263df34efd145547d Mon Sep 17 00:00:00 2001 From: Alex Francisci Date: Fri, 10 Oct 2025 12:44:52 -0400 Subject: [PATCH 3/5] prettier cleanup --- lib/util/hooks/prod/bunni.json | 670 ++++++++++++++-------------- lib/util/hooks/prod/clanker.json | 332 +++++++------- lib/util/hooks/prod/flaunch.json | 152 ++++--- lib/util/hooks/prod/general.json | 486 ++++++++++---------- lib/util/hooks/prod/uniswap.json | 205 +++++---- lib/util/hooks/prod/zora.json | 440 +++++++++--------- lib/util/hooksAddressesAllowlist.ts | 18 +- lib/util/v4HooksPoolsFiltering.ts | 27 +- 8 files changed, 1160 insertions(+), 1170 deletions(-) diff --git a/lib/util/hooks/prod/bunni.json b/lib/util/hooks/prod/bunni.json index 36e079fef4..9e0b97ee95 100644 --- a/lib/util/hooks/prod/bunni.json +++ b/lib/util/hooks/prod/bunni.json @@ -1,357 +1,355 @@ { - "name": "Bunni Hooklist", - "timestamp": "2025-10-09T16:33:00+00:00", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "keywords": [ - "Bunni" - ], - "description": "Bunni hooks for multi-purpose liquidity management including dynamic fees, rehypothecation, liquidity density functions, and autonomous rebalancing", - "logoURI": "https://bunni.pro/assets/img/favicon-32x32.png", - "chains": { - "1": [ - { - "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", - "name": "Bunni Hook v1.0 on Mainnet", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x77f73405a72f844e46d26a0bfd6f145c1a45ffcf6e4af5c86811405f29d2e615", - "tvlUSD": 1553028, - "tvlETH": 338.4 - }, - { - "id": "0x9148f00424c4b40a9ec4b03912f091138e9e91a60980550ed97ed7f9dc998cb5", - "tvlUSD": 729657, - "tvlETH": 158.99 - } - ] + "name": "Bunni Hooklist", + "timestamp": "2025-10-09T16:33:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": ["Bunni"], + "description": "Bunni hooks for multi-purpose liquidity management including dynamic fees, rehypothecation, liquidity density functions, and autonomous rebalancing", + "logoURI": "https://bunni.pro/assets/img/favicon-32x32.png", + "chains": { + "1": [ + { + "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", + "name": "Bunni Hook v1.0 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", - "name": "Bunni Hook v1.1 on Mainnet", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 0 + "hookStatsAddress": "", + "pools": [ + { + "id": "0x77f73405a72f844e46d26a0bfd6f145c1a45ffcf6e4af5c86811405f29d2e615", + "tvlUSD": 1553028, + "tvlETH": 338.4 }, - "hookStatsAddress": "", - "pools": [] + { + "id": "0x9148f00424c4b40a9ec4b03912f091138e9e91a60980550ed97ed7f9dc998cb5", + "tvlUSD": 729657, + "tvlETH": 158.99 + } + ] + }, + { + "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", + "name": "Bunni Hook v1.1 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 0 }, - { - "address": "0x0000fe59823933ac763611a69c88f91d45f81888", - "name": "Bunni Hook v1.1.1 on Mainnet", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x68306351b1155f7329bc4428657aa73b8a32e87e916f897b7dcb1328f2ec60a3", - "tvlUSD": 3548170, - "tvlETH": 773.13 - }, - { - "id": "0x00ef227c44fdb9dead9e5249abacfd8236ff375e84f6578e4c64743643a90447", - "tvlUSD": 18205, - "tvlETH": 3.97 - } - ] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 }, - { - "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", - "name": "Bunni Hook v1.2.1 on Mainnet", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 2, - "patch": 1 + "hookStatsAddress": "", + "pools": [ + { + "id": "0x68306351b1155f7329bc4428657aa73b8a32e87e916f897b7dcb1328f2ec60a3", + "tvlUSD": 3548170, + "tvlETH": 773.13 }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xd9f673912e1da331c9e56c5f0dbc7273c0eb684617939a375ec5e227c62d6707", - "tvlUSD": 23777373, - "tvlETH": 5181 - }, - { - "id": "0xa27d94eb334faeb7e65b2b861d4ea4dc3ddce9bdea10bff37fac9f9f095d2148", - "tvlUSD": 169447, - "tvlETH": 36.92 - }, - { - "id": "0x54ff1fd1d62f3bc6224082ecfdb3190a34e8428611b058ade19ce6c083cb608b", - "tvlUSD": 101866, - "tvlETH": 22.2 - }, - { - "id": "0x896895226e2cde763d53496363ef5af1d6d60f0df7960d658c1d0c6251db6c66", - "tvlUSD": 252320, - "tvlETH": 54.98 - }, - { - "id": "0xbc472c63afae4d891699e56a0e1ce6b4c7b71a1830494c214a739de06c49384f", - "tvlUSD": 52137, - "tvlETH": 11.36 - } - ] - } - ], - "42161": [ - { - "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", - "name": "Bunni Hook v1.0 on Arbitrum", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", - "tvlUSD": 30061, - "tvlETH": 6.55 - } - ] + { + "id": "0x00ef227c44fdb9dead9e5249abacfd8236ff375e84f6578e4c64743643a90447", + "tvlUSD": 18205, + "tvlETH": 3.97 + } + ] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on Mainnet", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 }, - { - "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", - "name": "Bunni Hook v1.1 on Arbitrum", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 0 + "hookStatsAddress": "", + "pools": [ + { + "id": "0xd9f673912e1da331c9e56c5f0dbc7273c0eb684617939a375ec5e227c62d6707", + "tvlUSD": 23777373, + "tvlETH": 5181 }, - "hookStatsAddress": "", - "pools": [] - }, - { - "address": "0x0000fe59823933ac763611a69c88f91d45f81888", - "name": "Bunni Hook v1.1.1 on Arbitrum", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 + { + "id": "0xa27d94eb334faeb7e65b2b861d4ea4dc3ddce9bdea10bff37fac9f9f095d2148", + "tvlUSD": 169447, + "tvlETH": 36.92 }, - "hookStatsAddress": "", - "pools": [] - }, - { - "address": "0x0000eb22c45bdb564f985ace0b4d05a64fa71888", - "name": "Bunni Hook v1.2.1 on Arbitrum", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 2, - "patch": 1 + { + "id": "0x54ff1fd1d62f3bc6224082ecfdb3190a34e8428611b058ade19ce6c083cb608b", + "tvlUSD": 101866, + "tvlETH": 22.2 }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x75c55eda2c37c47eaf1db8b500171f72f23dc5b16404e904866a6ad1b3a3e537", - "tvlUSD": 208654, - "tvlETH": 45.46 - } - ] - } - ], - "8453": [ - { - "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", - "name": "Bunni Hook v1.0 on Base", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 + { + "id": "0x896895226e2cde763d53496363ef5af1d6d60f0df7960d658c1d0c6251db6c66", + "tvlUSD": 252320, + "tvlETH": 54.98 }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", - "tvlUSD": 32813, - "tvlETH": 7.15 - } - ] + { + "id": "0xbc472c63afae4d891699e56a0e1ce6b4c7b71a1830494c214a739de06c49384f", + "tvlUSD": 52137, + "tvlETH": 11.36 + } + ] + } + ], + "42161": [ + { + "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", + "name": "Bunni Hook v1.0 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", - "name": "Bunni Hook v1.1 on Base", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [ + { + "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", + "tvlUSD": 30061, + "tvlETH": 6.55 + } + ] + }, + { + "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", + "name": "Bunni Hook v1.1 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 0 }, - { - "address": "0x0000fe59823933ac763611a69c88f91d45f81888", - "name": "Bunni Hook v1.1.1 on Base", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 }, - { - "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", - "name": "Bunni Hook v1.2.1 on Base", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 2, - "patch": 1 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xbb10cb59b736ab186d8a17d8459bf93503cf820f701884e0154c429057bd7227", - "tvlUSD": 0, - "tvlETH": 0 - }, - { - "id": "0x6dbb5d653f8e11f406adf38091138546f70bc352ccf1115983520d1fe4284449", - "tvlUSD": 0, - "tvlETH": 0 - }, - { - "id": "0x153695fdc96c0a3152b166ed2183c61268bb94e81aa21f1fde4304e277c49755", - "tvlUSD": 16816, - "tvlETH": 3.66 - }, - { - "id": "0xdea704e5d90cec9defc31ce88a1d06033fd7a02297fd5852ac103027e30134cb", - "tvlUSD": 22654, - "tvlETH": 4.94 - } - ] - } - ], - "56": [ - { - "address": "0x0000fe59823933ac763611a69c88f91d45f81888", - "name": "Bunni Hook v1.1.1 on BNB", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000eb22c45bdb564f985ace0b4d05a64fa71888", + "name": "Bunni Hook v1.2.1 on Arbitrum", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 }, - { - "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", - "name": "Bunni Hook v1.2.1 on BNB", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 2, - "patch": 1 + "hookStatsAddress": "", + "pools": [ + { + "id": "0x75c55eda2c37c47eaf1db8b500171f72f23dc5b16404e904866a6ad1b3a3e537", + "tvlUSD": 208654, + "tvlETH": 45.46 + } + ] + } + ], + "8453": [ + { + "address": "0x0010d0d5db05933fa0d9f7038d365e1541a41888", + "name": "Bunni Hook v1.0 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", + "tvlUSD": 32813, + "tvlETH": 7.15 + } + ] + }, + { + "address": "0x0000da5dcd7ec49d6ca5554f7b1ca1ce33fa1888", + "name": "Bunni Hook v1.1 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on Base", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xbb10cb59b736ab186d8a17d8459bf93503cf820f701884e0154c429057bd7227", + "tvlUSD": 0, + "tvlETH": 0 }, - "hookStatsAddress": "", - "pools": [] - } - ], - "130": [ - { - "address": "0x0000fe59823933ac763611a69c88f91d45f81888", - "name": "Bunni Hook v1.1.1 on Unichain", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 + { + "id": "0x6dbb5d653f8e11f406adf38091138546f70bc352ccf1115983520d1fe4284449", + "tvlUSD": 0, + "tvlETH": 0 }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x38eeae8c6d1c205eff7c18ca631c9c65afa357e83fa130ec215aff81741d2408", - "tvlUSD": 30, - "tvlETH": 0.01 - } - ] - }, - { - "address": "0x005af73a245d8171a0550ffae2631f12cc211888", - "name": "Bunni Hook v1.2.0 on Unichain", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 2, - "patch": 0 + { + "id": "0x153695fdc96c0a3152b166ed2183c61268bb94e81aa21f1fde4304e277c49755", + "tvlUSD": 16816, + "tvlETH": 3.66 }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xeec51c6b1a9e7c4bb4fc4fa9a02fc4fff3fe94efd044f895d98b5bfbd2ff9433", - "tvlUSD": 28813605, - "tvlETH": 6278.38 - } - ] + { + "id": "0xdea704e5d90cec9defc31ce88a1d06033fd7a02297fd5852ac103027e30134cb", + "tvlUSD": 22654, + "tvlETH": 4.94 + } + ] + } + ], + "56": [ + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on BNB", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on BNB", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "130": [ + { + "address": "0x0000fe59823933ac763611a69c88f91d45f81888", + "name": "Bunni Hook v1.1.1 on Unichain", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x38eeae8c6d1c205eff7c18ca631c9c65afa357e83fa130ec215aff81741d2408", + "tvlUSD": 30, + "tvlETH": 0.01 + } + ] + }, + { + "address": "0x005af73a245d8171a0550ffae2631f12cc211888", + "name": "Bunni Hook v1.2.0 on Unichain", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xeec51c6b1a9e7c4bb4fc4fa9a02fc4fff3fe94efd044f895d98b5bfbd2ff9433", + "tvlUSD": 28813605, + "tvlETH": 6278.38 + } + ] + }, + { + "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", + "name": "Bunni Hook v1.2.1 on Unichain", + "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", + "audit": "", + "version": { + "major": 1, + "minor": 2, + "patch": 1 }, - { - "address": "0x000052423c1db6b7ff8641b85a7eefc7b2791888", - "name": "Bunni Hook v1.2.1 on Unichain", - "description": "A multi purpose hook including dynamic fees, rehypothecation, liquidity density functions, autonomous rebalancing, and more", - "audit": "", - "version": { - "major": 1, - "minor": 2, - "patch": 1 + "hookStatsAddress": "", + "pools": [ + { + "id": "0x6923777072439713c7b8ab34903e0ea96078d7148449bf54f420320d59ede857", + "tvlUSD": 13395486, + "tvlETH": 2918.83 }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x6923777072439713c7b8ab34903e0ea96078d7148449bf54f420320d59ede857", - "tvlUSD": 13395486, - "tvlETH": 2918.83 - }, - { - "id": "0x39bd03115d5482eefbf43b1f3f3c48188f32bcb09b43fd4722f4c86d399e282a", - "tvlUSD": 106, - "tvlETH": 0.02 - } - ] - } - ] - } + { + "id": "0x39bd03115d5482eefbf43b1f3f3c48188f32bcb09b43fd4722f4c86d399e282a", + "tvlUSD": 106, + "tvlETH": 0.02 + } + ] + } + ] } +} diff --git a/lib/util/hooks/prod/clanker.json b/lib/util/hooks/prod/clanker.json index a0b0186e97..a3ea2a4a56 100644 --- a/lib/util/hooks/prod/clanker.json +++ b/lib/util/hooks/prod/clanker.json @@ -1,174 +1,172 @@ { - "name": "Clanker Hooklist", - "timestamp": "2025-10-08T22:28:00+00:00", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "keywords": [ - "Clanker" + "name": "Clanker Hooklist", + "timestamp": "2025-10-08T22:28:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": ["Clanker"], + "description": "Clanker static and dynamic fee hooks for token launching", + "logoURI": "https://www.clanker.world/logo_circle.png", + "chains": { + "8453": [ + { + "address": "0x34a45c6b61876d739400bd71228cbcbd4f53e8cc", + "name": "Clanker Dynamic Fee Hook on Base", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x15ddaf96b657ff1a7815670d4945164d71c7f0b3387124df662d99e5ce33dbde", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xdd5eeaff7bd481ad55db083062b13a3cdf0a68cc", + "name": "Clanker Static Fee Hook on Base", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x82b4518a84dbec4f49ebffc1e01274ecc1f3e16c42e49fb39d96f9224df74957", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xd60d6b218116cfd801e28f78d011a203d2b068cc", + "name": "Clanker Dynamic Fee Hook on Base - v2", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "", + "version": { + "major": 2, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x525d8e2619c2a9f8c12240c469c194e0a3099126c2f3a6aa56c9590dd8174592", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xb429d62f8f3bffb98cdb9569533ea23bf0ba28cc", + "name": "Clanker Static Fee Hook on Base - v2", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "", + "version": { + "major": 2, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x53fdb765a953dadb6123c01b4d5a099d67e0f6ac83aa7c5a4f03c43cf63e56df", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } ], - "description": "Clanker static and dynamic fee hooks for token launching", - "logoURI": "https://www.clanker.world/logo_circle.png", - "chains": { - "8453": [ - { - "address": "0x34a45c6b61876d739400bd71228cbcbd4f53e8cc", - "name": "Clanker Dynamic Fee Hook on Base", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x15ddaf96b657ff1a7815670d4945164d71c7f0b3387124df662d99e5ce33dbde", - "tvlUSD":0, - "tvlETH":0 - } - ] + "42161": [ + { + "address": "0xfd213be7883db36e1049dc42f5bd6a0ec66b68cc", + "name": "Clanker Dynamic Fee Hook on Arbitrum", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0xdd5eeaff7bd481ad55db083062b13a3cdf0a68cc", - "name": "Clanker Static Fee Hook on Base", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x82b4518a84dbec4f49ebffc1e01274ecc1f3e16c42e49fb39d96f9224df74957", - "tvlUSD":0, - "tvlETH":0 - } - ] - }, + "hookStatsAddress": "", + "pools": [ { - "address": "0xd60d6b218116cfd801e28f78d011a203d2b068cc", - "name": "Clanker Dynamic Fee Hook on Base - v2", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "", - "version": { - "major": 2, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x525d8e2619c2a9f8c12240c469c194e0a3099126c2f3a6aa56c9590dd8174592", - "tvlUSD":0, - "tvlETH":0 - } - ] - }, + "id": "0x70b7962b63b7fe4b5da331d3173f7e1a4f223f09499dc056018f93c9dfa0667e", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xf7ac669593d2d9d01026fa5b756dd5b4f7aaa8cc", + "name": "Clanker Static Fee Hook on Arbitrum", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ { - "address": "0xb429d62f8f3bffb98cdb9569533ea23bf0ba28cc", - "name": "Clanker Static Fee Hook on Base - v2", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "", - "version": { - "major": 2, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x53fdb765a953dadb6123c01b4d5a099d67e0f6ac83aa7c5a4f03c43cf63e56df", - "tvlUSD":0, - "tvlETH":0 - } - ] - } - ], - "42161": [ - { - "address": "0xfd213be7883db36e1049dc42f5bd6a0ec66b68cc", - "name": "Clanker Dynamic Fee Hook on Arbitrum", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x70b7962b63b7fe4b5da331d3173f7e1a4f223f09499dc056018f93c9dfa0667e", - "tvlUSD":0, - "tvlETH":0 - } - ] - }, + "id": "0x32eccafdb852eaedba8456e371dea6bf6f6156b7c3d4ba89ea923c1ce8dc4d68", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ], + "130": [ + { + "address": "0x9b37a43422d7bbd4c8b231be11e50ad1ace828cc", + "name": "Clanker Dynamic Fee Hook on Unichain", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ { - "address": "0xf7ac669593d2d9d01026fa5b756dd5b4f7aaa8cc", - "name": "Clanker Static Fee Hook on Arbitrum", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x32eccafdb852eaedba8456e371dea6bf6f6156b7c3d4ba89ea923c1ce8dc4d68", - "tvlUSD":0, - "tvlETH":0 - } - ] - } - ], - "130": [ - { - "address": "0x9b37a43422d7bbd4c8b231be11e50ad1ace828cc", - "name": "Clanker Dynamic Fee Hook on Unichain", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x656d6be9fc559c9bc8dd165556b5ca2bdc1157a717ac4fd6e54ed23757c5669d", - "tvlUSD":0, - "tvlETH":0 - } - ] - }, + "id": "0x656d6be9fc559c9bc8dd165556b5ca2bdc1157a717ac4fd6e54ed23757c5669d", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xbc6e5abda425309c2534bc2bc92562f5419ce8cc", + "name": "Clanker Static Fee Hook on Unichain", + "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", + "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ { - "address": "0xbc6e5abda425309c2534bc2bc92562f5419ce8cc", - "name": "Clanker Static Fee Hook on Unichain", - "description": "Integrates with Clanker's v4 token launchpad to facilitate automatic fee claiming, Clanker protocol fee, per-chain mev games, and user controlled fee customization.", - "audit": "https://cantina.xyz/portfolio/e4db23cd-f46d-4d99-adca-a60941b44f65", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools":[ - { - "id":"0x5fe1d0744945cc9019178b6c779c1d83701ff4e09e1e1e2c3ac6c0097ffa36c0", - "tvlUSD":0, - "tvlETH":0 - } - ] - } - ] - } - } \ No newline at end of file + "id": "0x5fe1d0744945cc9019178b6c779c1d83701ff4e09e1e1e2c3ac6c0097ffa36c0", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ] + } +} diff --git a/lib/util/hooks/prod/flaunch.json b/lib/util/hooks/prod/flaunch.json index 6c0b0fd203..c1b9a18d35 100644 --- a/lib/util/hooks/prod/flaunch.json +++ b/lib/util/hooks/prod/flaunch.json @@ -1,83 +1,81 @@ { - "name": "Flaunch Hooklist", - "timestamp": "2025-10-09T15:05:00+00:00", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "keywords": [ - "Flaunch" - ], - "description": "Flaunch hooks for token launching on Base", - "logoURI": "https://flaunch.gg/_next/image?url=%2Flogo.png&w=96&q=100&dpl=dpl_52G4pnK6czCLFZQsPxMBRzxuSCsH", - "chains": { - "8453": [ - { - "address": "0x9e433f32bb5481a9ca7dff5b3af74a7ed041a888", - "name": "ETH-flETH Auto Wrap Hook on Base", - "description": "Automatic wrapping functionality for ETH and Flaunch ETH (flETH) tokens on Base", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "name": "Flaunch Hooklist", + "timestamp": "2025-10-09T15:05:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": ["Flaunch"], + "description": "Flaunch hooks for token launching on Base", + "logoURI": "https://flaunch.gg/_next/image?url=%2Flogo.png&w=96&q=100&dpl=dpl_52G4pnK6czCLFZQsPxMBRzxuSCsH", + "chains": { + "8453": [ + { + "address": "0x9e433f32bb5481a9ca7dff5b3af74a7ed041a888", + "name": "ETH-flETH Auto Wrap Hook on Base", + "description": "Automatic wrapping functionality for ETH and Flaunch ETH (flETH) tokens on Base", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x51bba15255406cfe7099a42183302640ba7dafdc", - "name": "Flaunch Hook on Base", - "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", - "audit": "https://docs.flaunch.gg/protocol/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x51bba15255406cfe7099a42183302640ba7dafdc", + "name": "Flaunch Hook on Base", + "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0xf785bb58059fab6fb19bdda2cb9078d9e546efdc", - "name": "Flaunch Hook on Base - v1.0.1", - "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", - "audit": "https://docs.flaunch.gg/protocol/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 1 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xf785bb58059fab6fb19bdda2cb9078d9e546efdc", + "name": "Flaunch Hook on Base - v1.0.1", + "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 1 }, - { - "address": "0xb903b0ab7bcee8f5e4d8c9b10a71aac7135d6fdc", - "name": "Flaunch Hook on Base - v1.0.2", - "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", - "audit": "https://docs.flaunch.gg/protocol/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 2 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xb903b0ab7bcee8f5e4d8c9b10a71aac7135d6fdc", + "name": "Flaunch Hook on Base - v1.0.2", + "description": "Flaunch memecoin launchpad liquidity management. Traditional position manager which supports internal buy position to support token buybacks automatically created from fees, internal Swap Pool to ensure that all fees are paid in ETH, rather than the token, and dynamic fee distribution across stakeholders", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 2 }, - { - "address": "0x8dc3b85e1dc1c846ebf3971179a751896842e5dc", - "name": "Flaunch Hook on Base - v1.0.3", - "description": "Flaunch memecoin launchpad liquidity management. Position manager for importing external tokens.", - "audit": "https://docs.flaunch.gg/protocol/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 3 - }, - "hookStatsAddress": "", - "pools": [] - } - ] - } + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x8dc3b85e1dc1c846ebf3971179a751896842e5dc", + "name": "Flaunch Hook on Base - v1.0.3", + "description": "Flaunch memecoin launchpad liquidity management. Position manager for importing external tokens.", + "audit": "https://docs.flaunch.gg/protocol/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 3 + }, + "hookStatsAddress": "", + "pools": [] + } + ] } +} diff --git a/lib/util/hooks/prod/general.json b/lib/util/hooks/prod/general.json index 7160344e41..d9023611cc 100644 --- a/lib/util/hooks/prod/general.json +++ b/lib/util/hooks/prod/general.json @@ -1,257 +1,255 @@ { - "name": "General Hooklist", - "timestamp": "2025-10-09T19:37:00+00:00", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "keywords": [ - "General" + "name": "General Hooklist", + "timestamp": "2025-10-09T19:37:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": ["General"], + "description": "General collection of various hooks for different protocols and functionalities", + "logoURI": "", + "chains": { + "42161": [ + { + "address": "0xc4bf39a096a1b610dd6186935f3ad99c66239080", + "name": "Slippage Fee Hook on Arbitrum", + "description": "Dynamic slippage-based fee adjustment hook for reducing imparement loss incurred by LPers.", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x582387e095a7fbcba58222b6f9f56cc3e6177d766d10dd0d96a70dab70f66be9", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xd73339564ac99f3e09b0ebc80603ff8b796500c0", + "name": "Gamma Limit Order Hook on Arbitrum", + "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", + "audit": "https://docs.gamma.xyz/gamma/learn/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0x015537a47e3865bd59fa4b0feed5546f1b5d27660447dddcdf86808bce384d98", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } ], - "description": "General collection of various hooks for different protocols and functionalities", - "logoURI": "", - "chains": { - "42161": [ - { - "address": "0xc4bf39a096a1b610dd6186935f3ad99c66239080", - "name": "Slippage Fee Hook on Arbitrum", - "description": "Dynamic slippage-based fee adjustment hook for reducing imparement loss incurred by LPers.", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x582387e095a7fbcba58222b6f9f56cc3e6177d766d10dd0d96a70dab70f66be9", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "8453": [ + { + "address": "0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000", + "name": "Graduation Hook", + "description": "", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0xd73339564ac99f3e09b0ebc80603ff8b796500c0", - "name": "Gamma Limit Order Hook on Arbitrum", - "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", - "audit": "https://docs.gamma.xyz/gamma/learn/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x015537a47e3865bd59fa4b0feed5546f1b5d27660447dddcdf86808bce384d98", - "tvlUSD": 0, - "tvlETH": 0 - } - ] - } - ], - "8453": [ - { - "address": "0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000", - "name": "Graduation Hook", - "description": "", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xed1698c29928a6c44cddb0c75ab0e5d47eb72a80", + "name": "Zaha TWAMM Hook", + "description": "Time-Weighted Average Market Maker for large order execution on Base.", + "audit": "https://github.com/akshatmittal/v4-twamm-hook/tree/main/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0xed1698c29928a6c44cddb0c75ab0e5d47eb72a80", - "name": "Zaha TWAMM Hook", - "description": "Time-Weighted Average Market Maker for large order execution on Base.", - "audit": "https://github.com/akshatmittal/v4-twamm-hook/tree/main/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x8e91947e425341e3ec516628c32340f680656c8569a065d51388553eb328b560", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x8e91947e425341e3ec516628c32340f680656c8569a065d51388553eb328b560", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x5cd525c621afca515bf58631d4733fba7b72aae4", + "name": "Coinbase Verified Hook on Base", + "description": "Hook to only allow swapping by Coinbase verified wallets.", + "audit": "https://docs.verifiedpools.com/security/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x5cd525c621afca515bf58631d4733fba7b72aae4", - "name": "Coinbase Verified Hook on Base", - "description": "Hook to only allow swapping by Coinbase verified wallets.", - "audit": "https://docs.verifiedpools.com/security/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x704268ac7043aeef50f47b6a03ae68ccf808e044", + "name": "BtcAcc", + "description": "btc/acc is a protocol that helps you automatically accumulate Bitcoin while trading. Instead of losing all your profits in memecoins, btc/acc ensures you're building a position in Bitcoin over time. The hook can be attached to any token pair on Uniswap v4 and takes 1% of each trade on behalf of the swapper, buys them Bitcoin, and deposits it in the protocol.", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x704268ac7043aeef50f47b6a03ae68ccf808e044", - "name": "BtcAcc", - "description": "btc/acc is a protocol that helps you automatically accumulate Bitcoin while trading. Instead of losing all your profits in memecoins, btc/acc ensures you're building a position in Bitcoin over time. The hook can be attached to any token pair on Uniswap v4 and takes 1% of each trade on behalf of the swapper, buys them Bitcoin, and deposits it in the protocol.", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xbd4f3968b6cd846ee2be64765e0edb3fe1238d3c35d3c5404fc20937b7901230", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0xbd4f3968b6cd846ee2be64765e0edb3fe1238d3c35d3c5404fc20937b7901230", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x77bb2a8f1ab2a384918a4c090cd8ae82dc5078e0", + "name": "Doppler", + "description": "Doppler is a token launchpad utilizing dynamic bonding curves to mitigate sniping for large projects", + "audit": "https://docs.doppler.lol/resources/security-and-bug-bounties", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x77bb2a8f1ab2a384918a4c090cd8ae82dc5078e0", - "name": "Doppler", - "description": "Doppler is a token launchpad utilizing dynamic bonding curves to mitigate sniping for large projects", - "audit": "https://docs.doppler.lol/resources/security-and-bug-bounties", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x9cd78cc37624a69c32bc554d98460f9290bde0a3067583afaa7ec8de0a753ee3", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x9cd78cc37624a69c32bc554d98460f9290bde0a3067583afaa7ec8de0a753ee3", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x9d11f9505ca92f4b6983c1285d1ac0aaff7ec0c0", + "name": "GammaLimit Order Hook on Base", + "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", + "audit": "https://docs.gamma.xyz/gamma/learn/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [ + { + "id": "0xdfb2536ba09a004b32db0a1a15f73676b5e356d831c4ea1e843cd9433b080ab6", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ], + "130": [ + { + "address": "0x09dea99d714a3a19378e3d80d1ad22ca46085080", + "name": "Renzo exLP Dynamic Fee", + "description": "The Renzo ezLP Dynamic Fee hook allows the Uniswap Pool to actively react to market conditions. As the pool price depegs from the exchange rate, fees are increased in a linear fashion when ezETH is sold into the pool (from 0.01% to 1%). This incentivizes market participants to provide liquidity and defend the peg. Buying ezETH from the pool always utilizes the minimum pool fee (0.01%).", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x9d11f9505ca92f4b6983c1285d1ac0aaff7ec0c0", - "name": "GammaLimit Order Hook on Base", - "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", - "audit": "https://docs.gamma.xyz/gamma/learn/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0xdfb2536ba09a004b32db0a1a15f73676b5e356d831c4ea1e843cd9433b080ab6", - "tvlUSD": 0, - "tvlETH": 0 - } - ] - } - ], - "130": [ - { - "address": "0x09dea99d714a3a19378e3d80d1ad22ca46085080", - "name": "Renzo exLP Dynamic Fee", - "description": "The Renzo ezLP Dynamic Fee hook allows the Uniswap Pool to actively react to market conditions. As the pool price depegs from the exchange rate, fees are increased in a linear fashion when ezETH is sold into the pool (from 0.01% to 1%). This incentivizes market participants to provide liquidity and defend the peg. Buying ezETH from the pool always utilizes the minimum pool fee (0.01%).", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x7dbe9918ba991e7c2b078ec8ce882a060024a6126927cf66553a359e427f2f6a", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x7dbe9918ba991e7c2b078ec8ce882a060024a6126927cf66553a359e427f2f6a", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x27bfccf7fdd8215ce5dd86c2a36651d05c8450cc", + "name": "AEGIS Dynamic Fee Hook for Unichain", + "description": "The AEGIS Dynamic Fee Hook implements dynamic fee management and full range liquidity management for Uniswap v4 pools. It manages dynamic fees using a TruncGeoOracleMulti for price feeds, handles full range liquidity provision through a FullRangeLiquidityManager, integrates with a PoolPolicyManager for governance and policy management, and provides automated fee adjustments based on market conditions", + "audit": "https://docs.aegis.markets/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x27bfccf7fdd8215ce5dd86c2a36651d05c8450cc", - "name": "AEGIS Dynamic Fee Hook for Unichain", - "description": "The AEGIS Dynamic Fee Hook implements dynamic fee management and full range liquidity management for Uniswap v4 pools. It manages dynamic fees using a TruncGeoOracleMulti for price feeds, handles full range liquidity provision through a FullRangeLiquidityManager, integrates with a PoolPolicyManager for governance and policy management, and provides automated fee adjustments based on market conditions", - "audit": "https://docs.aegis.markets/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x0e3a702c43b613fe8c635e375ca4f0b8d4870526c1e6f795d379f0fb6041ed91", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x0e3a702c43b613fe8c635e375ca4f0b8d4870526c1e6f795d379f0fb6041ed91", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xa0b0d2d00fd544d8e0887f1a3cedd6e24baf10cc", + "name": "AEGIS Dynamic Fee Hook for Unichain - v1.1", + "description": "The AEGIS Dynamic Fee Hook implements dynamic fee management and full range liquidity management for Uniswap v4 pools. It manages dynamic fees using a TruncGeoOracleMulti for price feeds, handles full range liquidity provision through a FullRangeLiquidityManager, integrates with a PoolPolicyManager for governance and policy management, and provides automated fee adjustments based on market conditions", + "audit": "https://docs.aegis.markets/audits", + "version": { + "major": 1, + "minor": 1, + "patch": 0 }, - { - "address": "0xa0b0d2d00fd544d8e0887f1a3cedd6e24baf10cc", - "name": "AEGIS Dynamic Fee Hook for Unichain - v1.1", - "description": "The AEGIS Dynamic Fee Hook implements dynamic fee management and full range liquidity management for Uniswap v4 pools. It manages dynamic fees using a TruncGeoOracleMulti for price feeds, handles full range liquidity provision through a FullRangeLiquidityManager, integrates with a PoolPolicyManager for governance and policy management, and provides automated fee adjustments based on market conditions", - "audit": "https://docs.aegis.markets/audits", - "version": { - "major": 1, - "minor": 1, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x410723c1949069324d0f6013dba28829c4a0562f7c81d0f7cb79ded668691e1f", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x410723c1949069324d0f6013dba28829c4a0562f7c81d0f7cb79ded668691e1f", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x2016c0e4f8bb1d6fea777dc791be919e2eda40c0", + "name": "Gamma Limit Order Hook on Unichain", + "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", + "audit": "https://docs.gamma.xyz/gamma/learn/audits", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x2016c0e4f8bb1d6fea777dc791be919e2eda40c0", - "name": "Gamma Limit Order Hook on Unichain", - "description": "The Gamma Limit Order Hook system is a comprehensive limit order system for Uniswap V4 pools, enabling single-tick limit orders and scale orders that execute autonomously through swap hooks. It is a decentralized limit order book built exclusively on Uniswap V4. Limit orders are single-tick liquidity positions that are automatically executed through afterSwap hooks.", - "audit": "https://docs.gamma.xyz/gamma/learn/audits", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x2289791ab3c4a90c741427c52ea9411ba13bf8184c0b7bae4fea26262f400357", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x2289791ab3c4a90c741427c52ea9411ba13bf8184c0b7bae4fea26262f400357", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x79330fe369c32a03e3b8516aff35b44706e39080", + "name": "Panoptic Oracle Hook on Unichain", + "description": "This hook records and exposes both standard and truncated Uniswap V3-like price observations for Uniswap V4 pools. Additionally, adapter contracts are deployed upon pool creation to allow for use as a drop-in replacement to the Uniswap V3 oracle in protocols leveraging that information. ", + "audit": "https://blog.openzeppelin.com/v3styleoraclehook-audit?hs_preview=hmquOpll-190369323392", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x79330fe369c32a03e3b8516aff35b44706e39080", - "name": "Panoptic Oracle Hook on Unichain", - "description": "This hook records and exposes both standard and truncated Uniswap V3-like price observations for Uniswap V4 pools. Additionally, adapter contracts are deployed upon pool creation to allow for use as a drop-in replacement to the Uniswap V3 oracle in protocols leveraging that information. ", - "audit": "https://blog.openzeppelin.com/v3styleoraclehook-audit?hs_preview=hmquOpll-190369323392", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [ - { - "id": "0x348860e4565d7e3eb53af800a8931b1465a7540cdb5fa7f4dfd1e4d0bb2aa7f8", - "tvlUSD": 0, - "tvlETH": 0 - } - ] - } - ] - } + "hookStatsAddress": "", + "pools": [ + { + "id": "0x348860e4565d7e3eb53af800a8931b1465a7540cdb5fa7f4dfd1e4d0bb2aa7f8", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + } + ] } +} diff --git a/lib/util/hooks/prod/uniswap.json b/lib/util/hooks/prod/uniswap.json index 8e19f1dd2f..4d58397d7d 100644 --- a/lib/util/hooks/prod/uniswap.json +++ b/lib/util/hooks/prod/uniswap.json @@ -1,107 +1,104 @@ { - "name": "Uniswap WETH Hooklist", - "timestamp": "2025-10-09T19:17:00+00:00", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "keywords": [ - "Uniswap", - "WETH" + "name": "Uniswap WETH Hooklist", + "timestamp": "2025-10-09T19:17:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": ["Uniswap", "WETH"], + "description": "Uniswap WETH hooks for native ETH and WETH wrapping/unwrapping functionality", + "logoURI": "https://app.uniswap.org/favicon.ico", + "chains": { + "1": [ + { + "address": "0x57991106cb7aa27e2771beda0d6522f68524a888", + "name": "WETH Hook on Mainnet", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Ethereum mainnet", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } ], - "description": "Uniswap WETH hooks for native ETH and WETH wrapping/unwrapping functionality", - "logoURI": "https://app.uniswap.org/favicon.ico", - "chains": { - "1": [ - { - "address": "0x57991106cb7aa27e2771beda0d6522f68524a888", - "name": "WETH Hook on Mainnet", - "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Ethereum mainnet", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] - } - ], - "10": [ - { - "address": "0x480dafdb4d6092ef3217595b75784ec54b52e888", - "name": "WETH Hook on Optimism", - "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Optimism", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] - } - ], - "42161": [ - { - "address": "0x2a4adf825bd96598487dbb6b2d8d882a4eb86888", - "name": "WETH Hook on Arbitrum", - "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Arbitrum", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] - } - ], - "8453": [ - { - "address": "0xb08211d57032dd10b1974d4b876851a7f7596888", - "name": "WETH Hook on Base", - "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Base", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] - } - ], - "130": [ - { - "address": "0x730b109bad65152c67ecc94eb8b0968603dba888", - "name": "WETH Hook on Unichain", - "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Unichain", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] - } - ], - "11155111": [ - { - "address": "0x0000000000000000000000000000000000000020", - "name": "Extra Hook on Sepolia", - "description": "General purpose hook for testing and development on Sepolia testnet", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] - } - ] - } + "10": [ + { + "address": "0x480dafdb4d6092ef3217595b75784ec54b52e888", + "name": "WETH Hook on Optimism", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Optimism", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "42161": [ + { + "address": "0x2a4adf825bd96598487dbb6b2d8d882a4eb86888", + "name": "WETH Hook on Arbitrum", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Arbitrum", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "8453": [ + { + "address": "0xb08211d57032dd10b1974d4b876851a7f7596888", + "name": "WETH Hook on Base", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Base", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "130": [ + { + "address": "0x730b109bad65152c67ecc94eb8b0968603dba888", + "name": "WETH Hook on Unichain", + "description": "Uniswap WETH hook for seamless ETH/WETH wrapping and unwrapping on Unichain", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ], + "11155111": [ + { + "address": "0x0000000000000000000000000000000000000020", + "name": "Extra Hook on Sepolia", + "description": "General purpose hook for testing and development on Sepolia testnet", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "hookStatsAddress": "", + "pools": [] + } + ] } +} diff --git a/lib/util/hooks/prod/zora.json b/lib/util/hooks/prod/zora.json index f83a7de32e..b89b9c1589 100644 --- a/lib/util/hooks/prod/zora.json +++ b/lib/util/hooks/prod/zora.json @@ -1,237 +1,235 @@ { - "name": "Zora Hooklist", - "timestamp": "2025-10-09T18:42:00+00:00", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "keywords": [ - "Zora" - ], - "description": "Zora Creator and Post hooks for NFT creation and social interactions on Base", - "logoURI": "https://zora.co/assets/favicon/apple-touch-icon.png", - "chains": { - "8453": [ - { - "address": "0xfbce3d80c659c765bc6c55e29e87d839c7609040", - "name": "Zora Creator Hook on Base", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "name": "Zora Hooklist", + "timestamp": "2025-10-09T18:42:00+00:00", + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "keywords": ["Zora"], + "description": "Zora Creator and Post hooks for NFT creation and social interactions on Base", + "logoURI": "https://zora.co/assets/favicon/apple-touch-icon.png", + "chains": { + "8453": [ + { + "address": "0xfbce3d80c659c765bc6c55e29e87d839c7609040", + "name": "Zora Creator Hook on Base", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x854f820475b229b7805a386f758cfb285023d040", - "name": "Zora Creator Hook on Base - v1.0.0", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x854f820475b229b7805a386f758cfb285023d040", + "name": "Zora Creator Hook on Base - v1.0.0", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x9301690be9ac901de52c5ebff883862bbfc99040", - "name": "Zora Creator Hook on Base - v1.1.1", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress": "", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x9301690be9ac901de52c5ebff883862bbfc99040", + "name": "Zora Creator Hook on Base - v1.1.1", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 }, - { - "address": "0x5e5d19d22c85a4aef7c1fdf25fb22a5a38f71040", - "name": "Zora Creator Hook on Base - v1.1.1", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress":"", - "pools": [ - { - "id": "0xc42d1a19441f4d29e1e87533958cf0afe16c9cc6ef3e2ce5ff67c3f291555fa0", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x5e5d19d22c85a4aef7c1fdf25fb22a5a38f71040", + "name": "Zora Creator Hook on Base - v1.1.1", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 }, - { - "address": "0xd61a675f8a0c67a73dc3b54fb7318b4d91409040", - "name": "Zora Creator Hook on Base - v1.1.2", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 2 - }, - "hookStatsAddress":"", - "pools": [ - { - "id": "0xd1c0665cb7cc9168b64f9d13099b5e72b26d18bbf984fe66df4c34326f50fec2", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0xc42d1a19441f4d29e1e87533958cf0afe16c9cc6ef3e2ce5ff67c3f291555fa0", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xd61a675f8a0c67a73dc3b54fb7318b4d91409040", + "name": "Zora Creator Hook on Base - v1.1.2", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 2 }, - { - "address": "0x8218fa8d7922e22aed3556a09d5a715f16ad5040", - "name": "Zora Creator Hook on Base - v2.2", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 2, - "minor": 2, - "patch": 0 - }, - "hookStatsAddress":"", - "pools": [ - { - "id": "0x8da3f098fae427a9aa3647f3e81798c61897f3bf67d100a270c00198b1771a4c", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [ + { + "id": "0xd1c0665cb7cc9168b64f9d13099b5e72b26d18bbf984fe66df4c34326f50fec2", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x8218fa8d7922e22aed3556a09d5a715f16ad5040", + "name": "Zora Creator Hook on Base - v2.2", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 0 }, - { - "address": "0x1258e5f3c71ca9dce95ce734ba5759532e46d040", - "name": "Zora Creator Hook on Base - v2.2.1", - "description": "Zora Creator Hook for NFT creation and minting functionality", - "audit": "", - "version": { - "major": 2, - "minor": 2, - "patch": 1 - }, - "hookStatsAddress":"", - "pools": [] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x8da3f098fae427a9aa3647f3e81798c61897f3bf67d100a270c00198b1771a4c", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0x1258e5f3c71ca9dce95ce734ba5759532e46d040", + "name": "Zora Creator Hook on Base - v2.2.1", + "description": "Zora Creator Hook for NFT creation and minting functionality", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 1 }, - { - "address": "0xa1ebdd5ca6470bbd67114331387f2dda7bfad040", - "name": "Zora Post Hook on Base", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress": null, - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xa1ebdd5ca6470bbd67114331387f2dda7bfad040", + "name": "Zora Post Hook on Base", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0xb030fd8c2f8576f8ab05cfbbe659285e7d7a1040", - "name": "Zora Post Hook on Base - v1.0.0", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools": [] + "hookStatsAddress": null, + "pools": [] + }, + { + "address": "0xb030fd8c2f8576f8ab05cfbbe659285e7d7a1040", + "name": "Zora Post Hook on Base - v1.0.0", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0xe61bdf0c9e665f02df20fede6dcef379cb751040", - "name": "Zora Post Hook on Base - v1.0.0", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 1, - "minor": 0, - "patch": 0 - }, - "hookStatsAddress":"", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0xe61bdf0c9e665f02df20fede6dcef379cb751040", + "name": "Zora Post Hook on Base - v1.0.0", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 0, + "patch": 0 }, - { - "address": "0x81542dc43aff247eff4a0ecefc286a2973ae1040", - "name": "Zora Post Hook on Base - v1.1.1", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress":"", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x81542dc43aff247eff4a0ecefc286a2973ae1040", + "name": "Zora Post Hook on Base - v1.1.1", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 }, - { - "address": "0x5bf219b3cc11e3f6dd8dc8fc89d7d1deb0431040", - "name": "Zora Post Hook on Base - v1.1.1", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 1 - }, - "hookStatsAddress":"", - "pools": [] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x5bf219b3cc11e3f6dd8dc8fc89d7d1deb0431040", + "name": "Zora Post Hook on Base - v1.1.1", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 1 }, - { - "address": "0x9ea932730a7787000042e34390b8e435dd839040", - "name": "Zora Post Hook on Base - v1.1.2", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 1, - "minor": 1, - "patch": 2 - }, - "hookStatsAddress":"", - "pools": [ - { - "id": "0x36C114F3C641031C837427A8CE7BFCE351FFD6C0ED2F2241BE0F1079E79E3B06", - "tvlUSD": 0, - "tvlETH": 0 - } - ] + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x9ea932730a7787000042e34390b8e435dd839040", + "name": "Zora Post Hook on Base - v1.1.2", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 1, + "minor": 1, + "patch": 2 }, - { - "address": "0xff74be9d3596ea7a33bb4983dd7906fb34135040", - "name": "Zora Post Hook on Base - v2.2", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 2, - "minor": 2, - "patch": 0 - }, - "hookStatsAddress":"", - "pools": [] + "hookStatsAddress": "", + "pools": [ + { + "id": "0x36C114F3C641031C837427A8CE7BFCE351FFD6C0ED2F2241BE0F1079E79E3B06", + "tvlUSD": 0, + "tvlETH": 0 + } + ] + }, + { + "address": "0xff74be9d3596ea7a33bb4983dd7906fb34135040", + "name": "Zora Post Hook on Base - v2.2", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 0 }, - { - "address": "0x2b15a16b3ef024005ba899bb51764fcd58cf9040", - "name": "Zora Post Hook on Base - v2.2.1", - "description": "Zora Post Hook for social interactions and content posting", - "audit": "", - "version": { - "major": 2, - "minor": 2, - "patch": 1 - }, - "hookStatsAddress":"", - "pools": [] - } - ] - } + "hookStatsAddress": "", + "pools": [] + }, + { + "address": "0x2b15a16b3ef024005ba899bb51764fcd58cf9040", + "name": "Zora Post Hook on Base - v2.2.1", + "description": "Zora Post Hook for social interactions and content posting", + "audit": "", + "version": { + "major": 2, + "minor": 2, + "patch": 1 + }, + "hookStatsAddress": "", + "pools": [] + } + ] } +} diff --git a/lib/util/hooksAddressesAllowlist.ts b/lib/util/hooksAddressesAllowlist.ts index c6a6bd7b8b..7f15bf2272 100644 --- a/lib/util/hooksAddressesAllowlist.ts +++ b/lib/util/hooksAddressesAllowlist.ts @@ -52,8 +52,8 @@ function loadAllHookFiles(): HookFile[] { const hookFiles: HookFile[] = [] try { - const files = fs.readdirSync(hooksDir).filter(file => file.endsWith('.json')) - + const files = fs.readdirSync(hooksDir).filter((file) => file.endsWith('.json')) + for (const file of files) { try { const filePath = path.join(hooksDir, file) @@ -77,7 +77,7 @@ function buildHooksAllowlist(): { [chain in ChainId]: Array } { const addressZeroMetadata: HookMetadata = { address: ADDRESS_ZERO, name: 'No Hook (Regular Pool)', - keywords: [] + keywords: [], } const allowlist: { [chain in ChainId]: Array } = { @@ -118,19 +118,19 @@ function buildHooksAllowlist(): { [chain in ChainId]: Array } { for (const hookFile of hookFiles) { for (const [chainIdString, hooks] of Object.entries(hookFile.chains)) { const chainId = parseInt(chainIdString) as ChainId - + if (allowlist[chainId]) { for (const hook of hooks) { const hookAddress = hook.address.toLowerCase() - + // Check if this hook address is already in the allowlist - const existingHook = allowlist[chainId].find(item => item.address === hookAddress) - + const existingHook = allowlist[chainId].find((item) => item.address === hookAddress) + if (!existingHook) { allowlist[chainId].push({ address: hookAddress, name: hook.name, - keywords: hookFile.keywords || [] + keywords: hookFile.keywords || [], }) } } @@ -166,4 +166,4 @@ function buildHookPoolsList(): PoolEntry[] { } export const HOOKS_ADDRESSES_ALLOWLIST: { [chain in ChainId]: Array } = buildHooksAllowlist() -export const HOOK_POOLS_DATA: PoolEntry[] = buildHookPoolsList() \ No newline at end of file +export const HOOK_POOLS_DATA: PoolEntry[] = buildHookPoolsList() diff --git a/lib/util/v4HooksPoolsFiltering.ts b/lib/util/v4HooksPoolsFiltering.ts index 04290b384d..7e87b93bd5 100644 --- a/lib/util/v4HooksPoolsFiltering.ts +++ b/lib/util/v4HooksPoolsFiltering.ts @@ -90,11 +90,15 @@ export function v4HooksPoolsFiltering(chainId: ChainId, pools: Array poolData.id.toLowerCase() === pool.id.toLowerCase() - ) - - if (hookPoolData && hookPoolData.tvlUSD && hookPoolData.tvlUSD > 0 && hookPoolData.tvlETH && hookPoolData.tvlETH > 0) { + const hookPoolData = HOOK_POOLS_DATA.find((poolData) => poolData.id.toLowerCase() === pool.id.toLowerCase()) + + if ( + hookPoolData && + hookPoolData.tvlUSD && + hookPoolData.tvlUSD > 0 && + hookPoolData.tvlETH && + hookPoolData.tvlETH > 0 + ) { pool.tvlETH = hookPoolData.tvlETH pool.tvlUSD = hookPoolData.tvlUSD log.info(`Setting TVL for pool ${pool.id}: $${hookPoolData.tvlUSD}, ${hookPoolData.tvlETH} ETH`) @@ -104,13 +108,12 @@ export function v4HooksPoolsFiltering(chainId: ChainId, pools: Array - item.address === pool.hooks.toLowerCase() - ) - - const isZoraPool = chainId === ChainId.BASE && - hookMetadata && - hookMetadata.keywords.some(keyword => keyword.toLowerCase().includes('zora')) + const hookMetadata = HOOKS_ADDRESSES_ALLOWLIST[chainId].find((item) => item.address === pool.hooks.toLowerCase()) + + const isZoraPool = + chainId === ChainId.BASE && + hookMetadata && + hookMetadata.keywords.some((keyword) => keyword.toLowerCase().includes('zora')) if (isZoraPool) { if (pool.tvlETH <= 0.001) { shouldNotAddV4Pool = true From f1066f9f6196352f77c9f63466e5f1686fa459cb Mon Sep 17 00:00:00 2001 From: Alex Francisci Date: Fri, 10 Oct 2025 14:57:56 -0400 Subject: [PATCH 4/5] refactoring the pool list for reuse in the cached pools --- lib/cron/cache-pools.ts | 217 +----------------- lib/util/hooks/prod/bunni.json | 340 ++++++++++++++++++++++++++-- lib/util/hooks/prod/general.json | 63 +++++- lib/util/hooks/prod/uniswap.json | 115 +++++++++- lib/util/hooksAddressesAllowlist.ts | 67 +++++- lib/util/v4HooksPoolsFiltering.ts | 4 +- 6 files changed, 565 insertions(+), 241 deletions(-) diff --git a/lib/cron/cache-pools.ts b/lib/cron/cache-pools.ts index 60ef9bd98f..8ca37b3488 100644 --- a/lib/cron/cache-pools.ts +++ b/lib/cron/cache-pools.ts @@ -25,7 +25,7 @@ import { metricScope } from 'aws-embedded-metrics' import * as zlib from 'zlib' import dotenv from 'dotenv' import { v4HooksPoolsFiltering } from '../util/v4HooksPoolsFiltering' -import { BUNNI_POOLS_CONFIG } from '../util/bunni-pools' +import { HOOK_POOLS_DATA } from '../util/hooksAddressesAllowlist' // Needed for local stack dev, not needed for staging or prod // But it still doesn't work on the local cdk stack update, @@ -230,71 +230,17 @@ const handler: ScheduledHandler = metricScope((metrics) => async (event: EventBr } if (protocol === Protocol.V4) { - const manuallyIncludedV4Pools: V4SubgraphPool[] = [ - { - id: '0xe9eeab9794c33dff3dd8d0951cbe2d36619294af5a3a329f38f91f54be0b6d34', - feeTier: '10000', - tickSpacing: '200', - hooks: '0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000', - liquidity: '274563705100803912362733', - token0: { - symbol: 'fid:385955', - id: '0x112cf1cc540eadf234158c0e4044c3b5f2a33e5e', - name: 'degenfans', - decimals: '18', - }, - token1: { - symbol: 'MOXIE', - id: '0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527', - name: 'Moxie', - decimals: '18', - }, - tvlETH: 25.33120577965346308313185954009482, - tvlUSD: 56627.5525783346590219799350683533, - } as V4SubgraphPool, - { - id: '0x6bac01f0a8fb96eeb56e37506f210628714561113c748d43c6de50dc339edfe9', - feeTier: '10000', - tickSpacing: '200', - hooks: '0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000', - liquidity: '621568112474979678301274', - token0: { - symbol: 'base-economy', - id: '0x125490489a27d541e39813c08d260debac071bb7', - name: 'Base Economy', - decimals: '18', - }, - token1: { - symbol: 'MOXIE', - id: '0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527', - name: 'Moxie', - decimals: '18', - }, - tvlETH: 142.7576163222032969740638595951846, - tvlUSD: 316322.6881520965844428159264274397, - } as V4SubgraphPool, - { - id: '0x31781e65a4bd9ff0161e660f7930beee16026f819cd4d0bc7e17f6c78c29fc27', - feeTier: '10000', - tickSpacing: '200', - hooks: '0xc5a48b447f01e9ce3ede71e4c1c2038c38bd9000', - liquidity: '482843960670027606548690', - token0: { - symbol: 'fid:444067', - id: '0x15148da22518e40e0d2fabf5d5e6a22269ebcb30', - name: 'macster', - decimals: '18', - }, - token1: { - symbol: 'MOXIE', - id: '0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527', - name: 'Moxie', - decimals: '18', - }, - tvlETH: 44.1795925485023741879813651641809, - tvlUSD: 95050.95363442908526427214106054717, - } as V4SubgraphPool, - ] + // Add all pools which are included in HookLists and have all required V4SubgraphPool fields + const manuallyIncludedV4Pools: V4SubgraphPool[] = HOOK_POOLS_DATA.filter((poolData) => + poolData.feeTier && + poolData.tickSpacing && + poolData.hooks && + poolData.liquidity && + poolData.token0 && + poolData.token1 && + poolData.tvlETH !== undefined && + poolData.tvlUSD !== undefined + ) as V4SubgraphPool[] if (eulerHooksProvider) { const eulerHooks = await eulerHooksProvider?.getHooks() @@ -322,145 +268,6 @@ const handler: ScheduledHandler = metricScope((metrics) => async (event: EventBr } } - for (const bunniPool of BUNNI_POOLS_CONFIG) { - if (bunniPool.chainId === chainId) { - manuallyIncludedV4Pools.push({ - id: bunniPool.id, - feeTier: bunniPool.feeTier, - tickSpacing: bunniPool.tickSpacing, - hooks: bunniPool.hooks, - liquidity: bunniPool.liquidity, - token0: { - ...bunniPool.token0, - }, - token1: { - ...bunniPool.token1, - }, - tvlETH: bunniPool.tvlETH, - tvlUSD: bunniPool.tvlUSD, - } as V4SubgraphPool) - } - } - - if (chainId === ChainId.UNICHAIN) { - // UNICHAIN ETH/WETH: https://uniscan.xyz/tx/0x935979a7e4a1e3ea92b180009c46242b89a787fb4f2f5799bd53c675d5e0f9fd#eventlog - manuallyIncludedV4Pools.push({ - id: '0xba246b8420b5aeb13e586cd7cbd32279fa7584d7f4cbc9bd356a6bb6200d16a6', - feeTier: '0', - tickSpacing: '1', - hooks: '0x730b109bad65152c67ecc94eb8b0968603dba888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'WETH', - id: '0x4200000000000000000000000000000000000006', - name: 'Wrapped Ether', - decimals: '18', - }, - tvlETH: 33482, - tvlUSD: 60342168, - } as V4SubgraphPool) - } - - if (chainId === ChainId.OPTIMISM) { - // OPTIMISM ETH/WETH: https://optimistic.etherscan.io/tx/0x5f81f2aa19a50a76a94a30d3d2a9540cb3cd8597c94499a50330e4b6acbef5c1#eventlog - manuallyIncludedV4Pools.push({ - id: '0xbf3d38951e485c811bb1fc7025fcd1ef60c15fda4c4163458facb9bedfe26f83', - feeTier: '0', - tickSpacing: '1', - hooks: '0x480dafdb4d6092ef3217595b75784ec54b52e888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'WETH', - id: '0x4200000000000000000000000000000000000006', - name: 'Wrapped Ether', - decimals: '18', - }, - tvlETH: 826, - tvlUSD: 1482475, - } as V4SubgraphPool) - } - - if (chainId === ChainId.BASE) { - // BASE ETH/WETH: https://basescan.org/tx/0x221b6521ee4a19a25a424ecfb36b58b0b68fce7cda106bf4551d1424b0867bcc#eventlog - manuallyIncludedV4Pools.push({ - id: '0xbb2aefc6c55a0464b944c0478869527ba1a537f05f90a1bb82e1196c6e9403e2', - feeTier: '0', - tickSpacing: '1', - hooks: '0xb08211d57032dd10b1974d4b876851a7f7596888', - liquidity: '173747248900', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'Ethereum', - decimals: '18', - }, - token1: { - symbol: 'WETH', - id: '0x4200000000000000000000000000000000000006', - name: 'Wrapped Ether', - decimals: '18', - }, - tvlETH: 6992, - tvlUSD: 12580000, - } as V4SubgraphPool) - } - - if (chainId === ChainId.ARBITRUM_ONE) { - // ARBITRUM ETH/WETH: https://arbiscan.io/tx/0x0b393d141a3770292ae8508626a4443307403b0b958b7d0eff70fca2fb85c106#eventlog - manuallyIncludedV4Pools.push({ - id: '0xc1c777843809a8e77a398fd79ecddcefbdad6a5676003ae2eedf3a33a56589e9', - feeTier: '0', - tickSpacing: '1', - hooks: '0x2a4adf825bd96598487dbb6b2d8d882a4eb86888', - liquidity: '173747248900', - token0: { - id: '0x0000000000000000000000000000000000000000', - }, - token1: { - id: '0x82af49447d8a07e3bd95bd0d56f35241523fbab1', - }, - tvlETH: 23183, - tvlUSD: 41820637, - } as V4SubgraphPool) - } - - if (chainId === ChainId.MAINNET) { - // Mainnet ETH/WETH: https://app.uniswap.org/explore/pools/ethereum/0xf6f2314ac16a878e2bf8ef01ef0a3487e714d397d87f702b9a08603eb3252e92 - manuallyIncludedV4Pools.push({ - id: '0xf6f2314ac16a878e2bf8ef01ef0a3487e714d397d87f702b9a08603eb3252e92', - feeTier: '0', - tickSpacing: '1', - hooks: '0x57991106cb7aa27e2771beda0d6522f68524a888', - liquidity: '482843960670027606548690', - token0: { - symbol: 'ETH', - id: '0x0000000000000000000000000000000000000000', - name: 'ETH', - decimals: '18', - }, - token1: { - symbol: 'WETH', - id: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2', - name: 'WETH', - decimals: '18', - }, - tvlETH: 44000.1795925485023741879813651641809, - tvlUSD: 95050000.95363442908526427214106054717, - } as V4SubgraphPool) - } - manuallyIncludedV4Pools.forEach((pool) => pools.push(pool)) pools = v4HooksPoolsFiltering(chainId, pools as Array) diff --git a/lib/util/hooks/prod/bunni.json b/lib/util/hooks/prod/bunni.json index 9e0b97ee95..06825c7c67 100644 --- a/lib/util/hooks/prod/bunni.json +++ b/lib/util/hooks/prod/bunni.json @@ -26,12 +26,42 @@ { "id": "0x77f73405a72f844e46d26a0bfd6f145c1a45ffcf6e4af5c86811405f29d2e615", "tvlUSD": 1553028, - "tvlETH": 338.4 + "tvlETH": 338.4, + "feeTier": "0", + "tickSpacing": "10", + "liquidity": "173747248900", + "token0": { + "symbol": "USR", + "id": "0x66a1e37c9b0eaddca17d3662d6c05f4decf3e110", + "name": "Resolv USD", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "name": "USD Coin", + "decimals": "6" + } }, { "id": "0x9148f00424c4b40a9ec4b03912f091138e9e91a60980550ed97ed7f9dc998cb5", "tvlUSD": 729657, - "tvlETH": 158.99 + "tvlETH": 158.99, + "feeTier": "1", + "tickSpacing": "60", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "BUNNI", + "id": "0x000000c396558ffbab5ea628f39658bdf61345b3", + "name": "Bunni", + "decimals": "18" + } } ] }, @@ -63,12 +93,42 @@ { "id": "0x68306351b1155f7329bc4428657aa73b8a32e87e916f897b7dcb1328f2ec60a3", "tvlUSD": 3548170, - "tvlETH": 773.13 + "tvlETH": 773.13, + "feeTier": "0", + "tickSpacing": "10", + "liquidity": "173747248900", + "token0": { + "symbol": "USDT", + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "Tether USD", + "decimals": "6" + }, + "token1": { + "symbol": "USDf", + "id": "0xfa2b947eec368f42195f24f36d2af29f7c24cec2", + "name": "Falcon USD", + "decimals": "18" + } }, { "id": "0x00ef227c44fdb9dead9e5249abacfd8236ff375e84f6578e4c64743643a90447", "tvlUSD": 18205, - "tvlETH": 3.97 + "tvlETH": 3.97, + "feeTier": "0", + "tickSpacing": "60", + "liquidity": "173747248900", + "token0": { + "symbol": "BUNNI", + "id": "0x000000c396558ffbab5ea628f39658bdf61345b3", + "name": "Bunni", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "name": "USD Coin", + "decimals": "6" + } } ] }, @@ -87,27 +147,102 @@ { "id": "0xd9f673912e1da331c9e56c5f0dbc7273c0eb684617939a375ec5e227c62d6707", "tvlUSD": 23777373, - "tvlETH": 5181 + "tvlETH": 5181, + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "USDC", + "id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + "name": "USD Coin", + "decimals": "6" + }, + "token1": { + "symbol": "USDT", + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "Tether USD", + "decimals": "6" + } }, { "id": "0xa27d94eb334faeb7e65b2b861d4ea4dc3ddce9bdea10bff37fac9f9f095d2148", "tvlUSD": 169447, - "tvlETH": 36.92 + "tvlETH": 36.92, + "feeTier": "0", + "tickSpacing": "100", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "MET", + "id": "0x2ebd53d035150f328bd754d6dc66b99b0edb89aa", + "name": "MET", + "decimals": "18" + } }, { "id": "0x54ff1fd1d62f3bc6224082ecfdb3190a34e8428611b058ade19ce6c083cb608b", "tvlUSD": 101866, - "tvlETH": 22.2 + "tvlETH": 22.2, + "feeTier": "0", + "tickSpacing": "5", + "liquidity": "173747248900", + "token0": { + "symbol": "USD0++", + "id": "0x35d8949372d46b7a3d5a56006ae77b215fc69bc0", + "name": "USD0 Liquid Bond", + "decimals": "18" + }, + "token1": { + "symbol": "USD0", + "id": "0x73a15fed60bf67631dc6cd7bc5b6e8da8190acf5", + "name": "Usual USD", + "decimals": "18" + } }, { "id": "0x896895226e2cde763d53496363ef5af1d6d60f0df7960d658c1d0c6251db6c66", "tvlUSD": 252320, - "tvlETH": 54.98 + "tvlETH": 54.98, + "feeTier": "0", + "tickSpacing": "10", + "liquidity": "173747248900", + "token0": { + "symbol": "hwHLP", + "id": "0x9fd7466f987fd4c45a5bbde22ed8aba5bc8d72d1", + "name": "hwHLP", + "decimals": "6" + }, + "token1": { + "symbol": "USDT", + "id": "0xdac17f958d2ee523a2206206994597c13d831ec7", + "name": "Tether USD", + "decimals": "6" + } }, { "id": "0xbc472c63afae4d891699e56a0e1ce6b4c7b71a1830494c214a739de06c49384f", "tvlUSD": 52137, - "tvlETH": 11.36 + "tvlETH": 11.36, + "feeTier": "2", + "tickSpacing": "100", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "PRL", + "id": "0x6c0aeceedc55c9d55d8b99216a670d85330941c3", + "name": "Parallel Governance Token", + "decimals": "18" + } } ] } @@ -128,7 +263,22 @@ { "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", "tvlUSD": 30061, - "tvlETH": 6.55 + "tvlETH": 6.55, + "feeTier": "0", + "tickSpacing": "60", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "BUNNI", + "id": "0x000000c396558ffbab5ea628f39658bdf61345b3", + "name": "Bunni", + "decimals": "18" + } } ] }, @@ -173,7 +323,22 @@ { "id": "0x75c55eda2c37c47eaf1db8b500171f72f23dc5b16404e904866a6ad1b3a3e537", "tvlUSD": 208654, - "tvlETH": 45.46 + "tvlETH": 45.46, + "feeTier": "0", + "tickSpacing": "10", + "liquidity": "173747248900", + "token0": { + "symbol": "USND", + "id": "0x4ecf61a6c2fab8a047ceb3b3b263b401763e9d49", + "name": "US Nerite Dollar", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0xaf88d065e77c8cc2239327c5edb3a432268e5831", + "name": "USD Coin", + "decimals": "6" + } } ] } @@ -194,7 +359,22 @@ { "id": "0xc3011ab27d607decdc04ab317585dececaa91de749be8b46accb36e066d8f420", "tvlUSD": 32813, - "tvlETH": 7.15 + "tvlETH": 7.15, + "feeTier": "0", + "tickSpacing": "60", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "BUNNI", + "id": "0x000000c396558ffbab5ea628f39658bdf61345b3", + "name": "Bunni", + "decimals": "18" + } } ] }, @@ -239,22 +419,82 @@ { "id": "0xbb10cb59b736ab186d8a17d8459bf93503cf820f701884e0154c429057bd7227", "tvlUSD": 0, - "tvlETH": 0 + "tvlETH": 0, + "feeTier": "0", + "tickSpacing": "5", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "name": "USD Coin", + "decimals": "6" + } }, { "id": "0x6dbb5d653f8e11f406adf38091138546f70bc352ccf1115983520d1fe4284449", "tvlUSD": 0, - "tvlETH": 0 + "tvlETH": 0, + "feeTier": "1", + "tickSpacing": "5", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "name": "USD Coin", + "decimals": "6" + } }, { "id": "0x153695fdc96c0a3152b166ed2183c61268bb94e81aa21f1fde4304e277c49755", "tvlUSD": 16816, - "tvlETH": 3.66 + "tvlETH": 3.66, + "feeTier": "1", + "tickSpacing": "10", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "name": "USD Coin", + "decimals": "6" + } }, { "id": "0xdea704e5d90cec9defc31ce88a1d06033fd7a02297fd5852ac103027e30134cb", "tvlUSD": 22654, - "tvlETH": 4.94 + "tvlETH": 4.94, + "feeTier": "2", + "tickSpacing": "5", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913", + "name": "USD Coin", + "decimals": "6" + } } ] } @@ -303,7 +543,22 @@ { "id": "0x38eeae8c6d1c205eff7c18ca631c9c65afa357e83fa130ec215aff81741d2408", "tvlUSD": 30, - "tvlETH": 0.01 + "tvlETH": 0.01, + "feeTier": "0", + "tickSpacing": "10", + "liquidity": "173747248900", + "token0": { + "symbol": "USDC", + "id": "0x078d782b760474a361dda0af3839290b0ef57ad6", + "name": "USDC", + "decimals": "6" + }, + "token1": { + "symbol": "USDT", + "id": "0x588ce4f028d8e7b53b687865d6a67b3a54c75518", + "name": "Tether USD", + "decimals": "6" + } } ] }, @@ -322,7 +577,22 @@ { "id": "0xeec51c6b1a9e7c4bb4fc4fa9a02fc4fff3fe94efd044f895d98b5bfbd2ff9433", "tvlUSD": 28813605, - "tvlETH": 6278.38 + "tvlETH": 6278.38, + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "USDC", + "id": "0x078d782b760474a361dda0af3839290b0ef57ad6", + "name": "USDC", + "decimals": "6" + }, + "token1": { + "symbol": "USD₮0", + "id": "0x9151434b16b9763660705744891fa906f660ecc5", + "name": "USD₮0", + "decimals": "6" + } } ] }, @@ -341,12 +611,42 @@ { "id": "0x6923777072439713c7b8ab34903e0ea96078d7148449bf54f420320d59ede857", "tvlUSD": 13395486, - "tvlETH": 2918.83 + "tvlETH": 2918.83, + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "weETH", + "id": "0x7dcc39b4d1c53cb31e1abc0e358b43987fef80f7", + "name": "Wrapped eETH", + "decimals": "18" + } }, { "id": "0x39bd03115d5482eefbf43b1f3f3c48188f32bcb09b43fd4722f4c86d399e282a", "tvlUSD": 106, - "tvlETH": 0.02 + "tvlETH": 0.02, + "feeTier": "0", + "tickSpacing": "5", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "USDC", + "id": "0x078d782b760474a361dda0af3839290b0ef57ad6", + "name": "USDC", + "decimals": "6" + } } ] } diff --git a/lib/util/hooks/prod/general.json b/lib/util/hooks/prod/general.json index d9023611cc..71c5826405 100644 --- a/lib/util/hooks/prod/general.json +++ b/lib/util/hooks/prod/general.json @@ -62,7 +62,68 @@ "patch": 0 }, "hookStatsAddress": "", - "pools": [] + "pools": [ + { + "id": "0xe9eeab9794c33dff3dd8d0951cbe2d36619294af5a3a329f38f91f54be0b6d34", + "feeTier": "10000", + "tickSpacing": "200", + "liquidity": "274563705100803912362733", + "token0": { + "symbol": "fid:385955", + "id": "0x112cf1cc540eadf234158c0e4044c3b5f2a33e5e", + "name": "degenfans", + "decimals": "18" + }, + "token1": { + "symbol": "MOXIE", + "id": "0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527", + "name": "Moxie", + "decimals": "18" + }, + "tvlETH": 25.33120577965346308313185954009482, + "tvlUSD": 56627.5525783346590219799350683533 + }, + { + "id": "0x6bac01f0a8fb96eeb56e37506f210628714561113c748d43c6de50dc339edfe9", + "feeTier": "10000", + "tickSpacing": "200", + "liquidity": "621568112474979678301274", + "token0": { + "symbol": "base-economy", + "id": "0x125490489a27d541e39813c08d260debac071bb7", + "name": "Base Economy", + "decimals": "18" + }, + "token1": { + "symbol": "MOXIE", + "id": "0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527", + "name": "Moxie", + "decimals": "18" + }, + "tvlETH": 142.7576163222032969740638595951846, + "tvlUSD": 316322.6881520965844428159264274397 + }, + { + "id": "0x31781e65a4bd9ff0161e660f7930beee16026f819cd4d0bc7e17f6c78c29fc27", + "feeTier": "10000", + "tickSpacing": "200", + "liquidity": "482843960670027606548690", + "token0": { + "symbol": "fid:444067", + "id": "0x15148da22518e40e0d2fabf5d5e6a22269ebcb30", + "name": "macster", + "decimals": "18" + }, + "token1": { + "symbol": "MOXIE", + "id": "0x8c9037d1ef5c6d1f6816278c7aaf5491d24cd527", + "name": "Moxie", + "decimals": "18" + }, + "tvlETH": 44.1795925485023741879813651641809, + "tvlUSD": 95050.95363442908526427214106054717 + } + ] }, { "address": "0xed1698c29928a6c44cddb0c75ab0e5d47eb72a80", diff --git a/lib/util/hooks/prod/uniswap.json b/lib/util/hooks/prod/uniswap.json index 4d58397d7d..0c109e82c7 100644 --- a/lib/util/hooks/prod/uniswap.json +++ b/lib/util/hooks/prod/uniswap.json @@ -22,7 +22,28 @@ "patch": 0 }, "hookStatsAddress": "", - "pools": [] + "pools": [ + { + "id": "0xf6f2314ac16a878e2bf8ef01ef0a3487e714d397d87f702b9a08603eb3252e92", + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "482843960670027606548690", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "ETH", + "decimals": "18" + }, + "token1": { + "symbol": "WETH", + "id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "name": "WETH", + "decimals": "18" + }, + "tvlETH": 44000.1795925485023741879813651641809, + "tvlUSD": 95050000.95363442908526427214106054717 + } + ] } ], "10": [ @@ -37,7 +58,28 @@ "patch": 0 }, "hookStatsAddress": "", - "pools": [] + "pools": [ + { + "id": "0xbf3d38951e485c811bb1fc7025fcd1ef60c15fda4c4163458facb9bedfe26f83", + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "WETH", + "id": "0x4200000000000000000000000000000000000006", + "name": "Wrapped Ether", + "decimals": "18" + }, + "tvlETH": 826, + "tvlUSD": 1482475 + } + ] } ], "42161": [ @@ -52,7 +94,28 @@ "patch": 0 }, "hookStatsAddress": "", - "pools": [] + "pools": [ + { + "id": "0xc1c777843809a8e77a398fd79ecddcefbdad6a5676003ae2eedf3a33a56589e9", + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "WETH", + "id": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + "name": "Wrapped Ether", + "decimals": "18" + }, + "tvlETH": 23183, + "tvlUSD": 41820637 + } + ] } ], "8453": [ @@ -67,7 +130,28 @@ "patch": 0 }, "hookStatsAddress": "", - "pools": [] + "pools": [ + { + "id": "0xbb2aefc6c55a0464b944c0478869527ba1a537f05f90a1bb82e1196c6e9403e2", + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "WETH", + "id": "0x4200000000000000000000000000000000000006", + "name": "Wrapped Ether", + "decimals": "18" + }, + "tvlETH": 6992, + "tvlUSD": 12580000 + } + ] } ], "130": [ @@ -82,7 +166,28 @@ "patch": 0 }, "hookStatsAddress": "", - "pools": [] + "pools": [ + { + "id": "0xba246b8420b5aeb13e586cd7cbd32279fa7584d7f4cbc9bd356a6bb6200d16a6", + "feeTier": "0", + "tickSpacing": "1", + "liquidity": "173747248900", + "token0": { + "symbol": "ETH", + "id": "0x0000000000000000000000000000000000000000", + "name": "Ethereum", + "decimals": "18" + }, + "token1": { + "symbol": "WETH", + "id": "0x4200000000000000000000000000000000000006", + "name": "Wrapped Ether", + "decimals": "18" + }, + "tvlETH": 33482, + "tvlUSD": 60342168 + } + ] } ], "11155111": [ diff --git a/lib/util/hooksAddressesAllowlist.ts b/lib/util/hooksAddressesAllowlist.ts index 7f15bf2272..d94d972d50 100644 --- a/lib/util/hooksAddressesAllowlist.ts +++ b/lib/util/hooksAddressesAllowlist.ts @@ -4,10 +4,22 @@ import fs from 'fs' import path from 'path' //Expected format of HookList JSON files +interface TokenEntry { + symbol: string + id: string + name: string + decimals: string +} + interface PoolEntry { id: string - tvlUSD: number | null - tvlETH: number | null + tvlUSD?: number + tvlETH?: number + feeTier?: string + tickSpacing?: string + liquidity?: string + token0?: TokenEntry + token1?: TokenEntry } interface HookEntry { @@ -40,7 +52,29 @@ interface HookFile { } } -// A minimized hook metadata object which allows us to carry more useful details into other functions. +// A V4SubgraphPool-compatible interface for pools +interface V4PoolData { + id: string + feeTier?: string + tickSpacing?: string + hooks?: string + liquidity?: string + token0?: { + symbol: string + id: string + name: string + decimals: string + } + token1?: { + symbol: string + id: string + name: string + decimals: string + } + tvlETH?: number + tvlUSD?: number +} + interface HookMetadata { address: string name: string @@ -141,9 +175,9 @@ function buildHooksAllowlist(): { [chain in ChainId]: Array } { return allowlist } -// Create a list of pools for each hook address -function buildHookPoolsList(): PoolEntry[] { - const pools: PoolEntry[] = [] +// Create a list of pools for each hook address in V4SubgraphPool format +function buildHookPoolsList(): V4PoolData[] { + const pools: V4PoolData[] = [] const hookFiles = loadAllHookFiles() @@ -153,8 +187,25 @@ function buildHookPoolsList(): PoolEntry[] { if (hook.pools && hook.pools.length > 0) { for (const pool of hook.pools) { pools.push({ - ...pool, id: pool.id.toLowerCase(), + feeTier: pool.feeTier, + tickSpacing: pool.tickSpacing, + hooks: hook.address.toLowerCase(), + liquidity: pool.liquidity, + token0: pool.token0 ? { + symbol: pool.token0.symbol, + id: pool.token0.id, + name: pool.token0.name, + decimals: pool.token0.decimals, + } : undefined, + token1: pool.token1 ? { + symbol: pool.token1.symbol, + id: pool.token1.id, + name: pool.token1.name, + decimals: pool.token1.decimals, + } : undefined, + tvlETH: pool.tvlETH, + tvlUSD: pool.tvlUSD, }) } } @@ -166,4 +217,4 @@ function buildHookPoolsList(): PoolEntry[] { } export const HOOKS_ADDRESSES_ALLOWLIST: { [chain in ChainId]: Array } = buildHooksAllowlist() -export const HOOK_POOLS_DATA: PoolEntry[] = buildHookPoolsList() +export const HOOK_POOLS_DATA: V4PoolData[] = buildHookPoolsList() diff --git a/lib/util/v4HooksPoolsFiltering.ts b/lib/util/v4HooksPoolsFiltering.ts index 7e87b93bd5..51bc5f836c 100644 --- a/lib/util/v4HooksPoolsFiltering.ts +++ b/lib/util/v4HooksPoolsFiltering.ts @@ -94,9 +94,9 @@ export function v4HooksPoolsFiltering(chainId: ChainId, pools: Array 0 && - hookPoolData.tvlETH && + hookPoolData.tvlETH !== undefined && hookPoolData.tvlETH > 0 ) { pool.tvlETH = hookPoolData.tvlETH From fc5ec780007a804c0553d23e72ab481920e7885e Mon Sep 17 00:00:00 2001 From: Alex Francisci Date: Fri, 10 Oct 2025 15:15:52 -0400 Subject: [PATCH 5/5] prettier cleanup --- lib/cron/cache-pools.ts | 19 ++++++++++--------- lib/util/hooksAddressesAllowlist.ts | 28 ++++++++++++++++------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/lib/cron/cache-pools.ts b/lib/cron/cache-pools.ts index 8ca37b3488..19fe31a8a5 100644 --- a/lib/cron/cache-pools.ts +++ b/lib/cron/cache-pools.ts @@ -231,15 +231,16 @@ const handler: ScheduledHandler = metricScope((metrics) => async (event: EventBr if (protocol === Protocol.V4) { // Add all pools which are included in HookLists and have all required V4SubgraphPool fields - const manuallyIncludedV4Pools: V4SubgraphPool[] = HOOK_POOLS_DATA.filter((poolData) => - poolData.feeTier && - poolData.tickSpacing && - poolData.hooks && - poolData.liquidity && - poolData.token0 && - poolData.token1 && - poolData.tvlETH !== undefined && - poolData.tvlUSD !== undefined + const manuallyIncludedV4Pools: V4SubgraphPool[] = HOOK_POOLS_DATA.filter( + (poolData) => + poolData.feeTier && + poolData.tickSpacing && + poolData.hooks && + poolData.liquidity && + poolData.token0 && + poolData.token1 && + poolData.tvlETH !== undefined && + poolData.tvlUSD !== undefined ) as V4SubgraphPool[] if (eulerHooksProvider) { diff --git a/lib/util/hooksAddressesAllowlist.ts b/lib/util/hooksAddressesAllowlist.ts index d94d972d50..266c0e3ee4 100644 --- a/lib/util/hooksAddressesAllowlist.ts +++ b/lib/util/hooksAddressesAllowlist.ts @@ -192,18 +192,22 @@ function buildHookPoolsList(): V4PoolData[] { tickSpacing: pool.tickSpacing, hooks: hook.address.toLowerCase(), liquidity: pool.liquidity, - token0: pool.token0 ? { - symbol: pool.token0.symbol, - id: pool.token0.id, - name: pool.token0.name, - decimals: pool.token0.decimals, - } : undefined, - token1: pool.token1 ? { - symbol: pool.token1.symbol, - id: pool.token1.id, - name: pool.token1.name, - decimals: pool.token1.decimals, - } : undefined, + token0: pool.token0 + ? { + symbol: pool.token0.symbol, + id: pool.token0.id, + name: pool.token0.name, + decimals: pool.token0.decimals, + } + : undefined, + token1: pool.token1 + ? { + symbol: pool.token1.symbol, + id: pool.token1.id, + name: pool.token1.name, + decimals: pool.token1.decimals, + } + : undefined, tvlETH: pool.tvlETH, tvlUSD: pool.tvlUSD, })