From ac5209c5301fa279cbd04dfbd5b3136f6d6580a7 Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 18 Nov 2019 16:53:07 +0800 Subject: [PATCH 1/5] fix: Filter address by version (mainnet/testnet) when updating --- .../src/database/address/address-dao.ts | 12 ++++++-- .../neuron-wallet/src/services/addresses.ts | 28 +++++-------------- .../tests/services/address.test.ts | 6 ---- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/packages/neuron-wallet/src/database/address/address-dao.ts b/packages/neuron-wallet/src/database/address/address-dao.ts index 9d6414ca3f..1821c6dbe7 100644 --- a/packages/neuron-wallet/src/database/address/address-dao.ts +++ b/packages/neuron-wallet/src/database/address/address-dao.ts @@ -177,8 +177,12 @@ export default class AddressDao { })[0] } - public static updateDescription(walletId: string, address: string, description: string): Address | undefined { - const item = AddressDao.findByAddress(address, walletId) + public static updateDescription(walletId: string, address: string, version: AddressVersion, description: string): Address | undefined { + const item = AddressStore.getAll().find(value => { + return value.walletId === walletId + && value.address === address + && value.version === version + }) if (!item) { return undefined } @@ -243,7 +247,9 @@ class AddressStore { static update(address: Address): Address { const all = AddressStore.getAll() const exist = all.findIndex(value => { - return value.walletId === address.walletId && value.address === address.address + return value.walletId === address.walletId + && value.address === address.address + && value.version === address.version }) if (exist !== -1) { all[exist] = address diff --git a/packages/neuron-wallet/src/services/addresses.ts b/packages/neuron-wallet/src/services/addresses.ts index a689eeaa02..9fd94c637c 100644 --- a/packages/neuron-wallet/src/services/addresses.ts +++ b/packages/neuron-wallet/src/services/addresses.ts @@ -17,11 +17,6 @@ export interface AddressMetaInfo { } export default class AddressService { - public static isAddressUsed = (address: string, walletId: string): boolean => { - const addressEntity = AddressDao.findByAddress(address, walletId) - return !!addressEntity - } - public static generateAndSave = ( walletId: string, extendedKey: AccountExtendedPublicKey, @@ -52,9 +47,8 @@ export default class AddressService { } private static notifyAddressCreated = (addresses: AddressInterface[], isImporting: boolean | undefined) => { - const version = AddressService.getAddressVersion() const addrs = addresses - .filter(addr => addr.version === version) + .filter(addr => addr.version === AddressService.getAddressVersion()) .map(addr => { const address = addr address.isImporting = isImporting @@ -190,9 +184,7 @@ export default class AddressService { } public static nextUnusedAddress = (walletId: string): AddressInterface | undefined => { - const version = AddressService.getAddressVersion() - - const addressEntity = AddressDao.nextUnusedAddress(walletId, version) + const addressEntity = AddressDao.nextUnusedAddress(walletId, AddressService.getAddressVersion()) if (!addressEntity) { return undefined } @@ -200,9 +192,7 @@ export default class AddressService { } public static nextUnusedChangeAddress = (walletId: string): AddressInterface | undefined => { - const version = AddressService.getAddressVersion() - - const addressEntity = AddressDao.nextUnusedChangeAddress(walletId, version) + const addressEntity = AddressDao.nextUnusedChangeAddress(walletId, AddressService.getAddressVersion()) if (!addressEntity) { return undefined } @@ -210,23 +200,19 @@ export default class AddressService { } public static allAddresses = (): AddressInterface[] => { - const version = AddressService.getAddressVersion() - - return AddressDao.allAddresses(version) + return AddressDao.allAddresses( AddressService.getAddressVersion()) } public static allAddressesByWalletId = (walletId: string): AddressInterface[] => { - const version = AddressService.getAddressVersion() - return AddressDao.allAddressesByWalletId(walletId, version) + return AddressDao.allAddressesByWalletId(walletId, AddressService.getAddressVersion()) } public static usedAddresses = (walletId: string): AddressInterface[] => { - const version = AddressService.getAddressVersion() - return AddressDao.usedAddressesByWalletId(walletId, version) + return AddressDao.usedAddressesByWalletId(walletId, AddressService.getAddressVersion()) } public static updateDescription = (walletId: string, address: string, description: string): AddressInterface | undefined => { - return AddressDao.updateDescription(walletId, address, description) + return AddressDao.updateDescription(walletId, address, AddressService.getAddressVersion(), description) } public static deleteByWalletId = (walletId: string): AddressInterface[] => { diff --git a/packages/neuron-wallet/tests/services/address.test.ts b/packages/neuron-wallet/tests/services/address.test.ts index 2297c8f3a6..155875a7b7 100644 --- a/packages/neuron-wallet/tests/services/address.test.ts +++ b/packages/neuron-wallet/tests/services/address.test.ts @@ -139,12 +139,6 @@ describe('Key tests with db', () => { expect(all.length).toEqual((2 + 1) * 2 * 2) }) - it('isAddressUsed', () => { - AddressDao.create([address, usedAddress]) - const used = AddressService.isAddressUsed(address.address, walletId) - expect(used).toBe(true) - }) - it('nextUnusedAddress', () => { AddressDao.create([address, usedAddress, changeAddress]) const addr = AddressService.nextUnusedAddress(walletId) From eb9f2a01423f2b6d7e726d7f8dff24de7d0fb2d4 Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 18 Nov 2019 21:18:38 +0800 Subject: [PATCH 2/5] refactor: Delete check-and-save --- .../src/services/sync/check-and-save/index.ts | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 packages/neuron-wallet/src/services/sync/check-and-save/index.ts diff --git a/packages/neuron-wallet/src/services/sync/check-and-save/index.ts b/packages/neuron-wallet/src/services/sync/check-and-save/index.ts deleted file mode 100644 index 50d0a28be4..0000000000 --- a/packages/neuron-wallet/src/services/sync/check-and-save/index.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Block } from 'types/cell-types' -import CheckTx from './tx' - -export default class CheckAndSave { - private block: Block - private lockHashes: string[] - private url: string - private daoScriptHash: string - - constructor(block: Block, lockHashes: string[], url: string, daoScriptHash: string) { - this.block = block - this.lockHashes = lockHashes - this.url = url - this.daoScriptHash = daoScriptHash - } - - public process = async (): Promise => { - const txs = this.block.transactions - let result: boolean[] = [] - for (const tx of txs) { - const checkTx = new CheckTx(tx, this.url, this.daoScriptHash) - const checkResult = await checkTx.checkAndSave(this.lockHashes) - result.push(checkResult) - } - return result - } -} From 8be3d62314d7f909b259cbf0c9695f9f07151a8b Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 18 Nov 2019 21:20:15 +0800 Subject: [PATCH 3/5] refactor: No need to check address version --- packages/neuron-wallet/src/database/address/address-dao.ts | 7 ++----- packages/neuron-wallet/src/services/addresses.ts | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/neuron-wallet/src/database/address/address-dao.ts b/packages/neuron-wallet/src/database/address/address-dao.ts index 1821c6dbe7..d4dd7b00d8 100644 --- a/packages/neuron-wallet/src/database/address/address-dao.ts +++ b/packages/neuron-wallet/src/database/address/address-dao.ts @@ -177,11 +177,10 @@ export default class AddressDao { })[0] } - public static updateDescription(walletId: string, address: string, version: AddressVersion, description: string): Address | undefined { + public static updateDescription(walletId: string, address: string, description: string): Address | undefined { const item = AddressStore.getAll().find(value => { return value.walletId === walletId && value.address === address - && value.version === version }) if (!item) { return undefined @@ -247,9 +246,7 @@ class AddressStore { static update(address: Address): Address { const all = AddressStore.getAll() const exist = all.findIndex(value => { - return value.walletId === address.walletId - && value.address === address.address - && value.version === address.version + return value.walletId === address.walletId && value.address === address.address }) if (exist !== -1) { all[exist] = address diff --git a/packages/neuron-wallet/src/services/addresses.ts b/packages/neuron-wallet/src/services/addresses.ts index 9fd94c637c..9d876969d9 100644 --- a/packages/neuron-wallet/src/services/addresses.ts +++ b/packages/neuron-wallet/src/services/addresses.ts @@ -212,7 +212,7 @@ export default class AddressService { } public static updateDescription = (walletId: string, address: string, description: string): AddressInterface | undefined => { - return AddressDao.updateDescription(walletId, address, AddressService.getAddressVersion(), description) + return AddressDao.updateDescription(walletId, address, description) } public static deleteByWalletId = (walletId: string): AddressInterface[] => { From 3ed944c6077df27d0c417050127b4ef0d04dceb3 Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 18 Nov 2019 22:16:38 +0800 Subject: [PATCH 4/5] fix: Mainnet check function call --- packages/neuron-wallet/src/services/indexer/queue.ts | 6 +++--- .../src/services/sync/check-and-save/tx.ts | 4 ++-- packages/neuron-wallet/tests/services/address.test.ts | 10 +++++----- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/neuron-wallet/src/services/indexer/queue.ts b/packages/neuron-wallet/src/services/indexer/queue.ts index dc7cb192f0..b21234c887 100644 --- a/packages/neuron-wallet/src/services/indexer/queue.ts +++ b/packages/neuron-wallet/src/services/indexer/queue.ts @@ -215,7 +215,7 @@ export default class IndexerQueue { if (type === TxPointType.CreatedBy && this.latestCreatedBy.includes(txUniqueFlag)) { const address = LockUtils.lockScriptToAddress( transaction.outputs![parseInt(txPoint.index, 16)].lock, - NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet ) AddressesUsedSubject.getSubject().next({ addresses: [address], @@ -280,7 +280,7 @@ export default class IndexerQueue { if (type === TxPointType.CreatedBy) { address = LockUtils.lockScriptToAddress( transaction.outputs![parseInt(txPoint.index, 16)].lock, - NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet ) this.latestCreatedBy.push(txUniqueFlag) } else if (type === TxPointType.ConsumedBy) { @@ -289,7 +289,7 @@ export default class IndexerQueue { if (output) { address = LockUtils.lockScriptToAddress( output.lock, - NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet ) } } diff --git a/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts b/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts index c6f67bd139..a0f0636ac6 100644 --- a/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts +++ b/packages/neuron-wallet/src/services/sync/check-and-save/tx.ts @@ -36,7 +36,7 @@ export default class CheckTx { const outputAddresses: string[] = outputs.map(output => { return LockUtils.lockScriptToAddress( output.lock, - NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet ) }) @@ -93,7 +93,7 @@ export default class CheckTx { addresses.push( LockUtils.lockScriptToAddress( output.lock, - NetworksService.getInstance().isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet + NetworksService.getInstance().isMainnet() ? AddressPrefix.Mainnet : AddressPrefix.Testnet ) ) } diff --git a/packages/neuron-wallet/tests/services/address.test.ts b/packages/neuron-wallet/tests/services/address.test.ts index 155875a7b7..f2d05f477a 100644 --- a/packages/neuron-wallet/tests/services/address.test.ts +++ b/packages/neuron-wallet/tests/services/address.test.ts @@ -54,7 +54,7 @@ describe('Key tests with db', () => { pendingBalance: '0', balance: '0', blake160: '0x36c329ed630d6ce750712a477543672adab57f4c', - version: NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet, + version: NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet, } const usedAddress: Address = { @@ -69,7 +69,7 @@ describe('Key tests with db', () => { pendingBalance: '0', balance: '0', blake160: '0x36c329ed630d6ce750712a477543672adab57f4c', - version: NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet, + version: NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet, } const changeAddress: Address = { @@ -84,7 +84,7 @@ describe('Key tests with db', () => { pendingBalance: '0', balance: '0', blake160: '0x36c329ed630d6ce750712a477543672adab57f4c', - version: NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet, + version: NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet, } beforeEach(() => { @@ -142,14 +142,14 @@ describe('Key tests with db', () => { it('nextUnusedAddress', () => { AddressDao.create([address, usedAddress, changeAddress]) const addr = AddressService.nextUnusedAddress(walletId) - const addrDao = AddressDao.nextUnusedAddress(walletId, NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet) + const addrDao = AddressDao.nextUnusedAddress(walletId, NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet) expect(addr).toEqual(addrDao) }) it('nextUnusedChangeAddress', () => { AddressDao.create([address, usedAddress, changeAddress]) const addr = AddressService.nextUnusedChangeAddress(walletId) - const addrDao = AddressDao.nextUnusedChangeAddress(walletId, NetworksService.getInstance().isMainnet ? AddressVersion.Mainnet : AddressVersion.Testnet) + const addrDao = AddressDao.nextUnusedChangeAddress(walletId, NetworksService.getInstance().isMainnet() ? AddressVersion.Mainnet : AddressVersion.Testnet) expect(addr).toEqual(addrDao) }) From 8d58a11593e309006b2297a6e4e5df1936d5f367 Mon Sep 17 00:00:00 2001 From: James Chen Date: Mon, 18 Nov 2019 22:43:35 +0800 Subject: [PATCH 5/5] refactor: Delete AddressDao.findByAddress --- .../neuron-wallet/src/database/address/address-dao.ts | 6 ------ packages/neuron-wallet/tests/database/address/dao.test.ts | 8 -------- 2 files changed, 14 deletions(-) diff --git a/packages/neuron-wallet/src/database/address/address-dao.ts b/packages/neuron-wallet/src/database/address/address-dao.ts index d4dd7b00d8..a748b18907 100644 --- a/packages/neuron-wallet/src/database/address/address-dao.ts +++ b/packages/neuron-wallet/src/database/address/address-dao.ts @@ -154,12 +154,6 @@ export default class AddressDao { }) } - public static findByAddress(address: string, walletId: string): Address | undefined { - return AddressStore.getAll().find(value => { - return value.address === address && value.walletId == walletId - }) - } - public static findByAddresses(addresses: string[]): Address[] { return AddressStore.getAll().filter(value => { return addresses.includes(value.address) diff --git a/packages/neuron-wallet/tests/database/address/dao.test.ts b/packages/neuron-wallet/tests/database/address/dao.test.ts index 68615fad3c..1859fbf48e 100644 --- a/packages/neuron-wallet/tests/database/address/dao.test.ts +++ b/packages/neuron-wallet/tests/database/address/dao.test.ts @@ -143,14 +143,6 @@ describe('Address Dao tests', () => { expect(walletTwo.length).toEqual(1) }) - it('findByAddress', () => { - AddressDao.create([address, usedAddress]) - - const one = AddressDao.findByAddress(address.address, address.walletId) - - expect(one!.address).toEqual(address.address) - }) - it('unusedAddressesCount', () => { AddressDao.create([address, changeAddress])