48 lines
972 B
Rust
48 lines
972 B
Rust
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());
|
|
}
|
|
}
|