fix: the first wallet's first address is active as soon as it is added (closes #512)
The popup picked an active address only when it opened, so after the first wallet was created nothing was active until a reopen: Home had no headline, and Send and Receive refused. Each of the three import paths on AddWallet now makes the new wallet's first address active when no address is. When the phrase or xprv scan then replaces the address list with one that leaves that address out, the new list's first address becomes active and the background is told, as when the user picks an address on Home. The address scan stand-in in the popup test boot now answers in the real scan's shape, which the phrase and xprv imports read. Model: opus-5-5
This commit was merged in pull request #562.
This commit is contained in:
@@ -20,6 +20,7 @@ const {
|
||||
const { encryptWithPassword } = require("../../shared/vault");
|
||||
const { state, saveState } = require("../../shared/state");
|
||||
const { scanForAddresses } = require("../../shared/balances");
|
||||
const { notify } = require("../../shared/browserApi");
|
||||
|
||||
/**
|
||||
* Check if an address already exists in ANY wallet (hd, xprv, or key).
|
||||
@@ -194,6 +195,9 @@ async function importMnemonic(ctx) {
|
||||
};
|
||||
state.wallets.push(wallet);
|
||||
state.hasWallet = true;
|
||||
if (state.activeAddress === null) {
|
||||
state.activeAddress = firstAddress;
|
||||
}
|
||||
await saveState();
|
||||
clearViewStack();
|
||||
ctx.renderWalletList();
|
||||
@@ -215,8 +219,16 @@ async function importMnemonic(ctx) {
|
||||
tokenBalances: [],
|
||||
}));
|
||||
wallet.nextIndex = scan.nextIndex;
|
||||
// The new list leaves out the first address when the scan found it
|
||||
// unused. If it was the active one, the new list's first takes over,
|
||||
// and the background is told as when the user picks one on Home.
|
||||
const activeMoved =
|
||||
state.activeAddress === firstAddress &&
|
||||
wallet.addresses[0].address !== firstAddress;
|
||||
if (activeMoved) state.activeAddress = wallet.addresses[0].address;
|
||||
await saveState();
|
||||
ctx.renderWalletList();
|
||||
if (activeMoved) notify({ type: "AUTISTMASK_ACTIVE_CHANGED" });
|
||||
showFlash("Found " + scan.addresses.length + " addresses.");
|
||||
} else {
|
||||
showFlash("Ready.", 1000);
|
||||
@@ -254,6 +266,9 @@ async function importPrivateKey(ctx) {
|
||||
addresses: [{ address: addr, balance: "0.0000", tokenBalances: [] }],
|
||||
});
|
||||
state.hasWallet = true;
|
||||
if (state.activeAddress === null) {
|
||||
state.activeAddress = addr;
|
||||
}
|
||||
await saveState();
|
||||
clearViewStack();
|
||||
ctx.renderWalletList();
|
||||
@@ -315,6 +330,9 @@ async function importXprvKey(ctx) {
|
||||
};
|
||||
state.wallets.push(wallet);
|
||||
state.hasWallet = true;
|
||||
if (state.activeAddress === null) {
|
||||
state.activeAddress = firstAddress;
|
||||
}
|
||||
await saveState();
|
||||
clearViewStack();
|
||||
ctx.renderWalletList();
|
||||
@@ -336,8 +354,15 @@ async function importXprvKey(ctx) {
|
||||
tokenBalances: [],
|
||||
}));
|
||||
wallet.nextIndex = scan.nextIndex;
|
||||
// As for a recovery phrase: an active first address the scan left
|
||||
// out gives way to the new list's first.
|
||||
const activeMoved =
|
||||
state.activeAddress === firstAddress &&
|
||||
wallet.addresses[0].address !== firstAddress;
|
||||
if (activeMoved) state.activeAddress = wallet.addresses[0].address;
|
||||
await saveState();
|
||||
ctx.renderWalletList();
|
||||
if (activeMoved) notify({ type: "AUTISTMASK_ACTIVE_CHANGED" });
|
||||
showFlash("Found " + scan.addresses.length + " addresses.");
|
||||
} else {
|
||||
showFlash("Ready.", 1000);
|
||||
|
||||
Reference in New Issue
Block a user