GLMR Price: $0.021678 (-0.93%)

Contract

0x9F52F5370d38877e01579Cd6E028bc263898877C
Transaction Hash
Block
From
To
Multi Swap Token...129109932025-10-10 6:40:18106 days ago1760078418IN
0x9F52F537...63898877C
0 GLMR0.0112680631.5625
Multi Swap Token...129030742025-10-09 15:07:06106 days ago1760022426IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Token...129026462025-10-09 14:12:12106 days ago1760019132IN
0x9F52F537...63898877C
0 GLMR0.0112680631.5625
Multi Swap Token...128866802025-10-08 6:43:36108 days ago1759905816IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Token...128710662025-10-06 23:32:12109 days ago1759793532IN
0x9F52F537...63898877C
0 GLMR0.011156531.25
Multi Swap Token...128695012025-10-06 20:32:42109 days ago1759782762IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Token...128604932025-10-06 3:02:12110 days ago1759719732IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Token...128567732025-10-05 19:49:18110 days ago1759693758IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Eth F...128558242025-10-05 18:01:30110 days ago1759687290IN
0x9F52F537...63898877C
2 GLMR0.0109862531.25
Multi Swap Eth F...128543982025-10-05 15:05:48110 days ago1759676748IN
0x9F52F537...63898877C
638 GLMR0.0109942531.25
Multi Swap Eth F...128543882025-10-05 15:04:42110 days ago1759676682IN
0x9F52F537...63898877C
500 GLMR0.0109942531.25
Multi Swap Eth F...128543772025-10-05 15:03:36110 days ago1759676616IN
0x9F52F537...63898877C
500 GLMR0.0109942531.25
Multi Swap Eth F...128486652025-10-05 3:56:54111 days ago1759636614IN
0x9F52F537...63898877C
0.2 GLMR0.0062483533
Multi Swap Token...128458152025-10-04 22:29:24111 days ago1759616964IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Eth F...128314112025-10-03 17:57:18112 days ago1759514238IN
0x9F52F537...63898877C
2 GLMR0.0109862531.25
Multi Swap Token...128303382025-10-03 15:53:24112 days ago1759506804IN
0x9F52F537...63898877C
0 GLMR0.0265727531.25
Multi Swap Token...128047882025-10-01 14:24:12114 days ago1759328652IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Eth F...128000502025-10-01 5:11:54115 days ago1759295514IN
0x9F52F537...63898877C
2 GLMR0.0109862531.25
Multi Swap Eth F...127723172025-09-28 21:51:30117 days ago1759096290IN
0x9F52F537...63898877C
3 GLMR0.0109862531.25
Multi Swap Token...127694612025-09-28 16:04:42117 days ago1759075482IN
0x9F52F537...63898877C
0 GLMR0.0121382734
Multi Swap Token...127666732025-09-28 10:31:18118 days ago1759055478IN
0x9F52F537...63898877C
0 GLMR0.012555531.25
Multi Swap Token...127463672025-09-26 18:22:36119 days ago1758910956IN
0x9F52F537...63898877C
0 GLMR0.0110587531.25
Multi Swap Token...127463322025-09-26 18:18:30119 days ago1758910710IN
0x9F52F537...63898877C
0 GLMR0.012555531.25
Multi Swap Token...127283192025-09-25 6:36:24121 days ago1758782184IN
0x9F52F537...63898877C
0 GLMR0.011164531.25
Multi Swap Token...127230352025-09-24 20:22:36121 days ago1758745356IN
0x9F52F537...63898877C
0 GLMR0.0117812633
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
129109932025-10-10 6:40:18106 days ago1760078418
0x9F52F537...63898877C
21.54472968 GLMR
129109932025-10-10 6:40:18106 days ago1760078418
0x9F52F537...63898877C
21.54472968 GLMR
129030742025-10-09 15:07:06106 days ago1760022426
0x9F52F537...63898877C
52.89146216 GLMR
129030742025-10-09 15:07:06106 days ago1760022426
0x9F52F537...63898877C
52.89146216 GLMR
129026462025-10-09 14:12:12106 days ago1760019132
0x9F52F537...63898877C
6.26892222 GLMR
129026462025-10-09 14:12:12106 days ago1760019132
0x9F52F537...63898877C
6.26892222 GLMR
128866802025-10-08 6:43:36108 days ago1759905816
0x9F52F537...63898877C
325.99124708 GLMR
128866802025-10-08 6:43:36108 days ago1759905816
0x9F52F537...63898877C
325.99124708 GLMR
128710662025-10-06 23:32:12109 days ago1759793532
0x9F52F537...63898877C
53.79040244 GLMR
128710662025-10-06 23:32:12109 days ago1759793532
0x9F52F537...63898877C
53.79040244 GLMR
128695012025-10-06 20:32:42109 days ago1759782762
0x9F52F537...63898877C
16.0057665 GLMR
128695012025-10-06 20:32:42109 days ago1759782762
0x9F52F537...63898877C
16.0057665 GLMR
128604932025-10-06 3:02:12110 days ago1759719732
0x9F52F537...63898877C
415.34491503 GLMR
128604932025-10-06 3:02:12110 days ago1759719732
0x9F52F537...63898877C
415.34491503 GLMR
128567732025-10-05 19:49:18110 days ago1759693758
0x9F52F537...63898877C
69.81480725 GLMR
128567732025-10-05 19:49:18110 days ago1759693758
0x9F52F537...63898877C
69.81480725 GLMR
128558242025-10-05 18:01:30110 days ago1759687290
0x9F52F537...63898877C
2 GLMR
128543982025-10-05 15:05:48110 days ago1759676748
0x9F52F537...63898877C
638 GLMR
128543882025-10-05 15:04:42110 days ago1759676682
0x9F52F537...63898877C
500 GLMR
128543772025-10-05 15:03:36110 days ago1759676616
0x9F52F537...63898877C
500 GLMR
128486652025-10-05 3:56:54111 days ago1759636614
0x9F52F537...63898877C
0.2 GLMR
128458152025-10-04 22:29:24111 days ago1759616964
0x9F52F537...63898877C
12.12965369 GLMR
128458152025-10-04 22:29:24111 days ago1759616964
0x9F52F537...63898877C
12.12965369 GLMR
128314112025-10-03 17:57:18112 days ago1759514238
0x9F52F537...63898877C
2 GLMR
128047882025-10-01 14:24:12114 days ago1759328652
0x9F52F537...63898877C
1,071.82575049 GLMR
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BeamswapHybridRouter

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

import "@openzeppelin/contracts/access/Ownable.sol";
import {IWETH} from "./interface/IWETH.sol";
import {IEERC20} from "./interface/IEERC20.sol";
import {IBeamswapExectuor} from "./interface/IBeamswapExectuor.sol";
import {BeamswapTypes} from "./BeamswapTypes.sol";
import "../interfaces/IBeamswapV3Pool.sol";

import "./libraries/TransferHelper.sol";

error BEAMSWAP_AmountOutLow();
error BEAMSWAP_Expired();
error BEAMSWAP_Paused();

error BEAMSWAP_BadFeeOrder();
error BEAMSWAP_FeeTooHigh();

error BEAMSWAP_AddressZero();
error BEAMSWAP_AmountOutMinZero();
error BEAMSWAP_SwapDataZero();

error BEAMSWAP_EthTransferFailed();

contract BeamswapHybridRouter is Ownable, BeamswapTypes {
    address private _feeDeposit;
    uint256 private _minFee = 5;
    uint256 private _maxFee = 10;
    uint256 private _stableFee = 2;
    uint256 private constant feeCap = 200;

    address public immutable WETH;
    IBeamswapExectuor public _executor;

    bool private _feeOn = true;
    bool private _paused;

    mapping(address => bool) internal isStable;

    constructor(address WETH_, address executor_) {
        _feeDeposit = msg.sender;
        WETH = WETH_;
        _executor = IBeamswapExectuor(executor_);
        isStable[0x931715FEE2d06333043d11F658C8CE934aC61D0c] = true;
        isStable[0xCa01a1D0993565291051daFF390892518ACfAD3A] = true;
        isStable[0xFFFFFFfFea09FB06d082fd1275CD48b191cbCD1d] = true;
    }

    modifier ensureDeadline(uint256 deadline) {
        if (deadline < block.timestamp) revert BEAMSWAP_Expired();
        _;
    }

    modifier notPaused() {
        if (_paused) revert BEAMSWAP_Paused();
        _;
    }

    event SendAdminFee(
        address indexed token,
        address indexed receiver,
        uint256 feeAmount
    );

    event Swap(
        address indexed tokenIn,
        address indexed tokenOut,
        address indexed receiver,
        uint256 amountIn,
        uint256 amountOut
    );

    /**
     * @notice Upon completion of any swap, the executor contract will transfer its balance of `tokenOut` back
     * to this contract, final balance checks will be completed, fees will be processed and the results of the
     * swap will be transferred to the user.
     */

    /**
     * @notice Performs a multi-path swap using the network token as the principal input and tokens as the principal output.
     * @param tokenOut Token to recieve after swap.
     * @param to Address to recieve resulting amount of tokenOut tokens.
     * @param amountOutMin Minimum amount of tokenOut to recieve, pre optimizer fee.
     * @param deadline Deadline for executing the swap. The transaction will revert if blocktime exceeds `deadline`.
     * @param swapData bytes package defining swap parameters for the executor contract.
     */
    function multiSwapEthForTokens(
        address tokenOut,
        address to,
        uint256 amountOutMin,
        uint256 deadline,
        bytes calldata swapData
    )
        external
        payable
        notPaused
        ensureDeadline(deadline)
        returns (uint256 netTokens, uint256 feeAmount)
    {
        if (amountOutMin == 0) revert BEAMSWAP_AmountOutMinZero();
        if (swapData.length == 0) revert BEAMSWAP_SwapDataZero();

        IWETH(WETH).deposit{value: msg.value}();
        TransferHelper.safeTransfer(WETH, address(_executor), msg.value);

        _executor.executeSplitSwap(
            WETH,
            tokenOut,
            msg.value,
            amountOutMin,
            swapData
        );

        // Final balance checking
        netTokens = IEERC20(tokenOut).balanceOf(address(this));

        if (netTokens < amountOutMin) revert BEAMSWAP_AmountOutLow();

        (feeAmount, netTokens) = _feeOn
            ? _sendAdminFee(tokenOut, netTokens, amountOutMin, swapData)
            : (0, netTokens);

        address receiver = to == address(0) ? msg.sender : to;
        // Transfer tokens net fees to user.
        TransferHelper.safeTransfer(tokenOut, receiver, netTokens);
        emit Swap(WETH, tokenOut, receiver, msg.value, netTokens);
    }

    /**
     * @notice Performs a multi-path swap using tokens as the principal input and ETH as the principal output.
     * @param tokenIn Input token for swap.
     * @param to Address to recieve resulting amount of tokenOut tokens.
     * @param amountIn Amount of `tokenIn` tokens with which to initiate the swap.
     * @param amountOutMin Minimum amount of tokenOut to recieve, pre optimizer fee.
     * @param deadline Deadline for executing the swap. The transaction will revert if blocktime exceeds `deadline`.
     * @param swapData bytes package defining swap parameters for the executor contract.
     */
    function multiSwapTokensForEth(
        address tokenIn,
        address to,
        uint256 amountIn,
        uint256 amountOutMin,
        uint256 deadline,
        bytes calldata swapData
    )
        external
        notPaused
        ensureDeadline(deadline)
        returns (uint256 netTokens, uint256 feeAmount)
    {
        if (amountOutMin == 0) revert BEAMSWAP_AmountOutMinZero();
        if (swapData.length == 0) revert BEAMSWAP_SwapDataZero();

        uint256 beforeDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
        // Initial transfer of tokens from user
        TransferHelper.safeTransferFrom(
            tokenIn,
            msg.sender,
            address(_executor),
            amountIn
        );
        uint256 afterDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
        amountIn = afterDeposit - beforeDeposit;
        _executor.executeSplitSwap(
            tokenIn,
            WETH,
            amountIn,
            amountOutMin,
            swapData
        );
        // Final balance checking
        netTokens = IEERC20(WETH).balanceOf(address(this));

        if (netTokens < amountOutMin) revert BEAMSWAP_AmountOutLow();

        (feeAmount, netTokens) = _feeOn
            ? _sendAdminFee(WETH, netTokens, amountOutMin, swapData)
            : (0, netTokens);

        address receiver = to == address(0) ? msg.sender : to;

        IWETH(WETH).withdraw(netTokens);
        _sendEth(receiver, netTokens);
        emit Swap(tokenIn, WETH, receiver, amountIn, netTokens);
    }

    /**
     * @notice Performs a multi-path swap using tokens as the principal input and tokens as the principal output.
     * @param tokenIn Input token for swap.
     * @param tokenOut Token to recieve after swap.
     * @param to Address to recieve resulting amount of tokenOut tokens.
     * @param amountIn Amount of `tokenIn` tokens with which to initiate the swap.
     * @param amountOutMin Minimum amount of tokenOut to recieve, pre optimizer fee.
     * @param deadline Deadline for executing the swap. The transaction will revert if blocktime exceeds `deadline`.
     * @param swapData bytes package defining swap parameters for the executor contract.
     */
    function multiSwapTokensForTokens(
        address tokenIn,
        address tokenOut,
        address to,
        uint256 amountIn,
        uint256 amountOutMin,
        uint256 deadline,
        bytes calldata swapData
    )
        external
        notPaused
        ensureDeadline(deadline)
        returns (uint256 netTokens, uint256 feeAmount)
    {
        if (amountOutMin == 0) revert BEAMSWAP_AmountOutMinZero();
        if (swapData.length == 0) revert BEAMSWAP_SwapDataZero();
        // Initial transfer of tokens from user

        uint256 beforeDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
        // Initial transfer of tokens from user
        TransferHelper.safeTransferFrom(
            tokenIn,
            msg.sender,
            address(_executor),
            amountIn
        );
        uint256 afterDeposit = IEERC20(tokenIn).balanceOf(address(_executor));
        amountIn = afterDeposit - beforeDeposit;
        _executor.executeSplitSwap(
            tokenIn,
            tokenOut,
            amountIn,
            amountOutMin,
            swapData
        );

        // Final balance checking
        netTokens = IEERC20(tokenOut).balanceOf(address(this));

        if (netTokens < amountOutMin) revert BEAMSWAP_AmountOutLow();

        (feeAmount, netTokens) = _feeOn
            ? _sendAdminFee(tokenOut, netTokens, amountOutMin, swapData)
            : (0, netTokens);
        address receiver = to == address(0) ? msg.sender : to;
        // Transfer tokens net fees to user.
        TransferHelper.safeTransfer(tokenOut, receiver, netTokens);
        emit Swap(tokenIn, tokenOut, receiver, amountIn, netTokens);
    }

    // Fee is equal to half of the difference between netTokens and AmountOutMin, floored at _minFee
    // and capped at _maxFee.

    function getFee(
        uint256 netTokens,
        uint256 amountOutMin
    ) public view returns (uint256, uint256) {
        return _getFee(netTokens, amountOutMin);
    }

    function _getFee(
        uint256 netTokens,
        uint256 amountOutMin
    ) internal view returns (uint256, uint256) {
        uint256 amountDiff = netTokens - amountOutMin;
        uint256 feePercent = (amountDiff * 10000) /
            ((amountOutMin + netTokens) / 2) /
            2; // in bips
        if (feePercent < _minFee) {
            feePercent = _minFee;
        } else if (feePercent > _maxFee) {
            feePercent = _maxFee;
        }
        uint256 feeAmount = ((netTokens * feePercent) / 10000);
        uint256 amountNetFee = netTokens - feeAmount;
        return (feeAmount, amountNetFee);
    }

    function _getFeeStable(
        uint256 netTokens
    ) internal view returns (uint256, uint256) {
        uint256 feeAmount = ((netTokens * _stableFee) / 10000);
        uint256 amountNetFee = netTokens - feeAmount;
        return (feeAmount, amountNetFee);
    }

    function setExecutor(address newExecutor) external onlyOwner {
        if (newExecutor == address(0)) revert BEAMSWAP_AddressZero();
        _executor = IBeamswapExectuor(newExecutor);
    }

    function setFeeDeposit(address newFeeDeposit) external onlyOwner {
        if (newFeeDeposit == address(0)) revert BEAMSWAP_AddressZero();
        _feeDeposit = newFeeDeposit;
    }

    function setFees(
        uint256 minFee_,
        uint256 maxFee_,
        uint256 stableFee_
    ) external onlyOwner {
        if (minFee_ > maxFee_) revert BEAMSWAP_BadFeeOrder();
        if (maxFee_ > feeCap) revert BEAMSWAP_FeeTooHigh();
        if (stableFee_ > feeCap) revert BEAMSWAP_FeeTooHigh();

        _minFee = minFee_;
        _maxFee = maxFee_;
        _stableFee = stableFee_;
    }

    function setFeeOn(bool state) external onlyOwner {
        _feeOn = state;
    }

    function setPaused(bool state) external onlyOwner {
        _paused = state;
    }

    function isPaused() external view returns (bool paused) {
        paused = _paused;
    }

    function minFee() public view returns (uint256 fee) {
        fee = _minFee;
    }

    function maxFee() public view returns (uint256 fee) {
        fee = _maxFee;
    }

    function executor() public view returns (address executor) {
        executor = address(_executor);
    }

    function feeDeposit() external view returns (address feeDeposit) {
        feeDeposit = _feeDeposit;
    }

    function feeOn() public view returns (bool isFeeOn) {
        isFeeOn = _feeOn;
    }

    function getStableToken(
        address token
    ) external view returns (bool isStable_) {
        isStable_ = isStable[token];
    }

    function setStableToken(address token, bool isStable_) external onlyOwner {
        isStable[token] = isStable_;
    }

    function rescueTokens(address token, uint256 amount) external onlyOwner {
        TransferHelper.safeTransfer(token, owner(), amount);
    }

    function rescueEth(uint256 amount) external onlyOwner {
        _sendEth(owner(), amount);
    }

    function _sendAdminFee(
        address token,
        uint256 netTokens,
        uint256 amountOutMin,
        bytes calldata swapData
    ) internal returns (uint256 feeAmount, uint256 amountNetFee) {
        bool stableFee = false; // checks if any swap path is using saddle stable
        bool isStableToken = isStable[token]; // gas saving
        if (isStableToken) {
            SplitPaths[] memory splitPaths = abi.decode(
                swapData,
                (SplitPaths[])
            );
            uint length = splitPaths.length;
            for (uint i; i < length; ) {
                SplitPaths memory splitPath = splitPaths[i];
                SwapDataWrapper[] memory wrappedSwapData = splitPath
                    .wrappedSwapData;
                address[] memory pools = splitPath.pools;
                uint256 len = pools.length;
                for (uint j; j < len; ) {
                    SwapDataWrapper memory wrappedSwapData_ = wrappedSwapData[
                        j
                    ];
                    if (wrappedSwapData_.swapType == SwapType.SaddleStable) {
                        stableFee = true; // if any swap path is using saddle stable then stableFee is true
                        break;
                    }
                    if (wrappedSwapData_.swapType == SwapType.UniV3) {
                        IBeamswapV3Pool v3Pool = IBeamswapV3Pool(pools[j]);
                        address token0 = v3Pool.token0();
                        address token1 = v3Pool.token1();
                        uint24 fee = v3Pool.fee();
                        if (
                            isStable[token0] &&
                            isStable[token1] &&
                            (fee == 500 || fee == 100)
                        ) {
                            stableFee = true; //if both tokens are stable and fee tier is stable
                            break;
                        }
                    }
                    unchecked {
                        ++j;
                    }
                }
                if (stableFee) {
                    break;
                }
                unchecked {
                    ++i;
                }
            }
        }

        (feeAmount, amountNetFee) = !stableFee && !isStableToken
            ? _getFee(netTokens, amountOutMin)
            : _getFeeStable(netTokens); // if token is stable and any swap path used saddle, then we charge stable fee
        if (feeAmount > 0) {
            TransferHelper.safeTransfer(token, _feeDeposit, feeAmount);
            emit SendAdminFee(token, _feeDeposit, feeAmount);
        }
    }

    function _sendEth(address to, uint256 value) private {
        (bool success, ) = to.call{value: value}(new bytes(0));
        if (!success) revert BEAMSWAP_EthTransferFailed();
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IBeamswapV3Pool {
    function protocolFees()
        external
        view
        returns (uint128 token0, uint128 token1);

    function setLmPool(address lmPool) external;

    function collectProtocol(
        address recipient,
        uint128 amount0Requested,
        uint128 amount1Requested
    ) external returns (uint128 amount0, uint128 amount1);

    function setFeeProtocol(uint8 feeProtocol0, uint8 feeProtocol1) external;

    function token0() external view returns (address);

    function token1() external view returns (address);

    function fee() external view returns (uint24);
}

File 5 of 9 : BeamswapTypes.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

contract BeamswapTypes {
    enum SwapType {
        None, //0 - implemented
        K, //1 - implemented
        SaddleStable, //2 - implemented
        UniV3, //3 - implemented
        Gmx //4 - implemented
    }

    struct SplitPaths {
        uint256 amountIn;
        address[] pools;
        SwapDataWrapper[] wrappedSwapData;
    }

    struct SwapDataWrapper {
        bytes swapData;
        SwapType swapType; //? enum
    }

    struct PlainSwapData {
        uint8 poolInPos; //1
        uint8 poolOutPos; //
        address tokenOut; //20
        uint256 poolFee; //32
    }

    struct UniV3SwapData {
        uint8 poolInPos; //1
        uint8 poolOutPos; //
        address tokenOut; //20
        bytes callbackData;
    }

    struct GmxSwapData {
        address tokenIn;
        address tokenOut;
    }
}

File 6 of 9 : IBeamswapExectuor.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IBeamswapExectuor {
    function executeSplitSwap(
        address tokenIn,
        address tokenOut,
        uint256 amountIn,
        uint256 amountOutMin,
        bytes calldata swapData
    ) external;
}

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IEERC20 {
    event Approval(address, address, uint256);
    event Transfer(address, address, uint256);

    function name() external view returns (string memory);

    function decimals() external view returns (uint8);

    function transferFrom(address, address, uint256) external returns (bool);

    function allowance(address, address) external view returns (uint256);

    function approve(address, uint256) external returns (bool);

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

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

    function nonces(address) external view returns (uint256); // Only tokens that support permit

    function permit(
        address,
        address,
        uint256,
        uint256,
        uint8,
        bytes32,
        bytes32
    ) external; // Only tokens that support permit

    function swap(address, uint256) external; // Only Avalanche bridge tokens

    function swapSupply(address) external view returns (uint256); // Only Avalanche bridge tokens

    function totalSupply() external view returns (uint256);
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

error THELP_ApproveFailed();
error THELP_TransferFailed();
error THELP_TransferFromFailed();
error THELP_EthTransferFailed();

library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x095ea7b3, to, value)
        );
        if (!success || !(data.length == 0 || abi.decode(data, (bool))))
            revert THELP_ApproveFailed();
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        if (!success || !(data.length == 0 || abi.decode(data, (bool))))
            revert THELP_TransferFailed();
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x23b872dd, from, to, value)
        );
        if (!success || !(data.length == 0 || abi.decode(data, (bool))))
            revert THELP_TransferFromFailed();
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        if (!success) revert THELP_EthTransferFailed();
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"WETH_","type":"address"},{"internalType":"address","name":"executor_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BEAMSWAP_AddressZero","type":"error"},{"inputs":[],"name":"BEAMSWAP_AmountOutLow","type":"error"},{"inputs":[],"name":"BEAMSWAP_AmountOutMinZero","type":"error"},{"inputs":[],"name":"BEAMSWAP_BadFeeOrder","type":"error"},{"inputs":[],"name":"BEAMSWAP_EthTransferFailed","type":"error"},{"inputs":[],"name":"BEAMSWAP_Expired","type":"error"},{"inputs":[],"name":"BEAMSWAP_FeeTooHigh","type":"error"},{"inputs":[],"name":"BEAMSWAP_Paused","type":"error"},{"inputs":[],"name":"BEAMSWAP_SwapDataZero","type":"error"},{"inputs":[],"name":"THELP_TransferFailed","type":"error"},{"inputs":[],"name":"THELP_TransferFromFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"SendAdminFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"tokenOut","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"Swap","type":"event"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_executor","outputs":[{"internalType":"contract IBeamswapExectuor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executor","outputs":[{"internalType":"address","name":"executor","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDeposit","outputs":[{"internalType":"address","name":"feeDeposit","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeOn","outputs":[{"internalType":"bool","name":"isFeeOn","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"}],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getStableToken","outputs":[{"internalType":"bool","name":"isStable_","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minFee","outputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"multiSwapEthForTokens","outputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"multiSwapTokensForEth","outputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bytes","name":"swapData","type":"bytes"}],"name":"multiSwapTokensForTokens","outputs":[{"internalType":"uint256","name":"netTokens","type":"uint256"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newExecutor","type":"address"}],"name":"setExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeDeposit","type":"address"}],"name":"setFeeDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minFee_","type":"uint256"},{"internalType":"uint256","name":"maxFee_","type":"uint256"},{"internalType":"uint256","name":"stableFee_","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"isStable_","type":"bool"}],"name":"setStableToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260056002818155600a600355600455805460ff60a01b1916600160a01b1790553480156200003157600080fd5b50604051620028e2380380620028e28339810160408190526200005491620001a4565b6200005f3362000137565b600180546001600160a01b0319908116331782556001600160a01b03938416608052600580549390941692169190911790915560066020527fb90cb5ebb1e4d45d34bcbcc31f8cab1f522991c64aa2003bd190c2261e20fd1f805460ff1990811683179091557fc1aa3f7e4f448bf687821a78dea13d817896a3975a68e16e07850c939b900904805482168317905573ffffffffea09fb06d082fd1275cd48b191cbcd1d6000527f6f3e346997c8a08029bbdbdc0bd38c9b479d6ee67ee0d40e553a1f235e43569580549091169091179055620001dc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019f57600080fd5b919050565b60008060408385031215620001b857600080fd5b620001c38362000187565b9150620001d36020840162000187565b90509250929050565b6080516126a46200023e6000396000818161019f0152818161040f015281816106d70152818161074c0152818161080201528181610879015281816108f3015281816110c7015281816111400152818161119a01526112ef01526126a46000f3fe60806040526004361061018f5760003560e01c80638da5cb5b116100d6578063c34c08e51161007f578063f2fde38b11610059578063f2fde38b146104ae578063fb1a746f146104ce578063fc4064b3146104ee57600080fd5b8063c34c08e514610450578063cec10c111461046e578063d250185c1461048e57600080fd5b8063abca7290116100b0578063abca7290146103df578063ad5c4648146103fd578063b187bd261461043157600080fd5b80638da5cb5b1461037a578063a9b1a08e146103ac578063aa014a45146103bf57600080fd5b80635535240c11610138578063739f08c811610112578063739f08c81461031a5780637a883d6e1461033a578063840f94981461035a57600080fd5b80635535240c146102ac57806357376198146102e5578063715018a61461030557600080fd5b80631c3c0ea8116101695780631c3c0ea81461024c57806324ec75901461026c5780634f335d0a1461028157600080fd5b806301f59d16146101d357806312a6a6d4146101f757806316c38b3c1461022c57600080fd5b366101ce57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101cc576101cc611e3b565b005b600080fd5b3480156101df57600080fd5b506003545b6040519081526020015b60405180910390f35b34801561020357600080fd5b50610217610212366004611ea8565b61050e565b604080519283526020830191909152016101ee565b34801561023857600080fd5b506101cc610247366004611f3c565b610977565b34801561025857600080fd5b506101cc610267366004611f60565b610a0f565b34801561027857600080fd5b506002546101e4565b34801561028d57600080fd5b50600554600160a01b900460ff165b60405190151581526020016101ee565b3480156102b857600080fd5b5061029c6102c7366004611f60565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156102f157600080fd5b506101cc610300366004611f7d565b610abf565b34801561031157600080fd5b506101cc610b39565b34801561032657600080fd5b506101cc610335366004611fa9565b610b9f565b34801561034657600080fd5b506101cc610355366004611f60565b610c17565b34801561036657600080fd5b50610217610375366004611fc2565b610cc7565b34801561038657600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ee565b6102176103ba36600461205a565b611030565b3480156103cb57600080fd5b506101cc6103da3660046120d6565b611366565b3480156103eb57600080fd5b506001546001600160a01b0316610394565b34801561040957600080fd5b506103947f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b50600554600160a81b900460ff1661029c565b34801561045c57600080fd5b506005546001600160a01b0316610394565b34801561047a57600080fd5b506101cc61048936600461210f565b6113eb565b34801561049a57600080fd5b506102176104a936600461213b565b6114d1565b3480156104ba57600080fd5b506101cc6104c9366004611f60565b6114ea565b3480156104da57600080fd5b50600554610394906001600160a01b031681565b3480156104fa57600080fd5b506101cc610509366004611f3c565b6115c9565b6005546000908190600160a81b900460ff161561053e5760405163f199645960e01b815260040160405180910390fd5b84428110156105605760405163368179bd60e21b815260040160405180910390fd5b8660000361058157604051631ca596a360e31b815260040160405180910390fd5b60008490036105a357604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918c16906370a0823190602401602060405180830381865afa1580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610613919061215d565b600554909150610630908c9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a0919061215d565b90506106ac828261218c565b60055460405163b5bd447b60e01b8152919b506001600160a01b03169063b5bd447b90610707908f907f0000000000000000000000000000000000000000000000000000000000000000908f908f908e908e906004016121a5565b600060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa15801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c1919061215d565b9450888510156107e45760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166107fd5760008561082a565b61082a7f0000000000000000000000000000000000000000000000000000000000000000868b8a8a61179b565b9550935060006001600160a01b038c1615610845578b610847565b335b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018890529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156108c557600080fd5b505af11580156108d9573d6000803e3d6000fd5b505050506108e78187611b1f565b806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168e6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a60405161095f929190918252602082015260400190565b60405180910390a45050505097509795505050505050565b6000546001600160a01b031633146109d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60058054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314610a695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610a905760405163c42313dd60e01b815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b3582610b2f6000546001600160a01b031690565b83611bcb565b5050565b6000546001600160a01b03163314610b935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b9d6000611d01565b565b6000546001600160a01b03163314610bf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610c14610c0e6000546001600160a01b031690565b82611b1f565b50565b6000546001600160a01b03163314610c715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610c985760405163c42313dd60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546000908190600160a81b900460ff1615610cf75760405163f199645960e01b815260040160405180910390fd5b8442811015610d195760405163368179bd60e21b815260040160405180910390fd5b86600003610d3a57604051631ca596a360e31b815260040160405180910390fd5b6000849003610d5c57604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc919061215d565b600554909150610de9908d9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918e16906370a0823190602401602060405180830381865afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061215d565b9050610e65828261218c565b9950600560009054906101000a90046001600160a01b03166001600160a01b031663b5bd447b8e8e8d8d8c8c6040518763ffffffff1660e01b8152600401610eb2969594939291906121a5565b600060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038f1692506370a082319150602401602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c919061215d565b945088851015610f6f5760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610f8857600085610f95565b610f958c868b8a8a61179b565b9550935060006001600160a01b038c1615610fb0578b610fb2565b335b9050610fbf8d8288611bcb565b806001600160a01b03168d6001600160a01b03168f6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a604051611017929190918252602082015260400190565b60405180910390a4505050509850989650505050505050565b6005546000908190600160a81b900460ff16156110605760405163f199645960e01b815260040160405180910390fd5b84428110156110825760405163368179bd60e21b815260040160405180910390fd5b866000036110a357604051631ca596a360e31b815260040160405180910390fd5b60008490036110c557604051635e4ae1ef60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505060055461117293507f000000000000000000000000000000000000000000000000000000000000000092506001600160a01b0316905034611bcb565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b906111cc907f0000000000000000000000000000000000000000000000000000000000000000908d9034908d908c908c906004016121a5565b600060405180830381600087803b1580156111e657600080fd5b505af11580156111fa573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038c1692506370a082319150602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611266919061215d565b9250868310156112895760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166112a2576000836112af565b6112af898489888861179b565b9350915060006001600160a01b038916156112ca57886112cc565b335b90506112d98a8286611bcb565b806001600160a01b03168a6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460623488604051611351929190918252602082015260400190565b60405180910390a45050965096945050505050565b6000546001600160a01b031633146113c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b8183111561147f576040517fac6d9eea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c88211156114a15760405163bd957e8160e01b815260040160405180910390fd5b60c88111156114c35760405163bd957e8160e01b815260040160405180910390fd5b600292909255600355600455565b6000806114de8484611d5e565b915091505b9250929050565b6000546001600160a01b031633146115445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b0381166115c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109cd565b610c1481611d01565b6000546001600160a01b031633146116235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b60058054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916116ee9190612200565b6000604051808303816000865af19150503d806000811461172b576040519150601f19603f3d011682016040523d82523d6000602084013e611730565b606091505b509150915081158061175c57508051158061175a57508080602001905181019061175a919061222f565b155b15611793576040517ff275e43500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6001600160a01b0385166000908152600660205260408120548190819060ff168015611a825760006117cf86880188612445565b805190915060005b81811015611a7e5760008382815181106117f3576117f36125b4565b60209081029190910181015160408101519181015180519193509060005b81811015611a5f57600084828151811061182d5761182d6125b4565b602002602001015190506002600481111561184a5761184a6125ca565b81602001516004811115611860576118606125ca565b0361186f5760019a5050611a5f565b600381602001516004811115611887576118876125ca565b03611a565760008483815181106118a0576118a06125b4565b602002602001015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e91906125e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197491906125e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da91906125fd565b6001600160a01b03841660009081526006602052604090205490915060ff168015611a1d57506001600160a01b03821660009081526006602052604090205460ff165b8015611a3e57508062ffffff166101f41480611a3e57508062ffffff166064145b15611a515760019e505050505050611a5f565b505050505b50600101611811565b508815611a6f5750505050611a7e565b846001019450505050506117d7565b5050505b81158015611a8e575080155b611aa057611a9b88611e01565b611aaa565b611aaa8888611d5e565b90945092508315611b1357600154611acd908a906001600160a01b031686611bcb565b6001546040518581526001600160a01b03918216918b16907f395ff81941e712cde09fc59fc9e9ad438a1890d5756ff72a7d1c1cef24f636739060200160405180910390a35b50509550959350505050565b604080516000808252602082019092526001600160a01b038416908390604051611b499190612200565b60006040518083038185875af1925050503d8060008114611b86576040519150601f19603f3d011682016040523d82523d6000602084013e611b8b565b606091505b5050905080611bc6576040517fc27196ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691611c559190612200565b6000604051808303816000865af19150503d8060008114611c92576040519150601f19603f3d011682016040523d82523d6000602084013e611c97565b606091505b5091509150811580611cc3575080511580611cc1575080806020019051810190611cc1919061222f565b155b15611cfa576040517fe9e9cd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008080611d6c848661218c565b90506000600280611d7d8888612622565b611d879190612635565b611d9384612710612657565b611d9d9190612635565b611da79190612635565b9050600254811015611dbc5750600254611dcb565b600354811115611dcb57506003545b6000612710611dda8389612657565b611de49190612635565b90506000611df2828961218c565b91989197509095505050505050565b600080600061271060045485611e179190612657565b611e219190612635565b90506000611e2f828661218c565b91959194509092505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114610c1457600080fd5b60008083601f840112611e7857600080fd5b50813567ffffffffffffffff811115611e9057600080fd5b6020830191508360208285010111156114e357600080fd5b600080600080600080600060c0888a031215611ec357600080fd5b8735611ece81611e51565b96506020880135611ede81611e51565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611f0f57600080fd5b611f1b8a828b01611e66565b989b979a50959850939692959293505050565b8015158114610c1457600080fd5b600060208284031215611f4e57600080fd5b8135611f5981611f2e565b9392505050565b600060208284031215611f7257600080fd5b8135611f5981611e51565b60008060408385031215611f9057600080fd5b8235611f9b81611e51565b946020939093013593505050565b600060208284031215611fbb57600080fd5b5035919050565b60008060008060008060008060e0898b031215611fde57600080fd5b8835611fe981611e51565b97506020890135611ff981611e51565b9650604089013561200981611e51565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561203a57600080fd5b6120468b828c01611e66565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561207357600080fd5b863561207e81611e51565b9550602087013561208e81611e51565b94506040870135935060608701359250608087013567ffffffffffffffff8111156120b857600080fd5b6120c489828a01611e66565b979a9699509497509295939492505050565b600080604083850312156120e957600080fd5b82356120f481611e51565b9150602083013561210481611f2e565b809150509250929050565b60008060006060848603121561212457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561214e57600080fd5b50508035926020909101359150565b60006020828403121561216f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561219f5761219f612176565b92915050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b6000825160005b818110156122215760208186018101518583015201612207565b506000920191825250919050565b60006020828403121561224157600080fd5b8151611f5981611f2e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156122855761228561224c565b60405290565b6040516060810167ffffffffffffffff811182821017156122855761228561224c565b604051601f8201601f1916810167ffffffffffffffff811182821017156122d7576122d761224c565b604052919050565b600067ffffffffffffffff8211156122f9576122f961224c565b5060051b60200190565b80356005811061231257600080fd5b919050565b6000601f838184011261232957600080fd5b8235602061233e612339836122df565b6122ae565b82815260059290921b8501810191818101908784111561235d57600080fd5b8287015b8481101561243957803567ffffffffffffffff808211156123825760008081fd5b908901906040601f19838d03810182131561239d5760008081fd5b6123a5612262565b88850135848111156123b75760008081fd5b8501603f81018f136123c95760008081fd5b89810135858111156123dd576123dd61224c565b6123ec8b858f840116016122ae565b95508086528f8582840101111561240557600093508384fd5b808583018c88013760009086018b015250838152612424858401612303565b818a0152875250505092840192508301612361565b50979650505050505050565b6000602080838503121561245857600080fd5b823567ffffffffffffffff8082111561247057600080fd5b818501915085601f83011261248457600080fd5b8135612492612339826122df565b81815260059190911b830184019084810190888311156124b157600080fd5b8585015b838110156125a7578035858111156124cc57600080fd5b86016060818c03601f190112156124e257600080fd5b6124ea61228b565b88820135815260408201358781111561250257600080fd5b8201603f81018d1361251357600080fd5b89810135612523612339826122df565b81815260059190911b8201604001908b8101908f83111561254357600080fd5b6040840193505b8284101561256c57833561255d81611e51565b8252928c0192908c019061254a565b848d015250505060608201358781111561258557600080fd5b6125938d8b83860101612317565b6040830152508452509186019186016124b5565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156125f257600080fd5b8151611f5981611e51565b60006020828403121561260f57600080fd5b815162ffffff81168114611f5957600080fd5b8082018082111561219f5761219f612176565b60008261265257634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761219f5761219f61217656fea26469706673582212206698bfd3937f053d01d75ca79eed743b00db53cfa0ca7f25b9037ae041ef820264736f6c63430008130033000000000000000000000000acc15dc74880c9944775448304b263d191c6077f0000000000000000000000006af33d66e7b4c20589b4f103140cb79229793d72

Deployed Bytecode

0x60806040526004361061018f5760003560e01c80638da5cb5b116100d6578063c34c08e51161007f578063f2fde38b11610059578063f2fde38b146104ae578063fb1a746f146104ce578063fc4064b3146104ee57600080fd5b8063c34c08e514610450578063cec10c111461046e578063d250185c1461048e57600080fd5b8063abca7290116100b0578063abca7290146103df578063ad5c4648146103fd578063b187bd261461043157600080fd5b80638da5cb5b1461037a578063a9b1a08e146103ac578063aa014a45146103bf57600080fd5b80635535240c11610138578063739f08c811610112578063739f08c81461031a5780637a883d6e1461033a578063840f94981461035a57600080fd5b80635535240c146102ac57806357376198146102e5578063715018a61461030557600080fd5b80631c3c0ea8116101695780631c3c0ea81461024c57806324ec75901461026c5780634f335d0a1461028157600080fd5b806301f59d16146101d357806312a6a6d4146101f757806316c38b3c1461022c57600080fd5b366101ce57336001600160a01b037f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f16146101cc576101cc611e3b565b005b600080fd5b3480156101df57600080fd5b506003545b6040519081526020015b60405180910390f35b34801561020357600080fd5b50610217610212366004611ea8565b61050e565b604080519283526020830191909152016101ee565b34801561023857600080fd5b506101cc610247366004611f3c565b610977565b34801561025857600080fd5b506101cc610267366004611f60565b610a0f565b34801561027857600080fd5b506002546101e4565b34801561028d57600080fd5b50600554600160a01b900460ff165b60405190151581526020016101ee565b3480156102b857600080fd5b5061029c6102c7366004611f60565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156102f157600080fd5b506101cc610300366004611f7d565b610abf565b34801561031157600080fd5b506101cc610b39565b34801561032657600080fd5b506101cc610335366004611fa9565b610b9f565b34801561034657600080fd5b506101cc610355366004611f60565b610c17565b34801561036657600080fd5b50610217610375366004611fc2565b610cc7565b34801561038657600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ee565b6102176103ba36600461205a565b611030565b3480156103cb57600080fd5b506101cc6103da3660046120d6565b611366565b3480156103eb57600080fd5b506001546001600160a01b0316610394565b34801561040957600080fd5b506103947f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f81565b34801561043d57600080fd5b50600554600160a81b900460ff1661029c565b34801561045c57600080fd5b506005546001600160a01b0316610394565b34801561047a57600080fd5b506101cc61048936600461210f565b6113eb565b34801561049a57600080fd5b506102176104a936600461213b565b6114d1565b3480156104ba57600080fd5b506101cc6104c9366004611f60565b6114ea565b3480156104da57600080fd5b50600554610394906001600160a01b031681565b3480156104fa57600080fd5b506101cc610509366004611f3c565b6115c9565b6005546000908190600160a81b900460ff161561053e5760405163f199645960e01b815260040160405180910390fd5b84428110156105605760405163368179bd60e21b815260040160405180910390fd5b8660000361058157604051631ca596a360e31b815260040160405180910390fd5b60008490036105a357604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918c16906370a0823190602401602060405180830381865afa1580156105ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610613919061215d565b600554909150610630908c9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa15801561067c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a0919061215d565b90506106ac828261218c565b60055460405163b5bd447b60e01b8152919b506001600160a01b03169063b5bd447b90610707908f907f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f908f908f908e908e906004016121a5565b600060405180830381600087803b15801561072157600080fd5b505af1158015610735573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201527f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031692506370a082319150602401602060405180830381865afa15801561079d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c1919061215d565b9450888510156107e45760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166107fd5760008561082a565b61082a7f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f868b8a8a61179b565b9550935060006001600160a01b038c1615610845578b610847565b335b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018890529091507f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156108c557600080fd5b505af11580156108d9573d6000803e3d6000fd5b505050506108e78187611b1f565b806001600160a01b03167f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b03168e6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a60405161095f929190918252602082015260400190565b60405180910390a45050505097509795505050505050565b6000546001600160a01b031633146109d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60058054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b03163314610a695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610a905760405163c42313dd60e01b815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610b195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b3582610b2f6000546001600160a01b031690565b83611bcb565b5050565b6000546001600160a01b03163314610b935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610b9d6000611d01565b565b6000546001600160a01b03163314610bf95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b610c14610c0e6000546001600160a01b031690565b82611b1f565b50565b6000546001600160a01b03163314610c715760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b038116610c985760405163c42313dd60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546000908190600160a81b900460ff1615610cf75760405163f199645960e01b815260040160405180910390fd5b8442811015610d195760405163368179bd60e21b815260040160405180910390fd5b86600003610d3a57604051631ca596a360e31b815260040160405180910390fd5b6000849003610d5c57604051635e4ae1ef60e01b815260040160405180910390fd5b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918d16906370a0823190602401602060405180830381865afa158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcc919061215d565b600554909150610de9908d9033906001600160a01b03168c61165c565b6005546040516370a0823160e01b81526001600160a01b0391821660048201526000918e16906370a0823190602401602060405180830381865afa158015610e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e59919061215d565b9050610e65828261218c565b9950600560009054906101000a90046001600160a01b03166001600160a01b031663b5bd447b8e8e8d8d8c8c6040518763ffffffff1660e01b8152600401610eb2969594939291906121a5565b600060405180830381600087803b158015610ecc57600080fd5b505af1158015610ee0573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038f1692506370a082319150602401602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c919061215d565b945088851015610f6f5760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610f8857600085610f95565b610f958c868b8a8a61179b565b9550935060006001600160a01b038c1615610fb0578b610fb2565b335b9050610fbf8d8288611bcb565b806001600160a01b03168d6001600160a01b03168f6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460628e8a604051611017929190918252602082015260400190565b60405180910390a4505050509850989650505050505050565b6005546000908190600160a81b900460ff16156110605760405163f199645960e01b815260040160405180910390fd5b84428110156110825760405163368179bd60e21b815260040160405180910390fd5b866000036110a357604051631ca596a360e31b815260040160405180910390fd5b60008490036110c557604051635e4ae1ef60e01b815260040160405180910390fd5b7f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505060055461117293507f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f92506001600160a01b0316905034611bcb565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b906111cc907f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f908d9034908d908c908c906004016121a5565b600060405180830381600087803b1580156111e657600080fd5b505af11580156111fa573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038c1692506370a082319150602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611266919061215d565b9250868310156112895760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff166112a2576000836112af565b6112af898489888861179b565b9350915060006001600160a01b038916156112ca57886112cc565b335b90506112d98a8286611bcb565b806001600160a01b03168a6001600160a01b03167f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b03167fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e460623488604051611351929190918252602082015260400190565b60405180910390a45050965096945050505050565b6000546001600160a01b031633146113c05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146114455760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b8183111561147f576040517fac6d9eea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c88211156114a15760405163bd957e8160e01b815260040160405180910390fd5b60c88111156114c35760405163bd957e8160e01b815260040160405180910390fd5b600292909255600355600455565b6000806114de8484611d5e565b915091505b9250929050565b6000546001600160a01b031633146115445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b6001600160a01b0381166115c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109cd565b610c1481611d01565b6000546001600160a01b031633146116235760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109cd565b60058054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916116ee9190612200565b6000604051808303816000865af19150503d806000811461172b576040519150601f19603f3d011682016040523d82523d6000602084013e611730565b606091505b509150915081158061175c57508051158061175a57508080602001905181019061175a919061222f565b155b15611793576040517ff275e43500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6001600160a01b0385166000908152600660205260408120548190819060ff168015611a825760006117cf86880188612445565b805190915060005b81811015611a7e5760008382815181106117f3576117f36125b4565b60209081029190910181015160408101519181015180519193509060005b81811015611a5f57600084828151811061182d5761182d6125b4565b602002602001015190506002600481111561184a5761184a6125ca565b81602001516004811115611860576118606125ca565b0361186f5760019a5050611a5f565b600381602001516004811115611887576118876125ca565b03611a565760008483815181106118a0576118a06125b4565b602002602001015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190e91906125e0565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197491906125e0565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da91906125fd565b6001600160a01b03841660009081526006602052604090205490915060ff168015611a1d57506001600160a01b03821660009081526006602052604090205460ff165b8015611a3e57508062ffffff166101f41480611a3e57508062ffffff166064145b15611a515760019e505050505050611a5f565b505050505b50600101611811565b508815611a6f5750505050611a7e565b846001019450505050506117d7565b5050505b81158015611a8e575080155b611aa057611a9b88611e01565b611aaa565b611aaa8888611d5e565b90945092508315611b1357600154611acd908a906001600160a01b031686611bcb565b6001546040518581526001600160a01b03918216918b16907f395ff81941e712cde09fc59fc9e9ad438a1890d5756ff72a7d1c1cef24f636739060200160405180910390a35b50509550959350505050565b604080516000808252602082019092526001600160a01b038416908390604051611b499190612200565b60006040518083038185875af1925050503d8060008114611b86576040519150601f19603f3d011682016040523d82523d6000602084013e611b8b565b606091505b5050905080611bc6576040517fc27196ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790529151600092839290871691611c559190612200565b6000604051808303816000865af19150503d8060008114611c92576040519150601f19603f3d011682016040523d82523d6000602084013e611c97565b606091505b5091509150811580611cc3575080511580611cc1575080806020019051810190611cc1919061222f565b155b15611cfa576040517fe9e9cd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008080611d6c848661218c565b90506000600280611d7d8888612622565b611d879190612635565b611d9384612710612657565b611d9d9190612635565b611da79190612635565b9050600254811015611dbc5750600254611dcb565b600354811115611dcb57506003545b6000612710611dda8389612657565b611de49190612635565b90506000611df2828961218c565b91989197509095505050505050565b600080600061271060045485611e179190612657565b611e219190612635565b90506000611e2f828661218c565b91959194509092505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114610c1457600080fd5b60008083601f840112611e7857600080fd5b50813567ffffffffffffffff811115611e9057600080fd5b6020830191508360208285010111156114e357600080fd5b600080600080600080600060c0888a031215611ec357600080fd5b8735611ece81611e51565b96506020880135611ede81611e51565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611f0f57600080fd5b611f1b8a828b01611e66565b989b979a50959850939692959293505050565b8015158114610c1457600080fd5b600060208284031215611f4e57600080fd5b8135611f5981611f2e565b9392505050565b600060208284031215611f7257600080fd5b8135611f5981611e51565b60008060408385031215611f9057600080fd5b8235611f9b81611e51565b946020939093013593505050565b600060208284031215611fbb57600080fd5b5035919050565b60008060008060008060008060e0898b031215611fde57600080fd5b8835611fe981611e51565b97506020890135611ff981611e51565b9650604089013561200981611e51565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff81111561203a57600080fd5b6120468b828c01611e66565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561207357600080fd5b863561207e81611e51565b9550602087013561208e81611e51565b94506040870135935060608701359250608087013567ffffffffffffffff8111156120b857600080fd5b6120c489828a01611e66565b979a9699509497509295939492505050565b600080604083850312156120e957600080fd5b82356120f481611e51565b9150602083013561210481611f2e565b809150509250929050565b60008060006060848603121561212457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561214e57600080fd5b50508035926020909101359150565b60006020828403121561216f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561219f5761219f612176565b92915050565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b6000825160005b818110156122215760208186018101518583015201612207565b506000920191825250919050565b60006020828403121561224157600080fd5b8151611f5981611f2e565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156122855761228561224c565b60405290565b6040516060810167ffffffffffffffff811182821017156122855761228561224c565b604051601f8201601f1916810167ffffffffffffffff811182821017156122d7576122d761224c565b604052919050565b600067ffffffffffffffff8211156122f9576122f961224c565b5060051b60200190565b80356005811061231257600080fd5b919050565b6000601f838184011261232957600080fd5b8235602061233e612339836122df565b6122ae565b82815260059290921b8501810191818101908784111561235d57600080fd5b8287015b8481101561243957803567ffffffffffffffff808211156123825760008081fd5b908901906040601f19838d03810182131561239d5760008081fd5b6123a5612262565b88850135848111156123b75760008081fd5b8501603f81018f136123c95760008081fd5b89810135858111156123dd576123dd61224c565b6123ec8b858f840116016122ae565b95508086528f8582840101111561240557600093508384fd5b808583018c88013760009086018b015250838152612424858401612303565b818a0152875250505092840192508301612361565b50979650505050505050565b6000602080838503121561245857600080fd5b823567ffffffffffffffff8082111561247057600080fd5b818501915085601f83011261248457600080fd5b8135612492612339826122df565b81815260059190911b830184019084810190888311156124b157600080fd5b8585015b838110156125a7578035858111156124cc57600080fd5b86016060818c03601f190112156124e257600080fd5b6124ea61228b565b88820135815260408201358781111561250257600080fd5b8201603f81018d1361251357600080fd5b89810135612523612339826122df565b81815260059190911b8201604001908b8101908f83111561254357600080fd5b6040840193505b8284101561256c57833561255d81611e51565b8252928c0192908c019061254a565b848d015250505060608201358781111561258557600080fd5b6125938d8b83860101612317565b6040830152508452509186019186016124b5565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156125f257600080fd5b8151611f5981611e51565b60006020828403121561260f57600080fd5b815162ffffff81168114611f5957600080fd5b8082018082111561219f5761219f612176565b60008261265257634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761219f5761219f61217656fea26469706673582212206698bfd3937f053d01d75ca79eed743b00db53cfa0ca7f25b9037ae041ef820264736f6c63430008130033

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

000000000000000000000000acc15dc74880c9944775448304b263d191c6077f0000000000000000000000006af33d66e7b4c20589b4f103140cb79229793d72

-----Decoded View---------------
Arg [0] : WETH_ (address): 0xAcc15dC74880C9944775448304B263D191c6077F
Arg [1] : executor_ (address): 0x6af33d66E7b4c20589B4F103140cb79229793D72

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
Arg [1] : 0000000000000000000000006af33d66e7b4c20589b4f103140cb79229793d72


Block Transaction Gas Used Reward
view all blocks collator

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.