ETH Price: $1,803.34 (+10.56%)

Contract

0xF8Ae34D246381ee1Cc44cC8A49B695563695E347

Overview

ETH Balance

0 ETH

ETH Value

$0.00
Transaction Hash
Method
Block
From
To
Perform Custom S...3293582172025-04-23 11:16:5820 mins ago1745407018IN
0xF8Ae34D2...63695E347
0 ETH0.000009010.01
Perform Custom S...3293488482025-04-23 10:38:0858 mins ago1745404688IN
0xF8Ae34D2...63695E347
0.00404 ETH0.000006460.01
Perform Custom S...3293486762025-04-23 10:37:251 hrs ago1745404645IN
0xF8Ae34D2...63695E347
0 ETH0.000006960.01
Perform Custom S...3293382642025-04-23 9:54:181 hr ago1745402058IN
0xF8Ae34D2...63695E347
0 ETH0.000005130.01
Perform Custom S...3293378982025-04-23 9:52:461 hr ago1745401966IN
0xF8Ae34D2...63695E347
0 ETH0.000006380.01
Perform Custom S...3293378392025-04-23 9:52:311 hr ago1745401951IN
0xF8Ae34D2...63695E347
0.000183 ETH0.000006260.01
Perform Custom S...3293302442025-04-23 9:20:532 hrs ago1745400053IN
0xF8Ae34D2...63695E347
0 ETH0.000007790.01
Perform Custom S...3293275182025-04-23 9:09:372 hrs ago1745399377IN
0xF8Ae34D2...63695E347
0 ETH0.000006190.01
Perform Custom S...3293213752025-04-23 8:44:052 hrs ago1745397845IN
0xF8Ae34D2...63695E347
0 ETH0.000005630.01
Perform Custom S...3293210752025-04-23 8:42:502 hrs ago1745397770IN
0xF8Ae34D2...63695E347
0.005 ETH0.000003730.01
Perform Custom S...3293156682025-04-23 8:20:203 hrs ago1745396420IN
0xF8Ae34D2...63695E347
0 ETH0.00000370.01
Perform Custom S...3293152252025-04-23 8:18:293 hrs ago1745396309IN
0xF8Ae34D2...63695E347
0 ETH0.000003920.01012
Perform Custom S...3293137342025-04-23 8:12:143 hrs ago1745395934IN
0xF8Ae34D2...63695E347
0.003 ETH0.000004260.01
Perform Custom S...3293073292025-04-23 7:45:253 hrs ago1745394325IN
0xF8Ae34D2...63695E347
0.050467 ETH0.000004220.01
Perform Custom S...3292974072025-04-23 7:04:074 hrs ago1745391847IN
0xF8Ae34D2...63695E347
0.001 ETH0.000003730.01
Perform Custom S...3292965182025-04-23 7:00:244 hrs ago1745391624IN
0xF8Ae34D2...63695E347
0 ETH0.000003780.01
Perform Custom S...3292878452025-04-23 6:24:215 hrs ago1745389461IN
0xF8Ae34D2...63695E347
0.001 ETH0.000007140.01
Perform Custom S...3292851942025-04-23 6:13:195 hrs ago1745388799IN
0xF8Ae34D2...63695E347
0.00077 ETH0.000006420.01
Perform Custom S...3292842772025-04-23 6:09:345 hrs ago1745388574IN
0xF8Ae34D2...63695E347
0 ETH0.000004930.01
Perform Custom S...3292784242025-04-23 5:45:155 hrs ago1745387115IN
0xF8Ae34D2...63695E347
0 ETH0.000006330.01
Perform Custom S...3292778922025-04-23 5:43:025 hrs ago1745386982IN
0xF8Ae34D2...63695E347
0 ETH0.000006530.01
Perform Custom S...3292748372025-04-23 5:30:236 hrs ago1745386223IN
0xF8Ae34D2...63695E347
0.001 ETH0.000007570.01
Perform Custom S...3292705012025-04-23 5:12:226 hrs ago1745385142IN
0xF8Ae34D2...63695E347
0 ETH0.000006070.018273
Perform Custom S...3292698072025-04-23 5:09:286 hrs ago1745384968IN
0xF8Ae34D2...63695E347
0.001 ETH0.000006510.02094
Perform Custom S...3292694272025-04-23 5:07:576 hrs ago1745384877IN
0xF8Ae34D2...63695E347
0 ETH0.000007090.031112
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
3293582172025-04-23 11:16:5820 mins ago1745407018
0xF8Ae34D2...63695E347
0.00026997 ETH
3293582172025-04-23 11:16:5820 mins ago1745407018
0xF8Ae34D2...63695E347
0.00026997 ETH
3293488482025-04-23 10:38:0858 mins ago1745404688
0xF8Ae34D2...63695E347
0.00404 ETH
3293378392025-04-23 9:52:311 hr ago1745401951
0xF8Ae34D2...63695E347
0.000183 ETH
3293302442025-04-23 9:20:532 hrs ago1745400053
0xF8Ae34D2...63695E347
0.00010494 ETH
3293302442025-04-23 9:20:532 hrs ago1745400053
0xF8Ae34D2...63695E347
0.00010494 ETH
3293275182025-04-23 9:09:372 hrs ago1745399377
0xF8Ae34D2...63695E347
0.00027178 ETH
3293275182025-04-23 9:09:372 hrs ago1745399377
0xF8Ae34D2...63695E347
0.00027178 ETH
3293210752025-04-23 8:42:502 hrs ago1745397770
0xF8Ae34D2...63695E347
0.005 ETH
3293137342025-04-23 8:12:143 hrs ago1745395934
0xF8Ae34D2...63695E347
0.003 ETH
3293073292025-04-23 7:45:253 hrs ago1745394325
0xF8Ae34D2...63695E347
0.050467 ETH
3292974072025-04-23 7:04:074 hrs ago1745391847
0xF8Ae34D2...63695E347
0.001 ETH
3292965182025-04-23 7:00:244 hrs ago1745391624
0xF8Ae34D2...63695E347
0.00099546 ETH
3292965182025-04-23 7:00:244 hrs ago1745391624
0xF8Ae34D2...63695E347
0.00099546 ETH
3292878452025-04-23 6:24:215 hrs ago1745389461
0xF8Ae34D2...63695E347
0.001 ETH
3292851942025-04-23 6:13:195 hrs ago1745388799
0xF8Ae34D2...63695E347
0.00077 ETH
3292842772025-04-23 6:09:345 hrs ago1745388574
0xF8Ae34D2...63695E347
0.00049556 ETH
3292842772025-04-23 6:09:345 hrs ago1745388574
0xF8Ae34D2...63695E347
0.00049556 ETH
3292784242025-04-23 5:45:155 hrs ago1745387115
0xF8Ae34D2...63695E347
0.00007188 ETH
3292784242025-04-23 5:45:155 hrs ago1745387115
0xF8Ae34D2...63695E347
0.00007188 ETH
3292778922025-04-23 5:43:025 hrs ago1745386982
0xF8Ae34D2...63695E347
0.00099668 ETH
3292778922025-04-23 5:43:025 hrs ago1745386982
0xF8Ae34D2...63695E347
0.00099668 ETH
3292748372025-04-23 5:30:236 hrs ago1745386223
0xF8Ae34D2...63695E347
0.001 ETH
3292705012025-04-23 5:12:226 hrs ago1745385142
0xF8Ae34D2...63695E347
0.00099488 ETH
3292705012025-04-23 5:12:226 hrs ago1745385142
0xF8Ae34D2...63695E347
0.00099488 ETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapProxy

Compiler Version
v0.8.27+commit.40a35a09

Optimization Enabled:
Yes with 200 runs

Other Settings:
istanbul EvmVersion, None license
File 1 of 1 : SwapProxy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC20 {
    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function balanceOf(address who) external view returns (uint256);
}

interface IWETH is IERC20 {
    function deposit() external payable;

    function withdraw(uint wad) external;
}

interface IUniswapV2Pair {
    function token0() external view returns (address);

    function token1() external view returns (address);

    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function getAmountOut(uint256 amountIn, address tokenIn) external view returns (uint256);

    function getAmountOut(address tokenIn, uint256 amountIn) external view returns (uint256);
}

interface IUniswapV3Pool {
    function token0() external view returns (address);

    function token1() external view returns (address);

    function swap(
        address recipient,
        bool zeroForOne,
        int256 amountSpecified,
        uint160 sqrtPriceLimitX96,
        bytes calldata data
    ) external returns (int256 amount0Delta, int256 amount1Delta);
}

library TickMath {
    // Minimum and maximum tick values for Uniswap V3 calculations
    int24 internal constant MIN_TICK = - 887272;
    int24 internal constant MAX_TICK = - MIN_TICK;

    // Minimum and maximum sqrt ratio values
    uint160 internal constant MIN_SQRT_RATIO = 4295128739;
    uint160 internal constant MAX_SQRT_RATIO = 1461446703485210103287273052203988822378723970342;
}

contract SwapProxy {
    struct PoolData {
        address pool;   // Address of the pool
        bool isV3;      // true if the pool is Uniswap V3, false if Uniswap V2
        uint256 fee;    // Fee for Uniswap V2 pools
    }

    // Known code hashes for Uniswap pools. These should be updated according to the target network.
//    bytes32 public constant UNISWAP_V2_PAIR_CODE_HASH = 0x96e8ac427619fd51f5f6f7cd0bead1b541476d25c2a44cfe8b45fbee129cd9d6;
//    bytes32 public constant UNISWAP_V3_POOL_CODE_HASH = 0xe34f4b630f1385d1be987053a00f9ef241c95162ba9b0c9f2de3f3f5d37e2883;

    address public WETH;          // Address of the WETH token
    address public owner;         // Owner of the contract
    uint256 public referralFee;   // Referral fee in bps (basis points), 0 to 100 (0% to 1%)

    modifier onlyOwner() {
        require(msg.sender == owner, "Not owner");
        _;
    }

    constructor(address _WETH) {
        WETH = _WETH;
        owner = msg.sender; // Set deployer as owner
        referralFee = 20;   // Default referral fee: 0.20%
    }

    /**
     * @dev Called by Uniswap V3 pools during a swap to collect the required tokens.
     */
    function uniswapV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata data
    ) public {
        if (data.length == 64) {
            // USUAL UNISWAP V3 SWAP
            (address tokenToPay, bool zeroForOne) = abi.decode(data, (address, bool));

            uint256 amountToPay;

            if (zeroForOne) {
                amountToPay = uint256(amount0Delta);
            } else {
                amountToPay = uint256(amount1Delta);
            }
            IERC20(tokenToPay).transfer(msg.sender, amountToPay);
        }
        else if (data.length == 0) {
            // SIMULATE 1 V3 swap
            uint256 currentAmount;
            if (amount0Delta < 0) {
                currentAmount = uint256(- amount0Delta);
            }
            else {
                currentAmount = uint256(- amount1Delta);
            }
            revert(
                string(
                abi.encodePacked(
                    "Simulate: ",
                    "{",
                    "\"amount\":\"", _uint2str(currentAmount), "\"",
                    "}"
                )
            )
            );
        }
        else {
            // SIMULATE
            (
                uint256 amountIn,
                PoolData[] memory pools,
                address initialToken,
                uint256 minAmountOut
            ) = abi.decode(data, (uint256, PoolData[], address, uint256));

            (uint256 currentAmount, address currentToken) = performCustomSwapInternal(amountIn, pools, initialToken, minAmountOut, true);
            revert(
                string(
                abi.encodePacked(
                    "Simulate: ",
                    "{",
                    "\"amount\":\"", _uint2str(currentAmount), "\",",
                    "\"token_out\":\"", _addressToString(currentToken), "\"",
                    "}"
                )
            )
            );
        }
    }

    function _addressToString(address _addr) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(uint160(_addr)));
        bytes memory alphabet = "0123456789abcdef";
        bytes memory str = new bytes(42);

        str[0] = '0';
        str[1] = 'x';

        for (uint256 i = 0; i < 20; i++) {
            str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
            str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0F)];
        }

        return string(str);
    }

    /**
     * @dev Called by Uniswap V3 pools during a swap to collect the required tokens.
     */
    function pancakeV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata data
    ) external {
        uniswapV3SwapCallback(amount0Delta, amount1Delta, data);
    }

    /**
     * @dev Called by Uniswap V3 pools during a swap to collect the required tokens.
     */
    function algebraSwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata data
    ) external {
        uniswapV3SwapCallback(amount0Delta, amount1Delta, data);
    }

    // horizondex
    function swapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata _data
    ) external {
        uniswapV3SwapCallback(amount0Delta, amount1Delta, _data);
    }

    // maverick
    function swapCallback(
        uint256 amount0Delta,
        uint256 amount1Delta,
        bytes calldata _data
    ) external {
        uniswapV3SwapCallback(int256(amount0Delta), int256(amount1Delta), _data);
    }

    function solidlyV3SwapCallback(
        int256 amount0Delta,
        int256 amount1Delta,
        bytes calldata _data
    ) external {
        // console.log('solidlyV3SwapCallback');
        uniswapV3SwapCallback(amount0Delta, amount1Delta, _data);
    }

    function swapY2XCallback(
        uint256 x,
        uint256 y,
        bytes calldata data
    ) external {
        uniswapV3SwapCallback(int256(y), int256(x), data);
    }

    function swapX2YCallback(
        uint256 x,
        uint256 y,
        bytes calldata data
    ) external {
        uniswapV3SwapCallback(int256(x), int256(y), data);
    }

    /**
     * @notice Executes a sequence of swaps starting from an initial token amount.
     * @param amountIn The initial amount of the input token provided by the user.
     * @param pools The list of pools (V2 or V3) to swap through in order.
     * @param initialToken The token we start swapping from.
     * @param minAmountOut The minimum acceptable amount of the final token after all swaps.
     * @param feeFromInitial If true, the referral fee is deducted from the initial amount.
     */
    function performCustomSwap(
        uint256 amountIn,
        PoolData[] calldata pools,
        address initialToken,
        uint256 minAmountOut,
        bool feeFromInitial
    ) public returns (uint256 currentAmount) {
        IERC20(initialToken).transferFrom(msg.sender, address(this), amountIn);
        address currentToken;
        (currentAmount, currentToken) = performCustomSwapInternal(amountIn, pools, initialToken, minAmountOut, feeFromInitial);
        if (currentToken == WETH) {
            // Unwrap WETH to ETH
            IWETH(WETH).withdraw(currentAmount);
            payable(msg.sender).transfer(currentAmount);
        } else {
            IERC20(currentToken).transfer(msg.sender, currentAmount);
        }
    }

    /**
     * @notice Executes a sequence of swaps starting from an initial token amount.
     * @dev This is a simplified example:
     * - For Uniswap V2, no actual output amount calculation is done.
     * - For Uniswap V3, no comprehensive slippage checks are performed.
     * @param amountIn The initial amount of the input token provided by the user.
     * @param pools The list of pools (V2 or V3) to swap through in order.
     * @param initialToken The token we start swapping from.
     * @param minAmountOut The minimum acceptable amount of the final token after all swaps.
     */
    function performCustomSwapInternal(
        uint256 amountIn,
        PoolData[] memory pools,
        address initialToken,
        uint256 minAmountOut,
        bool feeFromInitial
    ) private returns (uint256 currentAmount, address currentToken) {
        require(amountIn > 0, "amountIn must be > 0");
        // in case of ETH, the amount is already sent to the contract

        if (feeFromInitial) {
            uint256 feeAmount = (amountIn * referralFee) / 10000;
            IERC20(initialToken).transfer(owner, feeAmount);
            amountIn -= feeAmount;
        }

        currentToken = initialToken;
        currentAmount = amountIn;

        for (uint256 i = 0; i < pools.length; i++) {
            // Verify pool code hash to ensure authenticity

            if (pools[i].isV3) {

                // Uniswap V3 logic
                IUniswapV3Pool pool = IUniswapV3Pool(pools[i].pool);
                address token0 = pool.token0();

                bool zeroForOne = (currentToken == token0);

                // Set the price limit
                uint160 sqrtPriceLimitX96 = zeroForOne ? TickMath.MIN_SQRT_RATIO + 1 : TickMath.MAX_SQRT_RATIO - 1;

                (int256 delta0, int256 delta1) = pool.swap(
                    address(this),
                    zeroForOne,
                    int256(currentAmount),
                    sqrtPriceLimitX96,
                    abi.encode(currentToken, zeroForOne)
                );

                // Update current token and amount
                if (zeroForOne) {
                    // token0 -> token1
                    currentToken = pool.token1();
                    currentAmount = uint256(- delta1);
                } else {
                    // token1 -> token0
                    currentToken = token0;
                    currentAmount = uint256(- delta0);
                }

            } else {
                // Load pair and tokens
                IUniswapV2Pair pair = IUniswapV2Pair(pools[i].pool);
                address token0 = pair.token0();
                address token1 = pair.token1();

                // Determine tokenTo
                address tokenTo;
                if (currentToken == token0) {
                    tokenTo = token1;
                } else {
                    tokenTo = token0;
                }

                // Calculate reserves
                uint256 reserveIn;
                uint256 reserveOut;
                {
                    (uint256 reserve0, uint256 reserve1,) = pair.getReserves();
                    if (currentToken == token0) {
                        reserveIn = reserve0;
                        reserveOut = reserve1;
                    } else {
                        reserveIn = reserve1;
                        reserveOut = reserve0;
                    }
                }

                // Calculate amounts
                uint256 amountOut;
                if (pools[i].fee > 1)
                {
                    uint256 amountInWithFee = (currentAmount * (10000 - pools[i].fee)) / 10000;
                    amountOut = (amountInWithFee * reserveOut) / (reserveIn + amountInWithFee);
                }
                else if (pools[i].fee == 1) {
                    amountOut = pair.getAmountOut(currentToken, currentAmount);
                }
                else {
                    // pools[i].fee == 0
                    amountOut = pair.getAmountOut(currentAmount, currentToken);
                }

                uint256 amount0Out = (currentToken == token0) ? 0 : amountOut;
                uint256 amount1Out = (currentToken == token0) ? amountOut : 0;

                // Perform the token transfer and swap
                IERC20(currentToken).transfer(address(pair), currentAmount);
                pair.swap(amount0Out, amount1Out, address(this), "");

                // Update current token and amount
                currentToken = tokenTo;
                currentAmount = IERC20(tokenTo).balanceOf(address(this));
            }
        }
        require(currentAmount >= minAmountOut, "Slippage too high");

        if (!feeFromInitial) {
            uint256 feeAmount = (currentAmount * referralFee) / 10000;
            IERC20(currentToken).transfer(owner, feeAmount);
            currentAmount -= feeAmount;
        }
        return (currentAmount, currentToken);
    }

    /**
     * @notice Overloaded function to accept ETH, wrap it to WETH, and then perform the swaps.
     * @param pools The list of pools for the swap sequence.
     * @param minAmountOut The minimum acceptable amount of the final token.
     */
    function performCustomSwap(
        PoolData[] calldata pools,
        uint256 minAmountOut
    ) external payable returns (uint256 amount) {
        require(msg.value > 0, "No ETH sent");

        // Wrap ETH into WETH
        IWETH(WETH).deposit{value: msg.value}();

        // Call the main function with WETH as the initial token
        address currentToken;
        (amount, currentToken) = performCustomSwapInternal(msg.value, pools, WETH, minAmountOut, true);

        if (currentToken == WETH) {
            // Unwrap WETH to ETH
            IWETH(WETH).withdraw(amount);
            payable(msg.sender).transfer(amount);
        } else {
            IERC20(currentToken).transfer(msg.sender, amount);
        }
    }

    /**
     * @notice Executes a sequence of swaps starting from an initial token amount.
     * @param amountIn The initial amount of the input token provided by the user.
     * @param pools The list of pools (V2 or V3) to swap through in order.
     * @param initialToken The token we start swapping from.
     * @param minAmountOut The minimum acceptable amount of the final token after all swaps.
     * @param simulateUniswapV3Pool address of the Uniswap V3 pool to borrow tokens for simulation
     */
    function simulatePerformCustomSwap(
        uint256 amountIn,
        PoolData[] calldata pools,
        address initialToken,
        uint256 minAmountOut,
        address simulateUniswapV3Pool
    ) public {
        bytes memory simData = abi.encode(
            amountIn,
            pools,
            initialToken,
            minAmountOut
        ); // len = 128
        IUniswapV3Pool v3pool = IUniswapV3Pool(simulateUniswapV3Pool);
        bool zeroForOne = (v3pool.token1() == initialToken);
        uint160 sqrtPriceLimitX96 = zeroForOne
            ? TickMath.MIN_SQRT_RATIO + 1
            : TickMath.MAX_SQRT_RATIO - 1;
        v3pool.swap(
            address(this),
            zeroForOne,
            - int256(amountIn),
            sqrtPriceLimitX96,
            simData
        );
    }

    function simulateSingleV3pool(
        uint256 amountIn,
        address pool,
        address initialToken
    ) public {
        IUniswapV3Pool v3pool = IUniswapV3Pool(pool);
        bool zeroForOne = (v3pool.token0() == initialToken);
        uint160 sqrtPriceLimitX96 = zeroForOne
            ? TickMath.MIN_SQRT_RATIO + 1
            : TickMath.MAX_SQRT_RATIO - 1;
        v3pool.swap(
            address(this),
            zeroForOne,
            int256(amountIn),
            sqrtPriceLimitX96,
            ""
        );
    }

    /**
     * @notice Allows the owner to set the global referral fee in basis points.
     * @param _referralFee The new referral fee in bps (0 to 100).
     *                     For example:
     *                     0   = 0%
     *                     50  = 0.50%
     *                     100 = 1%
     */
    function setReferralFee(uint256 _referralFee) external onlyOwner {
        require(_referralFee <= 100, "Fee cannot exceed 1%");
        referralFee = _referralFee;
    }

    /**
     * @notice Allows the owner to withdraw accumulated fees from this contract.
     * @param token The address of the token to withdraw.
     * @param amount The amount of the token to withdraw.
     */
    function withdrawFees(address token, uint256 amount) external onlyOwner {
        IERC20(token).transfer(owner, amount);
    }

    /**
     * @notice Allows the owner to withdraw accumulated fees from this contract.
     * @param amount The amount of the token to withdraw.
     */
    function withdrawFees(uint256 amount) external onlyOwner {
        payable(owner).transfer(amount);
    }

    // Fallback functions to receive ETH if needed (e.g. after WETH withdraw)
    receive() external payable {}

    fallback() external payable {}

    function _uint2str(uint256 _i) internal pure returns (string memory) {
        if (_i == 0) return "0";
        uint256 j = _i;
        uint256 length;
        while (j != 0) {
            length++;
            j /= 10;
        }
        bytes memory bstr = new bytes(length);
        uint256 k = length;
        j = _i;
        while (j != 0) {
            k--;
            bstr[k] = bytes1(uint8(48 + (j % 10)));
            j /= 10;
        }
        return string(bstr);
    }
}

Settings
{
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "libraries": {
    "SwapProxy.sol": {}
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"algebraSwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"pancakeV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isV3","type":"bool"},{"internalType":"uint256","name":"fee","type":"uint256"}],"internalType":"struct SwapProxy.PoolData[]","name":"pools","type":"tuple[]"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"performCustomSwap","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isV3","type":"bool"},{"internalType":"uint256","name":"fee","type":"uint256"}],"internalType":"struct SwapProxy.PoolData[]","name":"pools","type":"tuple[]"},{"internalType":"address","name":"initialToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"feeFromInitial","type":"bool"}],"name":"performCustomSwap","outputs":[{"internalType":"uint256","name":"currentAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referralFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referralFee","type":"uint256"}],"name":"setReferralFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isV3","type":"bool"},{"internalType":"uint256","name":"fee","type":"uint256"}],"internalType":"struct SwapProxy.PoolData[]","name":"pools","type":"tuple[]"},{"internalType":"address","name":"initialToken","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"address","name":"simulateUniswapV3Pool","type":"address"}],"name":"simulatePerformCustomSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"initialToken","type":"address"}],"name":"simulateSingleV3pool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"solidlyV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Delta","type":"uint256"},{"internalType":"uint256","name":"amount1Delta","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"swapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"swapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapX2YCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swapY2XCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int256","name":"amount0Delta","type":"int256"},{"internalType":"int256","name":"amount1Delta","type":"int256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"uniswapV3SwapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052348015600f57600080fd5b50604051612312380380612312833981016040819052602c91605e565b600080546001600160a01b039092166001600160a01b031992831617905560018054909116331790556014600255608c565b600060208284031215606f57600080fd5b81516001600160a01b0381168114608557600080fd5b9392505050565b6122778061009b6000396000f3fe6080604052600436106101005760003560e01c80638da5cb5b1161008f578063ad5c464811610061578063ad5c464814610236578063bc9d487e14610256578063d3e1c28414610276578063fa461e3314610296578063fa483e721461010257005b80638da5cb5b146101be578063923b8a2a14610102578063a13940b0146101f6578063ad3b1b471461021657005b80635e318e07116100d35780635e318e0714610122578063713494d7146101425780637a0f3a2e1461016257806384ae2bc61461018257806389155ef8146101ab57005b8063187806841461010257806323a69e75146101025780632c8958f6146101025780633a1c453c14610102575b005b34801561010e57600080fd5b5061010061011d36600461195d565b6102b6565b34801561012e57600080fd5b5061010061013d3660046119b0565b6102c8565b34801561014e57600080fd5b5061010061015d3660046119b0565b610339565b34801561016e57600080fd5b5061010061017d3660046119e1565b6103b0565b34801561018e57600080fd5b5061019860025481565b6040519081526020015b60405180910390f35b6101986101b9366004611a68565b610506565b3480156101ca57600080fd5b506001546101de906001600160a01b031681565b6040516001600160a01b0390911681526020016101a2565b34801561020257600080fd5b50610198610211366004611ac2565b610743565b34801561022257600080fd5b50610100610231366004611b3e565b610949565b34801561024257600080fd5b506000546101de906001600160a01b031681565b34801561026257600080fd5b50610100610271366004611b6a565b6109ef565b34801561028257600080fd5b5061010061029136600461195d565b610b63565b3480156102a257600080fd5b506101006102b136600461195d565b610b6b565b6102c284848484610b6b565b50505050565b6001546001600160a01b031633146102fb5760405162461bcd60e51b81526004016102f290611bd8565b60405180910390fd5b6001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610335573d6000803e3d6000fd5b5050565b6001546001600160a01b031633146103635760405162461bcd60e51b81526004016102f290611bd8565b60648111156103ab5760405162461bcd60e51b81526020600482015260146024820152734665652063616e6e6f742065786365656420312560601b60448201526064016102f2565b600255565b60008290506000826001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104239190611bfb565b6001600160a01b031614905060008161045a57610455600173fffd8963efd1fc6a506488495d951d5263988d26611c35565b61046a565b61046a6401000276a36001611c5a565b604051630251596160e31b81523060048201528315156024820152604481018890526001600160a01b03808316606483015260a06084830152600060a48301529192509084169063128acb089060c40160408051808303816000875af11580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc9190611c79565b5050505050505050565b60008034116105455760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b60448201526064016102f2565b60008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b5050505050600061061c348686808060200260200160405190810160405280939291908181526020016000905b82821015610600576105f160608302860136819003810190611d50565b815260200190600101906105d4565b50506000546001600160a01b0316925088915060019050610cd2565b60005491935091506001600160a01b03908116908216036106c857600054604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505060405133925084156108fc02915084906000818181858888f193505050501580156106c2573d6000803e3d6000fd5b5061073b565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303816000875af1158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190611d6c565b505b509392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018790526000906001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190611d6c565b50600061081f888888808060200260200160405190810160405280939291908181526020016000905b828210156108125761080360608302860136819003810190611d50565b815260200190600101906107e6565b5050505050878787610cd2565b60005491935091506001600160a01b03908116908216036108cb57600054604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b505060405133925084156108fc02915084906000818181858888f193505050501580156108c5573d6000803e3d6000fd5b5061093e565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303816000875af1158015610918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093c9190611d6c565b505b509695505050505050565b6001546001600160a01b031633146109735760405162461bcd60e51b81526004016102f290611bd8565b60015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea9190611d6c565b505050565b60008686868686604051602001610a0a959493929190611d89565b604051602081830303815290604052905060008290506000856001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190611bfb565b6001600160a01b0316149050600081610ac557610ac0600173fffd8963efd1fc6a506488495d951d5263988d26611c35565b610ad5565b610ad56401000276a36001611c5a565b90506001600160a01b03831663128acb083084610af18e611e1b565b85896040518663ffffffff1660e01b8152600401610b13959493929190611e87565b60408051808303816000875af1158015610b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b559190611c79565b505050505050505050505050565b6102c2838584845b6040819003610c1357600080610b8383850185611edd565b9150915060008115610b96575085610b99565b50845b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a9190611d6c565b505050506102c2565b6000819003610c8157600080851215610c3657610c2f85611e1b565b9050610c42565b610c3f84611e1b565b90505b610c4b8161162d565b604051602001610c5b9190611f16565b60408051601f198184030181529082905262461bcd60e51b82526102f291600401611f7b565b6000808080610c9285870187611f8e565b9350935093509350600080610cab868686866001610cd2565b91509150610cb88261162d565b610cc18261173c565b604051602001610c5b92919061206c565b60008060008711610d1c5760405162461bcd60e51b81526020600482015260146024820152730616d6f756e74496e206d757374206265203e20360641b60448201526064016102f2565b8215610dc757600061271060025489610d35919061210b565b610d3f9190612138565b60015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925087169063a9059cbb906044016020604051808303816000875af1158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db89190611d6c565b50610dc3818961214c565b9750505b508590508360005b865181101561153457868181518110610dea57610dea61215f565b60200260200101516020015115611018576000878281518110610e0f57610e0f61215f565b60200260200101516000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190611bfb565b90506001600160a01b0384811690821614600081610ebd57610eb8600173fffd8963efd1fc6a506488495d951d5263988d26611c35565b610ecd565b610ecd6401000276a36001611c5a565b9050600080856001600160a01b031663128acb0830868c878d8a604051602001610f0e9291906001600160a01b039290921682521515602082015260400190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610f3d959493929190611e87565b60408051808303816000875af1158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190611c79565b915091508315610ffd57856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190611bfb565b9750610ff681611e1b565b985061100d565b8497508161100a90611e1b565b98505b50505050505061152c565b600087828151811061102c5761102c61215f565b60200260200101516000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e9190611bfb565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111049190611bfb565b90506000826001600160a01b0316866001600160a01b03160361112857508061112b565b50815b600080600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561116f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611193919061218c565b506001600160701b031691506001600160701b03169150866001600160a01b03168a6001600160a01b0316036111ce578193508092506111d5565b8093508192505b5050600060018e89815181106111ed576111ed61215f565b602002602001015160400151111561126b5760006127108f8a815181106112165761121661215f565b60200260200101516040015161271061122f919061214c565b611239908d61210b565b6112439190612138565b905061124f81856121d1565b611259848361210b565b6112639190612138565b91505061137c565b8d888151811061127d5761127d61215f565b6020026020010151604001516001036113085760405163ca706bcf60e01b81526001600160a01b038a81166004830152602482018c905288169063ca706bcf90604401602060405180830381865afa1580156112dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130191906121e4565b905061137c565b6040516378a051ad60e11b8152600481018b90526001600160a01b038a8116602483015288169063f140a35a90604401602060405180830381865afa158015611355573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137991906121e4565b90505b6000866001600160a01b03168a6001600160a01b03161461139d57816113a0565b60005b90506000876001600160a01b03168b6001600160a01b0316146113c45760006113c6565b825b60405163a9059cbb60e01b81526001600160a01b038b81166004830152602482018f9052919250908c169063a9059cbb906044016020604051808303816000875af1158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190611d6c565b5060405163022c0d9f60e01b8152600481018390526024810182905230604482015260806064820152600060848201526001600160a01b038a169063022c0d9f9060a401600060405180830381600087803b15801561149b57600080fd5b505af11580156114af573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152979c508c976001600160a01b03891692506370a082319150602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152091906121e4565b9b505050505050505050505b600101610dcf565b50838210156115795760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b60448201526064016102f2565b8261162357600061271060025484611591919061210b565b61159b9190612138565b60015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190611d6c565b5061161f818461214c565b9250505b9550959350505050565b6060816000036116545750506040805180820190915260018152600360fc1b602082015290565b8160005b811561167e5780611668816121fd565b91506116779050600a83612138565b9150611658565b60008167ffffffffffffffff81111561169957611699611c9d565b6040519080825280601f01601f1916602001820160405280156116c3576020820181803683370190505b508593509050815b831561173357806116db81612216565b91506116ea9050600a8561222d565b6116f59060306121d1565b60f81b82828151811061170a5761170a61215f565b60200101906001600160f81b031916908160001a90535061172c600a85612138565b93506116cb565b50949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106117a7576117a761215f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106117d6576117d661215f565b60200101906001600160f81b031916908160001a90535060005b6014811015611733578260048561180884600c6121d1565b602081106118185761181861215f565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061183e5761183e61215f565b01602001516001600160f81b0319168261185983600261210b565b6118649060026121d1565b815181106118745761187461215f565b60200101906001600160f81b031916908160001a905350828461189883600c6121d1565b602081106118a8576118a861215f565b825191901a600f169081106118bf576118bf61215f565b01602001516001600160f81b031916826118da83600261210b565b6118e59060036121d1565b815181106118f5576118f561215f565b60200101906001600160f81b031916908160001a9053506001016117f0565b60008083601f84011261192657600080fd5b50813567ffffffffffffffff81111561193e57600080fd5b60208301915083602082850101111561195657600080fd5b9250929050565b6000806000806060858703121561197357600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561199857600080fd5b6119a487828801611914565b95989497509550505050565b6000602082840312156119c257600080fd5b5035919050565b6001600160a01b03811681146119de57600080fd5b50565b6000806000606084860312156119f657600080fd5b833592506020840135611a08816119c9565b91506040840135611a18816119c9565b809150509250925092565b60008083601f840112611a3557600080fd5b50813567ffffffffffffffff811115611a4d57600080fd5b60208301915083602060608302850101111561195657600080fd5b600080600060408486031215611a7d57600080fd5b833567ffffffffffffffff811115611a9457600080fd5b611aa086828701611a23565b909790965060209590950135949350505050565b80151581146119de57600080fd5b60008060008060008060a08789031215611adb57600080fd5b86359550602087013567ffffffffffffffff811115611af957600080fd5b611b0589828a01611a23565b9096509450506040870135611b19816119c9565b9250606087013591506080870135611b3081611ab4565b809150509295509295509295565b60008060408385031215611b5157600080fd5b8235611b5c816119c9565b946020939093013593505050565b60008060008060008060a08789031215611b8357600080fd5b86359550602087013567ffffffffffffffff811115611ba157600080fd5b611bad89828a01611a23565b9096509450506040870135611bc1816119c9565b9250606087013591506080870135611b30816119c9565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600060208284031215611c0d57600080fd5b8151611c18816119c9565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038281168282160390811115611c5457611c54611c1f565b92915050565b6001600160a01b038181168382160190811115611c5457611c54611c1f565b60008060408385031215611c8c57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cdc57611cdc611c9d565b604052919050565b600060608284031215611cf657600080fd5b6040516060810167ffffffffffffffff81118282101715611d1957611d19611c9d565b6040529050808235611d2a816119c9565b81526020830135611d3a81611ab4565b6020820152604092830135920191909152919050565b600060608284031215611d6257600080fd5b611c188383611ce4565b600060208284031215611d7e57600080fd5b8151611c1881611ab4565b858152608060208201819052810184905260008560a08301825b87811015611df2578235611db6816119c9565b6001600160a01b031682526020830135611dcf81611ab4565b151560208301526040838101359083015260609283019290910190600101611da3565b506001600160a01b03861660408501529150611e0b9050565b8260608301529695505050505050565b6000600160ff1b8201611e3057611e30611c1f565b5060000390565b60005b83811015611e52578181015183820152602001611e3a565b50506000910152565b60008151808452611e73816020860160208601611e37565b601f01601f19169290920160200192915050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090611ec290830184611e5b565b979650505050505050565b8035611ed8816119c9565b919050565b60008060408385031215611ef057600080fd5b8235611efb816119c9565b91506020830135611f0b81611ab4565b809150509250929050565b69029b4b6bab630ba329d160b51b8152607b60f81b600a820152691130b6b7bab73a111d1160b11b600b8201528151600090611f59816015850160208701611e37565b601160f91b6015939091019283015250607d60f81b6016820152601701919050565b602081526000611c186020830184611e5b565b60008060008060808587031215611fa457600080fd5b84359350602085013567ffffffffffffffff811115611fc257600080fd5b8501601f81018713611fd357600080fd5b803567ffffffffffffffff811115611fed57611fed611c9d565b611ffc60208260051b01611cb3565b8082825260208201915060206060840285010192508983111561201e57600080fd5b6020840193505b8284101561204a576120378a85611ce4565b8252602082019150606084019350612025565b955061205c9250505060408601611ecd565b9396929550929360600135925050565b69029b4b6bab630ba329d160b51b8152607b60f81b600a820152691130b6b7bab73a111d1160b11b600b82015282516000906120af816015850160208801611e37565b61088b60f21b6015918401918201526c113a37b5b2b72fb7baba111d1160991b601782015283516120e7816024840160208801611e37565b601160f91b60249290910191820152607d60f81b6025820152602601949350505050565b8082028115828204841417611c5457611c54611c1f565b634e487b7160e01b600052601260045260246000fd5b60008261214757612147612122565b500490565b81810381811115611c5457611c54611c1f565b634e487b7160e01b600052603260045260246000fd5b80516001600160701b0381168114611ed857600080fd5b6000806000606084860312156121a157600080fd5b6121aa84612175565b92506121b860208501612175565b9150604084015163ffffffff81168114611a1857600080fd5b80820180821115611c5457611c54611c1f565b6000602082840312156121f657600080fd5b5051919050565b60006001820161220f5761220f611c1f565b5060010190565b60008161222557612225611c1f565b506000190190565b60008261223c5761223c612122565b50069056fea2646970667358221220763959177b0fea40059d77a08fd504b50f959db359aa938280ad1dcc9460ac0c64736f6c634300081b003300000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

Deployed Bytecode

0x6080604052600436106101005760003560e01c80638da5cb5b1161008f578063ad5c464811610061578063ad5c464814610236578063bc9d487e14610256578063d3e1c28414610276578063fa461e3314610296578063fa483e721461010257005b80638da5cb5b146101be578063923b8a2a14610102578063a13940b0146101f6578063ad3b1b471461021657005b80635e318e07116100d35780635e318e0714610122578063713494d7146101425780637a0f3a2e1461016257806384ae2bc61461018257806389155ef8146101ab57005b8063187806841461010257806323a69e75146101025780632c8958f6146101025780633a1c453c14610102575b005b34801561010e57600080fd5b5061010061011d36600461195d565b6102b6565b34801561012e57600080fd5b5061010061013d3660046119b0565b6102c8565b34801561014e57600080fd5b5061010061015d3660046119b0565b610339565b34801561016e57600080fd5b5061010061017d3660046119e1565b6103b0565b34801561018e57600080fd5b5061019860025481565b6040519081526020015b60405180910390f35b6101986101b9366004611a68565b610506565b3480156101ca57600080fd5b506001546101de906001600160a01b031681565b6040516001600160a01b0390911681526020016101a2565b34801561020257600080fd5b50610198610211366004611ac2565b610743565b34801561022257600080fd5b50610100610231366004611b3e565b610949565b34801561024257600080fd5b506000546101de906001600160a01b031681565b34801561026257600080fd5b50610100610271366004611b6a565b6109ef565b34801561028257600080fd5b5061010061029136600461195d565b610b63565b3480156102a257600080fd5b506101006102b136600461195d565b610b6b565b6102c284848484610b6b565b50505050565b6001546001600160a01b031633146102fb5760405162461bcd60e51b81526004016102f290611bd8565b60405180910390fd5b6001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610335573d6000803e3d6000fd5b5050565b6001546001600160a01b031633146103635760405162461bcd60e51b81526004016102f290611bd8565b60648111156103ab5760405162461bcd60e51b81526020600482015260146024820152734665652063616e6e6f742065786365656420312560601b60448201526064016102f2565b600255565b60008290506000826001600160a01b0316826001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104239190611bfb565b6001600160a01b031614905060008161045a57610455600173fffd8963efd1fc6a506488495d951d5263988d26611c35565b61046a565b61046a6401000276a36001611c5a565b604051630251596160e31b81523060048201528315156024820152604481018890526001600160a01b03808316606483015260a06084830152600060a48301529192509084169063128acb089060c40160408051808303816000875af11580156104d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc9190611c79565b5050505050505050565b60008034116105455760405162461bcd60e51b815260206004820152600b60248201526a139bc8115512081cd95b9d60aa1b60448201526064016102f2565b60008054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b5050505050600061061c348686808060200260200160405190810160405280939291908181526020016000905b82821015610600576105f160608302860136819003810190611d50565b815260200190600101906105d4565b50506000546001600160a01b0316925088915060019050610cd2565b60005491935091506001600160a01b03908116908216036106c857600054604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505060405133925084156108fc02915084906000818181858888f193505050501580156106c2573d6000803e3d6000fd5b5061073b565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303816000875af1158015610715573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107399190611d6c565b505b509392505050565b6040516323b872dd60e01b8152336004820152306024820152604481018790526000906001600160a01b038516906323b872dd906064016020604051808303816000875af1158015610799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107bd9190611d6c565b50600061081f888888808060200260200160405190810160405280939291908181526020016000905b828210156108125761080360608302860136819003810190611d50565b815260200190600101906107e6565b5050505050878787610cd2565b60005491935091506001600160a01b03908116908216036108cb57600054604051632e1a7d4d60e01b8152600481018490526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b15801561088057600080fd5b505af1158015610894573d6000803e3d6000fd5b505060405133925084156108fc02915084906000818181858888f193505050501580156108c5573d6000803e3d6000fd5b5061093e565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303816000875af1158015610918573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093c9190611d6c565b505b509695505050505050565b6001546001600160a01b031633146109735760405162461bcd60e51b81526004016102f290611bd8565b60015460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af11580156109c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ea9190611d6c565b505050565b60008686868686604051602001610a0a959493929190611d89565b604051602081830303815290604052905060008290506000856001600160a01b0316826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190611bfb565b6001600160a01b0316149050600081610ac557610ac0600173fffd8963efd1fc6a506488495d951d5263988d26611c35565b610ad5565b610ad56401000276a36001611c5a565b90506001600160a01b03831663128acb083084610af18e611e1b565b85896040518663ffffffff1660e01b8152600401610b13959493929190611e87565b60408051808303816000875af1158015610b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b559190611c79565b505050505050505050505050565b6102c2838584845b6040819003610c1357600080610b8383850185611edd565b9150915060008115610b96575085610b99565b50845b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015610be6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0a9190611d6c565b505050506102c2565b6000819003610c8157600080851215610c3657610c2f85611e1b565b9050610c42565b610c3f84611e1b565b90505b610c4b8161162d565b604051602001610c5b9190611f16565b60408051601f198184030181529082905262461bcd60e51b82526102f291600401611f7b565b6000808080610c9285870187611f8e565b9350935093509350600080610cab868686866001610cd2565b91509150610cb88261162d565b610cc18261173c565b604051602001610c5b92919061206c565b60008060008711610d1c5760405162461bcd60e51b81526020600482015260146024820152730616d6f756e74496e206d757374206265203e20360641b60448201526064016102f2565b8215610dc757600061271060025489610d35919061210b565b610d3f9190612138565b60015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925087169063a9059cbb906044016020604051808303816000875af1158015610d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db89190611d6c565b50610dc3818961214c565b9750505b508590508360005b865181101561153457868181518110610dea57610dea61215f565b60200260200101516020015115611018576000878281518110610e0f57610e0f61215f565b60200260200101516000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e819190611bfb565b90506001600160a01b0384811690821614600081610ebd57610eb8600173fffd8963efd1fc6a506488495d951d5263988d26611c35565b610ecd565b610ecd6401000276a36001611c5a565b9050600080856001600160a01b031663128acb0830868c878d8a604051602001610f0e9291906001600160a01b039290921682521515602082015260400190565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610f3d959493929190611e87565b60408051808303816000875af1158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f9190611c79565b915091508315610ffd57856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610feb9190611bfb565b9750610ff681611e1b565b985061100d565b8497508161100a90611e1b565b98505b50505050505061152c565b600087828151811061102c5761102c61215f565b60200260200101516000015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561107a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109e9190611bfb565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111049190611bfb565b90506000826001600160a01b0316866001600160a01b03160361112857508061112b565b50815b600080600080876001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561116f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611193919061218c565b506001600160701b031691506001600160701b03169150866001600160a01b03168a6001600160a01b0316036111ce578193508092506111d5565b8093508192505b5050600060018e89815181106111ed576111ed61215f565b602002602001015160400151111561126b5760006127108f8a815181106112165761121661215f565b60200260200101516040015161271061122f919061214c565b611239908d61210b565b6112439190612138565b905061124f81856121d1565b611259848361210b565b6112639190612138565b91505061137c565b8d888151811061127d5761127d61215f565b6020026020010151604001516001036113085760405163ca706bcf60e01b81526001600160a01b038a81166004830152602482018c905288169063ca706bcf90604401602060405180830381865afa1580156112dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130191906121e4565b905061137c565b6040516378a051ad60e11b8152600481018b90526001600160a01b038a8116602483015288169063f140a35a90604401602060405180830381865afa158015611355573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137991906121e4565b90505b6000866001600160a01b03168a6001600160a01b03161461139d57816113a0565b60005b90506000876001600160a01b03168b6001600160a01b0316146113c45760006113c6565b825b60405163a9059cbb60e01b81526001600160a01b038b81166004830152602482018f9052919250908c169063a9059cbb906044016020604051808303816000875af1158015611419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143d9190611d6c565b5060405163022c0d9f60e01b8152600481018390526024810182905230604482015260806064820152600060848201526001600160a01b038a169063022c0d9f9060a401600060405180830381600087803b15801561149b57600080fd5b505af11580156114af573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152979c508c976001600160a01b03891692506370a082319150602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152091906121e4565b9b505050505050505050505b600101610dcf565b50838210156115795760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b60448201526064016102f2565b8261162357600061271060025484611591919061210b565b61159b9190612138565b60015460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190611d6c565b5061161f818461214c565b9250505b9550959350505050565b6060816000036116545750506040805180820190915260018152600360fc1b602082015290565b8160005b811561167e5780611668816121fd565b91506116779050600a83612138565b9150611658565b60008167ffffffffffffffff81111561169957611699611c9d565b6040519080825280601f01601f1916602001820160405280156116c3576020820181803683370190505b508593509050815b831561173357806116db81612216565b91506116ea9050600a8561222d565b6116f59060306121d1565b60f81b82828151811061170a5761170a61215f565b60200101906001600160f81b031916908160001a90535061172c600a85612138565b93506116cb565b50949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106117a7576117a761215f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106117d6576117d661215f565b60200101906001600160f81b031916908160001a90535060005b6014811015611733578260048561180884600c6121d1565b602081106118185761181861215f565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061183e5761183e61215f565b01602001516001600160f81b0319168261185983600261210b565b6118649060026121d1565b815181106118745761187461215f565b60200101906001600160f81b031916908160001a905350828461189883600c6121d1565b602081106118a8576118a861215f565b825191901a600f169081106118bf576118bf61215f565b01602001516001600160f81b031916826118da83600261210b565b6118e59060036121d1565b815181106118f5576118f561215f565b60200101906001600160f81b031916908160001a9053506001016117f0565b60008083601f84011261192657600080fd5b50813567ffffffffffffffff81111561193e57600080fd5b60208301915083602082850101111561195657600080fd5b9250929050565b6000806000806060858703121561197357600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561199857600080fd5b6119a487828801611914565b95989497509550505050565b6000602082840312156119c257600080fd5b5035919050565b6001600160a01b03811681146119de57600080fd5b50565b6000806000606084860312156119f657600080fd5b833592506020840135611a08816119c9565b91506040840135611a18816119c9565b809150509250925092565b60008083601f840112611a3557600080fd5b50813567ffffffffffffffff811115611a4d57600080fd5b60208301915083602060608302850101111561195657600080fd5b600080600060408486031215611a7d57600080fd5b833567ffffffffffffffff811115611a9457600080fd5b611aa086828701611a23565b909790965060209590950135949350505050565b80151581146119de57600080fd5b60008060008060008060a08789031215611adb57600080fd5b86359550602087013567ffffffffffffffff811115611af957600080fd5b611b0589828a01611a23565b9096509450506040870135611b19816119c9565b9250606087013591506080870135611b3081611ab4565b809150509295509295509295565b60008060408385031215611b5157600080fd5b8235611b5c816119c9565b946020939093013593505050565b60008060008060008060a08789031215611b8357600080fd5b86359550602087013567ffffffffffffffff811115611ba157600080fd5b611bad89828a01611a23565b9096509450506040870135611bc1816119c9565b9250606087013591506080870135611b30816119c9565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600060208284031215611c0d57600080fd5b8151611c18816119c9565b9392505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038281168282160390811115611c5457611c54611c1f565b92915050565b6001600160a01b038181168382160190811115611c5457611c54611c1f565b60008060408385031215611c8c57600080fd5b505080516020909101519092909150565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611cdc57611cdc611c9d565b604052919050565b600060608284031215611cf657600080fd5b6040516060810167ffffffffffffffff81118282101715611d1957611d19611c9d565b6040529050808235611d2a816119c9565b81526020830135611d3a81611ab4565b6020820152604092830135920191909152919050565b600060608284031215611d6257600080fd5b611c188383611ce4565b600060208284031215611d7e57600080fd5b8151611c1881611ab4565b858152608060208201819052810184905260008560a08301825b87811015611df2578235611db6816119c9565b6001600160a01b031682526020830135611dcf81611ab4565b151560208301526040838101359083015260609283019290910190600101611da3565b506001600160a01b03861660408501529150611e0b9050565b8260608301529695505050505050565b6000600160ff1b8201611e3057611e30611c1f565b5060000390565b60005b83811015611e52578181015183820152602001611e3a565b50506000910152565b60008151808452611e73816020860160208601611e37565b601f01601f19169290920160200192915050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090611ec290830184611e5b565b979650505050505050565b8035611ed8816119c9565b919050565b60008060408385031215611ef057600080fd5b8235611efb816119c9565b91506020830135611f0b81611ab4565b809150509250929050565b69029b4b6bab630ba329d160b51b8152607b60f81b600a820152691130b6b7bab73a111d1160b11b600b8201528151600090611f59816015850160208701611e37565b601160f91b6015939091019283015250607d60f81b6016820152601701919050565b602081526000611c186020830184611e5b565b60008060008060808587031215611fa457600080fd5b84359350602085013567ffffffffffffffff811115611fc257600080fd5b8501601f81018713611fd357600080fd5b803567ffffffffffffffff811115611fed57611fed611c9d565b611ffc60208260051b01611cb3565b8082825260208201915060206060840285010192508983111561201e57600080fd5b6020840193505b8284101561204a576120378a85611ce4565b8252602082019150606084019350612025565b955061205c9250505060408601611ecd565b9396929550929360600135925050565b69029b4b6bab630ba329d160b51b8152607b60f81b600a820152691130b6b7bab73a111d1160b11b600b82015282516000906120af816015850160208801611e37565b61088b60f21b6015918401918201526c113a37b5b2b72fb7baba111d1160991b601782015283516120e7816024840160208801611e37565b601160f91b60249290910191820152607d60f81b6025820152602601949350505050565b8082028115828204841417611c5457611c54611c1f565b634e487b7160e01b600052601260045260246000fd5b60008261214757612147612122565b500490565b81810381811115611c5457611c54611c1f565b634e487b7160e01b600052603260045260246000fd5b80516001600160701b0381168114611ed857600080fd5b6000806000606084860312156121a157600080fd5b6121aa84612175565b92506121b860208501612175565b9150604084015163ffffffff81168114611a1857600080fd5b80820180821115611c5457611c54611c1f565b6000602082840312156121f657600080fd5b5051919050565b60006001820161220f5761220f611c1f565b5060010190565b60008161222557612225611c1f565b506000190190565b60008261223c5761223c612122565b50069056fea2646970667358221220763959177b0fea40059d77a08fd504b50f959db359aa938280ad1dcc9460ac0c64736f6c634300081b0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1

-----Decoded View---------------
Arg [0] : _WETH (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.