use secp256k1::{ rand, Message, Secp256k1 }; use sha2::{Digest, Sha256}; pub type Address = String; #[derive(Debug, bincode::Decode, bincode::Encode)] pub struct Account { address: Address, balance: u64, nonce: u64, login_method: LoginMethod, } #[derive(Debug, Clone, bincode::Decode, bincode::Encode)] pub enum LoginMethod { Password { password_hash: String, } } impl Account { pub fn nonce(&self) -> u64 { self.nonce } pub fn balance(&self) -> u64 { self.balance } pub fn address(&self) -> &Address { &self.address } pub fn new() { let secp = Secp256k1::new(); let (secret_key, public_key) = secp.generate_keypair(&mut rand::rng()); let digest = Sha256::digest("Hello World"); let message = Message::from_digest(digest.into()); let sig = secp.sign_ecdsa(message, &secret_key); let pk_hash = Sha256::digest(secret_key); assert!(secp.verify_ecdsa(message, &sig, &public_key).is_ok()); } }