feat: a "Max" button on the Send screen (closes #198)
check / check (push) Failing after 3s
e2e / e2e-chrome (push) Failing after 2s
e2e / e2e-firefox (push) Failing after 2s

Max fills in a token's whole balance, cut down to the 18 decimal places the
confirmation screen accepts, or for ETH the exact balance minus the fee
reserve the confirmation screen's balance check gates on. An ETH fee estimate
that finishes after the Send screen was left, or its address, holding or
recipient changed, fills nothing in. The confirmation screen works a max ETH
amount out again from its own fee estimate and signs it with that estimate's
fee fields, so a fee that rose before signing cannot push amount plus fee
above the balance. validateTransfer() still gates every send, the check that
ETH covers a token send's fee included. Where there is nothing to fill in, a
flash message says why.

Model: opus-5-5
This commit is contained in:
2026-10-05 04:49:38 +00:00
parent cf7ca99215
commit b60eec9197
9 changed files with 823 additions and 35 deletions
+20 -1
View File
@@ -1467,6 +1467,18 @@ view would leave a wallet one click from deletion.
- Amount input with current balance display, which reads
`Current balance: unknown (SYMBOL)` for a token whose scale is unknown, as
ConfirmTx's balance line does (see Unknown token scale)
- "Max" button beside the amount input, always in place. It fills in the
most the selected holding can send: a token's whole balance, cut down to
the 18 decimal places ConfirmTx accepts for a token that has more, or for
ETH the exact balance minus the network fee reserve that ConfirmTx's
balance check gates on, never the rounded balance shown above it. The ETH
fee is estimated for the recipient entered, so it asks for a recipient
first; an estimate that finishes after the screen was left or the address,
holding or recipient changed fills nothing in. Where there is nothing to
fill in, a flash message says why: the balance does not cover the fee, the
fee could not be estimated, or the token's balance is unknown or zero.
Typing in the amount makes it an ordinary amount; changing what to send
clears an amount Max filled in
- "Review" button, disabled until the recipient validates
- **Transitions**:
- "Review" (valid inputs, ENS resolved) → **ConfirmTx**
@@ -1483,7 +1495,14 @@ view would leave a wallet one click from deletion.
- Token contract: full address + etherscan link (ERC-20 only)
- From: blockie + color dot + full address + etherscan link + wallet title
- To: blockie + color dot + full address + etherscan link + ENS name
- Amount: value + symbol (USD in parentheses)
- Amount: value + symbol (USD in parentheses). An ETH amount Send's "Max"
filled in is worked out again from this screen's own fee estimate when it
arrives, as the balance minus the reserve, and the transaction is signed
with that estimate's fee fields, so a fee fetched again at signing cannot
exceed what the amount leaves behind. The address keeps whatever part of
the reserve the transaction does not use. If the balance no longer covers
the fee, the amount is left as it was and the amount-plus-fee error below
blocks the send
- Your balance: value + symbol (USD in parentheses), or `unknown (SYMBOL)`
for a token whose scale is unknown
- Network fee: "Estimating..." then two lines, or "Unable to estimate",