增加重置钱包的方法

This commit is contained in:
cebgcontract 2022-10-23 11:16:03 +08:00
parent 880d19ce33
commit cdfec2b61a
3 changed files with 38 additions and 24 deletions

View File

@ -6,7 +6,7 @@
use std::ffi::{CStr, CString};
use std::os::raw::c_char;
use rustwallet::{new_wallet, get_address, restore_wallet, free_cwallet, sign, CWallet};
use rustwallet::{new_wallet, get_address, restore_wallet, reset_wallet, free_cwallet, sign, CWallet};
macro_rules! print_cchar{
($p1:expr) => (
@ -70,8 +70,13 @@ fn main() {
let address3 = get_address(&tmp_cwallet2);
print_cchar!(address3);
let sign = sign(&tmp_cwallet2,str_to_cchar!("111"));
print_cchar!(sign);
let sign_str = sign(&tmp_cwallet2,str_to_cchar!("111"));
print_cchar!(sign_str);
let cwallet3 = reset_wallet(&tmp_cwallet2);
print_wallet(&cwallet3);
let sign_str2 = sign(&cwallet3, str_to_cchar!("111"));
print_cchar!(sign_str2);
// print_wallet(&tmp_cwallet2);
// println!("---- saving the wallet to wallet.json ----");
// save_wallet(&wallet);

View File

@ -102,6 +102,15 @@ pub unsafe extern "C" fn restore_wallet(cw: &CWallet) -> CWallet {
convert_to_cwallet(rust_wallet)
}
#[no_mangle]
pub unsafe extern "C" fn reset_wallet(cw: &CWallet) -> CWallet {
println!("restore wallet");
let rust_wallet = convert_to_rwallet(cw);
let rust_wallet2 = rust_wallet.reset_wallet();
println!("new rust_wallet: {:?}", &rust_wallet2);
convert_to_cwallet(rust_wallet2)
}
#[no_mangle]
pub unsafe extern "C" fn free_cwallet(cw: CWallet) {
drop(CString::from_raw(cw.msg_key));

View File

@ -98,32 +98,32 @@ impl Wallet {
}
}
pub fn restore_wallet(msg: &str, _key_master: &str, _key_second: Option<&str>, _key_backup: Option<&str>) -> Self {
let key_second: Option<String> = match _key_second {
None => None,
Some(val) => Some(val.to_string())
};
let key_backup: Option<String> = match _key_backup {
None => None,
Some(val) => Some(val.to_string())
};
Wallet {
msg_key: msg.to_string(),
master_key: _key_master.to_string(),
second_key: key_second,
backup_key: key_backup
}
}
// pub fn restore_wallet(msg: &str, _key_master: &str, _key_second: Option<&str>, _key_backup: Option<&str>) -> Self {
// let key_second: Option<String> = match _key_second {
// None => None,
// Some(val) => Some(val.to_string())
// };
// let key_backup: Option<String> = match _key_backup {
// None => None,
// Some(val) => Some(val.to_string())
// };
// Wallet {
// msg_key: msg.to_string(),
// master_key: _key_master.to_string(),
// second_key: key_second,
// backup_key: key_backup
// }
// }
pub fn reset_eallet(msg: &str, _key_master: &str, _key_second: Option<&str>, _key_backup: Option<&str>) -> Self{
let tmp_wallet = Wallet::restore_wallet(msg, _key_master, _key_second, _key_backup);
let secret_key = tmp_wallet.get_secret_key();
pub fn reset_wallet(&self) -> Self{
let secret_key = self.get_secret_key();
let s = hex::encode(&secret_key.serialize_secret());
let shares_str = generate_sss_keypair(msg, &s);
let shares_str = generate_sss_keypair(&self.msg_key, &s);
let second_key = shares_str.get(1).map(String::clone);
let backup_key = shares_str.get(2).map(String::clone);
Wallet {
msg_key: msg.to_string(),
msg_key: self.msg_key.clone(),
master_key: shares_str.get(0).unwrap().to_string(),
second_key: second_key,
backup_key: backup_key