ETH Price: $4,313.23 (+1.52%)

Transaction Decoder

Block:
21973700 at Mar-04-2025 01:03:23 PM +UTC
Transaction Fee:
0.000596929340178288 ETH $2.57
Gas Used:
297,036 Gas / 2.009619508 Gwei

Emitted Events:

66 GaspToken.Approval( owner=[Sender] 0x1fa819fda3aa602352cf10bec87e476df8d5d390, spender=[Receiver] ApprovalProxy, value=0 )
67 GaspToken.Transfer( from=[Sender] 0x1fa819fda3aa602352cf10bec87e476df8d5d390, to=ERC20Router, value=1694302334370043331161 )
68 GaspToken.Approval( owner=ERC20Router, spender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=1694302334370043331161 )
69 GaspToken.Approval( owner=ERC20Router, spender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=0 )
70 GaspToken.Transfer( from=ERC20Router, to=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=1694302334370043331161 )
71 TetherToken.Transfer( from=UniswapV3Pool, to=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, value=62621007 )
72 GaspToken.Transfer( from=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, to=UniswapV3Pool, value=1694302334370043331161 )
73 UniswapV3Pool.Swap( sender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, recipient=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount0=1694302334370043331161, amount1=-62621007, sqrtPriceX96=15251743912181181037878, liquidity=916363675858026505, tick=-309279 )
74 WETH9.Transfer( src=PancakeV3Pool, dst=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, wad=29334195036495857 )
75 TetherToken.Transfer( from=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, to=PancakeV3Pool, value=62621007 )
76 PancakeV3Pool.Swap( sender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, recipient=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount0=-29334195036495857, amount1=62621007, sqrtPriceX96=3663443586676782323922674, liquidity=820425766960095, tick=-199644, protocolFeesToken0=0, protocolFeesToken1=2066 )
77 WETH9.Withdrawal( src=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, wad=29334195036495857 )
78 0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.0x1bf1122521093cffed0b7f29833cd231d885bae58dceb074e411a1fbd94824bd( 0x1bf1122521093cffed0b7f29833cd231d885bae58dceb074e411a1fbd94824bd, 0x000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 0x000000000000000000000000736ecc5237b31edec6f1ab9a396fae2416b1d96e, 0x0000000000000000000000000000000000000000000000000000000000000000, 000000000000000000000000a1bea5fe917450041748dbbbe7e9ac57a4bbebab, 000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee, 00000000000000000000000000000000000000000000005bd92b144fa18b0259, 000000000000000000000000000000000000000000000000006837422b0b5492, 0000000000000000000000000000000000000000000000000068374b82ec1ff1, fffffffffffffffffffffffffffffffffffffffffffffffffffddf8fd4632ce9 )

Account State Difference:

  Address   Before After State Difference Code
0x1Fa819Fd...dF8d5d390
0.00348808620651458 Eth
Nonce: 23
0.002891156866336292 Eth
Nonce: 24
0.000596929340178288
0x2c21D8Fe...a9b816128
(Uniswap V3: GASP-USDT)
(Titan Builder)
8.987777298234337032 Eth8.988009406033333896 Eth0.000232107798996864
0x736ECc52...416b1d96E
0xaCDb27b2...255Fc6d07
0xC02aaA39...83C756Cc2 2,869,292.544026083732993597 Eth2,869,292.51469188869649774 Eth0.029334195036495857
0xdAC17F95...13D831ec7
0xf70da978...8dfA3dbEF
(Relay: Solver)
438.404658047180008219 Eth438.433992242216504076 Eth0.029334195036495857

Execution Trace

ApprovalProxy.transferAndMulticall( tokens=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E], amounts=[1694302334370043331161], targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71], datas=[CV6nswAAAAAAAAAAAAAAAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SsUT6GLAlk=, 3ZxflgAAAAAAAAAAAAAAAHNuzFI3sx7exvGrmjlvriQWsdluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SsUT6GLAlkAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqV7uuiPMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGg3QisLVJIAAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAJzbsxSN7Me3sbxq5o5b64kFrHZbgH//wEsIdj+Kc2/bJj/Y4rFC1Ham4FhKAGFzQfqAUI7HpN5KbROStjEC7tecQAB2sF/lY0u5SOiIGIGmUWXwT2DHscB//8BrNsnsmYUIiPh5naEHB6AklX8bQcAhc0H6gFCOx6TeSm0TkrYxAu7XnEAAcAqqjmyI/6NCg5cTyfq2Qg8dWzCAf//AgCFzQfqAUI7HpN5KbROStjEC7tecQAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000068374B82EC1FF1 )
  • GaspToken.transferFrom( owner=0x1Fa819Fda3aA602352cF10BeC87e476dF8d5d390, recipient=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, amount=1694302334370043331161 ) => ( True )
  • ERC20Router.delegatecallMulticall( targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71], datas=[CV6nswAAAAAAAAAAAAAAAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SsUT6GLAlk=, 3ZxflgAAAAAAAAAAAAAAAHNuzFI3sx7exvGrmjlvriQWsdluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SsUT6GLAlkAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqV7uuiPMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGg3QisLVJIAAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAJzbsxSN7Me3sbxq5o5b64kFrHZbgH//wEsIdj+Kc2/bJj/Y4rFC1Ham4FhKAGFzQfqAUI7HpN5KbROStjEC7tecQAB2sF/lY0u5SOiIGIGmUWXwT2DHscB//8BrNsnsmYUIiPh5naEHB6AklX8bQcAhc0H6gFCOx6TeSm0TkrYxAu7XnEAAcAqqjmyI/6NCg5cTyfq2Qg8dWzCAf//AgCFzQfqAUI7HpN5KbROStjEC7tecQAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000068374B82EC1FF1 )
    • Multicaller.aggregate( targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71], data=[CV6nswAAAAAAAAAAAAAAAIXNB+oBQjsek3kptE5K2MQLu15xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SsUT6GLAlk=, 3ZxflgAAAAAAAAAAAAAAAHNuzFI3sx7exvGrmjlvriQWsdluAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABb2SsUT6GLAlkAAAAAAAAAAAAAAADu7u7u7u7u7u7u7u7u7u7u7u7u7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABqV7uuiPMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGg3QisLVJIAAAAAAAAAAAAAAAChvqX+kXRQBBdI27vn6axXpLvrqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAJzbsxSN7Me3sbxq5o5b64kFrHZbgH//wEsIdj+Kc2/bJj/Y4rFC1Ham4FhKAGFzQfqAUI7HpN5KbROStjEC7tecQAB2sF/lY0u5SOiIGIGmUWXwT2DHscB//8BrNsnsmYUIiPh5naEHB6AklX8bQcAhc0H6gFCOx6TeSm0TkrYxAu7XnEAAcAqqjmyI/6NCg5cTyfq2Qg8dWzCAf//AgCFzQfqAUI7HpN5KbROStjEC7tecQAAAAAAAAAAAAAAAA==], values=[0, 0], refundTo=0xf70da97812CB96acDF810712Aa562db8dfA3dbEF ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGg3S4LsH/E=] )
      • GaspToken.approve( spender=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount=1694302334370043331161 ) => ( True )
      • 0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.dd9c5f96( )
        • GaspToken.balanceOf( account=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB ) => ( 1694302334370043331161 )
        • GaspToken.transferFrom( owner=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, recipient=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, amount=1694302334370043331161 ) => ( True )
        • UniswapV3Pool.swap( recipient=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, zeroForOne=True, amountSpecified=1694302334370043331161, sqrtPriceLimitX96=4295128740, data=0x000000000000000000000000736ECC5237B31EDEC6F1AB9A396FAE2416B1D96E0000000000000000000000000000000000000000000000000000000000000000 ) => ( amount0=1694302334370043331161, amount1=-62621007 )
          • TetherToken.transfer( _to=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, _value=62621007 )
          • GaspToken.balanceOf( account=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128 ) => ( 7200702079942196081073155 )
          • 0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.fa461e33( )
            • GaspToken.transfer( recipient=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128, amount=1694302334370043331161 ) => ( True )
            • GaspToken.balanceOf( account=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128 ) => ( 7202396382276566124404316 )
            • TetherToken.balanceOf( who=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71 ) => ( 62621008 )
            • PancakeV3Pool.swap( recipient=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, zeroForOne=False, amountSpecified=62621007, sqrtPriceLimitX96=1461446703485210103287273052203988822378723970341, data=0x000000000000000000000000DAC17F958D2EE523A2206206994597C13D831EC70000000000000000000000000000000000000000000000000000000000000000 ) => ( amount0=-29334195036495857, amount1=62621007 )
              • 0x13ffc10a4677a9aa62c83b5140ccde22f1e48832.214a6fe2( )
              • WETH9.transfer( dst=0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71, wad=29334195036495857 ) => ( True )
              • TetherToken.balanceOf( who=0xaCDb27b266142223e1e676841C1E809255Fc6d07 ) => ( 4791435959 )
              • 0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.23a69e75( )
                • TetherToken.transfer( _to=0xaCDb27b266142223e1e676841C1E809255Fc6d07, _value=62621007 )
                • TetherToken.balanceOf( who=0xaCDb27b266142223e1e676841C1E809255Fc6d07 ) => ( 4854056966 )
                • WETH9.balanceOf( 0x85CD07Ea01423b1E937929B44E4Ad8c40BbB5E71 ) => ( 29334195036495858 )
                • WETH9.withdraw( wad=29334195036495857 )
                  • ETH 0.029334195036495857 0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.CALL( )
                  • ETH 0.029334195036495857 0x85cd07ea01423b1e937929b44e4ad8c40bbb5e71.CALL( )
                  • GaspToken.balanceOf( account=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB ) => ( 0 )
                  • ETH 0.029334195036495857 ERC20Router.CALL( )
                  • ETH 0.029334195036495857 Relay: Solver.CALL( )
                    transferAndMulticall[ApprovalProxy (ln:37)]
                    File 1 of 8: 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 8: GaspToken
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: BUSL-1.1
                    pragma solidity 0.8.13;
                    import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
                    import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
                    import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
                    import {Context} from "@openzeppelin/contracts/utils/Context.sol";
                    import {IGaspToken} from "./interfaces/IGaspToken.sol";
                    contract GaspToken is Context, Ownable, ERC20, IGaspToken {
                    uint256 private constant _TOTAL_SUPPLY = 1_000_000_000 * 10 ** 18;
                    string private constant _NAME = "GASP";
                    string private constant _SYMBOL = "GASP";
                    mapping(address => bool) public override senderWhitelist;
                    mapping(address => bool) public override recipientWhitelist;
                    bool public override allowTransfers;
                    modifier isWhitelisted(address sender, address recipient, bytes4 selector) {
                    if (!allowTransfers && !senderWhitelist[sender] && !recipientWhitelist[recipient]) {
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

                    File 5 of 8: TetherToken
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    pragma solidity ^0.4.17;
                    /**
                    * @title SafeMath
                    * @dev Math operations with safety checks that throw on error
                    */
                    library SafeMath {
                    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
                    if (a == 0) {
                    return 0;
                    }
                    uint256 c = a * b;
                    assert(c / a == b);
                    return c;
                    }
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 6 of 8: PancakeV3Pool
                    1
                    2
                    3
                    4
                    5
                    6
                    7
                    8
                    9
                    10
                    11
                    12
                    13
                    14
                    15
                    16
                    // SPDX-License-Identifier: GPL-2.0-or-later
                    pragma solidity >=0.5.0;
                    interface IPancakeV3LmPool {
                    function accumulateReward(uint32 currTimestamp) external;
                    function crossLmTick(int24 tick, bool zeroForOne) external;
                    }
                    // SPDX-License-Identifier: GPL-2.0-or-later
                    pragma solidity >=0.5.0;
                    /// @title Callback for IPancakeV3PoolActions#flash
                    /// @notice Any contract that calls IPancakeV3PoolActions#flash must implement this interface
                    interface IPancakeV3FlashCallback {
                    /// @notice Called to `msg.sender` after transferring to the recipient from IPancakeV3Pool#flash.
                    /// @dev In the implementation you must repay the pool the tokens sent by flash plus the computed fee amounts.
                    /// The caller of this method must be checked to be a PancakeV3Pool deployed by the canonical PancakeV3Factory.
                    /// @param fee0 The fee amount in token0 due to the pool by the end of the flash
                    /// @param fee1 The fee amount in token1 due to the pool by the end of the flash
                    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                    File 7 of 8: 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 8 of 8: 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