fix: the swap decoder reads a V2 already-paid zero and a zero balance check as the router does (closes #415)
A V2 exact-in amountIn of zero is the router's ALREADY_PAID marker: an earlier step sent the tokens to the pair and the swap spends all of them. Amount showed 0.0000 for it; it now reads "Whatever an earlier step sent to the pair (V2 already paid)", in the style of the V4 open delta line. A BALANCE_CHECK_ERC20 passes whenever the balance is at least minBalance, so a zero one guarantees nothing. It now sets the output side only when that side holds no minimum at the point the check is reached; a nonzero one sets the output side as before. README's Display Consistency text and TODO.md are updated to match. Model: opus-5-5
This commit is contained in:
@@ -887,7 +887,9 @@ Truncation stays truncation: `0.99999` shows as `0.9999`, never rounded up. The
|
||||
rule still renders a genuine zero as `0.0000`. Two lines of a swap say a zero in
|
||||
words instead: `Min. received` reads `None (no minimum guaranteed)` for a zero
|
||||
minimum, and `Amount` reads `All available (V4 open delta)` when the amount it
|
||||
shows is a V4 exact-in `amountIn` of zero.
|
||||
shows is a V4 exact-in `amountIn` of zero and
|
||||
`Whatever an earlier step sent to the pair (V2 already paid)` when it is a V2
|
||||
exact-in `amountIn` of zero.
|
||||
|
||||
The rule and its exception live in `src/shared/amountDisplay.js` as
|
||||
`truncateAmount()` and `truncateAmountNeverZero()`. Everything the approval and
|
||||
@@ -980,7 +982,8 @@ read:
|
||||
exact-out step, whichever step set the line, including the `WRAP_ETH` of a
|
||||
swap paid in ETH and a `PERMIT2_PERMIT`. The swap spends at most that figure,
|
||||
not necessarily all of it; the wait, success and error screens show it with
|
||||
the same words. `Unlimited` and `All available (V4 open delta)` keep their
|
||||
the same words. `Unlimited`, `All available (V4 open delta)` and
|
||||
`Whatever an earlier step sent to the pair (V2 already paid)` keep their
|
||||
wording. When a V2 exact-out step sets `Min. received`, that line shows its
|
||||
`amountOut`, the exact amount it buys.
|
||||
- `All available (V4 open delta)`: the swap's `Amount` line, when the amount it
|
||||
@@ -991,11 +994,22 @@ read:
|
||||
V2 exact-out, `WRAP_ETH` or V4 swap step. A V2 exact-out step gives its
|
||||
`amountInMax`, and a V4 swap step the `amountIn` of its first readable
|
||||
exact-in action.
|
||||
- `Whatever an earlier step sent to the pair (V2 already paid)`: the swap's
|
||||
`Amount` line, when the amount it shows is a V2 exact-in `amountIn` of zero.
|
||||
The router reads that zero as "the pair already holds the input tokens": the
|
||||
step pays nothing itself and swaps whatever an earlier step sent to the pair,
|
||||
so the calldata states no quantity. A V3 exact-in `amountIn` of zero has no
|
||||
such meaning and is shown as a zero.
|
||||
- `None (no minimum guaranteed)`: the swap's `Min. received` line, when the
|
||||
minimum it shows is zero, whether a V2, V3 or V4 swap's minimum or a
|
||||
`BALANCE_CHECK_ERC20` step's `minBalance`. Before
|
||||
[#359](https://git.eeqj.de/sneak/AutistMask/issues/359), a zero `minBalance`
|
||||
read `0.0000` when the token's scale was known.
|
||||
read `0.0000` when the token's scale was known. The router passes a balance
|
||||
check whenever the balance is at least `minBalance`, so a zero `minBalance`
|
||||
guarantees nothing: it sets `Token Out` and `Min. received` only when the
|
||||
output side holds no minimum, not even a zero one, at the point the check is
|
||||
reached, and otherwise leaves the current token and figure in place. A nonzero
|
||||
`minBalance` sets both lines, as a swap step does.
|
||||
|
||||
The swap's `Token In` and `Token Out` lines name a currency, not an amount; each
|
||||
reads `Unknown (not named in the calldata)` when the decoder found no token for
|
||||
|
||||
Reference in New Issue
Block a user