feat: show red warning on confirm-tx for addresses with zero transaction history
All checks were successful
check / check (push) Successful in 9s

When sending to an address that has never sent or received funds (zero
nonce and zero balance), display a prominent red warning on the
transaction confirmation screen advising the user to double-check the
address.

Closes #82
This commit is contained in:
user
2026-02-28 14:33:40 -08:00
parent dc8ec7d28f
commit fd69e1e215

View File

@@ -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) =>
`<div class="border border-border border-dashed p-2 mb-1 text-xs font-bold" style="color:#c00">WARNING: ${w}</div>`,
)
.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) =>
`<div class="border border-border border-dashed p-2 mb-1 text-xs font-bold">WARNING: ${w}</div>`,
)
.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 = [];