@@ -32,7 +32,7 @@ import { BigNumber } from 'ethers';
3232import { sqrt } from './utils' ;
3333import { FluidDexLiquidityProxy } from './fluid-dex-liquidity-proxy' ;
3434import { FluidDexEventPool } from './fluid-dex-pool' ;
35- import { MIN_SWAP_LIQUIDITY } from './constants' ;
35+ import { MIN_SWAP_LIQUIDITY , RESERVE_REFRESH_INTERVAL_MS } from './constants' ;
3636
3737export class FluidDex extends SimpleExchange implements IDex < FluidDexData > {
3838 readonly hasConstantPriceLargeAmounts = false ;
@@ -53,6 +53,8 @@ export class FluidDex extends SimpleExchange implements IDex<FluidDexData> {
5353
5454 readonly fluidDexPoolIface : Interface ;
5555
56+ private reserveUpdateIntervalTask ?: NodeJS . Timeout ;
57+
5658 constructor (
5759 readonly network : Network ,
5860 readonly dexKey : string ,
@@ -124,8 +126,28 @@ export class FluidDex extends SimpleExchange implements IDex<FluidDexData> {
124126 } ) ,
125127 ) ;
126128
127- this . liquidityProxy . setPoolAddresses ( this . pools . map ( p => p . address ) ) ;
128129 await this . liquidityProxy . initialize ( blockNumber ) ;
130+
131+ if ( this . dexHelper . config . isSlave === true ) {
132+ this . reserveUpdateIntervalTask = setInterval (
133+ this . updateReserves . bind ( this ) ,
134+ RESERVE_REFRESH_INTERVAL_MS ,
135+ ) ;
136+ }
137+ }
138+
139+ private async updateReserves ( ) : Promise < void > {
140+ if ( ! this . liquidityProxy . shouldUpdateState ) return ;
141+ this . liquidityProxy . shouldUpdateState = false ;
142+
143+ try {
144+ const blockNumber = await this . dexHelper . provider . getBlockNumber ( ) ;
145+
146+ const state = await this . liquidityProxy . generateState ( blockNumber ) ;
147+ this . liquidityProxy . setState ( state , blockNumber ) ;
148+ } catch ( error ) {
149+ this . logger . error ( `${ this . dexKey } : Error updating reserves:` , error ) ;
150+ }
129151 }
130152
131153 getAdapters ( side : SwapSide ) {
@@ -136,7 +158,6 @@ export class FluidDex extends SimpleExchange implements IDex<FluidDexData> {
136158 poolsFromFactory : readonly PoolWithDecimals [ ] ,
137159 ) {
138160 this . pools = this . generateFluidDexPoolsFromPoolsFactory ( poolsFromFactory ) ;
139- this . liquidityProxy . setPoolAddresses ( this . pools . map ( p => p . address ) ) ;
140161 this . logger . info ( `${ this . dexKey } : pools list was updated ...` ) ;
141162 }
142163
@@ -1273,4 +1294,11 @@ export class FluidDex extends SimpleExchange implements IDex<FluidDexData> {
12731294 private abs ( value : bigint ) : bigint {
12741295 return value < 0 ? - value : value ;
12751296 }
1297+
1298+ releaseResources ( ) : void {
1299+ if ( this . reserveUpdateIntervalTask ) {
1300+ clearInterval ( this . reserveUpdateIntervalTask ) ;
1301+ this . reserveUpdateIntervalTask = undefined ;
1302+ }
1303+ }
12761304}
0 commit comments