generate new key, new client, get address

This commit is contained in:
Sosthene00 2024-02-15 17:44:25 +01:00
parent c8d6af32e9
commit 320a2cd5bb
3 changed files with 71 additions and 0 deletions

22
Cargo.toml Normal file
View File

@ -0,0 +1,22 @@
[package]
name = "sdk_client"
version = "0.1.0"
edition = "2021"
[lib]
name = "sdk_client"
crate-type = ["cdylib"]
[dependencies]
sp_backend = { git = "https://github.com/Sosthene00/sp-backend", branch = "sp_client" }
anyhow = "1.0"
serde = { version = "1.0.188", features = ["derive"] }
serde_json = "1.0"
wasm-bindgen = "0.2.91"
getrandom = { version="0.2.12", features = ["js"] }
wasm-logger = "0.2.0"
rand = "0.8.5"
log = "0.4.6"
[dev-dependencies]
wasm-bindgen-test = "0.3"

48
src/api.rs Normal file
View File

@ -0,0 +1,48 @@
use rand::Rng;
use wasm_bindgen::prelude::*;
use sp_backend::spclient::{derive_keys_from_seed, SpClient};
use sp_backend::silentpayments::sending::SilentPaymentAddress;
use sp_backend::spclient::SpendKey;
const IS_TESTNET: bool = true;
#[wasm_bindgen]
pub fn setup() {
wasm_logger::init(wasm_logger::Config::default());
}
#[wasm_bindgen]
pub fn new_key() -> Vec<u8> {
let mut seed = [0u8; 64];
rand::thread_rng().fill(&mut seed);
seed.to_vec()
}
#[wasm_bindgen]
pub fn clear_key(key: Vec<u8>) {
for mut b in key {
b = 0;
assert!(b == 0u8);
}
}
#[wasm_bindgen]
pub fn generate_sp_wallet_from_key(birthday: u32, is_testnet: bool) -> Option<String> {
let mut seed = [0u8;64];
seed.copy_from_slice(&new_key());
let (scan_sk, spend_sk) = derive_keys_from_seed(&seed, is_testnet).ok()?;
let sp_client = SpClient::new("".to_owned(), scan_sk, SpendKey::Secret(spend_sk), None, birthday, IS_TESTNET).ok()?;
log::info!(
"Created client for sp with address: {}",
sp_client.get_receiving_address()
);
serde_json::to_string(&sp_client).ok()
}
#[wasm_bindgen]
pub fn get_receiving_address(sp_client: String) -> String {
let sp_client: SpClient = serde_json::from_str(&sp_client).unwrap();
sp_client.get_receiving_address()
}

1
src/lib.rs Normal file
View File

@ -0,0 +1 @@
pub mod api;