tycho_simulation/rfq/protocols/
utils.rs1use std::{collections::HashSet, str::FromStr};
2
3use alloy_primitives::Address;
4use tycho_common::{models::Chain, Bytes};
5
6use crate::rfq::errors::RFQError;
7
8fn str_to_bytes(address: &str) -> Result<Bytes, RFQError> {
9 Bytes::from_str(address).map_err(|_| {
10 RFQError::FatalError(format!("Failed to parse default quote token: {address}"))
11 })
12}
13
14pub fn default_quote_tokens_for_chain(chain: &Chain) -> Result<HashSet<Bytes>, RFQError> {
16 match chain {
17 Chain::Ethereum => Ok(HashSet::from([
18 str_to_bytes("0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48")?, str_to_bytes("0xdac17f958d2ee523a2206206994597c13d831ec7")?, str_to_bytes("0x6b175474e89094c44da98b954eedeac495271d0f")?, str_to_bytes("0x4c9EDD5852cd905f086C759E8383e09bff1E68B3")?, ])),
23 Chain::Base => Ok(HashSet::from([
24 str_to_bytes("0x833589fcd6edb6e08f4c7c32d4f71b54bda02913")?, str_to_bytes("0xfde4c96c8593536e31f229ea8f37b2ada2699bb2")?, ])),
27 _ => Ok(HashSet::new()),
28 }
29}
30
31pub fn bytes_to_address(address: &Bytes) -> Result<Address, RFQError> {
32 if address.len() == 20 {
33 Ok(Address::from_slice(address))
34 } else {
35 Err(RFQError::InvalidInput(format!(
36 "Invalid EVM address length: expected 20 bytes, got {}",
37 address.len()
38 )))
39 }
40}