mev-engine 0.1.1

A mev-engine for starknet
Documentation
use std::{sync::Arc, time::Duration};

use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use starknet::{
    core::{
        types::{BlockId, BlockTag, Felt, FunctionCall, StarknetError},

    },
    providers::Provider,
};

use crate::{
    amm::{
        factory::AutomatedMarketMakerFactory,
        pool::{AutomatedMarketMaker, AMM},
    },
    errors::AMMError,
};

use super::{
    get_data::{get_all_pools, get_pool_info},
};


#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct JediswapFactory {
    pub factory_address: Felt,
}

#[async_trait]
impl AutomatedMarketMakerFactory for JediswapFactory {
    fn address(&self) -> Felt {
        self.factory_address
    }

    async fn fetch_all_pools<P>(&mut self, provider: Arc<P>) -> Result<Vec<AMM>, AMMError>
    where
        P: Provider + Sync + Send,
    {
        let pool_addresses = get_all_pools(self, provider.clone()).await.unwrap();
        let mut all_pools = vec![];
        let mut first_val = true;

        for pool_address in pool_addresses {
            if first_val {
                first_val = false;
                continue;
            }
            let pool = get_pool_info(pool_address, provider.clone()).await.unwrap();

            tokio::time::sleep(Duration::from_millis(200)).await;
            all_pools.push(AMM::JediswapPool(pool));
        }
        Ok(all_pools)
    }

    async fn populate_amm_data<P>(
        &self,
        amms: &mut [AMM],
        _block_number: Option<u64>,
        middleware: Arc<P>,
    ) -> Result<(), AMMError>
    where
        P: Provider + Sync + Send,
    {
        for amm in amms {
            get_pool_info(amm.address(), middleware.clone())
                .await
                .unwrap();
        }
        Ok(())
    }

    fn amm_created_event_signature(&self) -> Vec<Vec<Felt>> {
        vec![vec![Felt::ONE]]
    }
}

impl JediswapFactory {
    pub fn new(factory_address: Felt) -> JediswapFactory {
        JediswapFactory { factory_address }
    }
}