fix: an allowance to another spender leaves no Amount figure for its token and no Min. received (closes #658)
Code that a step runs, such as a V4 pool's hook, can call a spender other than the router, which can then take up to its allowance from the user's wallet before the transaction ends. The Amount figure and Min. received took no account of it. In decode(), an allowance of Token In to a spender other than the router now leaves no Amount line, as an unread permit already did, so the swap steps' own takes get lines of their own. Any allowance to another spender, or a permit or batch the decoder cannot read, makes the minimum read Min. paid out. Permits to the router read as before. Model: opus-5-5
This commit was merged in pull request #666.
This commit is contained in:
@@ -2802,26 +2802,37 @@ describe("the allow-revert flag", () => {
|
||||
});
|
||||
|
||||
// Only the routers from UniversalRouterV2 on let a PERMIT2_PERMIT fail.
|
||||
// The permit's spender is the router at ROUTER, which on every other
|
||||
// router is an allowance to another spender, so the minimum reads
|
||||
// Min. paid out there.
|
||||
test.each([
|
||||
{ router: "UniversalRouterV1", address: ROUTER_V1, mark: "" },
|
||||
{
|
||||
router: "UniversalRouterV1",
|
||||
address: ROUTER_V1,
|
||||
mark: "",
|
||||
minimum: "Min. paid out",
|
||||
},
|
||||
{
|
||||
router: "UniversalRouterV1_2_V2Support",
|
||||
address: ROUTER_V1_2,
|
||||
mark: "",
|
||||
minimum: "Min. paid out",
|
||||
},
|
||||
{
|
||||
router: "UniversalRouterV2",
|
||||
address: ROUTER,
|
||||
mark: " (allowed to fail)",
|
||||
minimum: "Min. received",
|
||||
},
|
||||
{
|
||||
router: "UniversalRouterV2_1_2",
|
||||
address: ROUTER_V2_1_2,
|
||||
mark: " (allowed to fail)",
|
||||
minimum: "Min. paid out",
|
||||
},
|
||||
])(
|
||||
"on $router, a PERMIT2_PERMIT with the flag is listed as 'Permit2 Permit$mark', and the swap's lines read as without the flag",
|
||||
({ address, mark }) => {
|
||||
({ address, mark, minimum }) => {
|
||||
const steps = [
|
||||
permit2Permit(USDT, USDT_2000),
|
||||
swapToWeth(MSG_SENDER),
|
||||
@@ -2853,7 +2864,7 @@ describe("the allow-revert flag", () => {
|
||||
expect(
|
||||
labels(withFlag).filter((l) => permitLines.includes(l)),
|
||||
).toEqual(permitLines);
|
||||
expect(detail(withFlag, "Min. received").value).toBe("1.0000 WETH");
|
||||
expect(detail(withFlag, minimum).value).toBe("1.0000 WETH");
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user