fix: a V4 step of chained swap actions shows what the user receives (closes #563)
A V4 step's input side is now the currency its SETTLE or SETTLE_ALL names, and its output side the currency its TAKE or TAKE_ALL names. A side none of them names comes from the swap actions, put in the order the currencies pass through them: each exact-in action after the ones before it, each exact-out action in front of them, since the router runs exact-out actions from the output end. The input and Amount come from the first action in that order, the output and Min. received from the last. SETTLE_ALL and TAKE_ALL were not read before, and the first swap action set both sides, so a chain showed the first one's output. Model: opus-5-5
This commit is contained in:
@@ -1164,8 +1164,9 @@ read:
|
||||
amount of one step that names an input token or amount: the last
|
||||
`PERMIT2_PERMIT` step if there is one, otherwise the first V2 or V3 exact-in,
|
||||
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.
|
||||
`amountInMax`, and a V4 swap step the `amountIn` of the swap action that
|
||||
spends what the user pays (see below), or none when that action is exact-out
|
||||
or could not be read.
|
||||
- `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
|
||||
@@ -1186,17 +1187,29 @@ read:
|
||||
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
|
||||
that side, or `Unknown (could not be decoded)` instead when a V4 swap action in
|
||||
the transaction could not be read (see Transaction Decoding below). A V4 step
|
||||
whose swap action could not be read still sets each side as a swap step does,
|
||||
and a side its `SETTLE` or `TAKE` did not name is then unknown: no other step's
|
||||
token or figure is shown for it. An `UNWRAP_WETH` step makes `Token Out` ETH
|
||||
only when the output side is WETH, on mainnet or Sepolia, or when no step set
|
||||
the output side; a WETH `Min. received` figure then reads in ETH. Otherwise
|
||||
`Token Out` and `Min. received` keep the output side's own token and figure,
|
||||
whether the swap was paid in ETH or in a token: a V2 exact-out swap that buys
|
||||
USDC and then unwraps the WETH it did not spend shows USDC. The token permission
|
||||
warning on the signature screen has its own amount wording, including `Unknown`;
|
||||
the SignApproval section below describes it.
|
||||
the transaction could not be read (see Transaction Decoding below). A V4 step's
|
||||
input side is the currency its `SETTLE` or `SETTLE_ALL` names, and its output
|
||||
side the currency its `TAKE` or `TAKE_ALL` names. A side none of them names
|
||||
comes from the step's swap actions, put in the order the currencies pass through
|
||||
them, from what the user pays to what the user receives. The router runs
|
||||
exact-in actions from the input end, so each one goes after the actions before
|
||||
it, whose output it spends. It runs exact-out actions from the output end, so
|
||||
the first one buys what the user receives and each later one goes in front of
|
||||
the actions before it, buying what they spend. The input side and `Amount` come
|
||||
from the first action in that order, and the output side and `Min. received`
|
||||
from the last; the decoder reads no amount from an exact-out action. A swap
|
||||
action that could not be read keeps its place in that order and states nothing,
|
||||
so a side or figure that would come from it is unknown, while one from a
|
||||
readable action is shown. Such a step still sets each side as a swap step does,
|
||||
and no other step's token or figure is shown for an unknown one. An
|
||||
`UNWRAP_WETH` step makes `Token Out` ETH only when the output side is WETH, on
|
||||
mainnet or Sepolia, or when no step set the output side; a WETH `Min. received`
|
||||
figure then reads in ETH. Otherwise `Token Out` and `Min. received` keep the
|
||||
output side's own token and figure, whether the swap was paid in ETH or in a
|
||||
token: a V2 exact-out swap that buys USDC and then unwraps the WETH it did not
|
||||
spend shows USDC. The token permission warning on the signature screen has its
|
||||
own amount wording, including `Unknown`; the SignApproval section below
|
||||
describes it.
|
||||
|
||||
The swap's `Deadline` line is the router's deadline as a UTC date and time, e.g.
|
||||
`2026-02-27 08:25:51`. A JavaScript date reaches only to 275760-09-13 00:00:00
|
||||
|
||||
Reference in New Issue
Block a user