obtainTokenWithFaucet slight improvement

This commit is contained in:
Sosthene 2024-05-22 23:36:18 +02:00
parent a251458f04
commit 30c3ec9673
2 changed files with 44 additions and 32 deletions

View File

@ -900,16 +900,19 @@ pub fn try_decrypt_with_key(cipher: String, key: String) -> ApiResult<String> {
} }
#[wasm_bindgen] #[wasm_bindgen]
pub fn create_faucet_msg() -> ApiResult<FaucetMessage> { pub fn create_faucet_msg() -> ApiResult<CachedMessage> {
let user = lock_connected_user()?; let user = lock_connected_user()?;
let sp_address = user.try_get_recover()?.get_client().get_receiving_address(); let sp_address = user.try_get_recover()?.get_client().get_receiving_address();
let faucet_msg = FaucetMessage::new(sp_address);
// we write the commitment in a networkmessage so that we can keep track let mut commitment = [0u8;64];
let mut network_msg = CachedMessage::new(); thread_rng().fill_bytes(&mut commitment);
network_msg.commitment = Some(faucet_msg.commitment.clone());
network_msg.status = CachedMessageStatus::FaucetWaiting; let mut cached_msg = CachedMessage::new();
lock_messages()?.push(network_msg); cached_msg.recipient = Some(sp_address);
Ok(faucet_msg) cached_msg.commitment = Some(commitment.to_lower_hex_string());
cached_msg.status = CachedMessageStatus::FaucetWaiting;
lock_messages()?.push(cached_msg.clone());
Ok(cached_msg)
} }
#[wasm_bindgen] #[wasm_bindgen]

View File

@ -87,7 +87,7 @@ class Services {
if (availableAmt < 2000) { if (availableAmt < 2000) {
try { try {
await services.obtainTokenWithFaucet(this.sp_address!); await services.obtainTokenWithFaucet();
} catch (error) { } catch (error) {
console.error('Failed to obtain faucet token:', error); console.error('Failed to obtain faucet token:', error);
return; return;
@ -150,16 +150,14 @@ class Services {
return; return;
} }
} catch (error) { } catch (error) {
console.error(error); throw error;
return;
} }
const passwordElement = document.getElementById("password") as HTMLInputElement; const passwordElement = document.getElementById("password") as HTMLInputElement;
const processElement = document.getElementById("selectProcess") as HTMLSelectElement; const processElement = document.getElementById("selectProcess") as HTMLSelectElement;
if (!passwordElement || !processElement) { if (!passwordElement || !processElement) {
console.error("One or more elements not found"); throw 'One or more elements not found';
return;
} }
const password = passwordElement.value; const password = passwordElement.value;
@ -172,7 +170,12 @@ class Services {
const birthday_signet = 50000; const birthday_signet = 50000;
const birthday_main = 500000; const birthday_main = 500000;
let createUserReturn: createUserReturn = services.sdkClient.create_user(password, label, birthday_main, birthday_signet, this.current_process); let createUserReturn: createUserReturn;
try {
createUserReturn = services.sdkClient.create_user(password, label, birthday_main, birthday_signet, this.current_process);
} catch (error) {
throw error;
}
let user = createUserReturn.user; let user = createUserReturn.user;
@ -180,8 +183,7 @@ class Services {
// send the shares on the network // send the shares on the network
const revokeData = user.revoke_data; const revokeData = user.revoke_data;
if (!revokeData) { if (!revokeData) {
console.error('Failed to get revoke data from wasm'); throw 'Failed to get revoke data from wasm';
return;
} }
// user.shares = []; // user.shares = [];
@ -192,17 +194,13 @@ class Services {
const db = await indexedDb.getDb(); const db = await indexedDb.getDb();
await indexedDb.writeObject(db, indexedDb.getStoreList().AnkUser, user, null); await indexedDb.writeObject(db, indexedDb.getStoreList().AnkUser, user, null);
} catch (error) { } catch (error) {
console.error("Failed to write user object :", error); throw `Failed to write user object: ${error}`;
} }
try { try {
this.sp_address = services.sdkClient.get_recover_address(); await services.obtainTokenWithFaucet();
if (this.sp_address) {
console.info('Using sp_address:', this.sp_address);
await services.obtainTokenWithFaucet(this.sp_address);
}
} catch (error) { } catch (error) {
console.error(error); throw error;
} }
await services.displayRevokeImage(new Uint8Array(revokeData)); await services.displayRevokeImage(new Uint8Array(revokeData));
@ -244,7 +242,7 @@ class Services {
this.sp_address = services.sdkClient.get_recover_address(); this.sp_address = services.sdkClient.get_recover_address();
if (this.sp_address) { if (this.sp_address) {
console.info('Using sp_address:', this.sp_address); console.info('Using sp_address:', this.sp_address);
await services.obtainTokenWithFaucet(this.sp_address); await services.obtainTokenWithFaucet();
} }
} }
} catch (error) { } catch (error) {
@ -762,22 +760,33 @@ class Services {
} }
} }
public async obtainTokenWithFaucet(spaddress: string): Promise<string | null> { public async obtainTokenWithFaucet(): Promise<void> {
const services = await Services.getInstance(); const services = await Services.getInstance();
const connection = await services.pickWebsocketConnectionRandom(); const connection = await services.pickWebsocketConnectionRandom();
if (!connection) { if (!connection) {
return null; throw 'no available relay connections';
} }
let cachedMsg: CachedMessage;
try { try {
const flag: AnkFlag = 'Faucet'; const flag: AnkFlag = 'Faucet';
const faucetMsg = services.sdkClient.create_faucet_msg(); cachedMsg = services.sdkClient.create_faucet_msg();
connection.sendMessage(flag, JSON.stringify(faucetMsg)); if (cachedMsg.commitment && cachedMsg.recipient) {
await services.updateMessages(faucetMsg); let faucetMsg: FaucetMessage = {
sp_address: cachedMsg.recipient,
commitment: cachedMsg.commitment,
}
connection.sendMessage(flag, JSON.stringify(faucetMsg));
}
} catch (error) { } catch (error) {
console.error("Failed to obtain tokens with relay ", connection.getUrl()); throw `Failed to obtain tokens with relay ${connection.getUrl()}: ${error}`;
return null; }
try {
await services.updateMessages(cachedMsg);
} catch (error) {
throw error;
} }
return null;
} }
public async updateUser(user: User): Promise<void> { public async updateUser(user: User): Promise<void> {