debot_ether_ether_utils/dex/
biswap.rs1use 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}