Skip to content

Commit

Permalink
feat - add token manager utility
Browse files Browse the repository at this point in the history
  • Loading branch information
Dvisacker committed Oct 14, 2024
1 parent 43b332e commit 3eeacba
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ pub mod bot;
pub mod cli;
pub mod config;
pub mod provider;
pub mod token_manager;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
Expand Down
52 changes: 52 additions & 0 deletions src/token_manager.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
use crate::provider::SignerProvider;
use alloy::providers::Provider;
use alloy::sol;
use alloy::transports::BoxTransport;
use alloy_primitives::Address;
use std::collections::HashMap;
use std::error::Error;
use std::sync::{Arc, Mutex};
use IERC20::IERC20Instance;

sol! {
#[derive(Debug, PartialEq, Eq)]
#[sol(rpc)]
contract IERC20 {
function decimals() external view returns (uint8);
function approve(address spender, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
}

type Token = IERC20Instance<BoxTransport, Arc<SignerProvider>>;

pub struct TokenManager {
tokens: Mutex<HashMap<Address, Token>>,
provider: Arc<SignerProvider>,
}

impl TokenManager {
pub fn new(provider: Arc<SignerProvider>) -> Self {
TokenManager {
tokens: Mutex::new(HashMap::new()),
provider,
}
}

pub fn get(&self, address: Address) -> Result<Token, Box<dyn Error>> {
let mut tokens = self
.tokens
.lock()
.map_err(|e| format!("Failed to acquire lock: {}", e))?;

if let Some(token) = tokens.get(&address) {
Ok(token.clone())
} else {
let new_token = IERC20::new(address, self.provider.clone());
tokens.insert(address, new_token.clone());
Ok(new_token)
}
}
}

0 comments on commit 3eeacba

Please sign in to comment.