From fafd45448f36395aa2dd6b9a91393f25fcdda9aa Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Thu, 10 Oct 2024 13:01:12 -0400 Subject: [PATCH 1/7] Golf AllowanceHolder calldata decoding --- src/allowanceholder/AllowanceHolderBase.sol | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/allowanceholder/AllowanceHolderBase.sol b/src/allowanceholder/AllowanceHolderBase.sol index b0fd5790d..dd8c70b33 100644 --- a/src/allowanceholder/AllowanceHolderBase.sol +++ b/src/allowanceholder/AllowanceHolderBase.sol @@ -21,9 +21,14 @@ abstract contract AllowanceHolderBase is TransientStorageLayout, FreeMemory { // (e.g. tokens with blacklists), we choose to copy the first argument // out of `data` and mask it as an address. If there isn't enough // `data`, we use 0xdead instead. - address target; - if (data.length > 0x10) { - target = address(uint160(bytes20(data[0x10:]))); + address target; // = address(uint160(bytes20(data[0x10:]))); + assembly ("memory-safe") { + target := calldataload(data.offset) + // `shl(0x08, data.length)` can't overflow because we're going to + // `calldatacopy(..., data.length)` later. It would OOG. + let mask := shr(shl(0x08, data.length), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + // Zero the low bits of `target` if `data` is short + target := and(not(mask), target) } // EIP-1352 (not adopted) specifies 0xffff as the maximum precompile if (target <= address(0xffff)) { From d468092a3cffe15fc79446f742b48b1990bc720f Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Thu, 10 Oct 2024 13:13:12 -0400 Subject: [PATCH 2/7] Golf UniV3 callback `data` decoding --- src/core/UniswapV3Fork.sol | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/core/UniswapV3Fork.sol b/src/core/UniswapV3Fork.sol index 2ea935661..2e6502156 100644 --- a/src/core/UniswapV3Fork.sol +++ b/src/core/UniswapV3Fork.sol @@ -334,8 +334,15 @@ abstract contract UniswapV3Fork is SettlerAbstract { /// @param amount1Delta Token1 amount owed. /// @param data Arbitrary data forwarded from swap() caller. A packed encoding of: payer, sellToken, (optionally: permit[0x20:], isForwarded, sig) function uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes calldata data) private { - address payer = address(uint160(bytes20(data))); - data = data[0x14:]; + address payer; + assembly ("memory-safe") { + payer := shr(0x60, calldataload(data.offset)) + data.length := sub(data.length, 0x14) + data.offset := add(0x14, data.offset) + // We don't check for underflow/array-out-of-bounds here because the trusted inithash + // ensures that `data` was passed unmodified from `_updateSwapCallbackData`. Therefore, + // it is at least 40 bytes long. + } uint256 sellAmount = amount0Delta > 0 ? uint256(amount0Delta) : uint256(amount1Delta); _pay(payer, sellAmount, data); } From e280f62b97d09c66b35c660fafa4c374e9c2480f Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Thu, 10 Oct 2024 13:13:19 -0400 Subject: [PATCH 3/7] Golf UniV3 callback `data` decoding --- src/core/UniswapV3Fork.sol | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/UniswapV3Fork.sol b/src/core/UniswapV3Fork.sol index 2e6502156..9179b2ade 100644 --- a/src/core/UniswapV3Fork.sol +++ b/src/core/UniswapV3Fork.sol @@ -349,7 +349,11 @@ abstract contract UniswapV3Fork is SettlerAbstract { function _pay(address payer, uint256 amount, bytes calldata permit2Data) private { if (payer == address(this)) { - IERC20(address(uint160(bytes20(permit2Data)))).safeTransfer(msg.sender, amount); + IERC20 token; + assembly ("memory-safe") { + token := shr(0x60, calldataload(permit2Data.offset)) + } + token.safeTransfer(msg.sender, amount); } else { assert(payer == address(0)); ISignatureTransfer.PermitTransferFrom calldata permit; From f9bb37090e7919289fdd8df43bf2a5c8f6d40bed Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Thu, 10 Oct 2024 13:13:43 -0400 Subject: [PATCH 4/7] Update snaps --- .../allowanceHolder_empty_DAI-WETH.snap | 2 +- .../allowanceHolder_empty_USDC-WETH.snap | 2 +- .../allowanceHolder_empty_USDT-WETH.snap | 2 +- ...owanceHolder_maverickV2_VIP_USDC-WETH.snap | 2 +- .../allowanceHolder_rfq_DAI-WETH.snap | 2 +- .../allowanceHolder_rfq_USDC-WETH.snap | 2 +- .../allowanceHolder_rfq_USDT-WETH.snap | 2 +- ...older_rfq_fixedFee_sellToken_DAI-WETH.snap | 2 +- ...lder_rfq_fixedFee_sellToken_USDC-WETH.snap | 2 +- ...lder_rfq_fixedFee_sellToken_USDT-WETH.snap | 2 +- ...fq_proportionalFee_sellToken_DAI-WETH.snap | 2 +- ...q_proportionalFee_sellToken_USDC-WETH.snap | 2 +- ...q_proportionalFee_sellToken_USDT-WETH.snap | 2 +- ...older_uniswapV2_single_chain_DAI-WETH.snap | 2 +- ...lder_uniswapV2_single_chain_USDC-WETH.snap | 2 +- ...lder_uniswapV2_single_chain_USDT-WETH.snap | 2 +- ...allowanceHolder_uniswapV3VIP_DAI-WETH.snap | 2 +- ...llowanceHolder_uniswapV3VIP_USDC-WETH.snap | 2 +- ...llowanceHolder_uniswapV3VIP_USDT-WETH.snap | 2 +- ...Holder_uniswapV3VIP_contract_DAI-WETH.snap | 2 +- ...older_uniswapV3VIP_contract_USDC-WETH.snap | 2 +- ...older_uniswapV3VIP_contract_USDT-WETH.snap | 2 +- .../allowanceHolder_uniswapV3_DAI-WETH.snap | 2 +- .../allowanceHolder_uniswapV3_USDC-WETH.snap | 2 +- .../allowanceHolder_uniswapV3_USDT-WETH.snap | 2 +- ...xternalMoveExecute_uniswapV3_DAI-WETH.snap | 2 +- ...ternalMoveExecute_uniswapV3_USDC-WETH.snap | 2 +- ...ternalMoveExecute_uniswapV3_USDT-WETH.snap | 2 +- ...settler_metaTxn_uniswapV3VIP_DAI-WETH.snap | 2 +- ...ettler_metaTxn_uniswapV3VIP_USDC-WETH.snap | 2 +- ...ettler_metaTxn_uniswapV3VIP_USDT-WETH.snap | 2 +- .../settler_metaTxn_uniswapV3_DAI-WETH.snap | 2 +- .../settler_metaTxn_uniswapV3_USDC-WETH.snap | 2 +- .../settler_metaTxn_uniswapV3_USDT-WETH.snap | 2 +- .../settler_uniswapV3VIP_DAI-WETH.snap | 2 +- .../settler_uniswapV3VIP_USDC-WETH.snap | 2 +- .../settler_uniswapV3VIP_USDT-WETH.snap | 2 +- .../settler_uniswapV3_DAI-WETH.snap | 2 +- .../settler_uniswapV3_USDC-WETH.snap | 2 +- .../settler_uniswapV3_USDT-WETH.snap | 2 +- ...V3_buyToken_fee_full_custody_DAI-WETH.snap | 2 +- ...3_buyToken_fee_full_custody_USDC-WETH.snap | 2 +- ...3_buyToken_fee_full_custody_USDT-WETH.snap | 2 +- ..._buyToken_fee_single_custody_DAI-WETH.snap | 2 +- ...buyToken_fee_single_custody_USDC-WETH.snap | 2 +- ...buyToken_fee_single_custody_USDT-WETH.snap | 2 +- ...settler_uniswapV3_multiplex2_DAI-WETH.snap | 2 +- ...ettler_uniswapV3_multiplex2_USDC-WETH.snap | 2 +- ...ettler_uniswapV3_multiplex2_USDT-WETH.snap | 2 +- ...3_sellToken_fee_full_custody_DAI-WETH.snap | 2 +- ..._sellToken_fee_full_custody_USDC-WETH.snap | 2 +- ..._sellToken_fee_full_custody_USDT-WETH.snap | 2 +- README.md | 86 +++++++++---------- 53 files changed, 95 insertions(+), 95 deletions(-) diff --git a/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap index a3b9cc532..1c1123a48 100644 --- a/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap @@ -1 +1 @@ -8649 \ No newline at end of file +8526 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap index a3b9cc532..1c1123a48 100644 --- a/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap @@ -1 +1 @@ -8649 \ No newline at end of file +8526 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap index a3b9cc532..1c1123a48 100644 --- a/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap @@ -1 +1 @@ -8649 \ No newline at end of file +8526 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap index bce4817b7..c883c4f4c 100644 --- a/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap @@ -1 +1 @@ -123661 \ No newline at end of file +123538 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap index db26c171e..8c3aac250 100644 --- a/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap @@ -1 +1 @@ -87031 \ No newline at end of file +86908 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap index c49bbe9b3..b093d9eb5 100644 --- a/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap @@ -1 +1 @@ -106505 \ No newline at end of file +106382 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap index e2378d1cb..5e6d40424 100644 --- a/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap @@ -1 +1 @@ -98143 \ No newline at end of file +98020 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap index 7168eb3c4..969c0fe94 100644 --- a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap @@ -1 +1 @@ -99130 \ No newline at end of file +99007 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap index d17bc79c3..ecee26612 100644 --- a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap @@ -1 +1 @@ -122778 \ No newline at end of file +122655 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap index 800174f11..bacb291bf 100644 --- a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap @@ -1 +1 @@ -111354 \ No newline at end of file +111231 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap index abac617d9..bb87690d3 100644 --- a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap @@ -1 +1 @@ -126912 \ No newline at end of file +126789 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap index 73afe119b..e5003d6fc 100644 --- a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap @@ -1 +1 @@ -154498 \ No newline at end of file +154375 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap index 0391d30de..1e8a557e6 100644 --- a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap @@ -1 +1 @@ -143656 \ No newline at end of file +143533 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap index 7e0273943..19e726ff9 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap @@ -1 +1 @@ -104266 \ No newline at end of file +104143 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap index 88eeca48f..46e7a29db 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap @@ -1 +1 @@ -114364 \ No newline at end of file +114241 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap index 05531fefa..30eb273b4 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap @@ -1 +1 @@ -105434 \ No newline at end of file +105311 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap index fa1881560..98b305ca5 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap @@ -1 +1 @@ -113262 \ No newline at end of file +113034 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap index 6b7ae9b05..19b81478e 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap @@ -1 +1 @@ -125828 \ No newline at end of file +125600 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap index 4ebdb44c1..eabd384e8 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap @@ -1 +1 @@ -116078 \ No newline at end of file +115850 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap index c6452b3b6..99358cf85 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap @@ -1 +1 @@ -113381 \ No newline at end of file +113153 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap index 85bd0e1fb..1b982bd6a 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap @@ -1 +1 @@ -125947 \ No newline at end of file +125719 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap index fd7f5d05a..83042d481 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap @@ -1 +1 @@ -116197 \ No newline at end of file +115969 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap index 5773ffd91..d6dc3c2e4 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -140133 \ No newline at end of file +139805 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap index bad4f6237..bd0b35bd8 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -156755 \ No newline at end of file +156427 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap index 65ced7c98..9c62001be 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -146806 \ No newline at end of file +146478 \ No newline at end of file diff --git a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap index 2edaef5a5..fea04bbd7 100644 --- a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -129647 \ No newline at end of file +129442 \ No newline at end of file diff --git a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap index bbd4c5e60..a1317db49 100644 --- a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -140638 \ No newline at end of file +140433 \ No newline at end of file diff --git a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap index 868da7dba..5aed9cf81 100644 --- a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -136635 \ No newline at end of file +136430 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3VIP_DAI-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3VIP_DAI-WETH.snap index 216b84648..14a19b57c 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3VIP_DAI-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3VIP_DAI-WETH.snap @@ -1 +1 @@ -127154 \ No newline at end of file +127049 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDC-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDC-WETH.snap index 7c98d9436..7a4f161b5 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDC-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDC-WETH.snap @@ -1 +1 @@ -139720 \ No newline at end of file +139615 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDT-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDT-WETH.snap index 167b89087..5d47f147c 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDT-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3VIP_USDT-WETH.snap @@ -1 +1 @@ -129964 \ No newline at end of file +129859 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap index 6a7a71914..8213b6e4b 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -153839 \ No newline at end of file +153637 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap index 7938792fe..54fa76acf 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -170461 \ No newline at end of file +170259 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap index bb325a196..8fc155eb0 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -160506 \ No newline at end of file +160304 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3VIP_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3VIP_DAI-WETH.snap index a26d2db83..2baeabfcc 100644 --- a/.forge-snapshots/settler_uniswapV3VIP_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3VIP_DAI-WETH.snap @@ -1 +1 @@ -123776 \ No newline at end of file +123671 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3VIP_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3VIP_USDC-WETH.snap index 0da9845d2..59946e987 100644 --- a/.forge-snapshots/settler_uniswapV3VIP_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3VIP_USDC-WETH.snap @@ -1 +1 @@ -136342 \ No newline at end of file +136237 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3VIP_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3VIP_USDT-WETH.snap index 6631eaebf..541fecf16 100644 --- a/.forge-snapshots/settler_uniswapV3VIP_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3VIP_USDT-WETH.snap @@ -1 +1 @@ -126592 \ No newline at end of file +126487 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap index 139ad043a..51ab15ec9 100644 --- a/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -150497 \ No newline at end of file +150292 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap index 0785b4611..56edd0e5b 100644 --- a/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -167119 \ No newline at end of file +166914 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap index c39d9c8a3..693fbe0b7 100644 --- a/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -157170 \ No newline at end of file +156965 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap index bddc07e98..d0000d435 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap @@ -1 +1 @@ -188427 \ No newline at end of file +188222 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap index cce5af358..f7e012edf 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap @@ -1 +1 @@ -205049 \ No newline at end of file +204844 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap index 6bd08effc..c2e6b1ed5 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap @@ -1 +1 @@ -195100 \ No newline at end of file +194895 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap index 816026626..9d1056fee 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap @@ -1 +1 @@ -161704 \ No newline at end of file +161599 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap index 7cc7a34b5..1bb236e01 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap @@ -1 +1 @@ -174270 \ No newline at end of file +174165 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap index c469db103..96a9a4db9 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap @@ -1 +1 @@ -164520 \ No newline at end of file +164415 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap index 61b94b847..d3563b404 100644 --- a/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap @@ -1 +1 @@ -183640 \ No newline at end of file +183230 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap index 82c770812..9e1b5be90 100644 --- a/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap @@ -1 +1 @@ -204092 \ No newline at end of file +203682 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap index ffada1786..85fcd0ab6 100644 --- a/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap @@ -1 +1 @@ -192556 \ No newline at end of file +192146 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap index 22f0e26b1..f6356daa7 100644 --- a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap @@ -1 +1 @@ -162137 \ No newline at end of file +161932 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap index 885c579eb..51c7cc1d5 100644 --- a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap @@ -1 +1 @@ -182815 \ No newline at end of file +182610 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap index 376ea43a7..3b5ec9282 100644 --- a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap @@ -1 +1 @@ -170586 \ No newline at end of file +170381 \ No newline at end of file diff --git a/README.md b/README.md index ed9102ec9..5f6ada78f 100644 --- a/README.md +++ b/README.md @@ -559,48 +559,48 @@ comparison. | ------------------- | ---------- | --------- | ------ | ------ | | 0x V4 VIP | Uniswap V3 | USDC/WETH | 124669 | 0.00% | | 0x V4 Multiplex | Uniswap V3 | USDC/WETH | 138525 | 11.11% | -| Settler VIP (warm) | Uniswap V3 | USDC/WETH | 136342 | 9.36% | -| AllowanceHolder VIP | Uniswap V3 | USDC/WETH | 125828 | 0.93% | +| Settler VIP (warm) | Uniswap V3 | USDC/WETH | 136237 | 9.28% | +| AllowanceHolder VIP | Uniswap V3 | USDC/WETH | 125600 | 0.75% | | UniswapRouter V3 | Uniswap V3 | USDC/WETH | 120978 | -2.96% | | | | | | | | 0x V4 VIP | Uniswap V3 | DAI/WETH | 112103 | 0.00% | | 0x V4 Multiplex | Uniswap V3 | DAI/WETH | 125959 | 12.36% | -| Settler VIP (warm) | Uniswap V3 | DAI/WETH | 123776 | 10.41% | -| AllowanceHolder VIP | Uniswap V3 | DAI/WETH | 113262 | 1.03% | +| Settler VIP (warm) | Uniswap V3 | DAI/WETH | 123671 | 10.32% | +| AllowanceHolder VIP | Uniswap V3 | DAI/WETH | 113034 | 0.83% | | UniswapRouter V3 | Uniswap V3 | DAI/WETH | 108412 | -3.29% | | | | | | | | 0x V4 VIP | Uniswap V3 | USDT/WETH | 114910 | 0.00% | | 0x V4 Multiplex | Uniswap V3 | USDT/WETH | 128766 | 12.06% | -| Settler VIP (warm) | Uniswap V3 | USDT/WETH | 126592 | 10.17% | -| AllowanceHolder VIP | Uniswap V3 | USDT/WETH | 116078 | 1.02% | +| Settler VIP (warm) | Uniswap V3 | USDT/WETH | 126487 | 10.07% | +| AllowanceHolder VIP | Uniswap V3 | USDT/WETH | 115850 | 0.82% | | UniswapRouter V3 | Uniswap V3 | USDT/WETH | 111091 | -3.32% | | | | | | | | Custody | DEX | Pair | Gas | % | | -------------------- | ---------- | --------- | ------ | ------- | | 0x V4 TransformERC20 | Uniswap V3 | USDC/WETH | 244603 | 0.00% | -| Settler | Uniswap V3 | USDC/WETH | 167119 | -31.68% | -| AllowanceHolder | Uniswap V3 | USDC/WETH | 156755 | -35.91% | +| Settler | Uniswap V3 | USDC/WETH | 166914 | -31.76% | +| AllowanceHolder | Uniswap V3 | USDC/WETH | 156427 | -36.05% | | | | | | | | 0x V4 TransformERC20 | Uniswap V3 | DAI/WETH | 221601 | 0.00% | -| Settler | Uniswap V3 | DAI/WETH | 150497 | -32.09% | -| AllowanceHolder | Uniswap V3 | DAI/WETH | 140133 | -36.76% | +| Settler | Uniswap V3 | DAI/WETH | 150292 | -32.18% | +| AllowanceHolder | Uniswap V3 | DAI/WETH | 139805 | -36.91% | | | | | | | | 0x V4 TransformERC20 | Uniswap V3 | USDT/WETH | 228500 | 0.00% | -| Settler | Uniswap V3 | USDT/WETH | 157170 | -31.22% | -| AllowanceHolder | Uniswap V3 | USDT/WETH | 146806 | -35.75% | +| Settler | Uniswap V3 | USDT/WETH | 156965 | -31.31% | +| AllowanceHolder | Uniswap V3 | USDT/WETH | 146478 | -35.90% | | | | | | | | MetaTransactions | DEX | Pair | Gas | % | | ---------------- | ---------- | --------- | ------ | ------- | | 0x V4 Multiplex | Uniswap V3 | USDC/WETH | 208118 | 0.00% | -| Settler | Uniswap V3 | USDC/WETH | 170464 | -18.09% | +| Settler | Uniswap V3 | USDC/WETH | 170259 | -18.19% | | | | | | | | 0x V4 Multiplex | Uniswap V3 | DAI/WETH | 195552 | 0.00% | -| Settler | Uniswap V3 | DAI/WETH | 153842 | -21.33% | +| Settler | Uniswap V3 | DAI/WETH | 153637 | -21.43% | | | | | | | | 0x V4 Multiplex | Uniswap V3 | USDT/WETH | 198359 | 0.00% | -| Settler | Uniswap V3 | USDT/WETH | 160509 | -19.08% | +| Settler | Uniswap V3 | USDT/WETH | 160304 | -19.18% | | | | | | | | RFQ | DEX | Pair | Gas | % | @@ -608,17 +608,17 @@ comparison. | 0x V4 | 0x V4 | USDC/WETH | 97972 | 0.00% | | Settler | Settler | USDC/WETH | 114370 | 16.74% | | Settler | 0x V4 | USDC/WETH | 206590 | 110.87% | -| AllowanceHolder | Settler | USDC/WETH | 106505 | 8.71% | +| AllowanceHolder | Settler | USDC/WETH | 106382 | 8.58% | | | | | | | | 0x V4 | 0x V4 | DAI/WETH | 78498 | 0.00% | | Settler | Settler | DAI/WETH | 94896 | 20.89% | | Settler | 0x V4 | DAI/WETH | 176680 | 125.08% | -| AllowanceHolder | Settler | DAI/WETH | 87031 | 10.87% | +| AllowanceHolder | Settler | DAI/WETH | 86908 | 10.71% | | | | | | | | 0x V4 | 0x V4 | USDT/WETH | 89610 | 0.00% | | Settler | Settler | USDT/WETH | 106008 | 18.30% | | Settler | 0x V4 | USDT/WETH | 192012 | 114.28% | -| AllowanceHolder | Settler | USDT/WETH | 98143 | 9.52% | +| AllowanceHolder | Settler | USDT/WETH | 98020 | 9.39% | | | | | | | | Curve | DEX | Pair | Gas | % | @@ -642,51 +642,51 @@ comparison. | Buy token fee | DEX | Pair | Gas | % | | ----------------- | ---------- | --------- | ------ | ----- | -| Settler - custody | Uniswap V3 | USDC/WETH | 174270 | 0.00% | +| Settler - custody | Uniswap V3 | USDC/WETH | 174165 | 0.00% | | | | | | | -| Settler - custody | Uniswap V3 | DAI/WETH | 161704 | 0.00% | +| Settler - custody | Uniswap V3 | DAI/WETH | 161599 | 0.00% | | | | | | | -| Settler - custody | Uniswap V3 | USDT/WETH | 164520 | 0.00% | +| Settler - custody | Uniswap V3 | USDT/WETH | 164415 | 0.00% | | | | | | | | Sell token fee | DEX | Pair | Gas | % | | -------------- | ---------- | --------- | ------ | ------- | -| Settler | Uniswap V3 | USDC/WETH | 182815 | 0.00% | +| Settler | Uniswap V3 | USDC/WETH | 182610 | 0.00% | | | | | | | -| Settler | Uniswap V3 | DAI/WETH | 162137 | 0.00% | +| Settler | Uniswap V3 | DAI/WETH | 161932 | 0.00% | | | | | | | -| Settler | Uniswap V3 | USDT/WETH | 170586 | 0.00% | -| Settler | Curve | USDT/WETH | 434131 | 154.49% | +| Settler | Uniswap V3 | USDT/WETH | 170381 | 0.00% | +| Settler | Curve | USDT/WETH | 434131 | 154.80% | | | | | | | | AllowanceHolder | DEX | Pair | Gas | % | | ------------------------------------ | -------------- | --------- | ------ | ------- | -| execute | Uniswap V3 VIP | USDC/WETH | 125828 | 0.00% | -| Settler - external move then execute | Uniswap V3 | USDC/WETH | 140638 | 11.77% | -| execute | RFQ | USDC/WETH | 106505 | -15.36% | +| execute | Uniswap V3 VIP | USDC/WETH | 125600 | 0.00% | +| Settler - external move then execute | Uniswap V3 | USDC/WETH | 140433 | 11.81% | +| execute | RFQ | USDC/WETH | 106382 | -15.30% | | | | | | | -| execute | Uniswap V3 VIP | DAI/WETH | 113262 | 0.00% | -| Settler - external move then execute | Uniswap V3 | DAI/WETH | 129647 | 14.47% | -| execute | RFQ | DAI/WETH | 87031 | -23.16% | +| execute | Uniswap V3 VIP | DAI/WETH | 113034 | 0.00% | +| Settler - external move then execute | Uniswap V3 | DAI/WETH | 129442 | 14.52% | +| execute | RFQ | DAI/WETH | 86908 | -23.11% | | | | | | | -| execute | Uniswap V3 VIP | USDT/WETH | 116078 | 0.00% | -| Settler - external move then execute | Uniswap V3 | USDT/WETH | 136635 | 17.71% | -| execute | RFQ | USDT/WETH | 98143 | -15.45% | +| execute | Uniswap V3 VIP | USDT/WETH | 115850 | 0.00% | +| Settler - external move then execute | Uniswap V3 | USDT/WETH | 136430 | 17.76% | +| execute | RFQ | USDT/WETH | 98020 | -15.39% | | | | | | | | AllowanceHolder sell token fees | DEX | Pair | Gas | % | | ------------------------------- | --- | --------- | ------ | ------ | -| no fee | RFQ | USDC/WETH | 106505 | 0.00% | -| proportional fee | RFQ | USDC/WETH | 154498 | 45.06% | -| fixed fee | RFQ | USDC/WETH | 122778 | 15.28% | +| no fee | RFQ | USDC/WETH | 106382 | 0.00% | +| proportional fee | RFQ | USDC/WETH | 154375 | 45.11% | +| fixed fee | RFQ | USDC/WETH | 122655 | 15.30% | | | | | | | -| no fee | RFQ | DAI/WETH | 87031 | 0.00% | -| proportional fee | RFQ | DAI/WETH | 126912 | 45.82% | -| fixed fee | RFQ | DAI/WETH | 99130 | 13.90% | +| no fee | RFQ | DAI/WETH | 86908 | 0.00% | +| proportional fee | RFQ | DAI/WETH | 126789 | 45.89% | +| fixed fee | RFQ | DAI/WETH | 99007 | 13.92% | | | | | | | -| no fee | RFQ | USDT/WETH | 98143 | 0.00% | -| proportional fee | RFQ | USDT/WETH | 143656 | 46.37% | -| fixed fee | RFQ | USDT/WETH | 111354 | 13.46% | +| no fee | RFQ | USDT/WETH | 98020 | 0.00% | +| proportional fee | RFQ | USDT/WETH | 143533 | 46.43% | +| fixed fee | RFQ | USDT/WETH | 111231 | 13.48% | | | | | | | [//]: # "END TABLES" From 063e58019d25cfd79efcec3dd23fde598d82d057 Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Sun, 13 Oct 2024 14:51:05 -0400 Subject: [PATCH 5/7] Bug! The first argument word is the 4 bytes into calldata --- src/allowanceholder/AllowanceHolderBase.sol | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/allowanceholder/AllowanceHolderBase.sol b/src/allowanceholder/AllowanceHolderBase.sol index dd8c70b33..5e5a44254 100644 --- a/src/allowanceholder/AllowanceHolderBase.sol +++ b/src/allowanceholder/AllowanceHolderBase.sol @@ -22,13 +22,15 @@ abstract contract AllowanceHolderBase is TransientStorageLayout, FreeMemory { // out of `data` and mask it as an address. If there isn't enough // `data`, we use 0xdead instead. address target; // = address(uint160(bytes20(data[0x10:]))); - assembly ("memory-safe") { - target := calldataload(data.offset) - // `shl(0x08, data.length)` can't overflow because we're going to - // `calldatacopy(..., data.length)` later. It would OOG. - let mask := shr(shl(0x08, data.length), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) - // Zero the low bits of `target` if `data` is short - target := and(not(mask), target) + if (data.length >= 4) { + assembly ("memory-safe") { + target := calldataload(add(0x04, data.offset)) + // `shl(0x08, data.length)` can't overflow because we're going to + // `calldatacopy(..., data.length)` later. It would OOG. + let mask := shr(shl(0x08, sub(data.length, 0x04)), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) + // Zero the low bits of `target` if `data` is short + target := and(not(mask), target) + } } // EIP-1352 (not adopted) specifies 0xffff as the maximum precompile if (target <= address(0xffff)) { From b850f6d8b74032e69e305e9c98533da870325354 Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Sun, 13 Oct 2024 14:51:51 -0400 Subject: [PATCH 6/7] Adapt SafeTransferLib from Solady (more golfed) instead of Solmate --- src/vendor/SafeTransferLib.sol | 121 +++++++++++++++++---------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/src/vendor/SafeTransferLib.sol b/src/vendor/SafeTransferLib.sol index 6aebad031..61d3c5a70 100644 --- a/src/vendor/SafeTransferLib.sol +++ b/src/vendor/SafeTransferLib.sol @@ -1,28 +1,24 @@ -// SPDX-License-Identifier: AGPL-3.0-only +// SPDX-License-Identifier: MIT pragma solidity >=0.8.25; import {IERC20} from "@forge-std/interfaces/IERC20.sol"; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. -/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) -/// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. +/// @author Modified from Solady (https://github.com/vectorized/solady/blob/main/src/utils/SafeTransferLib.sol) +/// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Note that none of the functions in this library check that a token has code at all! That responsibility is delegated to the caller. library SafeTransferLib { - uint32 private constant _TRANSFER_FROM_FAILED_SELECTOR = 0x7939f424; // bytes4(keccak256("TransferFromFailed()")) - uint32 private constant _TRANSFER_FAILED_SELECTOR = 0x90b8ec18; // bytes4(keccak256("TransferFailed()")) - uint32 private constant _APPROVE_FAILED_SELECTOR = 0x3e3f8f73; // bytes4(keccak256("ApproveFailed()")) - /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address payable to, uint256 amount) internal { assembly ("memory-safe") { - // Transfer the ETH and store if it succeeded or not. - if iszero(call(gas(), to, amount, 0, 0, 0, 0)) { - let freeMemoryPointer := mload(0x40) - returndatacopy(freeMemoryPointer, 0, returndatasize()) - revert(freeMemoryPointer, returndatasize()) + // Transfer the ETH and revert if it fails. + if iszero(call(gas(), to, amount, 0x00, 0x00, 0x00, 0x00)) { + let ptr := mload(0x40) + returndatacopy(ptr, 0x00, returndatasize()) + revert(ptr, returndatasize()) } } } @@ -33,77 +29,82 @@ library SafeTransferLib { function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { assembly ("memory-safe") { - // Get a pointer to some free memory. - let freeMemoryPointer := mload(0x40) + let ptr := mload(0x40) // Cache the free memory pointer. - // Write the abi-encoded calldata into memory, beginning with the function selector. - mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) - mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument. - mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. - mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. + mstore(0x60, amount) // Store the `amount` argument. + mstore(0x40, to) // Store the `to` argument. + mstore(0x2c, shl(0x60, from)) // Store the `from` argument. (Clears `to`'s padding.) + mstore(0x0c, 0x23b872dd000000000000000000000000) // Selector for `transferFrom(address,address,uint256)`, with `from`'s padding. - // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. - // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. - if iszero(call(gas(), token, 0, freeMemoryPointer, 100, 0, 32)) { - returndatacopy(freeMemoryPointer, 0, returndatasize()) - revert(freeMemoryPointer, returndatasize()) + // Calldata starts at offset 28 and is 100 bytes long (3 * 32 + 4). + // If there is returndata (optional) we copy the first 32 bytes into the first slot of memory. + if iszero(call(gas(), token, 0x00, 0x1c, 0x64, 0x00, 0x20)) { + returndatacopy(ptr, 0x00, returndatasize()) + revert(ptr, returndatasize()) } - // We check that the call either returned exactly 1 (can't just be non-zero data), or had no - // return data. - if iszero(or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize()))) { - mstore(0, _TRANSFER_FROM_FAILED_SELECTOR) + // We check that the call either returned exactly 1 [true] (can't just be non-zero + // data), or had no return data. + if iszero(or(and(eq(mload(0x00), 0x01), gt(returndatasize(), 0x1f)), iszero(returndatasize()))) { + mstore(0x00, 0x7939f424) // Selector for `TransferFromFailed()` revert(0x1c, 0x04) } + + mstore(0x60, 0x00) // Restore the zero slot to zero. + mstore(0x40, ptr) // Restore the free memory pointer. } } function safeTransfer(IERC20 token, address to, uint256 amount) internal { assembly ("memory-safe") { - // Get a pointer to some free memory. - let freeMemoryPointer := mload(0x40) - - // Write the abi-encoded calldata into memory, beginning with the function selector. - mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) - mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. - mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. + mstore(0x14, to) // Store the `to` argument. + mstore(0x34, amount) // Store the `amount` argument. + // Storing `amount` clobbers the upper bits of the free memory pointer, but those bits + // can never be set without running into an OOG, so it's safe. We'll restore them to + // zero at the end. + mstore(0x00, 0xa9059cbb000000000000000000000000) // Selector for `transfer(address,uint256)`, with `to`'s padding. - // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. - // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. - if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)) { - returndatacopy(freeMemoryPointer, 0, returndatasize()) - revert(freeMemoryPointer, returndatasize()) + // Calldata starts at offset 16 and is 68 bytes long (2 * 32 + 4). + // If there is returndata (optional) we copy the first 32 bytes into the first slot of memory. + if iszero(call(gas(), token, 0x00, 0x10, 0x44, 0x00, 0x20)) { + let ptr := mload(0x40) + returndatacopy(ptr, 0x00, returndatasize()) + revert(ptr, returndatasize()) } - // We check that the call either returned exactly 1 (can't just be non-zero data), or had no - // return data. - if iszero(or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize()))) { - mstore(0, _TRANSFER_FAILED_SELECTOR) + // We check that the call either returned exactly 1 [true] (can't just be non-zero + // data), or had no return data. + if iszero(or(and(eq(mload(0x00), 0x01), gt(returndatasize(), 0x1f)), iszero(returndatasize()))) { + mstore(0x00, 0x90b8ec18) // Selector for `TransferFailed()` revert(0x1c, 0x04) } + + mstore(0x34, 0x00) // Restore the part of the free memory pointer that was overwritten. } } function safeApprove(IERC20 token, address to, uint256 amount) internal { assembly ("memory-safe") { - // Get a pointer to some free memory. - let freeMemoryPointer := mload(0x40) - - // Write the abi-encoded calldata into memory, beginning with the function selector. - mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) - mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. - mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. + mstore(0x14, to) // Store the `to` argument. + mstore(0x34, amount) // Store the `amount` argument. + // Storing `amount` clobbers the upper bits of the free memory pointer, but those bits + // can never be set without running into an OOG, so it's safe. We'll restore them to + // zero at the end. + mstore(0x00, 0x095ea7b3000000000000000000000000) // Selector for `approve(address,uint256)`, with `to`'s padding. - // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. - // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. - if iszero(call(gas(), token, 0, freeMemoryPointer, 68, 0, 32)) { - returndatacopy(freeMemoryPointer, 0, returndatasize()) - revert(freeMemoryPointer, returndatasize()) + // Calldata starts at offset 16 and is 68 bytes long (2 * 32 + 4). + // If there is returndata (optional) we copy the first 32 bytes into the first slot of memory. + if iszero(call(gas(), token, 0x00, 0x10, 0x44, 0x00, 0x20)) { + let ptr := mload(0x40) + returndatacopy(ptr, 0x00, returndatasize()) + revert(ptr, returndatasize()) } - // We check that the call either returned exactly 1 (can't just be non-zero data), or had no - // return data. - if iszero(or(and(eq(mload(0), 1), gt(returndatasize(), 31)), iszero(returndatasize()))) { - mstore(0, _APPROVE_FAILED_SELECTOR) + // We check that the call either returned exactly 1 [true] (can't just be non-zero + // data), or had no return data. + if iszero(or(and(eq(mload(0x00), 0x01), gt(returndatasize(), 0x1f)), iszero(returndatasize()))) { + mstore(0x00, 0x3e3f8f73) // Selector for `ApproveFailed()` revert(0x1c, 0x04) } + + mstore(0x34, 0x00) // Restore the part of the free memory pointer that was overwritten. } } From 6256efb5d83a7431779ef147d6ff768851e99ca4 Mon Sep 17 00:00:00 2001 From: Duncan Townsend Date: Sun, 13 Oct 2024 14:52:30 -0400 Subject: [PATCH 7/7] Update snaps --- .../allowanceHolder_empty_DAI-WETH.snap | 2 +- .../allowanceHolder_empty_USDC-WETH.snap | 2 +- .../allowanceHolder_empty_USDT-WETH.snap | 2 +- ...owanceHolder_maverickV2_VIP_USDC-WETH.snap | 2 +- .../allowanceHolder_rfq_DAI-WETH.snap | 2 +- .../allowanceHolder_rfq_USDC-WETH.snap | 2 +- .../allowanceHolder_rfq_USDT-WETH.snap | 2 +- ...older_rfq_fixedFee_sellToken_DAI-WETH.snap | 2 +- ...lder_rfq_fixedFee_sellToken_USDC-WETH.snap | 2 +- ...lder_rfq_fixedFee_sellToken_USDT-WETH.snap | 2 +- ...fq_proportionalFee_sellToken_DAI-WETH.snap | 2 +- ...q_proportionalFee_sellToken_USDC-WETH.snap | 2 +- ...q_proportionalFee_sellToken_USDT-WETH.snap | 2 +- ...older_uniswapV2_single_chain_DAI-WETH.snap | 2 +- ...lder_uniswapV2_single_chain_USDC-WETH.snap | 2 +- ...lder_uniswapV2_single_chain_USDT-WETH.snap | 2 +- ...allowanceHolder_uniswapV3VIP_DAI-WETH.snap | 2 +- ...llowanceHolder_uniswapV3VIP_USDC-WETH.snap | 2 +- ...llowanceHolder_uniswapV3VIP_USDT-WETH.snap | 2 +- ...Holder_uniswapV3VIP_contract_DAI-WETH.snap | 2 +- ...older_uniswapV3VIP_contract_USDC-WETH.snap | 2 +- ...older_uniswapV3VIP_contract_USDT-WETH.snap | 2 +- .../allowanceHolder_uniswapV3_DAI-WETH.snap | 2 +- .../allowanceHolder_uniswapV3_USDC-WETH.snap | 2 +- .../allowanceHolder_uniswapV3_USDT-WETH.snap | 2 +- .../settler_basic_curve_USDT-WETH.snap | 2 +- .../settler_curveV2_fee_USDT-WETH.snap | 2 +- .../settler_dodoV1_USDC-WETH.snap | 2 +- .forge-snapshots/settler_dodov2_USDT-DAI.snap | 2 +- ...xternalMoveExecute_uniswapV3_DAI-WETH.snap | 2 +- ...ternalMoveExecute_uniswapV3_USDC-WETH.snap | 2 +- ...ternalMoveExecute_uniswapV3_USDT-WETH.snap | 2 +- .../settler_makerPsmLite_buyGem_DAI-USDC.snap | 2 +- ...settler_makerPsmLite_sellGem_USDC-DAI.snap | 2 +- .../settler_maverickV2_USDC-WETH.snap | 2 +- ...metaTxn_makerPsmLite_sellGem_USDC-DAI.snap | 2 +- .../settler_metaTxn_uniswapV3_DAI-WETH.snap | 2 +- .../settler_metaTxn_uniswapV3_USDC-WETH.snap | 2 +- .../settler_metaTxn_uniswapV3_USDT-WETH.snap | 2 +- ...settler_rfq_fee_full_custody_DAI-USDC.snap | 2 +- ...settler_rfq_fee_full_custody_DAI-WETH.snap | 2 +- ...settler_rfq_fee_full_custody_USDC-DAI.snap | 2 +- ...ettler_rfq_fee_full_custody_USDC-WETH.snap | 2 +- ...ettler_rfq_fee_full_custody_USDT-WETH.snap | 2 +- .../settler_uniswapV3_DAI-WETH.snap | 2 +- .../settler_uniswapV3_USDC-WETH.snap | 2 +- .../settler_uniswapV3_USDT-WETH.snap | 2 +- ...V3_buyToken_fee_full_custody_DAI-WETH.snap | 2 +- ...3_buyToken_fee_full_custody_USDC-WETH.snap | 2 +- ...3_buyToken_fee_full_custody_USDT-WETH.snap | 2 +- ..._buyToken_fee_single_custody_DAI-WETH.snap | 2 +- ...buyToken_fee_single_custody_USDC-WETH.snap | 2 +- ...buyToken_fee_single_custody_USDT-WETH.snap | 2 +- ...settler_uniswapV3_multiplex2_DAI-WETH.snap | 2 +- ...ettler_uniswapV3_multiplex2_USDC-WETH.snap | 2 +- ...ettler_uniswapV3_multiplex2_USDT-WETH.snap | 2 +- ...3_sellToken_fee_full_custody_DAI-WETH.snap | 2 +- ..._sellToken_fee_full_custody_USDC-WETH.snap | 2 +- ..._sellToken_fee_full_custody_USDT-WETH.snap | 2 +- .../settler_zeroExOtc_DAI-WETH.snap | 2 +- .../settler_zeroExOtc_USDC-WETH.snap | 2 +- .../settler_zeroExOtc_USDT-WETH.snap | 2 +- ...ettler_zeroExOtc_partialFill_DAI-WETH.snap | 2 +- ...ttler_zeroExOtc_partialFill_USDC-WETH.snap | 2 +- ...ttler_zeroExOtc_partialFill_USDT-WETH.snap | 2 +- .forge-snapshots/wethDeposit.snap | 2 +- README.md | 90 +++++++++---------- 67 files changed, 111 insertions(+), 111 deletions(-) diff --git a/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap index 1c1123a48..a3992b742 100644 --- a/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_empty_DAI-WETH.snap @@ -1 +1 @@ -8526 \ No newline at end of file +8597 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap index 1c1123a48..a3992b742 100644 --- a/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_empty_USDC-WETH.snap @@ -1 +1 @@ -8526 \ No newline at end of file +8597 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap index 1c1123a48..a3992b742 100644 --- a/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_empty_USDT-WETH.snap @@ -1 +1 @@ -8526 \ No newline at end of file +8597 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap index c883c4f4c..7e1ecc517 100644 --- a/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_maverickV2_VIP_USDC-WETH.snap @@ -1 +1 @@ -123538 \ No newline at end of file +123567 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap index 8c3aac250..59bc3e89f 100644 --- a/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_DAI-WETH.snap @@ -1 +1 @@ -86908 \ No newline at end of file +86937 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap index b093d9eb5..cf4ae8350 100644 --- a/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_USDC-WETH.snap @@ -1 +1 @@ -106382 \ No newline at end of file +106411 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap index 5e6d40424..16d569a67 100644 --- a/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_USDT-WETH.snap @@ -1 +1 @@ -98020 \ No newline at end of file +98049 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap index 969c0fe94..546364a86 100644 --- a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_DAI-WETH.snap @@ -1 +1 @@ -99007 \ No newline at end of file +98994 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap index ecee26612..205eb7348 100644 --- a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDC-WETH.snap @@ -1 +1 @@ -122655 \ No newline at end of file +122642 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap index bacb291bf..da44c859a 100644 --- a/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_fixedFee_sellToken_USDT-WETH.snap @@ -1 +1 @@ -111231 \ No newline at end of file +111218 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap index bb87690d3..ea5b4878b 100644 --- a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_DAI-WETH.snap @@ -1 +1 @@ -126789 \ No newline at end of file +126782 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap index e5003d6fc..8e1f506cc 100644 --- a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDC-WETH.snap @@ -1 +1 @@ -154375 \ No newline at end of file +154368 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap index 1e8a557e6..f40d89f68 100644 --- a/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_rfq_proportionalFee_sellToken_USDT-WETH.snap @@ -1 +1 @@ -143533 \ No newline at end of file +143526 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap index 19e726ff9..c36ddabb0 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_DAI-WETH.snap @@ -1 +1 @@ -104143 \ No newline at end of file +104172 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap index 46e7a29db..d13fb491d 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDC-WETH.snap @@ -1 +1 @@ -114241 \ No newline at end of file +114270 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap index 30eb273b4..1de11e322 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV2_single_chain_USDT-WETH.snap @@ -1 +1 @@ -105311 \ No newline at end of file +105340 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap index 98b305ca5..9f8fbfaa0 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_DAI-WETH.snap @@ -1 +1 @@ -113034 \ No newline at end of file +113063 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap index 19b81478e..f163b1577 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDC-WETH.snap @@ -1 +1 @@ -125600 \ No newline at end of file +125629 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap index eabd384e8..cf2fdab5d 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_USDT-WETH.snap @@ -1 +1 @@ -115850 \ No newline at end of file +115879 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap index 99358cf85..2a449e534 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_DAI-WETH.snap @@ -1 +1 @@ -113153 \ No newline at end of file +113182 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap index 1b982bd6a..4482e5581 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDC-WETH.snap @@ -1 +1 @@ -125719 \ No newline at end of file +125748 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap index 83042d481..71cc06b4d 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3VIP_contract_USDT-WETH.snap @@ -1 +1 @@ -115969 \ No newline at end of file +115998 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap index d6dc3c2e4..f3d7a1024 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -139805 \ No newline at end of file +139792 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap index bd0b35bd8..22d029c02 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -156427 \ No newline at end of file +156414 \ No newline at end of file diff --git a/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap b/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap index 9c62001be..0e75008de 100644 --- a/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/allowanceHolder_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -146478 \ No newline at end of file +146465 \ No newline at end of file diff --git a/.forge-snapshots/settler_basic_curve_USDT-WETH.snap b/.forge-snapshots/settler_basic_curve_USDT-WETH.snap index efee85588..42c04b244 100644 --- a/.forge-snapshots/settler_basic_curve_USDT-WETH.snap +++ b/.forge-snapshots/settler_basic_curve_USDT-WETH.snap @@ -1 +1 @@ -422784 \ No newline at end of file +422739 \ No newline at end of file diff --git a/.forge-snapshots/settler_curveV2_fee_USDT-WETH.snap b/.forge-snapshots/settler_curveV2_fee_USDT-WETH.snap index 6addc4f3c..1b7c69fe3 100644 --- a/.forge-snapshots/settler_curveV2_fee_USDT-WETH.snap +++ b/.forge-snapshots/settler_curveV2_fee_USDT-WETH.snap @@ -1 +1 @@ -434131 \ No newline at end of file +434086 \ No newline at end of file diff --git a/.forge-snapshots/settler_dodoV1_USDC-WETH.snap b/.forge-snapshots/settler_dodoV1_USDC-WETH.snap index 95abb2345..d8bde7e24 100644 --- a/.forge-snapshots/settler_dodoV1_USDC-WETH.snap +++ b/.forge-snapshots/settler_dodoV1_USDC-WETH.snap @@ -1 +1 @@ -308678 \ No newline at end of file +308591 \ No newline at end of file diff --git a/.forge-snapshots/settler_dodov2_USDT-DAI.snap b/.forge-snapshots/settler_dodov2_USDT-DAI.snap index 8fb5c1de9..96ffb4d5e 100644 --- a/.forge-snapshots/settler_dodov2_USDT-DAI.snap +++ b/.forge-snapshots/settler_dodov2_USDT-DAI.snap @@ -1 +1 @@ -217904 \ No newline at end of file +217868 \ No newline at end of file diff --git a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap index fea04bbd7..a4a59405a 100644 --- a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -129442 \ No newline at end of file +129381 \ No newline at end of file diff --git a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap index a1317db49..7e82ff187 100644 --- a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -140433 \ No newline at end of file +140372 \ No newline at end of file diff --git a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap index 5aed9cf81..46bc685eb 100644 --- a/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/settler_externalMoveExecute_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -136430 \ No newline at end of file +136369 \ No newline at end of file diff --git a/.forge-snapshots/settler_makerPsmLite_buyGem_DAI-USDC.snap b/.forge-snapshots/settler_makerPsmLite_buyGem_DAI-USDC.snap index ba3a0d4e0..76a688166 100644 --- a/.forge-snapshots/settler_makerPsmLite_buyGem_DAI-USDC.snap +++ b/.forge-snapshots/settler_makerPsmLite_buyGem_DAI-USDC.snap @@ -1 +1 @@ -176333 \ No newline at end of file +176309 \ No newline at end of file diff --git a/.forge-snapshots/settler_makerPsmLite_sellGem_USDC-DAI.snap b/.forge-snapshots/settler_makerPsmLite_sellGem_USDC-DAI.snap index 4163e3119..3f18b06b9 100644 --- a/.forge-snapshots/settler_makerPsmLite_sellGem_USDC-DAI.snap +++ b/.forge-snapshots/settler_makerPsmLite_sellGem_USDC-DAI.snap @@ -1 +1 @@ -180740 \ No newline at end of file +180729 \ No newline at end of file diff --git a/.forge-snapshots/settler_maverickV2_USDC-WETH.snap b/.forge-snapshots/settler_maverickV2_USDC-WETH.snap index 7ca2b3ad2..4fbd72215 100644 --- a/.forge-snapshots/settler_maverickV2_USDC-WETH.snap +++ b/.forge-snapshots/settler_maverickV2_USDC-WETH.snap @@ -1 +1 @@ -163954 \ No newline at end of file +163918 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_makerPsmLite_sellGem_USDC-DAI.snap b/.forge-snapshots/settler_metaTxn_makerPsmLite_sellGem_USDC-DAI.snap index 0f96cf27b..f982d19d5 100644 --- a/.forge-snapshots/settler_metaTxn_makerPsmLite_sellGem_USDC-DAI.snap +++ b/.forge-snapshots/settler_metaTxn_makerPsmLite_sellGem_USDC-DAI.snap @@ -1 +1 @@ -184637 \ No newline at end of file +184628 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap index 8213b6e4b..551175e9d 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -153637 \ No newline at end of file +153595 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap index 54fa76acf..ec0ea6f0d 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -170259 \ No newline at end of file +170217 \ No newline at end of file diff --git a/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap b/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap index 8fc155eb0..6d6c20790 100644 --- a/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/settler_metaTxn_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -160304 \ No newline at end of file +160262 \ No newline at end of file diff --git a/.forge-snapshots/settler_rfq_fee_full_custody_DAI-USDC.snap b/.forge-snapshots/settler_rfq_fee_full_custody_DAI-USDC.snap index 57a5ab280..39f63e5b8 100644 --- a/.forge-snapshots/settler_rfq_fee_full_custody_DAI-USDC.snap +++ b/.forge-snapshots/settler_rfq_fee_full_custody_DAI-USDC.snap @@ -1 +1 @@ -245559 \ No newline at end of file +245487 \ No newline at end of file diff --git a/.forge-snapshots/settler_rfq_fee_full_custody_DAI-WETH.snap b/.forge-snapshots/settler_rfq_fee_full_custody_DAI-WETH.snap index e8765af4f..ddaa45f04 100644 --- a/.forge-snapshots/settler_rfq_fee_full_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_rfq_fee_full_custody_DAI-WETH.snap @@ -1 +1 @@ -160803 \ No newline at end of file +160731 \ No newline at end of file diff --git a/.forge-snapshots/settler_rfq_fee_full_custody_USDC-DAI.snap b/.forge-snapshots/settler_rfq_fee_full_custody_USDC-DAI.snap index f93a7438f..9f5bf5ca0 100644 --- a/.forge-snapshots/settler_rfq_fee_full_custody_USDC-DAI.snap +++ b/.forge-snapshots/settler_rfq_fee_full_custody_USDC-DAI.snap @@ -1 +1 @@ -241503 \ No newline at end of file +241431 \ No newline at end of file diff --git a/.forge-snapshots/settler_rfq_fee_full_custody_USDC-WETH.snap b/.forge-snapshots/settler_rfq_fee_full_custody_USDC-WETH.snap index 2af2be17d..f32f29728 100644 --- a/.forge-snapshots/settler_rfq_fee_full_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_rfq_fee_full_custody_USDC-WETH.snap @@ -1 +1 @@ -184333 \ No newline at end of file +184261 \ No newline at end of file diff --git a/.forge-snapshots/settler_rfq_fee_full_custody_USDT-WETH.snap b/.forge-snapshots/settler_rfq_fee_full_custody_USDT-WETH.snap index 31ace86df..9b70202e1 100644 --- a/.forge-snapshots/settler_rfq_fee_full_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_rfq_fee_full_custody_USDT-WETH.snap @@ -1 +1 @@ -175771 \ No newline at end of file +175699 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap index 51ab15ec9..5f87c0797 100644 --- a/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_DAI-WETH.snap @@ -1 +1 @@ -150292 \ No newline at end of file +150250 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap index 56edd0e5b..4140e507e 100644 --- a/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_USDC-WETH.snap @@ -1 +1 @@ -166914 \ No newline at end of file +166872 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap index 693fbe0b7..c1eeb1bce 100644 --- a/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_USDT-WETH.snap @@ -1 +1 @@ -156965 \ No newline at end of file +156923 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap index d0000d435..75c4ac77b 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_DAI-WETH.snap @@ -1 +1 @@ -188222 \ No newline at end of file +188144 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap index f7e012edf..521244d5f 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDC-WETH.snap @@ -1 +1 @@ -204844 \ No newline at end of file +204766 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap index c2e6b1ed5..9de69ce05 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_full_custody_USDT-WETH.snap @@ -1 +1 @@ -194895 \ No newline at end of file +194817 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap index 9d1056fee..c36ce2657 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_DAI-WETH.snap @@ -1 +1 @@ -161599 \ No newline at end of file +161563 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap index 1bb236e01..dbb8f1cc0 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDC-WETH.snap @@ -1 +1 @@ -174165 \ No newline at end of file +174129 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap index 96a9a4db9..27d90712f 100644 --- a/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_buyToken_fee_single_custody_USDT-WETH.snap @@ -1 +1 @@ -164415 \ No newline at end of file +164379 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap index d3563b404..4b79d012a 100644 --- a/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_multiplex2_DAI-WETH.snap @@ -1 +1 @@ -183230 \ No newline at end of file +183146 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap index 9e1b5be90..2e0063afe 100644 --- a/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_multiplex2_USDC-WETH.snap @@ -1 +1 @@ -203682 \ No newline at end of file +203598 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap index 85fcd0ab6..10a02d4e1 100644 --- a/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_multiplex2_USDT-WETH.snap @@ -1 +1 @@ -192146 \ No newline at end of file +192062 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap index f6356daa7..2227aba1a 100644 --- a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_DAI-WETH.snap @@ -1 +1 @@ -161932 \ No newline at end of file +161890 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap index 51c7cc1d5..bdfa0a7be 100644 --- a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDC-WETH.snap @@ -1 +1 @@ -182610 \ No newline at end of file +182568 \ No newline at end of file diff --git a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap index 3b5ec9282..a604f4b33 100644 --- a/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap +++ b/.forge-snapshots/settler_uniswapV3_sellToken_fee_full_custody_USDT-WETH.snap @@ -1 +1 @@ -170381 \ No newline at end of file +170339 \ No newline at end of file diff --git a/.forge-snapshots/settler_zeroExOtc_DAI-WETH.snap b/.forge-snapshots/settler_zeroExOtc_DAI-WETH.snap index 01a644215..512512da3 100644 --- a/.forge-snapshots/settler_zeroExOtc_DAI-WETH.snap +++ b/.forge-snapshots/settler_zeroExOtc_DAI-WETH.snap @@ -1 +1 @@ -176680 \ No newline at end of file +176635 \ No newline at end of file diff --git a/.forge-snapshots/settler_zeroExOtc_USDC-WETH.snap b/.forge-snapshots/settler_zeroExOtc_USDC-WETH.snap index 13a200c39..e02dbc509 100644 --- a/.forge-snapshots/settler_zeroExOtc_USDC-WETH.snap +++ b/.forge-snapshots/settler_zeroExOtc_USDC-WETH.snap @@ -1 +1 @@ -206590 \ No newline at end of file +206545 \ No newline at end of file diff --git a/.forge-snapshots/settler_zeroExOtc_USDT-WETH.snap b/.forge-snapshots/settler_zeroExOtc_USDT-WETH.snap index 306aa9826..7e3a2abd5 100644 --- a/.forge-snapshots/settler_zeroExOtc_USDT-WETH.snap +++ b/.forge-snapshots/settler_zeroExOtc_USDT-WETH.snap @@ -1 +1 @@ -192012 \ No newline at end of file +191967 \ No newline at end of file diff --git a/.forge-snapshots/settler_zeroExOtc_partialFill_DAI-WETH.snap b/.forge-snapshots/settler_zeroExOtc_partialFill_DAI-WETH.snap index e7a5ee6f1..144f77c55 100644 --- a/.forge-snapshots/settler_zeroExOtc_partialFill_DAI-WETH.snap +++ b/.forge-snapshots/settler_zeroExOtc_partialFill_DAI-WETH.snap @@ -1 +1 @@ -183889 \ No newline at end of file +183844 \ No newline at end of file diff --git a/.forge-snapshots/settler_zeroExOtc_partialFill_USDC-WETH.snap b/.forge-snapshots/settler_zeroExOtc_partialFill_USDC-WETH.snap index ddf9f1bd6..1f6fa43f8 100644 --- a/.forge-snapshots/settler_zeroExOtc_partialFill_USDC-WETH.snap +++ b/.forge-snapshots/settler_zeroExOtc_partialFill_USDC-WETH.snap @@ -1 +1 @@ -215855 \ No newline at end of file +215810 \ No newline at end of file diff --git a/.forge-snapshots/settler_zeroExOtc_partialFill_USDT-WETH.snap b/.forge-snapshots/settler_zeroExOtc_partialFill_USDT-WETH.snap index 726fd7068..3aee09ff5 100644 --- a/.forge-snapshots/settler_zeroExOtc_partialFill_USDT-WETH.snap +++ b/.forge-snapshots/settler_zeroExOtc_partialFill_USDT-WETH.snap @@ -1 +1 @@ -200997 \ No newline at end of file +200952 \ No newline at end of file diff --git a/.forge-snapshots/wethDeposit.snap b/.forge-snapshots/wethDeposit.snap index 9861aaaaf..af340218e 100644 --- a/.forge-snapshots/wethDeposit.snap +++ b/.forge-snapshots/wethDeposit.snap @@ -1 +1 @@ -85566 \ No newline at end of file +85524 \ No newline at end of file diff --git a/README.md b/README.md index 5f6ada78f..8aa0f77cf 100644 --- a/README.md +++ b/README.md @@ -560,65 +560,65 @@ comparison. | 0x V4 VIP | Uniswap V3 | USDC/WETH | 124669 | 0.00% | | 0x V4 Multiplex | Uniswap V3 | USDC/WETH | 138525 | 11.11% | | Settler VIP (warm) | Uniswap V3 | USDC/WETH | 136237 | 9.28% | -| AllowanceHolder VIP | Uniswap V3 | USDC/WETH | 125600 | 0.75% | +| AllowanceHolder VIP | Uniswap V3 | USDC/WETH | 125629 | 0.77% | | UniswapRouter V3 | Uniswap V3 | USDC/WETH | 120978 | -2.96% | | | | | | | | 0x V4 VIP | Uniswap V3 | DAI/WETH | 112103 | 0.00% | | 0x V4 Multiplex | Uniswap V3 | DAI/WETH | 125959 | 12.36% | | Settler VIP (warm) | Uniswap V3 | DAI/WETH | 123671 | 10.32% | -| AllowanceHolder VIP | Uniswap V3 | DAI/WETH | 113034 | 0.83% | +| AllowanceHolder VIP | Uniswap V3 | DAI/WETH | 113063 | 0.86% | | UniswapRouter V3 | Uniswap V3 | DAI/WETH | 108412 | -3.29% | | | | | | | | 0x V4 VIP | Uniswap V3 | USDT/WETH | 114910 | 0.00% | | 0x V4 Multiplex | Uniswap V3 | USDT/WETH | 128766 | 12.06% | | Settler VIP (warm) | Uniswap V3 | USDT/WETH | 126487 | 10.07% | -| AllowanceHolder VIP | Uniswap V3 | USDT/WETH | 115850 | 0.82% | +| AllowanceHolder VIP | Uniswap V3 | USDT/WETH | 115879 | 0.84% | | UniswapRouter V3 | Uniswap V3 | USDT/WETH | 111091 | -3.32% | | | | | | | | Custody | DEX | Pair | Gas | % | | -------------------- | ---------- | --------- | ------ | ------- | | 0x V4 TransformERC20 | Uniswap V3 | USDC/WETH | 244603 | 0.00% | -| Settler | Uniswap V3 | USDC/WETH | 166914 | -31.76% | -| AllowanceHolder | Uniswap V3 | USDC/WETH | 156427 | -36.05% | +| Settler | Uniswap V3 | USDC/WETH | 166872 | -31.78% | +| AllowanceHolder | Uniswap V3 | USDC/WETH | 156414 | -36.05% | | | | | | | | 0x V4 TransformERC20 | Uniswap V3 | DAI/WETH | 221601 | 0.00% | -| Settler | Uniswap V3 | DAI/WETH | 150292 | -32.18% | -| AllowanceHolder | Uniswap V3 | DAI/WETH | 139805 | -36.91% | +| Settler | Uniswap V3 | DAI/WETH | 150250 | -32.20% | +| AllowanceHolder | Uniswap V3 | DAI/WETH | 139792 | -36.92% | | | | | | | | 0x V4 TransformERC20 | Uniswap V3 | USDT/WETH | 228500 | 0.00% | -| Settler | Uniswap V3 | USDT/WETH | 156965 | -31.31% | -| AllowanceHolder | Uniswap V3 | USDT/WETH | 146478 | -35.90% | +| Settler | Uniswap V3 | USDT/WETH | 156923 | -31.32% | +| AllowanceHolder | Uniswap V3 | USDT/WETH | 146465 | -35.90% | | | | | | | | MetaTransactions | DEX | Pair | Gas | % | | ---------------- | ---------- | --------- | ------ | ------- | | 0x V4 Multiplex | Uniswap V3 | USDC/WETH | 208118 | 0.00% | -| Settler | Uniswap V3 | USDC/WETH | 170259 | -18.19% | +| Settler | Uniswap V3 | USDC/WETH | 170217 | -18.21% | | | | | | | | 0x V4 Multiplex | Uniswap V3 | DAI/WETH | 195552 | 0.00% | -| Settler | Uniswap V3 | DAI/WETH | 153637 | -21.43% | +| Settler | Uniswap V3 | DAI/WETH | 153595 | -21.46% | | | | | | | | 0x V4 Multiplex | Uniswap V3 | USDT/WETH | 198359 | 0.00% | -| Settler | Uniswap V3 | USDT/WETH | 160304 | -19.18% | +| Settler | Uniswap V3 | USDT/WETH | 160262 | -19.21% | | | | | | | | RFQ | DEX | Pair | Gas | % | | --------------- | ------- | --------- | ------ | ------- | | 0x V4 | 0x V4 | USDC/WETH | 97972 | 0.00% | | Settler | Settler | USDC/WETH | 114370 | 16.74% | -| Settler | 0x V4 | USDC/WETH | 206590 | 110.87% | -| AllowanceHolder | Settler | USDC/WETH | 106382 | 8.58% | +| Settler | 0x V4 | USDC/WETH | 206545 | 110.82% | +| AllowanceHolder | Settler | USDC/WETH | 106411 | 8.61% | | | | | | | | 0x V4 | 0x V4 | DAI/WETH | 78498 | 0.00% | | Settler | Settler | DAI/WETH | 94896 | 20.89% | -| Settler | 0x V4 | DAI/WETH | 176680 | 125.08% | -| AllowanceHolder | Settler | DAI/WETH | 86908 | 10.71% | +| Settler | 0x V4 | DAI/WETH | 176635 | 125.02% | +| AllowanceHolder | Settler | DAI/WETH | 86937 | 10.75% | | | | | | | | 0x V4 | 0x V4 | USDT/WETH | 89610 | 0.00% | | Settler | Settler | USDT/WETH | 106008 | 18.30% | -| Settler | 0x V4 | USDT/WETH | 192012 | 114.28% | -| AllowanceHolder | Settler | USDT/WETH | 98020 | 9.39% | +| Settler | 0x V4 | USDT/WETH | 191967 | 114.22% | +| AllowanceHolder | Settler | USDT/WETH | 98049 | 9.42% | | | | | | | | Curve | DEX | Pair | Gas | % | @@ -627,7 +627,7 @@ comparison. | | | | | | | | | | | | | 0x V4 | Curve | USDT/WETH | 452672 | 0.00% | -| Settler | Curve | USDT/WETH | 422784 | -6.60% | +| Settler | Curve | USDT/WETH | 422739 | -6.61% | | Settler | CurveV2 Tricrypto VIP | USDT/WETH | 243783 | -46.15% | | Curve | Curve | USDT/WETH | 341799 | -24.49% | | Curve Swap Router | Curve | USDT/WETH | 412038 | -8.98% | @@ -635,58 +635,58 @@ comparison. | DODO V1 | DEX | Pair | Gas | % | | ------- | ------- | --------- | ------ | ----- | -| Settler | DODO V1 | USDC/WETH | 308678 | 0.00% | +| Settler | DODO V1 | USDC/WETH | 308591 | 0.00% | | | | | | | | | | | | | | | | | | | | Buy token fee | DEX | Pair | Gas | % | | ----------------- | ---------- | --------- | ------ | ----- | -| Settler - custody | Uniswap V3 | USDC/WETH | 174165 | 0.00% | +| Settler - custody | Uniswap V3 | USDC/WETH | 174129 | 0.00% | | | | | | | -| Settler - custody | Uniswap V3 | DAI/WETH | 161599 | 0.00% | +| Settler - custody | Uniswap V3 | DAI/WETH | 161563 | 0.00% | | | | | | | -| Settler - custody | Uniswap V3 | USDT/WETH | 164415 | 0.00% | +| Settler - custody | Uniswap V3 | USDT/WETH | 164379 | 0.00% | | | | | | | | Sell token fee | DEX | Pair | Gas | % | | -------------- | ---------- | --------- | ------ | ------- | -| Settler | Uniswap V3 | USDC/WETH | 182610 | 0.00% | +| Settler | Uniswap V3 | USDC/WETH | 182568 | 0.00% | | | | | | | -| Settler | Uniswap V3 | DAI/WETH | 161932 | 0.00% | +| Settler | Uniswap V3 | DAI/WETH | 161890 | 0.00% | | | | | | | -| Settler | Uniswap V3 | USDT/WETH | 170381 | 0.00% | -| Settler | Curve | USDT/WETH | 434131 | 154.80% | +| Settler | Uniswap V3 | USDT/WETH | 170339 | 0.00% | +| Settler | Curve | USDT/WETH | 434086 | 154.84% | | | | | | | | AllowanceHolder | DEX | Pair | Gas | % | | ------------------------------------ | -------------- | --------- | ------ | ------- | -| execute | Uniswap V3 VIP | USDC/WETH | 125600 | 0.00% | -| Settler - external move then execute | Uniswap V3 | USDC/WETH | 140433 | 11.81% | -| execute | RFQ | USDC/WETH | 106382 | -15.30% | +| execute | Uniswap V3 VIP | USDC/WETH | 125629 | 0.00% | +| Settler - external move then execute | Uniswap V3 | USDC/WETH | 140372 | 11.74% | +| execute | RFQ | USDC/WETH | 106411 | -15.30% | | | | | | | -| execute | Uniswap V3 VIP | DAI/WETH | 113034 | 0.00% | -| Settler - external move then execute | Uniswap V3 | DAI/WETH | 129442 | 14.52% | -| execute | RFQ | DAI/WETH | 86908 | -23.11% | +| execute | Uniswap V3 VIP | DAI/WETH | 113063 | 0.00% | +| Settler - external move then execute | Uniswap V3 | DAI/WETH | 129381 | 14.43% | +| execute | RFQ | DAI/WETH | 86937 | -23.11% | | | | | | | -| execute | Uniswap V3 VIP | USDT/WETH | 115850 | 0.00% | -| Settler - external move then execute | Uniswap V3 | USDT/WETH | 136430 | 17.76% | -| execute | RFQ | USDT/WETH | 98020 | -15.39% | +| execute | Uniswap V3 VIP | USDT/WETH | 115879 | 0.00% | +| Settler - external move then execute | Uniswap V3 | USDT/WETH | 136369 | 17.68% | +| execute | RFQ | USDT/WETH | 98049 | -15.39% | | | | | | | | AllowanceHolder sell token fees | DEX | Pair | Gas | % | | ------------------------------- | --- | --------- | ------ | ------ | -| no fee | RFQ | USDC/WETH | 106382 | 0.00% | -| proportional fee | RFQ | USDC/WETH | 154375 | 45.11% | -| fixed fee | RFQ | USDC/WETH | 122655 | 15.30% | +| no fee | RFQ | USDC/WETH | 106411 | 0.00% | +| proportional fee | RFQ | USDC/WETH | 154368 | 45.07% | +| fixed fee | RFQ | USDC/WETH | 122642 | 15.25% | | | | | | | -| no fee | RFQ | DAI/WETH | 86908 | 0.00% | -| proportional fee | RFQ | DAI/WETH | 126789 | 45.89% | -| fixed fee | RFQ | DAI/WETH | 99007 | 13.92% | +| no fee | RFQ | DAI/WETH | 86937 | 0.00% | +| proportional fee | RFQ | DAI/WETH | 126782 | 45.83% | +| fixed fee | RFQ | DAI/WETH | 98994 | 13.87% | | | | | | | -| no fee | RFQ | USDT/WETH | 98020 | 0.00% | -| proportional fee | RFQ | USDT/WETH | 143533 | 46.43% | -| fixed fee | RFQ | USDT/WETH | 111231 | 13.48% | +| no fee | RFQ | USDT/WETH | 98049 | 0.00% | +| proportional fee | RFQ | USDT/WETH | 143526 | 46.38% | +| fixed fee | RFQ | USDT/WETH | 111218 | 13.43% | | | | | | | [//]: # "END TABLES"