ETH Price: $3,796.82 (+0.73%)

Transaction Decoder

Block:
20922148 at Oct-08-2024 04:46:35 PM +UTC
Transaction Fee:
0.00323650542969732 ETH $12.29
Gas Used:
91,610 Gas / 35.329171812 Gwei

Emitted Events:

470 WETH9.Transfer( src=[Sender] 0x564e5c1895475938c1dbcdf75cbf8dc9ce11edbc, dst=ERC20Router, wad=4000000000000000000 )
471 WETH9.Approval( src=ERC20Router, guy=ERC20Router, wad=4000000000000000000 )
472 WETH9.Withdrawal( src=ERC20Router, wad=4000000000000000000 )

Account State Difference:

  Address   Before After State Difference Code
(Titan Builder)
9.371774403244612592 Eth9.371849910362837162 Eth0.00007550711822457
0x564e5c18...9ce11eDbc
0.007530248393687588 Eth
Nonce: 5
0.004293742963990268 Eth
Nonce: 6
0.00323650542969732
0xC02aaA39...83C756Cc2 2,965,051.907937766439874945 Eth2,965,047.907937766439874945 Eth4
0xf70da978...8dfA3dbEF
(Relay: Solver)
317.000491943265574417 Eth321.000491943265574417 Eth4

Execution Trace

ApprovalProxy.transferAndMulticall( tokens=[0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2], amounts=[4000000000000000000], targets=[0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xf70da97812CB96acDF810712Aa562db8dfA3dbEF], datas=[CV6nswAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN4Lazp2QAAA=, Lhp9TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeC2s6dkAAA, ], values=[0, 0, 4000000000000000000], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000A000000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 )
  • WETH9.transferFrom( src=0x564e5c1895475938c1dbcDf75CBF8DC9ce11eDbc, dst=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, wad=4000000000000000000 ) => ( True )
  • ERC20Router.delegatecallMulticall( targets=[0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xf70da97812CB96acDF810712Aa562db8dfA3dbEF], datas=[CV6nswAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN4Lazp2QAAA=, Lhp9TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeC2s6dkAAA, ], values=[0, 0, 4000000000000000000], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000A000000000000000000000000000000000000000000000000000000000000000C00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 )
    • Multicaller.aggregate( targets=[0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xf70da97812CB96acDF810712Aa562db8dfA3dbEF], data=[CV6nswAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN4Lazp2QAAA=, Lhp9TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeC2s6dkAAA, ], values=[0, 0, 4000000000000000000], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, , ] )
      • WETH9.approve( guy=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, wad=4000000000000000000 ) => ( True )
      • WETH9.withdraw( wad=4000000000000000000 )
        • ETH 4 ERC20Router.CALL( )
        • ETH 4 Relay: Solver.CALL( )
          transferAndMulticall[ApprovalProxy (ln:37)]
          File 1 of 4: ApprovalProxy
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          // SPDX-License-Identifier: MIT
          pragma 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);
          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

          File 2 of 4: ERC20Router
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          // SPDX-License-Identifier: MIT
          pragma 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 --- //
          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

          File 3 of 4: WETH9
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          // 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;
          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

          File 4 of 4: Multicaller
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          // SPDX-License-Identifier: MIT
          pragma 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();
          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX