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 and each recipient's address to Etherscan. Two settings, "Use Blockscout" and "Check recipients on Etherscan", now gate every request that sends the user's data to those services. Both start off and are offered unticked on Welcome and in Settings. Each request reads its setting from storage before it asks. An answer that lands after the setting went off is dropped. While a setting is off, the screens that rely on it say so. ENS lookups ask only the RPC endpoint, so a name resolved off-chain does not resolve. RULES.md's External Communication item is now out of date. Its new wording will be proposed on #211 once this lands. Model: opus-5-5 (implementation, summary); fable-5-1 (prose)
This commit was merged in pull request #671.
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