@@ -17,15 +17,18 @@ use std::pin::Pin;
1717
1818use alloy:: primitives:: { Address , U256 } ;
1919use futures_util:: { Stream , StreamExt } ;
20- use nautilus_model:: defi:: {
21- Block , Chain , DexType , Pool , PoolLiquidityUpdate , PoolSwap , SharedChain , SharedDex , Token ,
22- data:: { DexPoolData , PoolFeeCollect , PoolFlash , block:: BlockPosition } ,
23- pool_analysis:: {
24- position:: PoolPosition ,
25- snapshot:: { PoolAnalytics , PoolSnapshot , PoolState } ,
20+ use nautilus_model:: {
21+ defi:: {
22+ Block , Chain , DexType , Pool , PoolLiquidityUpdate , PoolSwap , SharedChain , SharedDex , Token ,
23+ data:: { DexPoolData , PoolFeeCollect , PoolFlash , block:: BlockPosition } ,
24+ pool_analysis:: {
25+ position:: PoolPosition ,
26+ snapshot:: { PoolAnalytics , PoolSnapshot , PoolState } ,
27+ } ,
28+ tick_map:: tick:: PoolTick ,
29+ validation:: validate_address,
2630 } ,
27- tick_map:: tick:: PoolTick ,
28- validation:: validate_address,
31+ identifiers:: InstrumentId ,
2932} ;
3033use sqlx:: { PgPool , Row , postgres:: PgConnectOptions } ;
3134
@@ -1577,7 +1580,8 @@ impl BlockchainCacheDatabase {
15771580 fee_growth_global_0::TEXT, fee_growth_global_1::TEXT,
15781581 total_amount0_deposited::TEXT, total_amount1_deposited::TEXT,
15791582 total_amount0_collected::TEXT, total_amount1_collected::TEXT,
1580- total_swaps, total_mints, total_burns, total_fee_collects, total_flashes
1583+ total_swaps, total_mints, total_burns, total_fee_collects, total_flashes,
1584+ (SELECT dex_name FROM pool WHERE chain_id = $1 AND address = $2) as dex_name
15811585 FROM pool_snapshot
15821586 WHERE chain_id = $1 AND pool_address = $2 AND is_valid = TRUE
15831587 ORDER BY block DESC, transaction_index DESC, log_index DESC
@@ -1656,7 +1660,23 @@ impl BlockchainCacheDatabase {
16561660 )
16571661 . await ?;
16581662
1663+ let dex_name: String = row. get ( "dex_name" ) ;
1664+ let chain = nautilus_model:: defi:: Chain :: from_chain_id ( chain_id)
1665+ . ok_or_else ( || anyhow:: anyhow!( "Unknown chain_id: {}" , chain_id) ) ?;
1666+
1667+ let dex_type = nautilus_model:: defi:: DexType :: from_dex_name ( & dex_name)
1668+ . ok_or_else ( || anyhow:: anyhow!( "Unknown dex_name: {}" , dex_name) ) ?;
1669+
1670+ let dex_extended = crate :: exchanges:: get_dex_extended ( chain. name , & dex_type)
1671+ . ok_or_else ( || {
1672+ anyhow:: anyhow!( "No DEX extended found for {} on {}" , dex_name, chain. name)
1673+ } ) ?;
1674+
1675+ let instrument_id =
1676+ Pool :: create_instrument_id ( chain. name , & dex_extended. dex , pool_address) ;
1677+
16591678 Ok ( Some ( PoolSnapshot :: new (
1679+ instrument_id,
16601680 state,
16611681 positions,
16621682 ticks,
@@ -1843,6 +1863,7 @@ impl BlockchainCacheDatabase {
18431863 & ' a self ,
18441864 chain : SharedChain ,
18451865 dex : SharedDex ,
1866+ instrument_id : InstrumentId ,
18461867 pool_address : & Address ,
18471868 from_position : Option < BlockPosition > ,
18481869 ) -> Pin < Box < dyn Stream < Item = Result < DexPoolData , anyhow:: Error > > + Send + ' a > > {
@@ -2130,8 +2151,10 @@ impl BlockchainCacheDatabase {
21302151
21312152 // Transform rows to events
21322153 let stream = query. map ( move |row_result| match row_result {
2133- Ok ( row) => transform_row_to_dex_pool_data ( & row, chain. clone ( ) , dex. clone ( ) )
2134- . map_err ( |e| anyhow:: anyhow!( "Steam pool event transform error: {}" , e) ) ,
2154+ Ok ( row) => {
2155+ transform_row_to_dex_pool_data ( & row, chain. clone ( ) , dex. clone ( ) , instrument_id)
2156+ . map_err ( |e| anyhow:: anyhow!( "Steam pool event transform error: {}" , e) )
2157+ }
21352158 Err ( e) => Err ( anyhow:: anyhow!( "Stream pool events database error: {}" , e) ) ,
21362159 } ) ;
21372160
0 commit comments