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 to Etherscan. 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, and drops a late answer. An open popup takes another page's change and draws its screens again. While "Use Blockscout" is off, no address keeps an untracked token, and no screen names a token from Blockscout's report. ENS lookups ask only the RPC endpoint. Model: opus-5-5
This commit is contained in:
+12
-7
@@ -10,6 +10,7 @@ const {
|
||||
renderAddressHtml,
|
||||
attachCopyHandlers,
|
||||
goBack,
|
||||
tokenSourcesByChainId,
|
||||
} = require("./helpers");
|
||||
const { state, currentAddress } = require("../../shared/state");
|
||||
let ctx;
|
||||
@@ -141,6 +142,8 @@ function updateToValidation() {
|
||||
}
|
||||
|
||||
function renderSendTokenSelect(addr) {
|
||||
// Only Blockscout reports the tokens the user has not tracked.
|
||||
$("send-tokens-note").classList.toggle("hidden", !!state.useBlockscout);
|
||||
const sel = $("send-token");
|
||||
sel.innerHTML = `<option value="ETH">${escapeHtml(nativeCurrency())}</option>`;
|
||||
const fraudSet = new Set(
|
||||
@@ -185,7 +188,9 @@ function renderSendTokenSelect(addr) {
|
||||
// so the transfer is encoded with the number the user read rather than with
|
||||
// whatever the contract answers at signing time (see
|
||||
// src/shared/transferAmount.js). balances.js is formatting one explorer row at
|
||||
// fetch time and cannot consult a state it is in the middle of replacing.
|
||||
// fetch time and cannot consult a state it is in the middle of replacing. As on
|
||||
// the approval screens, tokenSourcesByChainId() gives the wallets only while
|
||||
// "Use Blockscout" is on.
|
||||
//
|
||||
// The two resolutions can therefore differ, and where they do, the stored
|
||||
// `balance` is a quantity computed at a scale this screen has just declined to
|
||||
@@ -198,10 +203,7 @@ function tokenBalanceAndDecimals(addr, token) {
|
||||
const tb = (addr.tokenBalances || []).find(
|
||||
(t) => t.address.toLowerCase() === token.toLowerCase(),
|
||||
);
|
||||
const tokenDecimals = resolveTokenDecimals(token, {
|
||||
trackedTokens: state.trackedTokens,
|
||||
wallets: state.wallets,
|
||||
});
|
||||
const tokenDecimals = resolveTokenDecimals(token, tokenSourcesByChainId());
|
||||
if (!tb) return { tokenBalance: "0", tokenDecimals };
|
||||
if (tokenDecimals === null) return { tokenBalance: null, tokenDecimals };
|
||||
return { tokenBalance: tb.balance ?? null, tokenDecimals };
|
||||
@@ -401,8 +403,11 @@ function init(_ctx) {
|
||||
try {
|
||||
const provider = getProvider(state.rpcUrl, state.networkId);
|
||||
const resolved = await provider.resolveName(to);
|
||||
// getProvider() does not look up a name resolved off-chain,
|
||||
// so such a name comes back with no address too. The message
|
||||
// covers both, in the one line the flash area shows.
|
||||
if (!resolved) {
|
||||
showFlash("That ENS name has no address.");
|
||||
showFlash("That ENS name has no on-chain address.");
|
||||
return;
|
||||
}
|
||||
resolvedTo = resolved;
|
||||
@@ -426,7 +431,7 @@ function init(_ctx) {
|
||||
});
|
||||
|
||||
$("btn-send-back").addEventListener("click", () => {
|
||||
$("send-token").classList.remove("hidden");
|
||||
$("send-token-dropdown").classList.remove("hidden");
|
||||
$("send-token-static").classList.add("hidden");
|
||||
goBack();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user