diff --git a/src/popup/views/confirmTx.js b/src/popup/views/confirmTx.js index 522e9e5..9c36891 100644 --- a/src/popup/views/confirmTx.js +++ b/src/popup/views/confirmTx.js @@ -86,6 +86,42 @@ function valueWithUsd(text, usdAmount) { return text; } +function renderWarnings(warnings) { + const warningsEl = $("confirm-warnings"); + if (warnings.length > 0) { + warningsEl.innerHTML = warnings + .map( + (w) => + `
WARNING: ${w}
`, + ) + .join(""); + warningsEl.classList.remove("hidden"); + } else { + warningsEl.classList.add("hidden"); + } +} + +async function checkAddressHistory(address, existingWarnings) { + try { + const provider = getProvider(state.rpcUrl); + const [balance, txCount] = await Promise.all([ + provider.getBalance(address), + provider.getTransactionCount(address), + ]); + if (balance === 0n && txCount === 0) { + const warnings = existingWarnings.slice(); + warnings.push( + "This address has ZERO transaction history. " + + "It has never sent or received funds. " + + "Double-check that the address is correct before sending.", + ); + renderWarnings(warnings); + } + } catch (e) { + log.errorf("address history check failed:", e.message); + } +} + function show(txInfo) { pendingTx = txInfo; @@ -176,18 +212,10 @@ function show(txInfo) { warnings.push("You are sending to your own address."); } - const warningsEl = $("confirm-warnings"); - if (warnings.length > 0) { - warningsEl.innerHTML = warnings - .map( - (w) => - `
WARNING: ${w}
`, - ) - .join(""); - warningsEl.classList.remove("hidden"); - } else { - warningsEl.classList.add("hidden"); - } + renderWarnings(warnings); + + // Async check: warn if destination address has zero transaction history + checkAddressHistory(txInfo.to, warnings); // Check for errors const errors = [];