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 = [];