fix: the swap decoder reads each command's type with its router's mask (closes #535)
Each Universal Router address now carries the mask its own source reads a command's type with: 0x1f for UniversalRouterV1, 0x3f for V1_2 and V2, 0x7f for V2_1_1 and V2_1_2. The fixed 0x1f dropped the 0x20 bit, so EXECUTE_SUB_PLAN (0x21) was listed as a V3 exact-out swap. A sub-plan step is now listed as "Execute Sub-Plan (its steps are not shown)", and a Token In or Token Out line that nothing named reads "Unknown (could not be decoded)", since the sub-plan may name it. Model: opus-5-5
This commit is contained in:
@@ -1195,9 +1195,10 @@ 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
|
||||
with a swap action always sets the output side, and sets the input side only
|
||||
when no earlier step set it. It finds each side by three rules:
|
||||
the transaction could not be read or the transaction has an `EXECUTE_SUB_PLAN`
|
||||
step (see Transaction Decoding below). A V4 step with a swap action always sets
|
||||
the output side, and sets the input side only when no earlier step set it. It
|
||||
finds each side by three rules:
|
||||
|
||||
1. Its input side is the currency its `SETTLE` or `SETTLE_ALL` names, or else
|
||||
the one currency that some swap action in the step spends and none buys. Its
|
||||
@@ -2888,7 +2889,15 @@ Currently supported:
|
||||
in the parameter shape deployed on mainnet and Sepolia, not in the newer one
|
||||
on `v4-periphery` `main`, which adds a `minHopPriceX36` field. An action in
|
||||
any other shape is not read, and its step is listed as
|
||||
`V4 Swap (could not be decoded)`.
|
||||
`V4 Swap (could not be decoded)`. Each step is named by its command type,
|
||||
which the decoder reads from the command byte with the mask the router at that
|
||||
address uses: `0x1f` for `UniversalRouterV1`, `0x3f` for
|
||||
`UniversalRouterV1_2_V2Support` and `UniversalRouterV2`, and `0x7f` for
|
||||
`UniversalRouterV2_1_1` and `UniversalRouterV2_1_2`. The allow-revert flag
|
||||
(`0x80`) therefore does not change a step's name. The decoder does not read
|
||||
the commands inside an `EXECUTE_SUB_PLAN` (`0x21`) step: that step is listed
|
||||
as `Execute Sub-Plan (its steps are not shown)`, and what those commands spend
|
||||
or receive is missing from the other lines.
|
||||
|
||||
### Non-Goals Forever
|
||||
|
||||
|
||||
Reference in New Issue
Block a user