Skip to content

Commit 1fa1b6b

Browse files
committed
feat: enhance spec upgrade cache persistence with current spec version checks
1 parent 6d5232d commit 1fa1b6b

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

src/hooks/useNetworkState.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,10 @@ export const useNetworkState = () => {
4141
const specUpgradePromisesRef = useRef(new Map<string, Promise<UpgradeInfo>>())
4242
const apisRef = useRef(new Map<NetworkId, ApiPromise>())
4343
const pendingUpgradeRequestsRef = useRef(new Set<string>())
44+
const currentSpecVersionsRef = useRef(new Map<NetworkId, number>())
4445

4546
const persistCache = useCallback(() => {
46-
persistSpecUpgradeCache(specUpgradeCacheRef.current, NETWORK_STORAGE_KEYS)
47+
persistSpecUpgradeCache(specUpgradeCacheRef.current, NETWORK_STORAGE_KEYS, currentSpecVersionsRef.current)
4748
}, [])
4849

4950
useEffect(() => {
@@ -372,6 +373,24 @@ export const useNetworkState = () => {
372373
}
373374
}, [connectNetwork])
374375

376+
useEffect(() => {
377+
const specVersions = currentSpecVersionsRef.current
378+
const seen = new Set<NetworkId>()
379+
380+
for (const [networkId, state] of Object.entries(networkState) as Array<[NetworkId, NetworkRowState | undefined]>) {
381+
if (state?.specVersion != null) {
382+
specVersions.set(networkId, state.specVersion)
383+
seen.add(networkId)
384+
}
385+
}
386+
387+
for (const networkId of Array.from(specVersions.keys())) {
388+
if (!seen.has(networkId)) {
389+
specVersions.delete(networkId)
390+
}
391+
}
392+
}, [networkState])
393+
375394
useEffect(() => {
376395
if (cancelledRef.current) {
377396
return

src/specUpgradeCachePersistence.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,35 @@ const normalizeUpgrade = (upgrade: UpgradeInfo): UpgradeInfo => ({
1414
timestampMs: upgrade.timestampMs,
1515
})
1616

17-
export const persistSpecUpgradeCache = (cache: Map<string, UpgradeInfo>, networkStorageKeys: Map<NetworkId, string>) => {
17+
export const persistSpecUpgradeCache = (
18+
cache: Map<string, UpgradeInfo>,
19+
networkStorageKeys: Map<NetworkId, string>,
20+
currentSpecVersions?: Map<NetworkId, number>,
21+
) => {
1822
if (typeof window === 'undefined' || !window.localStorage) {
1923
return
2024
}
2125

2226
try {
2327
const groupedByNetwork = new Map<NetworkId, Array<[number, UpgradeInfo]>>()
28+
const staleCacheKeys: string[] = []
2429

2530
for (const [cacheKey, upgradeInfo] of cache.entries()) {
2631
const separatorIndex = cacheKey.indexOf(':')
2732
if (separatorIndex === -1) {
33+
staleCacheKeys.push(cacheKey)
2834
continue
2935
}
3036
const networkId = cacheKey.slice(0, separatorIndex) as NetworkId
3137
const specVersionValue = cacheKey.slice(separatorIndex + 1)
3238
const specVersion = parseSpecVersion(specVersionValue)
3339
if (specVersion == null) {
40+
staleCacheKeys.push(cacheKey)
41+
continue
42+
}
43+
const currentSpecVersion = currentSpecVersions?.get(networkId)
44+
if (currentSpecVersion != null && specVersion !== currentSpecVersion) {
45+
staleCacheKeys.push(cacheKey)
3446
continue
3547
}
3648
const entriesForNetwork = groupedByNetwork.get(networkId)
@@ -42,6 +54,10 @@ export const persistSpecUpgradeCache = (cache: Map<string, UpgradeInfo>, network
4254
}
4355
}
4456

57+
for (const cacheKey of staleCacheKeys) {
58+
cache.delete(cacheKey)
59+
}
60+
4561
const persistedKeys = new Set<string>()
4662

4763
for (const [networkId, entries] of groupedByNetwork) {

0 commit comments

Comments
 (0)