fix: the approval screen names the address a swap's output is paid to (closes #594)
The swap decoder read no recipient, so a swap paying its output to another address still showed Min. received. It now reads the address that every swap step, SWEEP, WRAP_ETH, UNWRAP_WETH, V4 TAKE and TAKE_ALL pays. The minimum reads Min. received only when some step pays the sender, none pays another address, none that may pay one went unread, and the output is not left in the router: an output paid to the router needs a later SWEEP of that token, or UNWRAP_WETH of WETH, paying it out. A payment to the V2 pair that the next V2 swap spends as already paid is a hop, not a payout; the pair is derived as the router derives it. Otherwise it reads Min. paid out, with Paid to lines. Model: opus-5-5
This commit is contained in:
@@ -105,7 +105,7 @@ function v3ExactIn(tokenIn, tokenOut, amountIn, amountOutMin) {
|
||||
}
|
||||
|
||||
function detail(data, label) {
|
||||
const decoded = uniswap.decode(data, ROUTER, "0x1", {});
|
||||
const decoded = uniswap.decode(data, ROUTER, "0x1", {}, USER);
|
||||
expect(decoded).not.toBeNull();
|
||||
return decoded.details.find((d) => d.label === label);
|
||||
}
|
||||
@@ -134,7 +134,9 @@ describe("a V4 step that states a Min. received but no output currency", () => {
|
||||
});
|
||||
|
||||
test("refuses to scale Min. received rather than assuming 18", () => {
|
||||
expect(detail(data(), "Min. received").value).toBe(
|
||||
// With no TAKE, no step pays the user either, so the line is not
|
||||
// labelled received.
|
||||
expect(detail(data(), "Min. paid out").value).toBe(
|
||||
unknownDecimalsAmount(MIN_OUT),
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user