kabu_core_blockchain/
blockchain_tokens.rs

1use alloy::primitives::ChainId;
2use alloy_chains::{Chain, NamedChain};
3use eyre::{eyre, OptionExt, Result};
4use kabu_defi_address_book::{TokenAddressArbitrum, TokenAddressBase, TokenAddressEth};
5use kabu_types_entities::{Market, Token};
6
7pub fn add_default_tokens_to_market(market: &mut Market, chain_id: ChainId) -> Result<()> {
8    match Chain::from_id(chain_id).named().ok_or_eyre("NO_NAMED_CHAIN")? {
9        NamedChain::Mainnet => {
10            let weth_token = Token::new_with_data(TokenAddressEth::WETH, Some("WETH".to_string()), None, Some(18), true, false);
11            let usdc_token = Token::new_with_data(TokenAddressEth::USDC, Some("USDC".to_string()), None, Some(6), true, false);
12            let usdt_token = Token::new_with_data(TokenAddressEth::USDT, Some("USDT".to_string()), None, Some(6), true, false);
13            let dai_token = Token::new_with_data(TokenAddressEth::DAI, Some("DAI".to_string()), None, Some(18), true, false);
14            let wbtc_token = Token::new_with_data(TokenAddressEth::WBTC, Some("WBTC".to_string()), None, Some(8), true, false);
15            let threecrv_token = Token::new_with_data(TokenAddressEth::THREECRV, Some("3Crv".to_string()), None, Some(18), false, true);
16
17            market.add_token(weth_token);
18            market.add_token(usdc_token);
19            market.add_token(usdt_token);
20            market.add_token(dai_token);
21            market.add_token(wbtc_token);
22            market.add_token(threecrv_token);
23        }
24        NamedChain::Arbitrum => {
25            let weth_token = Token::new_with_data(TokenAddressArbitrum::WETH, Some("WETH".to_string()), None, Some(18), true, false);
26            let wbtc_token = Token::new_with_data(TokenAddressArbitrum::WBTC, Some("WBTC".to_string()), None, Some(8), true, false);
27            let usdc_token = Token::new_with_data(TokenAddressArbitrum::USDC, Some("USDC".to_string()), None, Some(6), true, false);
28            let usdt_token = Token::new_with_data(TokenAddressArbitrum::USDT, Some("USDT".to_string()), None, Some(6), true, false);
29            let dai_token = Token::new_with_data(TokenAddressEth::DAI, Some("DAI".to_string()), None, Some(18), true, false);
30
31            market.add_token(weth_token);
32            market.add_token(wbtc_token);
33            market.add_token(usdc_token);
34            market.add_token(usdt_token);
35            market.add_token(dai_token);
36        }
37        NamedChain::Base => {
38            let weth_token = Token::new_with_data(TokenAddressBase::WETH, Some("WETH".to_string()), None, Some(18), true, false);
39            let usdc_token = Token::new_with_data(TokenAddressBase::USDC, Some("USDC".to_string()), None, Some(6), true, false);
40
41            market.add_token(weth_token);
42            market.add_token(usdc_token);
43        }
44        _ => return Err(eyre!("CHAIN_TOKENS_NOT_LOADED")),
45    }
46    Ok(())
47}