diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..6a6eee5 --- /dev/null +++ b/Cargo.toml @@ -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" diff --git a/src/api.rs b/src/api.rs new file mode 100644 index 0000000..b24c4a1 --- /dev/null +++ b/src/api.rs @@ -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 { + let mut seed = [0u8; 64]; + rand::thread_rng().fill(&mut seed); + seed.to_vec() +} + +#[wasm_bindgen] +pub fn clear_key(key: Vec) { + 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 { + 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() +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..e5fdf85 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod api;