Skip to content

Commit 9988a13

Browse files
committed
feat: Regenerate addresses if necessary on launch
1 parent 6f95340 commit 9988a13

5 files changed

Lines changed: 39 additions & 29 deletions

File tree

packages/neuron-wallet/src/controllers/app/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import env from 'env'
66
import { updateApplicationMenu } from './menu'
77
import logger from 'utils/logger'
88
import { subscribe } from './subscribe'
9+
import WalletService from 'services/wallets'
910

1011
const app = electronApp || (remote && remote.app)
1112

@@ -65,6 +66,8 @@ export default class AppController {
6566
this.mainWindow.show()
6667
this.mainWindow.focus()
6768
logger.info('The main window is ready to show')
69+
70+
WalletService.getInstance().generateAddressesIfNecessary()
6871
} else {
6972
logger.error('The main window is not initialized on ready to show')
7073
}

packages/neuron-wallet/src/controllers/wallets.ts

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -294,26 +294,24 @@ export default class WalletsController {
294294
}
295295

296296
public static async getAllAddresses(id: string) {
297-
const addresses = await AddressService.allAddressesByWalletId(id).then(addrs =>
298-
addrs.map(
299-
({
300-
address,
301-
blake160: identifier,
302-
addressType: type,
303-
txCount,
304-
balance,
305-
description = '',
306-
addressIndex: index = '',
307-
}) => ({
308-
address,
309-
identifier,
310-
type,
311-
txCount,
312-
description,
313-
balance,
314-
index,
315-
})
316-
)
297+
const addresses = AddressService.allAddressesByWalletId(id).map(
298+
({
299+
address,
300+
blake160: identifier,
301+
addressType: type,
302+
txCount,
303+
balance,
304+
description = '',
305+
addressIndex: index = '',
306+
}) => ({
307+
address,
308+
identifier,
309+
type,
310+
txCount,
311+
description,
312+
balance,
313+
index,
314+
})
317315
)
318316
return {
319317
status: ResponseCode.Success,

packages/neuron-wallet/src/database/address/address-dao.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,11 @@ export default class AddressDao {
120120
}
121121

122122
public static allAddressesByWalletId(walletId: string, version: AddressVersion): Address[] {
123-
const all = AddressStore.getAll()
124-
return all.filter(value => {
125-
return value.walletId === walletId && value.version === version
126-
})
123+
return AddressStore.getAll()
124+
.filter(value => value.walletId === walletId && value.version === version)
125+
.sort((lhs, rhs) => {
126+
return lhs.addressType - rhs.addressType || lhs.addressIndex - rhs.addressIndex
127+
})
127128
}
128129

129130
public static usedAddressesByWalletId(walletId: string, version: AddressVersion):Address[] {

packages/neuron-wallet/src/services/addresses.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export default class AddressService {
2222
return !!addressEntity
2323
}
2424

25-
public static generateAndSave = async (
25+
public static generateAndSave = (
2626
walletId: string,
2727
extendedKey: AccountExtendedPublicKey,
2828
isImporting: boolean | undefined,
@@ -63,7 +63,7 @@ export default class AddressService {
6363
AddressCreatedSubject.getSubject().next(addrs)
6464
}
6565

66-
public static checkAndGenerateSave = async (
66+
public static checkAndGenerateSave = (
6767
walletId: string,
6868
extendedKey: AccountExtendedPublicKey,
6969
isImporting: boolean | undefined,
@@ -216,7 +216,7 @@ export default class AddressService {
216216
return AddressDao.allAddresses(version)
217217
}
218218

219-
public static allAddressesByWalletId = async (walletId: string): Promise<AddressInterface[]> => {
219+
public static allAddressesByWalletId = (walletId: string): AddressInterface[] => {
220220
const version = AddressService.getAddressVersion()
221221
return AddressDao.allAddressesByWalletId(walletId, version)
222222
}

packages/neuron-wallet/src/services/wallets.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,15 +173,23 @@ export default class WalletService {
173173
return FileKeystoreWallet.fromJSON(wallet)
174174
}
175175

176-
public generateAddressesById = async (
176+
public generateAddressesIfNecessary = () => {
177+
for (const wallet of this.getAll()) {
178+
if (AddressService.allAddressesByWalletId(wallet.id).length === 0) {
179+
this.generateAddressesById(wallet.id, false)
180+
}
181+
}
182+
}
183+
184+
public generateAddressesById = (
177185
id: string,
178186
isImporting: boolean,
179187
receivingAddressCount: number = 20,
180188
changeAddressCount: number = 10
181189
) => {
182190
const wallet: Wallet = this.get(id)
183191
const accountExtendedPublicKey: AccountExtendedPublicKey = wallet.accountExtendedPublicKey()
184-
await AddressService.checkAndGenerateSave(
192+
AddressService.checkAndGenerateSave(
185193
id,
186194
accountExtendedPublicKey,
187195
isImporting,

0 commit comments

Comments
 (0)