debot_ether_ether_utils/dex/
biswap.rs

1// BiSwap.rs
2use super::dex::BaseDex;
3use super::Dex;
4use async_trait::async_trait;
5use ethers::{prelude::*, types::Address};
6use std::error::Error;
7use std::sync::Arc;
8
9#[derive(Debug, Clone)]
10pub struct BiSwap {
11    base_dex: BaseDex,
12}
13
14static BISWAP_ROUTER_ABI_JSON: &'static [u8] =
15    include_bytes!("../../resources/BiSwapRouterABI.json");
16
17impl BiSwap {
18    pub fn new(
19        provider: Arc<NonceManagerMiddleware<SignerMiddleware<Provider<Http>, LocalWallet>>>,
20        router_address: Address,
21    ) -> Self {
22        Self {
23            base_dex: BaseDex::new(provider, router_address),
24        }
25    }
26}
27
28#[async_trait]
29impl Dex for BiSwap {
30    async fn initialize(&mut self) -> Result<(), Box<dyn Error + Send + Sync>> {
31        self.base_dex
32            .create_router_contract(BISWAP_ROUTER_ABI_JSON)
33            .await
34    }
35
36    fn clone_box(&self) -> Box<dyn Dex + Send + Sync> {
37        Box::new(self.clone())
38    }
39
40    fn name(&self) -> &str {
41        "BiSwap"
42    }
43
44    fn router_contract(
45        &self,
46    ) -> Result<
47        &Contract<NonceManagerMiddleware<SignerMiddleware<Provider<Http>, LocalWallet>>>,
48        Box<dyn Error + Send + Sync + 'static>,
49    > {
50        self.base_dex.router_contract()
51    }
52
53    fn provider(
54        &self,
55    ) -> Arc<NonceManagerMiddleware<SignerMiddleware<Provider<Http>, LocalWallet>>> {
56        self.base_dex.provider()
57    }
58
59    fn router_address(&self) -> Address {
60        self.base_dex.router_address()
61    }
62}