fix: Blockscout and Etherscan lookups are off until the user turns them on (closes #668)
Out of the box the wallet sent the user's addresses to Blockscout. It sent each recipient to Etherscan for its label. Two settings, "Use Blockscout" and "Check recipients on Etherscan", now gate those requests. Both are off in a new install and offered unticked on Welcome and in Settings. While one is off, the screens that relied on it say so in a plain line. Each gated request reads its setting from storage before it asks and when the answer lands. An answer that lands after the setting went off is dropped. An open popup takes a change another page saved and draws its screens again. While "Use Blockscout" is off, no address keeps an untracked token. ENS lookups ask only the RPC endpoint. Model: opus-5-5
This commit is contained in:
@@ -142,6 +142,8 @@ function loadWorker(networkId, opts) {
|
||||
},
|
||||
refreshBalances:
|
||||
options.refreshBalances || jest.fn(async () => undefined),
|
||||
dropUntrackedTokens: jest.requireActual("../src/shared/balances")
|
||||
.dropUntrackedTokens,
|
||||
}));
|
||||
jest.doMock("../src/shared/phishingDomains", () => ({
|
||||
isPhishingDomain: () => false,
|
||||
@@ -443,3 +445,54 @@ describe("a balance refresh under a network switch", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("a balance refresh under a change of Use Blockscout", () => {
|
||||
// Turning "Use Blockscout" off drops the tokens the user has not tracked
|
||||
// (src/popup/views/settings.js). Blockscout may have answered a refresh
|
||||
// just before. That refresh still saves its balances when it returns, but
|
||||
// not those tokens. The same refresh in the popup is in
|
||||
// tests/blockscoutEtherscanSettings.test.js.
|
||||
test("a refresh that returns after Use Blockscout was turned off saves its balances without the untracked token", async () => {
|
||||
const roundTrip = deferred();
|
||||
const started = deferred();
|
||||
|
||||
const bg = loadWorker("mainnet", {
|
||||
refreshBalances: async (wallets) => {
|
||||
started.resolve();
|
||||
await roundTrip.promise;
|
||||
wallets[0].addresses[0].balance = "7.0";
|
||||
wallets[0].addresses[0].tokenBalances = [
|
||||
{
|
||||
address: "0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||
name: "Test Token",
|
||||
symbol: "TST",
|
||||
decimals: 18,
|
||||
balance: "5.0",
|
||||
holders: 50000,
|
||||
},
|
||||
];
|
||||
},
|
||||
});
|
||||
global.chrome.storage.write("autistmask", {
|
||||
...bg.persisted(),
|
||||
useBlockscout: true,
|
||||
});
|
||||
|
||||
const refresh = bg.fireBalanceAlarm();
|
||||
await started.promise;
|
||||
|
||||
// The user unticks "Use Blockscout" in Settings while the round trip
|
||||
// is out.
|
||||
global.chrome.storage.write("autistmask", {
|
||||
...bg.persisted(),
|
||||
useBlockscout: false,
|
||||
});
|
||||
|
||||
roundTrip.resolve();
|
||||
await refresh;
|
||||
|
||||
const after = bg.persisted();
|
||||
expect(after.wallets[0].addresses[0].balance).toBe("7.0");
|
||||
expect(after.wallets[0].addresses[0].tokenBalances).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user