Skip to content

Commit d184643

Browse files
feat: shielded sync retry (#2176)
1 parent 68e68ec commit d184643

File tree

5 files changed

+109
-72
lines changed

5 files changed

+109
-72
lines changed

apps/namadillo/src/hooks/useOptimisticTransferUpdate.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,23 @@ export const useOptimisticTransferUpdate = () => {
2121
if (!viewingKey) {
2222
return;
2323
}
24-
setStorageShieldedBalance((storage) => ({
25-
...storage,
26-
[viewingKey]: storage[viewingKey].map((item) =>
27-
item.address === token ?
28-
{
29-
...item,
30-
minDenomAmount: sum(item.minDenomAmount, incrementBaseDenomAmount),
31-
}
32-
: item
33-
),
34-
}));
24+
setStorageShieldedBalance((storage) => {
25+
return storage[viewingKey] === undefined ?
26+
storage
27+
: {
28+
...storage,
29+
[viewingKey]: storage[viewingKey].map((item) =>
30+
item.address === token ?
31+
{
32+
...item,
33+
minDenomAmount: sum(
34+
item.minDenomAmount,
35+
incrementBaseDenomAmount
36+
),
37+
}
38+
: item
39+
),
40+
};
41+
});
3542
};
3643
};

apps/namadillo/src/workers/ShieldedSyncWorker.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,30 @@ function newSdk(
7171
}
7272

7373
async function shieldedSync(sdk: Sdk, payload: Sync["payload"]): Promise<void> {
74-
await sdk.rpc.shieldedSync(payload.vks, payload.chainId);
74+
const maxRetries = 10;
75+
const baseDelayMs = 100;
76+
const maxDelayMs = 1000;
77+
78+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
79+
try {
80+
await sdk.rpc.shieldedSync(payload.vks, payload.chainId);
81+
return;
82+
} catch (error) {
83+
if (attempt === maxRetries) {
84+
break;
85+
}
86+
87+
const delay = Math.min(baseDelayMs * (attempt + 1), maxDelayMs);
88+
89+
console.warn(
90+
`shieldedSync attempt ${attempt + 1} failed, retrying in ${delay}ms:`,
91+
error
92+
);
93+
94+
await new Promise((resolve) => setTimeout(resolve, delay));
95+
}
96+
}
97+
throw new Error(`shieldedSync failed after ${maxRetries + 1} attempts.`);
7598
}
7699

77100
Comlink.expose(new Worker());

packages/shared/lib/Cargo.lock

Lines changed: 56 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/shared/lib/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ nodejs = []
1818
web = []
1919

2020
[build-dependencies]
21-
namada_tx = { git = "https://github.com/anoma/namada", tag="libs-v0.150.1" }
21+
namada_tx = { git = "https://github.com/anoma/namada", branch="tiago/indexer-client-backoff-sleep" }
2222

2323
[dependencies]
2424
async-trait = {version = "0.1.51"}
@@ -27,7 +27,7 @@ chrono = "0.4.22"
2727
getrandom = { version = "0.3.0", features = [] }
2828
gloo-utils = { version = "0.1.5", features = ["serde"] }
2929
js-sys = "0.3.60"
30-
namada_sdk = { git = "https://github.com/anoma/namada", tag="libs-v0.150.1", default-features = false }
30+
namada_sdk = { git = "https://github.com/anoma/namada", branch="tiago/indexer-client-backoff-sleep", default-features = false }
3131
rand = {version = "0.8.5"}
3232
rayon = { version = "1.8", optional = true }
3333
rexie = "0.5"

0 commit comments

Comments
 (0)