From 1152a3cf0ee15d25aa9e10f20917ae7dd41df5bb Mon Sep 17 00:00:00 2001 From: Mateusz Jasiuk Date: Thu, 19 Jun 2025 14:49:09 +0200 Subject: [PATCH 1/2] feat: shielded sync retry --- .../src/workers/ShieldedSyncWorker.ts | 25 +++- packages/shared/lib/Cargo.lock | 112 +++++++++--------- packages/shared/lib/Cargo.toml | 4 +- packages/shared/lib/src/query.rs | 11 +- 4 files changed, 91 insertions(+), 61 deletions(-) diff --git a/apps/namadillo/src/workers/ShieldedSyncWorker.ts b/apps/namadillo/src/workers/ShieldedSyncWorker.ts index 1a367db4d2..45e320739e 100644 --- a/apps/namadillo/src/workers/ShieldedSyncWorker.ts +++ b/apps/namadillo/src/workers/ShieldedSyncWorker.ts @@ -71,7 +71,30 @@ function newSdk( } async function shieldedSync(sdk: Sdk, payload: Sync["payload"]): Promise { - await sdk.rpc.shieldedSync(payload.vks, payload.chainId); + const maxRetries = 10; + const baseDelayMs = 100; + const maxDelayMs = 1000; + + for (let attempt = 0; attempt <= maxRetries; attempt++) { + try { + await sdk.rpc.shieldedSync(payload.vks, payload.chainId); + return; + } catch (error) { + if (attempt === maxRetries) { + break; + } + + const delay = Math.min(baseDelayMs * (attempt + 1), maxDelayMs); + + console.warn( + `shieldedSync attempt ${attempt + 1} failed, retrying in ${delay}ms:`, + error + ); + + await new Promise((resolve) => setTimeout(resolve, delay)); + } + } + throw new Error(`shieldedSync failed after ${maxRetries + 1} attempts.`); } Comlink.expose(new Worker()); diff --git a/packages/shared/lib/Cargo.lock b/packages/shared/lib/Cargo.lock index f67a00000c..ed209acd34 100644 --- a/packages/shared/lib/Cargo.lock +++ b/packages/shared/lib/Cargo.lock @@ -3877,8 +3877,8 @@ dependencies = [ [[package]] name = "namada_account" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "namada_core", @@ -3889,8 +3889,8 @@ dependencies = [ [[package]] name = "namada_controller" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "namada_core", "smooth-operator", @@ -3899,8 +3899,8 @@ dependencies = [ [[package]] name = "namada_core" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "bech32 0.11.0", "borsh", @@ -3948,8 +3948,8 @@ dependencies = [ [[package]] name = "namada_ethereum_bridge" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "ethers", @@ -3976,8 +3976,8 @@ dependencies = [ [[package]] name = "namada_events" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "namada_core", @@ -3990,8 +3990,8 @@ dependencies = [ [[package]] name = "namada_gas" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "namada_core", @@ -4003,8 +4003,8 @@ dependencies = [ [[package]] name = "namada_governance" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "itertools 0.14.0", @@ -4026,8 +4026,8 @@ dependencies = [ [[package]] name = "namada_ibc" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "data-encoding", @@ -4061,8 +4061,8 @@ dependencies = [ [[package]] name = "namada_io" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "async-trait", "kdam", @@ -4074,8 +4074,8 @@ dependencies = [ [[package]] name = "namada_macros" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "data-encoding", "proc-macro2", @@ -4086,8 +4086,8 @@ dependencies = [ [[package]] name = "namada_merkle_tree" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "eyre", @@ -4101,8 +4101,8 @@ dependencies = [ [[package]] name = "namada_parameters" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "namada_core", "namada_macros", @@ -4116,8 +4116,8 @@ dependencies = [ [[package]] name = "namada_proof_of_stake" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "itertools 0.14.0", @@ -4140,16 +4140,16 @@ dependencies = [ [[package]] name = "namada_replay_protection" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "namada_core", ] [[package]] name = "namada_sdk" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "async-trait", "bech32 0.11.0", @@ -4218,8 +4218,8 @@ dependencies = [ [[package]] name = "namada_shielded_token" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "async-trait", "borsh", @@ -4259,8 +4259,8 @@ dependencies = [ [[package]] name = "namada_state" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "clru", @@ -4282,8 +4282,8 @@ dependencies = [ [[package]] name = "namada_storage" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "itertools 0.14.0", @@ -4301,8 +4301,8 @@ dependencies = [ [[package]] name = "namada_systems" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "namada_core", "namada_events", @@ -4311,8 +4311,8 @@ dependencies = [ [[package]] name = "namada_token" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "namada_core", @@ -4329,8 +4329,8 @@ dependencies = [ [[package]] name = "namada_trans_token" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "konst", "namada_core", @@ -4346,8 +4346,8 @@ dependencies = [ [[package]] name = "namada_tx" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "ark-bls12-381", "bitflags 2.9.0", @@ -4375,8 +4375,8 @@ dependencies = [ [[package]] name = "namada_tx_env" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "namada_core", "namada_events", @@ -4385,8 +4385,8 @@ dependencies = [ [[package]] name = "namada_vm" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "clru", @@ -4407,8 +4407,8 @@ dependencies = [ [[package]] name = "namada_vote_ext" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "borsh", "namada_core", @@ -4419,8 +4419,8 @@ dependencies = [ [[package]] name = "namada_vp" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "namada_core", "namada_events", @@ -4435,8 +4435,8 @@ dependencies = [ [[package]] name = "namada_vp_env" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "derivative", "masp_primitives", @@ -4450,8 +4450,8 @@ dependencies = [ [[package]] name = "namada_wallet" -version = "0.150.1" -source = "git+https://github.com/anoma/namada?tag=libs-v0.150.1#d9f77b5ba4b64aac9130768681f791b4f208a3b4" +version = "0.150.0" +source = "git+https://github.com/anoma/namada?branch=tiago%2Findexer-client-backoff-sleep#6165b4f1a3a5bc6a5991d9785c3c1e59ef2e5f1d" dependencies = [ "bimap", "borsh", diff --git a/packages/shared/lib/Cargo.toml b/packages/shared/lib/Cargo.toml index 8a09070de1..4078e96802 100644 --- a/packages/shared/lib/Cargo.toml +++ b/packages/shared/lib/Cargo.toml @@ -18,7 +18,7 @@ nodejs = [] web = [] [build-dependencies] -namada_tx = { git = "https://github.com/anoma/namada", tag="libs-v0.150.1" } +namada_tx = { git = "https://github.com/anoma/namada", branch="tiago/indexer-client-backoff-sleep" } [dependencies] async-trait = {version = "0.1.51"} @@ -27,7 +27,7 @@ chrono = "0.4.22" getrandom = { version = "0.3.0", features = [] } gloo-utils = { version = "0.1.5", features = ["serde"] } js-sys = "0.3.60" -namada_sdk = { git = "https://github.com/anoma/namada", tag="libs-v0.150.1", default-features = false } +namada_sdk = { git = "https://github.com/anoma/namada", branch="tiago/indexer-client-backoff-sleep", default-features = false } rand = {version = "0.8.5"} rayon = { version = "1.8", optional = true } rexie = "0.5" diff --git a/packages/shared/lib/src/query.rs b/packages/shared/lib/src/query.rs index 517d820eb9..9a3809652f 100644 --- a/packages/shared/lib/src/query.rs +++ b/packages/shared/lib/src/query.rs @@ -105,7 +105,13 @@ impl Query { // TODO: for now we just concatenate the v1 api path let url = reqwest::Url::parse(&format!("{}/api/v1", url)).unwrap(); - MaspClient::Indexer(IndexerMaspClient::new(client, url, true, 100)) + MaspClient::Indexer(IndexerMaspClient::new( + client, + url, + true, + 100, + Duration::from_millis(5), + )) } else { MaspClient::Ledger(LedgerMaspClient::new( client.clone(), @@ -373,7 +379,8 @@ impl Query { .shutdown_signal(shutdown_signal_web) .block_batch_size(batch_size) .wait_for_last_query_height(true) - .retry_strategy(RetryStrategy::Times(10)) + // Total of requests that can be failed before sync is aborted + .retry_strategy(RetryStrategy::Times(1000)) .build(); let env = sync::TaskEnvWeb::new(); From ab4aab8fcef2c5a686ae7410294c18c22ee8f0c9 Mon Sep 17 00:00:00 2001 From: Mateusz Jasiuk Date: Thu, 19 Jun 2025 15:21:07 +0200 Subject: [PATCH 2/2] fix: transaction error when missing cached balances --- .../src/hooks/useOptimisticTransferUpdate.tsx | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/apps/namadillo/src/hooks/useOptimisticTransferUpdate.tsx b/apps/namadillo/src/hooks/useOptimisticTransferUpdate.tsx index 133d516942..da73011444 100644 --- a/apps/namadillo/src/hooks/useOptimisticTransferUpdate.tsx +++ b/apps/namadillo/src/hooks/useOptimisticTransferUpdate.tsx @@ -21,16 +21,23 @@ export const useOptimisticTransferUpdate = () => { if (!viewingKey) { return; } - setStorageShieldedBalance((storage) => ({ - ...storage, - [viewingKey]: storage[viewingKey].map((item) => - item.address === token ? - { - ...item, - minDenomAmount: sum(item.minDenomAmount, incrementBaseDenomAmount), - } - : item - ), - })); + setStorageShieldedBalance((storage) => { + return storage[viewingKey] === undefined ? + storage + : { + ...storage, + [viewingKey]: storage[viewingKey].map((item) => + item.address === token ? + { + ...item, + minDenomAmount: sum( + item.minDenomAmount, + incrementBaseDenomAmount + ), + } + : item + ), + }; + }); }; };