use crate::Error;
use alloy_network::EthereumWallet;
use alloy_primitives::{Address, U256};
use alloy_provider::{Provider, ProviderBuilder, RootProvider, WsConnect};
use alloy_transport::BoxTransport;
pub const SIGNATURE_EXPIRY: U256 = U256::from_limbs([86400, 0, 0, 0]);
pub fn get_provider_http(http_endpoint: &str) -> RootProvider<BoxTransport> {
let provider = ProviderBuilder::new()
.with_recommended_fillers()
.on_http(http_endpoint.parse().unwrap())
.root()
.clone()
.boxed();
provider
}
pub fn get_wallet_provider_http(
http_endpoint: &str,
wallet: EthereumWallet,
) -> RootProvider<BoxTransport> {
let provider = ProviderBuilder::new()
.with_recommended_fillers()
.wallet(wallet)
.on_http(http_endpoint.parse().unwrap())
.root()
.clone()
.boxed();
provider
}
pub async fn get_provider_ws(ws_endpoint: &str) -> RootProvider<BoxTransport> {
let provider = ProviderBuilder::new()
.with_recommended_fillers()
.on_ws(WsConnect::new(ws_endpoint))
.await
.unwrap()
.root()
.clone()
.boxed();
provider
}
pub async fn get_slasher_address(
delegation_manager_addr: Address,
http_endpoint: &str,
) -> Result<Address, Error> {
let provider = get_provider_http(http_endpoint);
let delegation_manager =
eigensdk::utils::delegationmanager::DelegationManager::DelegationManagerInstance::new(
delegation_manager_addr,
provider,
);
delegation_manager
.slasher()
.call()
.await
.map(|a| a._0)
.map_err(|err| Error::Client(err.to_string()))
}