ETH Price: $3,620.67 (+6.43%)

Transaction Decoder

Block:
21973384 at Mar-04-2025 11:59:59 AM +UTC
Transaction Fee:
0.0002854462 ETH $1.03
Gas Used:
219,574 Gas / 1.3 Gwei

Emitted Events:

256 GaspToken.Approval( owner=[Sender] 0x3224cc4cebbb90efdd18947a5b47ace8175805f2, spender=[Receiver] ApprovalProxy, value=0 )
257 GaspToken.Transfer( from=[Sender] 0x3224cc4cebbb90efdd18947a5b47ace8175805f2, to=ERC20Router, value=213425203718100239639 )
258 GaspToken.Approval( owner=ERC20Router, spender=AllowanceHolder, value=213425203718100239639 )
259 TetherToken.Transfer( from=UniswapV3Pool, to=ERC20Router, value=17508116 )
260 GaspToken.Approval( owner=ERC20Router, spender=AllowanceHolder, value=0 )
261 GaspToken.Transfer( from=ERC20Router, to=UniswapV3Pool, value=213425203718100239639 )
262 UniswapV3Pool.Swap( sender=MainnetSettler, recipient=ERC20Router, amount0=213425203718100239639, amount1=-17508116, sqrtPriceX96=22725359349616388484705, liquidity=731870186799610892, tick=-301303 )
263 TetherToken.Transfer( from=ERC20Router, to=[Sender] 0x3224cc4cebbb90efdd18947a5b47ace8175805f2, value=17508116 )

Account State Difference:

  Address   Before After State Difference Code
0x2c21D8Fe...a9b816128
(Uniswap V3: GASP-USDT)
0x3224Cc4c...8175805F2
0.0106352748602191 Eth
Nonce: 8
0.0103498286602191 Eth
Nonce: 9
0.0002854462
(Titan Builder)
7.458607259613633106 Eth7.458709107913028218 Eth0.000101848299395112
0x736ECc52...416b1d96E
0xdAC17F95...13D831ec7

Execution Trace

ApprovalProxy.transferAndMulticall( tokens=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E], amounts=[213425203718100239639], targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0xf70da97812CB96acDF810712Aa562db8dfA3dbEF, 0x0000000000001fF3684f28c67538d4D072C22734, 0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB], datas=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkd6kAaS+RRc=, , IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAc27MUjezHt7G8auaOW+uJBax2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuR3qQBpL5FFwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpB//mR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoDiPDmV0PLnzxiURWQr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEIs5u3gAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAABzbsxSN7Me3sbxq5o5b64kFrHZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5HepAGkvkUXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ8bsRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6qZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHNuzFI3sx7exvGrmjlvriQWsdluAAALuNrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, Pa0MnAAAAAAAAAAAAAAAANrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAMiTMTOu7kO/dGJR6W0es6BdYBfI=], values=[0, 0, 0, 0], refundTo=0x3224Cc4cEBBB90eFdd18947A5B47ACe8175805F2 ) => ( 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000C000000000000000000000000000000000000000000000000000000000000000E0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000 )
  • GaspToken.transferFrom( owner=0x3224Cc4cEBBB90eFdd18947A5B47ACe8175805F2, recipient=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, amount=213425203718100239639 ) => ( True )
  • ERC20Router.delegatecallMulticall( targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0xf70da97812CB96acDF810712Aa562db8dfA3dbEF, 0x0000000000001fF3684f28c67538d4D072C22734, 0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB], datas=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkd6kAaS+RRc=, , IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAc27MUjezHt7G8auaOW+uJBax2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuR3qQBpL5FFwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpB//mR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoDiPDmV0PLnzxiURWQr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEIs5u3gAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAABzbsxSN7Me3sbxq5o5b64kFrHZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5HepAGkvkUXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ8bsRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6qZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHNuzFI3sx7exvGrmjlvriQWsdluAAALuNrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, Pa0MnAAAAAAAAAAAAAAAANrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAMiTMTOu7kO/dGJR6W0es6BdYBfI=], values=[0, 0, 0, 0], refundTo=0x3224Cc4cEBBB90eFdd18947A5B47ACe8175805F2 ) => ( 0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000C000000000000000000000000000000000000000000000000000000000000000E0000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000 )
    • Multicaller.aggregate( targets=[0x736ECc5237B31eDec6f1aB9a396FaE2416b1d96E, 0xf70da97812CB96acDF810712Aa562db8dfA3dbEF, 0x0000000000001fF3684f28c67538d4D072C22734, 0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB], data=[CV6nswAAAAAAAAAAAAAAAAAAAAAAAB/zaE8oxnU41NBywic0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALkd6kAaS+RRc=, , IhO8CwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAc27MUjezHt7G8auaOW+uJBax2W4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuR3qQBpL5FFwAAAAAAAAAAAAAAAA0ONkqnhSKRiDwWKyLW2B9jVUKPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpB//mR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoDiPDmV0PLnzxiURWQr0PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEIs5u3gAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAABzbsxSN7Me3sbxq5o5b64kFrHZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5HepAGkvkUXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ8bsRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6qZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHNuzFI3sx7exvGrmjlvriQWsdluAAALuNrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, Pa0MnAAAAAAAAAAAAAAAANrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAMiTMTOu7kO/dGJR6W0es6BdYBfI=], values=[0, 0, 0, 0], refundTo=0x3224Cc4cEBBB90eFdd18947A5B47ACe8175805F2 ) => ( [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE=, , AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB, ] )
      • GaspToken.approve( spender=0x0000000000001fF3684f28c67538d4D072C22734, amount=213425203718100239639 ) => ( True )
      • Relay: Solver.CALL( )
      • AllowanceHolder.2213bc0b( )
        • MainnetSettler.balanceOf( 0x000000000000000000000000000000000000dEaD )
        • MainnetSettler.execute( slippage=[{name:recipient, type:address, order:1, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:buyToken, type:address, order:2, indexed:false, value:0x0000000000000000000000000000000000000000, valueString:0x0000000000000000000000000000000000000000}, {name:minAmountOut, type:uint256, order:3, indexed:false, value:0, valueString:0}], actions=[Is5u3gAAAAAAAAAAAAAAAKG+pf6RdFAEF0jbu+fprFeku+urAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAABzbsxSN7Me3sbxq5o5b64kFrHZbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC5HepAGkvkUXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ8bsRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD6qZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALHNuzFI3sx7exvGrmjlvriQWsdluAAALuNrBf5WNLuUjoiBiBplFl8E9gx7HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==], 388F0E65743CB9F3C62511590AF43C0000000000000000000000000000000000 ) => ( True )
          • UniswapV3Pool.swap( recipient=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, zeroForOne=True, amountSpecified=213425203718100239639, sqrtPriceLimitX96=4295128740, data=0x0000000000000000000000000000000000000000736ECC5237B31EDEC6F1AB9A396FAE2416B1D96E00000000000000000000000000000000000000000000000B91DEA401A4BE451700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067C6EC4401 ) => ( amount0=213425203718100239639, amount1=-17508116 )
            • TetherToken.transfer( _to=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB, _value=17508116 )
            • GaspToken.balanceOf( account=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128 ) => ( 5321742623529278517514746 )
            • MainnetSettler.fa461e33( )
            • GaspToken.balanceOf( account=0x2c21D8Fe29cdbf6C98Ff638Ac50b51Da9b816128 ) => ( 5321956048732996617754385 )
            • ERC20Router.cleanupERC20( token=0xdAC17F958D2ee523a2206206994597C13D831ec7, refundTo=0x3224Cc4cEBBB90eFdd18947A5B47ACe8175805F2 )
              • TetherToken.balanceOf( who=0xA1BEa5fe917450041748Dbbbe7E9AC57A4bBEBaB ) => ( 17508116 )
              • TetherToken.transfer( _to=0x3224Cc4cEBBB90eFdd18947A5B47ACe8175805F2, _value=17508116 )
                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: 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

                File 7 of 8: AllowanceHolder
                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 {AllowanceHolderBase} from "./AllowanceHolderBase.sol";
                import {TransientStorage} from "./TransientStorage.sol";
                /// @custom:security-contact security@0x.org
                contract AllowanceHolder is TransientStorage, AllowanceHolderBase {
                constructor() {
                require(address(this) == 0x0000000000001fF3684f28c67538d4D072C22734 || block.chainid == 31337);
                }
                /// @inheritdoc AllowanceHolderBase
                function exec(address operator, address token, uint256 amount, address payable target, bytes calldata data)
                internal
                override
                returns (bytes memory)
                {
                (bytes memory result, address sender, TSlot allowance) = _exec(operator, token, amount, target, data);
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

                File 8 of 8: MainnetSettler
                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 >=0.6.2 >=0.8.25 ^0.8.0 ^0.8.25;
                // lib/forge-std/src/interfaces/IERC165.sol
                interface 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` otherwise
                function 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 {
                XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX