Transaction Hash:
Block:
21973738 at Mar-04-2025 01:11:11 PM +UTC
Transaction Fee:
0.000283921759465408 ETH
$1.08
Gas Used:
203,732 Gas / 1.393604144 Gwei
Emitted Events:
352 |
ERC1967Proxy.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000d93ed3fd9717b22006443de6e1cd60220ddd642a, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 000000000000000000000000000000000000000000000009432ab56ec920290d )
|
353 |
ERC1967Proxy.0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925( 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 0x0000000000000000000000000000000000001ff3684f28c67538d4d072c22734, 000000000000000000000000000000000000000000000009432ab56ec920290d )
|
354 |
WETH9.Transfer( src=UniswapV3Pool, dst=MainnetSettler, wad=5944685686458220 )
|
355 |
ERC1967Proxy.0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef( 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 0x000000000000000000000000e061b362aa157a5037b225570cff9ebf1d657929, 000000000000000000000000000000000000000000000009432ab56ec920290d )
|
356 |
UniswapV3Pool.Swap( sender=MainnetSettler, recipient=MainnetSettler, amount0=170860576900374341901, amount1=-5944685686458220, sqrtPriceX96=469667802591665036980802785, liquidity=14800783546453571091920, tick=-102567 )
|
357 |
WETH9.Withdrawal( src=MainnetSettler, wad=5944685686458220 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x88909D48...9Bf78FD9a | |||||
0x95222290...5CC4BAfe5
Miner
| (beaverbuild) | 13.567398482452293566 Eth | 13.567408669052293566 Eth | 0.0000101866 | |
0xC02aaA39...83C756Cc2 | 2,869,031.941776686465863548 Eth | 2,869,031.935832000779405328 Eth | 0.00594468568645822 | ||
0xd93ED3fd...20DdD642A |
0.004995700733810542 Eth
Nonce: 910
|
0.004711778974345134 Eth
Nonce: 911
| 0.000283921759465408 | ||
0xE061B362...f1d657929 | (Uniswap V3: L3) | ||||
0xf70da978...8dfA3dbEF | (Relay: Solver) | 421.069407736190179108 Eth | 421.075352421876637328 Eth | 0.00594468568645822 |
Execution Trace
ApprovalProxy.transferAndMulticall( tokens=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a], amounts=[170860576900374341901], targets=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a, 0x0000000000001fF3684f28c67538d4D072C22734], datas=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0=, IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAiJCdSJZ43ReqbZYJ+JsEGb94/ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlDKrVuySApDQAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBB//mR8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSyhuURwWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFTDmGGaExDDspiBJgr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQizm7eAAAAAAAAAAAAAAAADQ42SqeFIpGIPBYrItbYH2NVQo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnxvzXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiJCdSJZ43ReqbZYJ+JsEGb94/ZoAACcQwCqqObIj/o0KDlxPJ+rZCDx1bMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEOMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001 )
ERC1967Proxy.23b872dd( )
-
Layer3.transferFrom( from=0xd93ED3fd9717b22006443DE6e1cd60220DdD642A, to=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, value=170860576900374341901 ) => ( True )
-
ERC20Router.delegatecallMulticall( targets=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a, 0x0000000000001fF3684f28c67538d4D072C22734], datas=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0=, IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAiJCdSJZ43ReqbZYJ+JsEGb94/ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlDKrVuySApDQAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBB//mR8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSyhuURwWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFTDmGGaExDDspiBJgr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQizm7eAAAAAAAAAAAAAAAADQ42SqeFIpGIPBYrItbYH2NVQo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnxvzXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiJCdSJZ43ReqbZYJ+JsEGb94/ZoAACcQwCqqObIj/o0KDlxPJ+rZCDx1bMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEOMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001 )
Multicaller.aggregate( targets=[0x88909D489678dD17aA6D9609F89B0419Bf78FD9a, 0x0000000000001fF3684f28c67538d4D072C22734], data=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0=, IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAiJCdSJZ43ReqbZYJ+JsEGb94/ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlDKrVuySApDQAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBB//mR8AAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAO7u7u7u7u7u7u7u7u7u7u7u7u7uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSyhuURwWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoFTDmGGaExDDspiBJgr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQizm7eAAAAAAAAAAAAAAAADQ42SqeFIpGIPBYrItbYH2NVQo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQyq1bskgKQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnxvzXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsiJCdSJZ43ReqbZYJ+JsEGb94/ZoAACcQwCqqObIj/o0KDlxPJ+rZCDx1bMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEOMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB] )
ERC1967Proxy.095ea7b3( )
-
Layer3.approve( spender=0x0000000000001fF3684f28c67538d4D072C22734, value=170860576900374341901 ) => ( True )
-
AllowanceHolder.2213bc0b( )
-
MainnetSettler.balanceOf( 0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB )
MainnetSettler.execute( slippage=[{name:recipient, type:address, order:1, indexed:false, value:0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, valueString:0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB}, {name:buyToken, type:address, order:2, indexed:false, value:0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE, valueString:0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE}, {name:minAmountOut, type:uint256, order:3, indexed:false, value:5825791972721000, valueString:5825791972721000}], actions=[Is5u3gAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAACIkJ1IlnjdF6ptlgn4mwQZv3j9mgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUMqtW7JICkNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ8b81wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALIiQnUiWeN0Xqm2WCfibBBm/eP2aAAAnEMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==, OMnBRwAAAAAAAAAAAAAAAMAqqjmyI/6NCg5cTyfq2Qg8dWzCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJxAAAAAAAAAAAAAAAADAKqo5siP+jQoOXE8n6tkIPHVswgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC4afU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=], 54C398619A1310C3B29881260AF43C0000000000000000000000000000000000 ) => ( True )
UniswapV3Pool.swap( recipient=0x0d0E364aa7852291883C162B22D6D81f6355428F, zeroForOne=True, amountSpecified=170860576900374341901, sqrtPriceLimitX96=4295128740, data=0x000000000000000000000000000000000000000088909D489678DD17AA6D9609F89B0419BF78FD9A000000000000000000000000000000000000000000000009432AB56EC920290D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067C6FCD701 ) => ( amount0=170860576900374341901, amount1=-5944685686458220 )
-
WETH9.transfer( dst=0x0d0E364aa7852291883C162B22D6D81f6355428F, wad=5944685686458220 ) => ( True )
-
ERC1967Proxy.70a08231( )
-
MainnetSettler.fa461e33( )
-
ERC1967Proxy.70a08231( )
-
-
WETH9.balanceOf( 0x0d0E364aa7852291883C162B22D6D81f6355428F ) => ( 5944685686458220 )
WETH9.withdraw( wad=5944685686458220 )
- ETH 0.00594468568645822
MainnetSettler.CALL( )
- ETH 0.00594468568645822
- ETH 0.00594468568645822
ERC20Router.CALL( )
-
- ETH 0.00594468568645822
Relay: Solver.CALL( )
transferAndMulticall[ApprovalProxy (ln:37)]
ArrayLengthsMismatch[ApprovalProxy (ln:47)]
ArrayLengthsMismatch[ApprovalProxy (ln:51)]
safeTransferFrom[ApprovalProxy (ln:55)]
delegatecallMulticall[ApprovalProxy (ln:60)]
File 1 of 9: ApprovalProxy
File 2 of 9: ERC1967Proxy
File 3 of 9: UniswapV3Pool
File 4 of 9: MainnetSettler
File 5 of 9: WETH9
File 6 of 9: Layer3
File 7 of 9: ERC20Router
File 8 of 9: Multicaller
File 9 of 9: AllowanceHolder
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.23;import {Ownable} from "solady/src/auth/Ownable.sol";import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import {IERC20Router} from "../src/types/interfaces/IERC20Router.sol";contract ApprovalProxy is Ownable {using SafeERC20 for IERC20;error ArrayLengthsMismatch();error ERC20TransferFromFailed();error NativeTransferFailed();event RouterUpdated(address newRouter);address public router;receive() external payable {}constructor(address _owner, address _router) {_initializeOwner(_owner);
File 2 of 9: ERC1967Proxy
12345678910111213141516// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v5.0.0) (proxy/ERC1967/ERC1967Proxy.sol)pragma solidity ^0.8.20;import {Proxy} from "../Proxy.sol";import {ERC1967Utils} from "./ERC1967Utils.sol";/*** @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an* implementation address that can be changed. This address is stored in storage in the location specified by* https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the* implementation behind the proxy.*/contract ERC1967Proxy is Proxy {/*** @dev Initializes the upgradeable proxy with an initial implementation specified by `implementation`.** If `_data` is nonempty, it's used as data in a delegate call to `implementation`. This will typically be an
File 3 of 9: UniswapV3Pool
12345678910111213141516// SPDX-License-Identifier: BUSL-1.1pragma solidity =0.7.6;import './interfaces/IUniswapV3Pool.sol';import './NoDelegateCall.sol';import './libraries/LowGasSafeMath.sol';import './libraries/SafeCast.sol';import './libraries/Tick.sol';import './libraries/TickBitmap.sol';import './libraries/Position.sol';import './libraries/Oracle.sol';import './libraries/FullMath.sol';import './libraries/FixedPoint128.sol';import './libraries/TransferHelper.sol';import './libraries/TickMath.sol';import './libraries/LiquidityMath.sol';import './libraries/SqrtPriceMath.sol';
File 4 of 9: MainnetSettler
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity =0.8.25 >=0.6.2 >=0.8.25 ^0.8.0 ^0.8.25;// lib/forge-std/src/interfaces/IERC165.solinterface IERC165 {/// @notice Query if a contract implements an interface/// @param interfaceID The interface identifier, as specified in ERC-165/// @dev Interface identification is specified in ERC-165. This function/// uses less than 30,000 gas./// @return `true` if the contract implements `interfaceID` and/// `interfaceID` is not 0xffffffff, `false` otherwisefunction supportsInterface(bytes4 interfaceID) external view returns (bool);}// lib/forge-std/src/interfaces/IERC20.sol/// @dev Interface of the ERC20 standard as defined in the EIP./// @dev This includes the optional name, symbol, and decimals metadata.interface IERC20 {
File 5 of 9: WETH9
12345678910111213141516// Copyright (C) 2015, 2016, 2017 Dapphub// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License// along with this program. If not, see <http://www.gnu.org/licenses/>.pragma solidity ^0.4.18;
File 6 of 9: Layer3
12345678910111213141516// SPDX-License-Identifier: Apache-2.0/*.____ ________| | _____ ___.__. __________\\_____ \\| | \\__ \\< | |/ __ \\_ __ \\_(__ <| |___ / __ \\\\___ \\ ___/| | \\/ \\|_______ (____ / ____|\\___ >__| /______ /\\/ \\/\\/ \\/ \\/*/pragma solidity 0.8.20;import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";import {ERC20BurnableUpgradeable} from"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol";import {ERC20PermitUpgradeable} from"@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol";import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
File 7 of 9: ERC20Router
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.25;import {Ownable} from "solady/src/auth/Ownable.sol";import {Tstorish} from "tstorish/src/Tstorish.sol";import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";import {IERC721} from "@openzeppelin/contracts/token/ERC721/IERC721.sol";import {IERC1155} from "@openzeppelin/contracts/token/ERC1155/IERC1155.sol";import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import {IAllowanceTransfer} from "permit2-relay/src/interfaces/IAllowanceTransfer.sol";import {ISignatureTransfer} from "permit2-relay/src/interfaces/ISignatureTransfer.sol";import {IPermit2} from "permit2-relay/src/interfaces/IPermit2.sol";import {RelayerWitness} from "./types/lib/RelayStructs.sol";import {IMulticaller} from "./types/interfaces/IMulticaller.sol";contract ERC20Router is Ownable, Tstorish {using SafeERC20 for IERC20;// --- Errors --- //
File 8 of 9: Multicaller
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.4;/*** @title Multicaller* @author vectorized.eth* @notice Contract that allows for efficient aggregation* of multiple calls in a single transaction.*/contract Multicaller {// =============================================================// ERRORS// =============================================================/*** @dev The lengths of the input arrays are not the same.*/error ArrayLengthsMismatch();
File 9 of 9: AllowanceHolder
12345678910111213141516// SPDX-License-Identifier: MITpragma solidity ^0.8.25;import {AllowanceHolderBase} from "./AllowanceHolderBase.sol";import {TransientStorage} from "./TransientStorage.sol";/// @custom:security-contact security@0x.orgcontract AllowanceHolder is TransientStorage, AllowanceHolderBase {constructor() {require(address(this) == 0x0000000000001fF3684f28c67538d4D072C22734 || block.chainid == 31337);}/// @inheritdoc AllowanceHolderBasefunction exec(address operator, address token, uint256 amount, address payable target, bytes calldata data)internaloverridereturns (bytes memory){(bytes memory result, address sender, TSlot allowance) = _exec(operator, token, amount, target, data);