fix: every balance is cut to four decimals (closes #757)
check / check (push) Waiting to run
e2e / e2e-chrome (push) Waiting to run
e2e / e2e-firefox (push) Waiting to run

The balance lists and Home's ETH line rounded with toFixed(4), so 0.99996
ETH read 1.0000 there and 0.9999 on Send. Send's current balance and
ConfirmTx's balance line kept the nonzero floor, so 0.00004 USDC read
0.0000 in the lists and 0.00004 on Send. All four now cut the stored
decimal string with truncateAmount(), as the history rows do.
balanceLine() takes the stored balance string instead of a parsed number,
and escapes the quantity cell. The amounts, fees and allowances a screen
asks the user to approve keep the floor of truncateAmountNeverZero().

Disclosure: for a holding below 0.0001, ConfirmTx shows the amount sent
beside a balance that reads 0.0000.

Model: opus-5-5
This commit was merged in pull request #768.
This commit is contained in:
clawbot committed 2026-11-11 04:46:32 +01:00
1 parent 32b232db60
commit d909567ab9
15 files changed
+208 -89

No files matched your search

+5 -5
View File
@@ -4,8 +4,8 @@
// the copy is the substance and is tested as such. Two things it must not
// get wrong: what it takes to get the address back — the app refuses both
// obvious routes — and what counts as holding something, which is any
// ERC-20 as well as ETH, at any size, including a balance that rounds to
// zero at the four decimals the balance lines render. The DOM behaviour
// ERC-20 as well as ETH, at any size, including a balance below the four
// decimals the balance lines render. The DOM behaviour
// around them is driven against the real popup by tests/e2e/run.js.
// helpers.js pulls in state.js, which reads chrome.storage.local at load.
@@ -165,9 +165,9 @@ describe("the balance warning on the removal confirmation", () => {
});
// The sentence must not assert an amount, because any amount it could
// assert has been rounded: "This address holds 0.0000 ETH." is what the
// rounded form produces for an address that holds real money.
test("the warning sentence asserts no rounded amount", () => {
// assert has been cut to four decimals: "This address holds 0.0000 ETH." is
// what the cut form produces for an address that holds real money.
test("the warning sentence asserts no cut amount", () => {
for (const addr of [DUST, ETH_ONLY, TOKEN_ONLY]) {
expect(balanceWarningHtml(addr)).not.toMatch(
/holds [\d.]+ (ETH|USDC)/,