mev_engine/amm/tenkswap/
get_data.rs1use std::sync::Arc;
2
3use starknet::{core::types::Felt, providers::Provider};
4
5use super::pool::TenkSwapPool;
6use crate::errors::AMMError;
7use crate::utils::call_contract;
8
9pub async fn get_pool_info<P>(
10 pool_address: Felt,
11 provider: Arc<P>,
12) -> Result<TenkSwapPool, AMMError>
13where
14 P: Provider + Send + Sync,
15{
16 let token0 = call_contract(provider.clone(), pool_address, "token0", vec![])
17 .await
18 .unwrap();
19 let token_0_address = token0[0];
20 tracing::info!(?token_0_address, "UniswapV2 sync");
23
24 let token1 = call_contract(provider.clone(), pool_address, "token1", vec![])
25 .await
26 .unwrap();
27 let token_1_address = token1[0];
28 let token0_decimals = call_contract(provider.clone(), token_0_address, "decimals", vec![])
31 .await
32 .unwrap()[0];
33 let token0_decimals_parsed =
34 u8::from_le_bytes(token0_decimals.to_bytes_le()[0..1].try_into().unwrap());
35 let token1_decimals = call_contract(provider.clone(), token_1_address, "decimals", vec![])
38 .await
39 .unwrap()[0];
40
41 let token1_decimals_parsed =
42 u8::from_le_bytes(token1_decimals.to_bytes_le()[0..1].try_into().unwrap());
43 let reserves_result = call_contract(provider.clone(), pool_address, "getReserves", vec![])
46 .await
47 .unwrap();
48 let reserve_a = Felt::from_bytes_le(&reserves_result[0].to_bytes_le());
51 let reserve_b = Felt::from_bytes_le(&reserves_result[1].to_bytes_le());
52
53 Ok(TenkSwapPool::new(
54 pool_address,
55 token_0_address,
56 token_1_address,
57 token0_decimals_parsed,
58 token1_decimals_parsed,
59 reserve_a,
60 reserve_b,
61 0u32,
62 ))
63}