use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
pub enum WalletRequest {
Init { mnemonic: String },
GetEthAddress,
GetSolanaAddress,
SignTransaction { chain: u32, tx_data: Vec<u8> },
GetBalance { chain: u32 },
}
#[derive(Debug, Serialize, Deserialize)]
pub enum WalletResponse {
Success { data: Vec<u8> },
Error { message: String },
}
pub struct WalletClient {
#[allow(dead_code)]
_stream: Option<std::net::TcpStream>,
}
impl WalletClient {
pub fn new() -> Result<Self, String> {
Ok(Self { _stream: None })
}
pub fn wallet_eth_address(&mut self, buf: &mut [u8]) -> Result<usize, String> {
let addr = "0x742d35Cc6634C0532925a3b844Bc9e7595f42bBe";
let bytes = addr.as_bytes();
let len = bytes.len().min(buf.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
pub fn wallet_solana_address(&mut self, buf: &mut [u8]) -> Result<usize, String> {
let addr = "7xK5Zq7L9qZxK5Zq7L9qZxK5Zq7L9qZxK5";
let bytes = addr.as_bytes();
let len = bytes.len().min(buf.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(len)
}
pub fn wallet_sign_transaction(&self, _chain: u32, _tx_data: &[u8], sig: &mut [u8]) -> Result<usize, String> {
let mock_sig = vec![0u8; 64];
let len = mock_sig.len().min(sig.len());
sig[..len].copy_from_slice(&mock_sig[..len]);
Ok(len)
}
pub fn wallet_get_balance(&self, _chain: u32, buf: &mut [u8]) -> Result<u64, String> {
let balance = "2500000000000000000";
let bytes = balance.as_bytes();
let len = bytes.len().min(buf.len());
buf[..len].copy_from_slice(&bytes[..len]);
Ok(2500000000000000000u64)
}
}