diff --git a/frontend/src/app/services/cache.service.ts b/frontend/src/app/services/cache.service.ts index 15ef99859..5eefd6e0a 100644 --- a/frontend/src/app/services/cache.service.ts +++ b/frontend/src/app/services/cache.service.ts @@ -17,6 +17,7 @@ export class CacheService { txCache: { [txid: string]: Transaction } = {}; + network: string; blockCache: { [height: number]: BlockExtended } = {}; blockLoading: { [height: number]: boolean } = {}; copiesInBlockQueue: { [height: number]: number } = {}; @@ -33,6 +34,10 @@ export class CacheService { this.stateService.chainTip$.subscribe((height) => { this.tip = height; }); + this.stateService.networkChanged$.subscribe((network) => { + this.network = network; + this.resetBlockCache(); + }); } setTxCache(transactions) { @@ -68,15 +73,17 @@ export class CacheService { } catch (e) { console.log("failed to load blocks: ", e.message); } - for (let i = 0; i < chunkSize; i++) { - delete this.blockLoading[maxHeight - i]; - } if (result && result.length) { result.forEach(block => { - this.addBlockToCache(block); - this.loadedBlocks$.next(block); + if (this.blockLoading[block.height]) { + this.addBlockToCache(block); + this.loadedBlocks$.next(block); + } }); } + for (let i = 0; i < chunkSize; i++) { + delete this.blockLoading[maxHeight - i]; + } this.clearBlocks(); } else { this.bumpBlockPriority(height); @@ -104,6 +111,14 @@ export class CacheService { } } + // remove all blocks from the cache + resetBlockCache() { + this.blockCache = {}; + this.blockLoading = {}; + this.copiesInBlockQueue = {}; + this.blockPriorities = []; + } + getCachedBlock(height) { return this.blockCache[height]; }