use alloy::{network::EthereumWallet, primitives::Address, signers::local::PrivateKeySigner};
use crate::error::{ClobError, Result};
#[derive(Clone, Debug)]
pub struct Wallet {
signer: PrivateKeySigner,
wallet: EthereumWallet,
}
impl Wallet {
pub fn from_private_key(private_key: &str) -> Result<Self> {
let signer = private_key
.parse::<PrivateKeySigner>()
.map_err(|e| ClobError::Crypto(format!("Failed to parse private key: {}", e)))?;
let wallet = EthereumWallet::from(signer.clone());
Ok(Self { signer, wallet })
}
pub fn address(&self) -> Address {
self.signer.address()
}
pub fn signer(&self) -> &PrivateKeySigner {
&self.signer
}
pub fn ethereum_wallet(&self) -> &EthereumWallet {
&self.wallet
}
}