From eef1e95f63d0141464439d6b1dfd177169753e18 Mon Sep 17 00:00:00 2001 From: Siddharth2207 Date: Tue, 27 Jan 2026 17:23:28 +0530 Subject: [PATCH 1/2] hydrex --- .../src/router/liquidity-providers/Hydrex.ts | 24 +++++++++++++++++++ .../liquidity-providers/LiquidityProvider.ts | 2 ++ .../src/router/rain/RainDataFetcher.test.ts | 14 +++++++++++ .../sushi/src/router/rain/RainDataFetcher.ts | 2 ++ 4 files changed, 42 insertions(+) create mode 100644 packages/sushi/src/router/liquidity-providers/Hydrex.ts diff --git a/packages/sushi/src/router/liquidity-providers/Hydrex.ts b/packages/sushi/src/router/liquidity-providers/Hydrex.ts new file mode 100644 index 0000000000..24d162a869 --- /dev/null +++ b/packages/sushi/src/router/liquidity-providers/Hydrex.ts @@ -0,0 +1,24 @@ +import { PublicClient } from 'viem' +import { ChainId } from '../../chain/index.js' +import { UniswapV2BaseProvider } from '../rain/UniswapV2Base.js' +import { LiquidityProviders } from './LiquidityProvider.js' + +export class HydrexProvider extends UniswapV2BaseProvider { + override fee = 0.003 // TODO: Update with actual fee if different + constructor(chainId: ChainId, web3Client: PublicClient) { + const factory = { + [ChainId.BASE]: '0x36077D39cdC65E1e3FB65810430E5b2c4D5fA29E', // TODO: Replace with actual Hydrex factory address + } as const + const initCodeHash = { + [ChainId.BASE]: + '0xa18736c3ee97fe3c96c9428c0cc2a9116facec18e84f95f9da30543f8238a782', // TODO: Replace with actual Hydrex init code hash + } as const + super(chainId, web3Client, factory, initCodeHash) + } + getType(): LiquidityProviders { + return LiquidityProviders.Hydrex + } + getPoolProviderName(): string { + return 'Hydrex' + } +} diff --git a/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts b/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts index 26d4b4927e..5a426f717f 100644 --- a/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts +++ b/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts @@ -84,6 +84,7 @@ export enum LiquidityProviders { MMFinance = 'MMFinance', VVSFlawless = 'VVSFlawless', AerodromeSlipstream = 'AerodromeSlipstream', + Hydrex = 'Hydrex', AerodromeSlipstreamV2 = 'AerodromeSlipstreamV2', VelodromeSlipstream = 'VelodromeSlipstream', NileV2 = 'NileV2', @@ -241,6 +242,7 @@ export const UniV2LiquidityProviders: LiquidityProviders[] = [ LiquidityProviders.MMFinance, LiquidityProviders.KodiakV2, LiquidityProviders.NileV2, + LiquidityProviders.Hydrex, ] export const UniV3LiquidityProviders: LiquidityProviders[] = [ diff --git a/packages/sushi/src/router/rain/RainDataFetcher.test.ts b/packages/sushi/src/router/rain/RainDataFetcher.test.ts index b04b9f4f25..b9ebc7395f 100644 --- a/packages/sushi/src/router/rain/RainDataFetcher.test.ts +++ b/packages/sushi/src/router/rain/RainDataFetcher.test.ts @@ -28,6 +28,7 @@ describe('RainDataFetcher tests', async () => { univ3: LiquidityProviders.UniswapV3, // Univ3 algebra: LiquidityProviders.KimV4, // Algebra slipstream: LiquidityProviders.AerodromeSlipstream, // Slipstream + hydrex: LiquidityProviders.Hydrex, // Hydrex (UniV2) } // wait 60 sec before each test to avoid rpc ratelimiting @@ -86,6 +87,19 @@ describe('RainDataFetcher tests', async () => { oldBlockNumber, ) }) + + it('should correctly update pools data by logs for Hydrex protocol', async () => { + await testRainDataFetcher( + [protocols.hydrex], + client, + fromToken, + toToken, + amountIn, + gasPrice, + currentBlockNumber, + oldBlockNumber, + ) + }) }) async function testRainDataFetcher( diff --git a/packages/sushi/src/router/rain/RainDataFetcher.ts b/packages/sushi/src/router/rain/RainDataFetcher.ts index 31f1d5ee93..370e685ff2 100644 --- a/packages/sushi/src/router/rain/RainDataFetcher.ts +++ b/packages/sushi/src/router/rain/RainDataFetcher.ts @@ -31,6 +31,7 @@ import { GlyphV4Provider } from '../liquidity-providers/GlyphV4.js' import { GravityFinanceProvider } from '../liquidity-providers/GravityFinance.js' import { HoneySwapProvider } from '../liquidity-providers/HoneySwap.js' import { HorizonProvider } from '../liquidity-providers/Horizon.js' +import { HydrexProvider } from '../liquidity-providers/Hydrex.js' import { HyperBlastProvider } from '../liquidity-providers/HyperBlast.js' import { JetSwapProvider } from '../liquidity-providers/JetSwap.js' import { KimV4Provider } from '../liquidity-providers/KimV4.js' @@ -174,6 +175,7 @@ export class RainDataFetcher extends DataFetcher { GravityFinanceProvider, HoneySwapProvider, HorizonProvider, + HydrexProvider, HyperBlastProvider, JetSwapProvider, KimV4Provider, From dfb2c6e2972c8b2f3c8d26afb3d12967b9a714c7 Mon Sep 17 00:00:00 2001 From: rouzwelt Date: Thu, 29 Jan 2026 02:51:58 +0000 Subject: [PATCH 2/2] update --- packages/sushi/src/router/data-fetcher.ts | 2 ++ .../src/router/liquidity-providers/Hydrex.ts | 17 +++++++++++------ .../liquidity-providers/LiquidityProvider.ts | 2 +- .../src/router/rain/RainDataFetcher.test.ts | 14 -------------- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/packages/sushi/src/router/data-fetcher.ts b/packages/sushi/src/router/data-fetcher.ts index 5866e6defc..de32703cd4 100644 --- a/packages/sushi/src/router/data-fetcher.ts +++ b/packages/sushi/src/router/data-fetcher.ts @@ -32,6 +32,7 @@ import { GlyphV4Provider } from './liquidity-providers/GlyphV4.js' import { GravityFinanceProvider } from './liquidity-providers/GravityFinance.js' import { HoneySwapProvider } from './liquidity-providers/HoneySwap.js' import { HorizonProvider } from './liquidity-providers/Horizon.js' +import { HydrexProvider } from './liquidity-providers/Hydrex.js' import { HyperBlastProvider } from './liquidity-providers/HyperBlast.js' import { JetSwapProvider } from './liquidity-providers/JetSwap.js' import { KimV4Provider } from './liquidity-providers/KimV4.js' @@ -218,6 +219,7 @@ export class DataFetcher { HoneySwapProvider, HorizonProvider, HyperBlastProvider, + HydrexProvider, JetSwapProvider, KimV4Provider, KinetixV2Provider, diff --git a/packages/sushi/src/router/liquidity-providers/Hydrex.ts b/packages/sushi/src/router/liquidity-providers/Hydrex.ts index 24d162a869..47315a06ec 100644 --- a/packages/sushi/src/router/liquidity-providers/Hydrex.ts +++ b/packages/sushi/src/router/liquidity-providers/Hydrex.ts @@ -1,19 +1,24 @@ import { PublicClient } from 'viem' import { ChainId } from '../../chain/index.js' -import { UniswapV2BaseProvider } from '../rain/UniswapV2Base.js' +import { AlgebraV2BaseProvider } from './AlgebraV2Base.js' import { LiquidityProviders } from './LiquidityProvider.js' -export class HydrexProvider extends UniswapV2BaseProvider { - override fee = 0.003 // TODO: Update with actual fee if different +export class HydrexProvider extends AlgebraV2BaseProvider { constructor(chainId: ChainId, web3Client: PublicClient) { const factory = { - [ChainId.BASE]: '0x36077D39cdC65E1e3FB65810430E5b2c4D5fA29E', // TODO: Replace with actual Hydrex factory address + [ChainId.BASE]: '0x36077D39cdC65E1e3FB65810430E5b2c4D5fA29E', } as const const initCodeHash = { [ChainId.BASE]: - '0xa18736c3ee97fe3c96c9428c0cc2a9116facec18e84f95f9da30543f8238a782', // TODO: Replace with actual Hydrex init code hash + '0xa18736c3ee97fe3c96c9428c0cc2a9116facec18e84f95f9da30543f8238a782', } as const - super(chainId, web3Client, factory, initCodeHash) + const poolDeployer = { + [ChainId.BASE]: '0x1595A5D101d69D2a2bAB2976839cC8eeEb13Ab94', + } as const + const tickLens = { + [ChainId.BASE]: '0x0044e9642381607Eee1CCF06bae2378C3cB9B863', + } as const + super(chainId, web3Client, factory, initCodeHash, tickLens, poolDeployer) } getType(): LiquidityProviders { return LiquidityProviders.Hydrex diff --git a/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts b/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts index 5a426f717f..f2a5bc6bfd 100644 --- a/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts +++ b/packages/sushi/src/router/liquidity-providers/LiquidityProvider.ts @@ -242,7 +242,6 @@ export const UniV2LiquidityProviders: LiquidityProviders[] = [ LiquidityProviders.MMFinance, LiquidityProviders.KodiakV2, LiquidityProviders.NileV2, - LiquidityProviders.Hydrex, ] export const UniV3LiquidityProviders: LiquidityProviders[] = [ @@ -276,4 +275,5 @@ export const UniV3LiquidityProviders: LiquidityProviders[] = [ LiquidityProviders.VelodromeSlipstream, LiquidityProviders.NileV3, LiquidityProviders.KodiakV3, + LiquidityProviders.Hydrex, ] diff --git a/packages/sushi/src/router/rain/RainDataFetcher.test.ts b/packages/sushi/src/router/rain/RainDataFetcher.test.ts index b9ebc7395f..b04b9f4f25 100644 --- a/packages/sushi/src/router/rain/RainDataFetcher.test.ts +++ b/packages/sushi/src/router/rain/RainDataFetcher.test.ts @@ -28,7 +28,6 @@ describe('RainDataFetcher tests', async () => { univ3: LiquidityProviders.UniswapV3, // Univ3 algebra: LiquidityProviders.KimV4, // Algebra slipstream: LiquidityProviders.AerodromeSlipstream, // Slipstream - hydrex: LiquidityProviders.Hydrex, // Hydrex (UniV2) } // wait 60 sec before each test to avoid rpc ratelimiting @@ -87,19 +86,6 @@ describe('RainDataFetcher tests', async () => { oldBlockNumber, ) }) - - it('should correctly update pools data by logs for Hydrex protocol', async () => { - await testRainDataFetcher( - [protocols.hydrex], - client, - fromToken, - toToken, - amountIn, - gasPrice, - currentBlockNumber, - oldBlockNumber, - ) - }) }) async function testRainDataFetcher(