mev_engine/amm/tenkswap/
get_data.rs

1use 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    // println!("Token 0 {:?}", token_0_address);
21
22    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    // println!("Token 1 {:?}", token_1_address);
29
30    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    // println!("token 0 decimals {:?}", token0_decimals_parsed);
36
37    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    // println!("token 1 decimals {:?}", token1_decimals_parsed);
44
45    let reserves_result = call_contract(provider.clone(), pool_address, "getReserves", vec![])
46        .await
47        .unwrap();
48    // println!("Reserve result {:?}", reserves_result);
49
50    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}