polyte_clob/account/
wallet.rs

1use alloy::{network::EthereumWallet, primitives::Address, signers::local::PrivateKeySigner};
2
3use crate::error::{ClobError, Result};
4
5/// Wallet wrapper for signing operations
6#[derive(Clone, Debug)]
7pub struct Wallet {
8    signer: PrivateKeySigner,
9    wallet: EthereumWallet,
10}
11
12impl Wallet {
13    /// Create wallet from private key hex string
14    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    /// Get the wallet address
24    pub fn address(&self) -> Address {
25        self.signer.address()
26    }
27
28    /// Get reference to the signer
29    pub fn signer(&self) -> &PrivateKeySigner {
30        &self.signer
31    }
32
33    /// Get reference to the Ethereum wallet
34    pub fn ethereum_wallet(&self) -> &EthereumWallet {
35        &self.wallet
36    }
37}