diff --git a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts index 6c864ed84c..f733ce807c 100644 --- a/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts +++ b/packages/neuron-wallet/src/block-sync-renderer/sync/light-synchronizer.ts @@ -207,7 +207,11 @@ export default class LightSynchronizer extends Synchronizer { const otherTypeSyncBlockNumber = await SyncProgressService.getOtherTypeSyncBlockNumber() const addScripts = [ ...allScripts - .filter(v => !existSyncscripts[scriptToHash(v.script)]) + .filter( + v => + !existSyncscripts[scriptToHash(v.script)] || + +existSyncscripts[scriptToHash(v.script)].blockNumber < +(walletStartBlockMap[v.walletId] ?? 0) + ) .map(v => { const blockNumber = Math.max( parseInt(walletStartBlockMap[v.walletId] ?? '0x0'), diff --git a/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts b/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts index 68b7e9d86f..fc0270735d 100644 --- a/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts +++ b/packages/neuron-wallet/tests/block-sync-renderer/light-synchronizer.test.ts @@ -326,6 +326,47 @@ describe('test light synchronizer', () => { ) expect(setScriptsMock).toHaveBeenLastCalledWith([], 'delete') }) + it('when set the wallet start block number is bigger than current synced block number', async () => { + getScriptsMock.mockResolvedValue([{ script, blockNumber: '0xaa' }]) + const addressMeta = AddressMeta.fromObject({ + walletId: 'walletId', + address, + path: '', + addressIndex: 10, + addressType: 0, + blake160: script.args, + }) + getWalletMinLocalSavedBlockNumberMock.mockResolvedValue({}) + walletGetAllMock.mockReturnValue([{ id: 'walletId', startBlockNumber: '0xffff' }]) + const connect = new LightSynchronizer([addressMeta], '') + //@ts-ignore + await connect.initSyncProgress() + expect(setScriptsMock).toHaveBeenNthCalledWith( + 1, + [ + { + script: addressMeta.generateDefaultLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0xffff', + }, + { + script: addressMeta.generateACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0xffff', + }, + { + script: addressMeta.generateLegacyACPLockScript().toSDK(), + scriptType: 'lock', + walletId: 'walletId', + blockNumber: '0xffff', + }, + ], + 'partial' + ) + expect(setScriptsMock).toHaveBeenLastCalledWith([], 'delete') + }) }) describe('test initSync', () => {