gasbench/
preloader.rs

1use alloy_network::Ethereum;
2use alloy_provider::Provider;
3use kabu_core_actors::SharedState;
4use kabu_defi_address_book::{
5    CurveMetapoolAddress, CurvePoolAddress, PancakeV2PoolAddress, PancakeV3PoolAddress, TokenAddressEth, UniswapV2PoolAddress,
6    UniswapV3PoolAddress,
7};
8use kabu_defi_market::fetch_and_add_pool_by_pool_id;
9use kabu_defi_pools::PoolLoadersBuilder;
10use kabu_node_debug_provider::DebugProviderExt;
11use kabu_types_blockchain::KabuDataTypesEthereum;
12use kabu_types_entities::pool_config::PoolsLoadingConfig;
13use kabu_types_entities::{Market, MarketState, PoolClass, Token};
14use revm::{Database, DatabaseCommit, DatabaseRef};
15use std::sync::Arc;
16
17pub async fn preload_pools<P, DB>(client: P, market: SharedState<Market>, market_state: SharedState<MarketState<DB>>) -> eyre::Result<()>
18where
19    P: Provider<Ethereum> + DebugProviderExt<Ethereum> + Send + Sync + Clone + 'static,
20    DB: DatabaseRef + DatabaseCommit + Database + Send + Sync + Clone + 'static,
21{
22    let mut market_instance = market.write().await;
23
24    market_instance.add_token(Token::new_with_data(TokenAddressEth::WETH, Some("WETH".to_string()), None, Some(18), true, false));
25    market_instance.add_token(Token::new_with_data(TokenAddressEth::USDC, Some("USDC".to_string()), None, Some(6), true, false));
26    market_instance.add_token(Token::new_with_data(TokenAddressEth::USDT, Some("USDT".to_string()), None, Some(6), true, false));
27    market_instance.add_token(Token::new_with_data(TokenAddressEth::DAI, Some("DAI".to_string()), None, Some(18), true, false));
28    market_instance.add_token(Token::new_with_data(TokenAddressEth::WBTC, Some("WBTC".to_string()), None, Some(8), true, false));
29    market_instance.add_token(Token::new_with_data(TokenAddressEth::THREECRV, Some("3Crv".to_string()), None, Some(18), false, true));
30    market_instance.add_token(Token::new_with_data(TokenAddressEth::CRV, Some("Crv".to_string()), None, Some(18), false, false));
31    market_instance.add_token(Token::new_with_data(TokenAddressEth::LUSD, Some("LUSD".to_string()), None, Some(18), false, false));
32
33    drop(market_instance);
34
35    let pool_loaders = Arc::new(PoolLoadersBuilder::<P, Ethereum, KabuDataTypesEthereum>::default_pool_loaders(
36        client.clone(),
37        PoolsLoadingConfig::default(),
38    ));
39
40    fetch_and_add_pool_by_pool_id(
41        client.clone(),
42        market.clone(),
43        market_state.clone(),
44        pool_loaders.clone(),
45        CurvePoolAddress::ETH_BTC_USD.into(),
46        PoolClass::Curve,
47    )
48    .await?;
49
50    fetch_and_add_pool_by_pool_id(
51        client.clone(),
52        market.clone(),
53        market_state.clone(),
54        pool_loaders.clone(),
55        CurvePoolAddress::USDT_BTC_ETH.into(),
56        PoolClass::Curve,
57    )
58    .await?;
59
60    fetch_and_add_pool_by_pool_id(
61        client.clone(),
62        market.clone(),
63        market_state.clone(),
64        pool_loaders.clone(),
65        CurvePoolAddress::DAI_USDC_USDT.into(),
66        PoolClass::Curve,
67    )
68    .await?;
69
70    fetch_and_add_pool_by_pool_id(
71        client.clone(),
72        market.clone(),
73        market_state.clone(),
74        pool_loaders.clone(),
75        CurveMetapoolAddress::LUSD.into(),
76        PoolClass::Curve,
77    )
78    .await?;
79
80    fetch_and_add_pool_by_pool_id(
81        client.clone(),
82        market.clone(),
83        market_state.clone(),
84        pool_loaders.clone(),
85        UniswapV3PoolAddress::WETH_USDT_3000.into(),
86        PoolClass::UniswapV3,
87    )
88    .await?;
89
90    fetch_and_add_pool_by_pool_id(
91        client.clone(),
92        market.clone(),
93        market_state.clone(),
94        pool_loaders.clone(),
95        PancakeV2PoolAddress::WETH_USDT.into(),
96        PoolClass::UniswapV2,
97    )
98    .await?;
99    fetch_and_add_pool_by_pool_id(
100        client.clone(),
101        market.clone(),
102        market_state.clone(),
103        pool_loaders.clone(),
104        UniswapV2PoolAddress::WETH_USDT.into(),
105        PoolClass::UniswapV2,
106    )
107    .await?;
108    fetch_and_add_pool_by_pool_id(
109        client.clone(),
110        market.clone(),
111        market_state.clone(),
112        pool_loaders.clone(),
113        PancakeV3PoolAddress::USDC_USDT_100.into(),
114        PoolClass::UniswapV3,
115    )
116    .await?;
117
118    fetch_and_add_pool_by_pool_id(
119        client.clone(),
120        market.clone(),
121        market_state.clone(),
122        pool_loaders.clone(),
123        UniswapV3PoolAddress::USDC_WETH_3000.into(),
124        PoolClass::UniswapV3,
125    )
126    .await?;
127    fetch_and_add_pool_by_pool_id(
128        client.clone(),
129        market.clone(),
130        market_state.clone(),
131        pool_loaders.clone(),
132        UniswapV3PoolAddress::USDC_WETH_500.into(),
133        PoolClass::UniswapV3,
134    )
135    .await?;
136    fetch_and_add_pool_by_pool_id(
137        client.clone(),
138        market.clone(),
139        market_state.clone(),
140        pool_loaders.clone(),
141        UniswapV3PoolAddress::WBTC_USDT_3000.into(),
142        PoolClass::UniswapV3,
143    )
144    .await?;
145    fetch_and_add_pool_by_pool_id(
146        client.clone(),
147        market.clone(),
148        market_state.clone(),
149        pool_loaders.clone(),
150        UniswapV3PoolAddress::USDC_USDT_100.into(),
151        PoolClass::UniswapV3,
152    )
153    .await?;
154
155    fetch_and_add_pool_by_pool_id(
156        client.clone(),
157        market.clone(),
158        market_state.clone(),
159        pool_loaders.clone(),
160        UniswapV2PoolAddress::LUSD_WETH.into(),
161        PoolClass::UniswapV2,
162    )
163    .await?;
164
165    Ok(())
166}