Skip to content

Commit

Permalink
feat: Regenerate addresses if necessary on launch
Browse files Browse the repository at this point in the history
  • Loading branch information
ashchan committed Nov 13, 2019
1 parent 6f95340 commit 9988a13
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 29 deletions.
3 changes: 3 additions & 0 deletions packages/neuron-wallet/src/controllers/app/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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')
}
Expand Down
38 changes: 18 additions & 20 deletions packages/neuron-wallet/src/controllers/wallets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
9 changes: 5 additions & 4 deletions packages/neuron-wallet/src/database/address/address-dao.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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[] {
Expand Down
6 changes: 3 additions & 3 deletions packages/neuron-wallet/src/services/addresses.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export default class AddressService {
return !!addressEntity
}

public static generateAndSave = async (
public static generateAndSave = (
walletId: string,
extendedKey: AccountExtendedPublicKey,
isImporting: boolean | undefined,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -216,7 +216,7 @@ export default class AddressService {
return AddressDao.allAddresses(version)
}

public static allAddressesByWalletId = async (walletId: string): Promise<AddressInterface[]> => {
public static allAddressesByWalletId = (walletId: string): AddressInterface[] => {
const version = AddressService.getAddressVersion()
return AddressDao.allAddressesByWalletId(walletId, version)
}
Expand Down
12 changes: 10 additions & 2 deletions packages/neuron-wallet/src/services/wallets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,23 @@ 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,
changeAddressCount: number = 10
) => {
const wallet: Wallet = this.get(id)
const accountExtendedPublicKey: AccountExtendedPublicKey = wallet.accountExtendedPublicKey()
await AddressService.checkAndGenerateSave(
AddressService.checkAndGenerateSave(
id,
accountExtendedPublicKey,
isImporting,
Expand Down

0 comments on commit 9988a13

Please sign in to comment.