harden: resolve or refuse the swap token scale instead of guessing 18 (closes #340)
All checks were successful
check / check (push) Successful in 29s
e2e / e2e-chrome (push) Successful in 1m47s
e2e / e2e-firefox (push) Successful in 31s

tokenInfo() returned decimals 18 for any token absent from the bundled list, so the swap approval line rendered a real 1000.00 of a 6-decimal token as 0.000000000001. The scale is now resolved from what the wallet already holds (bundled list, tracked tokens, explorer-reported decimals) or refused outright, matching the rule set for the ERC-20 path in #306. A refusal reuses unknownDecimalsAmount(), so it reads as "base units (decimals unknown)" with no decimal point and no symbol, and the same string propagates to rawValue so no downstream screen can render a figure the approval screen refused. No new network call on the approval path. Verified green on all three CI contexts: check, e2e-chrome, e2e-firefox.
This commit was merged in pull request #345.
This commit is contained in:
2026-08-23 16:20:22 +02:00
parent 769f6a5289
commit 43784cab3f
6 changed files with 271 additions and 23 deletions

14
TODO.md
View File

@@ -45,6 +45,20 @@ but the review is broader than any of them.
# Completed Steps
- 2026-08-23: The swap approval screen no longer guesses 18 decimals for a token
outside the bundled list
([#340](https://git.eeqj.de/sneak/AutistMask/issues/340)). `tokenInfo()` in
`src/shared/uniswap.js` returned `decimals: 18` for any such token — the same
assumption [#306](https://git.eeqj.de/sneak/AutistMask/issues/306) removed
from the ERC-20 amount line — so a 1,000-unit swap of a 6-decimal token was
stated as `0.000000001`, and every newly listed token reached it. The swap's
`Amount` and `Min. received` lines now resolve the scale through
`resolveTokenDecimals()`, the same bundled-list-then-tracked-then-explorer
order the ERC-20 line uses, and where nothing knows it they render
`unknownDecimalsAmount()` — base units with the scale stated — instead of a
number. No new data source and no network call: the scale comes only from what
the wallet already holds. An unbounded permit is still shown as `Unlimited`.
`README.md` records the rule as a Display Consistency exception.
- 2026-08-23: A failed release build no longer leaves a loadable debug bundle in
`dist/` ([#333](https://git.eeqj.de/sneak/AutistMask/issues/333)). With
`AUTISTMASK_DEBUG=1` exported, `make build` compiled a debug bundle and failed