diff --git a/packages/neuron-wallet/src/controllers/app/index.ts b/packages/neuron-wallet/src/controllers/app/index.ts index e5e404d159..6a0ed85bd5 100644 --- a/packages/neuron-wallet/src/controllers/app/index.ts +++ b/packages/neuron-wallet/src/controllers/app/index.ts @@ -6,6 +6,7 @@ import env from 'env' import { updateApplicationMenu } from './menu' import logger from 'utils/logger' import { subscribe } from './subscribe' +import WalletService from 'services/wallets' const app = electronApp || (remote && remote.app) @@ -65,6 +66,8 @@ export default class AppController { this.mainWindow.show() this.mainWindow.focus() logger.info('The main window is ready to show') + + WalletService.getInstance().generateAddressesIfNecessary() } else { logger.error('The main window is not initialized on ready to show') } diff --git a/packages/neuron-wallet/src/controllers/wallets.ts b/packages/neuron-wallet/src/controllers/wallets.ts index a8aa816d5b..cf4400795a 100644 --- a/packages/neuron-wallet/src/controllers/wallets.ts +++ b/packages/neuron-wallet/src/controllers/wallets.ts @@ -294,26 +294,24 @@ export default class WalletsController { } public static async getAllAddresses(id: string) { - const addresses = await AddressService.allAddressesByWalletId(id).then(addrs => - addrs.map( - ({ - address, - blake160: identifier, - addressType: type, - txCount, - balance, - description = '', - addressIndex: index = '', - }) => ({ - address, - identifier, - type, - txCount, - description, - balance, - index, - }) - ) + const addresses = AddressService.allAddressesByWalletId(id).map( + ({ + address, + blake160: identifier, + addressType: type, + txCount, + balance, + description = '', + addressIndex: index = '', + }) => ({ + address, + identifier, + type, + txCount, + description, + balance, + index, + }) ) return { status: ResponseCode.Success, diff --git a/packages/neuron-wallet/src/database/address/address-dao.ts b/packages/neuron-wallet/src/database/address/address-dao.ts index 76b6b28b5e..f252311fc3 100644 --- a/packages/neuron-wallet/src/database/address/address-dao.ts +++ b/packages/neuron-wallet/src/database/address/address-dao.ts @@ -120,10 +120,11 @@ export default class AddressDao { } public static allAddressesByWalletId(walletId: string, version: AddressVersion): Address[] { - const all = AddressStore.getAll() - return all.filter(value => { - return value.walletId === walletId && value.version === version - }) + return AddressStore.getAll() + .filter(value => value.walletId === walletId && value.version === version) + .sort((lhs, rhs) => { + return lhs.addressType - rhs.addressType || lhs.addressIndex - rhs.addressIndex + }) } public static usedAddressesByWalletId(walletId: string, version: AddressVersion):Address[] { diff --git a/packages/neuron-wallet/src/services/addresses.ts b/packages/neuron-wallet/src/services/addresses.ts index d3e080ca53..b81b36175a 100644 --- a/packages/neuron-wallet/src/services/addresses.ts +++ b/packages/neuron-wallet/src/services/addresses.ts @@ -22,7 +22,7 @@ export default class AddressService { return !!addressEntity } - public static generateAndSave = async ( + public static generateAndSave = ( walletId: string, extendedKey: AccountExtendedPublicKey, isImporting: boolean | undefined, @@ -63,7 +63,7 @@ export default class AddressService { AddressCreatedSubject.getSubject().next(addrs) } - public static checkAndGenerateSave = async ( + public static checkAndGenerateSave = ( walletId: string, extendedKey: AccountExtendedPublicKey, isImporting: boolean | undefined, @@ -216,7 +216,7 @@ export default class AddressService { return AddressDao.allAddresses(version) } - public static allAddressesByWalletId = async (walletId: string): Promise => { + public static allAddressesByWalletId = (walletId: string): AddressInterface[] => { const version = AddressService.getAddressVersion() return AddressDao.allAddressesByWalletId(walletId, version) } diff --git a/packages/neuron-wallet/src/services/wallets.ts b/packages/neuron-wallet/src/services/wallets.ts index f3a24f4c11..056c00beca 100644 --- a/packages/neuron-wallet/src/services/wallets.ts +++ b/packages/neuron-wallet/src/services/wallets.ts @@ -173,7 +173,15 @@ export default class WalletService { return FileKeystoreWallet.fromJSON(wallet) } - public generateAddressesById = async ( + public generateAddressesIfNecessary = () => { + for (const wallet of this.getAll()) { + if (AddressService.allAddressesByWalletId(wallet.id).length === 0) { + this.generateAddressesById(wallet.id, false) + } + } + } + + public generateAddressesById = ( id: string, isImporting: boolean, receivingAddressCount: number = 20, @@ -181,7 +189,7 @@ export default class WalletService { ) => { const wallet: Wallet = this.get(id) const accountExtendedPublicKey: AccountExtendedPublicKey = wallet.accountExtendedPublicKey() - await AddressService.checkAndGenerateSave( + AddressService.checkAndGenerateSave( id, accountExtendedPublicKey, isImporting,