From 841cd9e3582dc9f8a8331614cf902e2ea18de4e2 Mon Sep 17 00:00:00 2001 From: "alex@0xhodler.nl" Date: Fri, 24 Oct 2025 13:46:04 +0200 Subject: [PATCH 1/4] gearbox: add kpk and more plasma pools --- src/adaptors/gearbox/index.js | 56 +++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 3 deletions(-) diff --git a/src/adaptors/gearbox/index.js b/src/adaptors/gearbox/index.js index b0306ff7a0..f3ce22c0ba 100644 --- a/src/adaptors/gearbox/index.js +++ b/src/adaptors/gearbox/index.js @@ -338,6 +338,19 @@ var CHAIN_CONFIGS = { EXCLUDED_POOLS: { '0x1dc0f3359a254f876b37906cfc1000a35ce2d717': 'USDT V3 Broken', }, + // Ethereum KPK (PoolQuotaKeeper) pools that need manual configuration + POOLS: { + '0xa9d17f6d3285208280a1fd9b94479c62e0aaba64': { + symbol: 'kpkwstETH', + underlying: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // wstETH + name: 'wstETH v3', + }, + '0x9396dcbf78fc526bb003665337c5e73b699571ef': { + symbol: 'kpkWETH', + underlying: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH + name: 'WETH Market', + }, + }, }, plasma: { ADDRESS_PROVIDER_V3: null, // Plasma uses individual pool approach @@ -351,6 +364,16 @@ var CHAIN_CONFIGS = { underlying: '0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb', // USDT0 deposit token name: 'USDT0 Lending Pool', }, + '0x53e4e9b8766969c43895839cc9c673bb6bc8ac97': { + symbol: 'USDT0 v3', + underlying: '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // USDT0 + name: 'Plasma USDT0', + }, + '0xb74760fd26400030620027dd29d19d74d514700e': { + symbol: 'hyperGearboxUSDT', + underlying: '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // USDT0 + name: 'Hyperithm Gearbox USDT', + }, }, }, etlk: { @@ -717,6 +740,18 @@ async function getPoolsV3(chain) { return await getPlasmaPoolsV3(chain); } + const chainConfig = CHAIN_CONFIGS[chain]; + + // Check if there are manual pools configured for this chain + const manualPools = chainConfig?.POOLS || {}; + const hasManualPools = Object.keys(manualPools).length > 0; + + // If there are manual pools, fetch them using the Plasma approach + let manualPoolsData = []; + if (hasManualPools) { + manualPoolsData = await getPlasmaPoolsV3(chain); + } + // Original Ethereum implementation with registry const stakedDieselTokens = [ '0x9ef444a6d7F4A5adcd68FD5329aA5240C90E14d2', @@ -762,7 +797,6 @@ async function getPoolsV3(chain) { }, }; } - const chainConfig = CHAIN_CONFIGS[chain]; const dc300 = await call({ abi: abis_default.getAddressOrRevert, target: chainConfig.ADDRESS_PROVIDER_V3, @@ -785,7 +819,7 @@ async function getPoolsV3(chain) { })), chain, }); - return pools + const registryPools = pools .map((pool, i) => ({ pool: pool.addr, name: pool.name, @@ -801,10 +835,26 @@ async function getPoolsV3(chain) { ...farmingPoolsData[pool.addr], })) .filter(({ pool }) => { - const chainConfig = CHAIN_CONFIGS[chain]; const excludedPools = chainConfig?.EXCLUDED_POOLS || {}; return !excludedPools[pool.toLowerCase()]; }); + + // Merge registry pools with manual pools, with manual pools taking precedence + if (hasManualPools) { + const poolMap = new Map(); + // Add registry pools first + for (const pool of registryPools) { + poolMap.set(pool.pool.toLowerCase(), pool); + } + // Add or override with manual pools + for (const pool of manualPoolsData) { + const key = pool.pool.toLowerCase(); + poolMap.set(key, { ...(poolMap.get(key) || {}), ...pool }); + } + return Array.from(poolMap.values()); + } + + return registryPools; } async function getTokensData(chain, pools) { // For non-registry chains, we need to use known token addresses for pricing From ac1f9ba37e666fe4746cc5d99857b7704ff47468 Mon Sep 17 00:00:00 2001 From: "alex@0xhodler.nl" Date: Fri, 24 Oct 2025 13:51:53 +0200 Subject: [PATCH 2/4] update pool names for clarity --- src/adaptors/gearbox/index.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/adaptors/gearbox/index.js b/src/adaptors/gearbox/index.js index f3ce22c0ba..ab48eaee91 100644 --- a/src/adaptors/gearbox/index.js +++ b/src/adaptors/gearbox/index.js @@ -341,14 +341,14 @@ var CHAIN_CONFIGS = { // Ethereum KPK (PoolQuotaKeeper) pools that need manual configuration POOLS: { '0xa9d17f6d3285208280a1fd9b94479c62e0aaba64': { - symbol: 'kpkwstETH', + symbol: 'kpk wstETH', underlying: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // wstETH - name: 'wstETH v3', + name: 'kpk wstETH', }, '0x9396dcbf78fc526bb003665337c5e73b699571ef': { - symbol: 'kpkWETH', + symbol: 'kpk ETH', underlying: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH - name: 'WETH Market', + name: 'kpk ETH', }, }, }, @@ -367,7 +367,7 @@ var CHAIN_CONFIGS = { '0x53e4e9b8766969c43895839cc9c673bb6bc8ac97': { symbol: 'USDT0 v3', underlying: '0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb', // USDT0 - name: 'Plasma USDT0', + name: 'Edge UltraYield', }, '0xb74760fd26400030620027dd29d19d74d514700e': { symbol: 'hyperGearboxUSDT', From f29afc423fe74d7ce92dab1b0b06c198e6ff5777 Mon Sep 17 00:00:00 2001 From: "alex@0xhodler.nl" Date: Fri, 24 Oct 2025 14:07:16 +0200 Subject: [PATCH 3/4] refactor: simplify pool symbols by removing 'kpk' prefix --- src/adaptors/gearbox/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/adaptors/gearbox/index.js b/src/adaptors/gearbox/index.js index ab48eaee91..f01baa792b 100644 --- a/src/adaptors/gearbox/index.js +++ b/src/adaptors/gearbox/index.js @@ -341,12 +341,12 @@ var CHAIN_CONFIGS = { // Ethereum KPK (PoolQuotaKeeper) pools that need manual configuration POOLS: { '0xa9d17f6d3285208280a1fd9b94479c62e0aaba64': { - symbol: 'kpk wstETH', + symbol: 'wstETH', underlying: '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', // wstETH name: 'kpk wstETH', }, '0x9396dcbf78fc526bb003665337c5e73b699571ef': { - symbol: 'kpk ETH', + symbol: 'ETH', underlying: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', // WETH name: 'kpk ETH', }, @@ -362,7 +362,7 @@ var CHAIN_CONFIGS = { '0x76309A9a56309104518847BbA321c261B7B4a43f': { symbol: 'dUSDT0', underlying: '0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb', // USDT0 deposit token - name: 'USDT0 Lending Pool', + name: 'Invariant USDT0', }, '0x53e4e9b8766969c43895839cc9c673bb6bc8ac97': { symbol: 'USDT0 v3', From 4fddc45b057e8070e7ebe3df3902bcf93f5b7e23 Mon Sep 17 00:00:00 2001 From: "alex@0xhodler.nl" Date: Fri, 24 Oct 2025 14:37:50 +0200 Subject: [PATCH 4/4] feat: add merkl rewards for kpk and new plasma pools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add merkl reward integration for: - KPK wstETH pool (0xa9d17f6d3285208280a1fd9b94479c62e0aaba64) - KPK ETH pool (0x9396dcbf78fc526bb003665337c5e73b699571ef) - Hyperithm Gearbox plasma pool (0xB74760FD26400030620027DD29D19d74D514700e) - Edge UltraYield plasma pool (0x53E4e9b8766969c43895839CC9c673bb6bC8Ac97) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/adaptors/gearbox/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/adaptors/gearbox/index.js b/src/adaptors/gearbox/index.js index f01baa792b..b02bad8c85 100644 --- a/src/adaptors/gearbox/index.js +++ b/src/adaptors/gearbox/index.js @@ -494,12 +494,18 @@ const MERKL_CONFIGS = { '0x05A811275fE9b4DE503B3311F51edF6A856D936e', // USDT '0x4d56c9cBa373AD39dF69Eb18F076b7348000AE09', // GHO '0x72CCB97cbdC40f8fb7FFA42Ed93AE74923547200', // wstETH (with Merkl rewards) + '0xa9d17f6d3285208280a1fd9b94479c62e0aaba64', // KPK wstETH + '0x9396dcbf78fc526bb003665337c5e73b699571ef', // KPK ETH ], }, plasma: { chainId: 9745, - poolId: '0x76309A9a56309104518847BbA321c261B7B4a43f', rewardToken: '0x6100e367285b01f48d07953803a2d8dca5d19873', // WXPL + pools: [ + '0x76309A9a56309104518847BbA321c261B7B4a43f', // Invariant USDT0 (existing) + '0xB74760FD26400030620027DD29D19d74D514700e', // Hyperithm Gearbox + '0x53E4e9b8766969c43895839CC9c673bb6bC8Ac97', // Edge UltraYield + ], }, etlk: { chainId: 42793,