Better error management in api
This commit is contained in:
parent
d081bc1f78
commit
70dc18ef97
@ -1,15 +1,49 @@
|
|||||||
use rand::Rng;
|
use rand::Rng;
|
||||||
|
|
||||||
|
use anyhow::Error as AnyhowError;
|
||||||
|
use sp_backend::silentpayments::Error as SpError;
|
||||||
|
use serde_json::Error as SerdeJsonError;
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use sp_backend::silentpayments::sending::SilentPaymentAddress;
|
use sp_backend::silentpayments::sending::SilentPaymentAddress;
|
||||||
use wasm_bindgen::prelude::*;
|
|
||||||
use tsify::Tsify;
|
use tsify::Tsify;
|
||||||
|
use wasm_bindgen::convert::FromWasmAbi;
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
use sp_backend::spclient::SpendKey;
|
use sp_backend::spclient::SpendKey;
|
||||||
use sp_backend::spclient::{derive_keys_from_seed, SpClient, OutputList};
|
type ApiResult<T: FromWasmAbi> = Result<T, ApiError>;
|
||||||
|
|
||||||
const IS_TESTNET: bool = true;
|
const IS_TESTNET: bool = true;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct ApiError {
|
||||||
|
message: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<AnyhowError> for ApiError {
|
||||||
|
fn from(value: AnyhowError) -> Self {
|
||||||
|
ApiError {message: value.to_string()}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<SpError> for ApiError {
|
||||||
|
fn from(value: SpError) -> Self {
|
||||||
|
ApiError { message: value.to_string() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<SerdeJsonError> for ApiError {
|
||||||
|
fn from(value: SerdeJsonError) -> Self {
|
||||||
|
ApiError { message: value.to_string() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Into<JsValue> for ApiError {
|
||||||
|
fn into(self) -> JsValue {
|
||||||
|
JsValue::from_str(&self.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Tsify, Serialize, Deserialize)]
|
#[derive(Tsify, Serialize, Deserialize)]
|
||||||
#[tsify(into_wasm_abi)]
|
#[tsify(into_wasm_abi)]
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
@ -24,36 +58,43 @@ pub fn setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
pub fn generate_sp_wallet(label: Option<String>, birthday: u32, is_testnet: bool) -> Option<generate_sp_wallet_return> {
|
pub fn generate_sp_wallet(
|
||||||
|
label: Option<String>,
|
||||||
|
birthday: u32,
|
||||||
|
is_testnet: bool,
|
||||||
|
) -> ApiResult<generate_sp_wallet_return> {
|
||||||
let mut seed = [0u8; 64];
|
let mut seed = [0u8; 64];
|
||||||
rand::thread_rng().fill(&mut seed);
|
rand::thread_rng().fill(&mut seed);
|
||||||
let (scan_sk, spend_sk) = derive_keys_from_seed(&seed, is_testnet).ok()?;
|
let (scan_sk, spend_sk) = derive_keys_from_seed(&seed, is_testnet)?;
|
||||||
let sp_client = SpClient::new(
|
let sp_client = SpClient::new(
|
||||||
label.unwrap_or("default".into()),
|
label.unwrap_or("default".into()),
|
||||||
scan_sk,
|
scan_sk,
|
||||||
SpendKey::Secret(spend_sk),
|
SpendKey::Secret(spend_sk),
|
||||||
None,
|
None,
|
||||||
IS_TESTNET,
|
IS_TESTNET,
|
||||||
)
|
)?;
|
||||||
.ok()?;
|
let our_address: SilentPaymentAddress = sp_client.get_receiving_address().try_into()?;
|
||||||
let our_address: SilentPaymentAddress = sp_client.get_receiving_address().try_into().ok()?;
|
|
||||||
log::info!(
|
log::info!(
|
||||||
"Created client for sp with address: {}",
|
"Created client for sp with address: {}",
|
||||||
our_address.to_string()
|
our_address.to_string()
|
||||||
);
|
);
|
||||||
|
|
||||||
let sp_client_json = serde_json::to_string(&sp_client).ok()?;
|
let sp_client_json = serde_json::to_string(&sp_client)?;
|
||||||
|
|
||||||
// Generate an empty outputs
|
// Generate an empty outputs
|
||||||
let sp_outputs = OutputList::new(our_address.get_scan_key(), our_address.get_spend_key(), birthday);
|
let sp_outputs = OutputList::new(
|
||||||
let sp_outputs_json = serde_json::to_string(&sp_outputs).ok()?;
|
our_address.get_scan_key(),
|
||||||
|
our_address.get_spend_key(),
|
||||||
|
birthday,
|
||||||
|
);
|
||||||
|
let sp_outputs_json = serde_json::to_string(&sp_outputs)?;
|
||||||
|
|
||||||
let res = generate_sp_wallet_return {
|
let res = generate_sp_wallet_return {
|
||||||
sp_client_json,
|
sp_client_json,
|
||||||
sp_outputs_json
|
sp_outputs_json,
|
||||||
};
|
};
|
||||||
|
|
||||||
Some(res)
|
Ok(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user