1use alloy::{network::EthereumWallet, primitives::Address, signers::local::PrivateKeySigner};
2
3use crate::error::{ClobError, Result};
4
5#[derive(Clone, Debug)]
7pub struct Wallet {
8 signer: PrivateKeySigner,
9 wallet: EthereumWallet,
10}
11
12impl Wallet {
13 pub fn from_private_key(private_key: &str) -> Result<Self> {
15 let signer = private_key
16 .parse::<PrivateKeySigner>()
17 .map_err(|e| ClobError::Crypto(format!("Failed to parse private key: {}", e)))?;
18 let wallet = EthereumWallet::from(signer.clone());
19
20 Ok(Self { signer, wallet })
21 }
22
23 pub fn address(&self) -> Address {
25 self.signer.address()
26 }
27
28 pub fn signer(&self) -> &PrivateKeySigner {
30 &self.signer
31 }
32
33 pub fn ethereum_wallet(&self) -> &EthereumWallet {
35 &self.wallet
36 }
37}