GLMR Price: $0.077589 (+10.18%)

Contract

0x501AeB9eA374608C1222addfA9619df88d8B7fF7

Overview

GLMR Balance

Moonbeam Chain LogoMoonbeam Chain LogoMoonbeam Chain Logo0 GLMR

GLMR Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Multi Swap Eth F...59407622024-04-14 8:15:06374 days ago1713082506IN
0x501AeB9e...88d8B7fF7
2,600 GLMR0.377586631,167.40860588
Multi Swap Token...59371732024-04-13 20:07:30374 days ago1713038850IN
0x501AeB9e...88d8B7fF7
0 GLMR1.639125,000
Multi Swap Token...59364872024-04-13 17:47:48374 days ago1713030468IN
0x501AeB9e...88d8B7fF7
0 GLMR0.32352665999.62506077
Multi Swap Token...59364852024-04-13 17:47:24374 days ago1713030444IN
0x501AeB9e...88d8B7fF7
0 GLMR0.12445615375.7053597
Multi Swap Token...59364732024-04-13 17:45:00374 days ago1713030300IN
0x501AeB9e...88d8B7fF7
0 GLMR1.629845,000
Multi Swap Token...59364712024-04-13 17:44:36374 days ago1713030276IN
0x501AeB9e...88d8B7fF7
0 GLMR1.618245,000
Multi Swap Token...59364692024-04-13 17:44:12374 days ago1713030252IN
0x501AeB9e...88d8B7fF7
0 GLMR1.618245,000
Multi Swap Eth F...59364582024-04-13 17:42:00374 days ago1713030120IN
0x501AeB9e...88d8B7fF7
600 GLMR0.16762482518.25633494
Multi Swap Eth F...59364562024-04-13 17:41:36374 days ago1713030096IN
0x501AeB9e...88d8B7fF7
600 GLMR0.16589391512.90476211
Multi Swap Eth F...59364532024-04-13 17:41:00374 days ago1713030060IN
0x501AeB9e...88d8B7fF7
800 GLMR0.21844406652.25095596
Multi Swap Eth F...59363952024-04-13 17:29:18374 days ago1713029358IN
0x501AeB9e...88d8B7fF7
2,200 GLMR0.509487311,577.47732507
Multi Swap Eth F...59363932024-04-13 17:28:54374 days ago1713029334IN
0x501AeB9e...88d8B7fF7
800 GLMR0.21710369672.19761968
Multi Swap Eth F...59362582024-04-13 17:01:18374 days ago1713027678IN
0x501AeB9e...88d8B7fF7
1,200 GLMR0.31236398967.14302909
Multi Swap Token...59357632024-04-13 15:21:12374 days ago1713021672IN
0x501AeB9e...88d8B7fF7
0 GLMR0.13172473407
Multi Swap Token...58792312024-04-05 15:37:24382 days ago1712331444IN
0x501AeB9e...88d8B7fF7
0 GLMR0.11764535355.14506281
Multi Swap Eth F...58781962024-04-05 12:07:12382 days ago1712318832IN
0x501AeB9e...88d8B7fF7
1,600 GLMR0.324579641,003.52350255
Multi Swap Eth F...58781942024-04-05 12:06:48382 days ago1712318808IN
0x501AeB9e...88d8B7fF7
1,600 GLMR0.409749191,223.46791681
Multi Swap Eth F...58781922024-04-05 12:06:24382 days ago1712318784IN
0x501AeB9e...88d8B7fF7
1,600 GLMR0.376245861,123.43051447
Multi Swap Token...58777682024-04-05 10:37:48382 days ago1712313468IN
0x501AeB9e...88d8B7fF7
0 GLMR0.11714891354.14248567
Multi Swap Token...58745562024-04-04 23:41:18383 days ago1712274078IN
0x501AeB9e...88d8B7fF7
0 GLMR0.371371151,122.65913597
Multi Swap Token...58745542024-04-04 23:40:54383 days ago1712274054IN
0x501AeB9e...88d8B7fF7
0 GLMR0.751447782,321.80574295
Multi Swap Token...58728312024-04-04 17:52:54383 days ago1712253174IN
0x501AeB9e...88d8B7fF7
0 GLMR0.21472819649.12574315
Multi Swap Token...58728282024-04-04 17:52:18383 days ago1712253138IN
0x501AeB9e...88d8B7fF7
0 GLMR0.11999874362.24944143
Multi Swap Token...58728252024-04-04 17:51:42383 days ago1712253102IN
0x501AeB9e...88d8B7fF7
0 GLMR0.11989444362.44223861
Multi Swap Token...58727502024-04-04 17:36:42383 days ago1712252202IN
0x501AeB9e...88d8B7fF7
0 GLMR0.16890634510.60576336
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
59407622024-04-14 8:15:06374 days ago1713082506
0x501AeB9e...88d8B7fF7
2,600 GLMR
59364852024-04-13 17:47:24374 days ago1713030444
0x501AeB9e...88d8B7fF7
600.82642498 GLMR
59364852024-04-13 17:47:24374 days ago1713030444
0x501AeB9e...88d8B7fF7
600.82642498 GLMR
59364582024-04-13 17:42:00374 days ago1713030120
0x501AeB9e...88d8B7fF7
600 GLMR
59364562024-04-13 17:41:36374 days ago1713030096
0x501AeB9e...88d8B7fF7
600 GLMR
59364532024-04-13 17:41:00374 days ago1713030060
0x501AeB9e...88d8B7fF7
800 GLMR
59363952024-04-13 17:29:18374 days ago1713029358
0x501AeB9e...88d8B7fF7
2,200 GLMR
59363932024-04-13 17:28:54374 days ago1713029334
0x501AeB9e...88d8B7fF7
800 GLMR
59362582024-04-13 17:01:18374 days ago1713027678
0x501AeB9e...88d8B7fF7
1,200 GLMR
58792312024-04-05 15:37:24382 days ago1712331444
0x501AeB9e...88d8B7fF7
600.44899881 GLMR
58792312024-04-05 15:37:24382 days ago1712331444
0x501AeB9e...88d8B7fF7
600.44899881 GLMR
58781962024-04-05 12:07:12382 days ago1712318832
0x501AeB9e...88d8B7fF7
1,600 GLMR
58781942024-04-05 12:06:48382 days ago1712318808
0x501AeB9e...88d8B7fF7
1,600 GLMR
58781922024-04-05 12:06:24382 days ago1712318784
0x501AeB9e...88d8B7fF7
1,600 GLMR
58777682024-04-05 10:37:48382 days ago1712313468
0x501AeB9e...88d8B7fF7
600.38550583 GLMR
58777682024-04-05 10:37:48382 days ago1712313468
0x501AeB9e...88d8B7fF7
600.38550583 GLMR
58745562024-04-04 23:41:18383 days ago1712274078
0x501AeB9e...88d8B7fF7
2,798.67443988 GLMR
58745562024-04-04 23:41:18383 days ago1712274078
0x501AeB9e...88d8B7fF7
2,798.67443988 GLMR
58728312024-04-04 17:52:54383 days ago1712253174
0x501AeB9e...88d8B7fF7
1,400.13347983 GLMR
58728312024-04-04 17:52:54383 days ago1712253174
0x501AeB9e...88d8B7fF7
1,400.13347983 GLMR
58728282024-04-04 17:52:18383 days ago1712253138
0x501AeB9e...88d8B7fF7
600.37566198 GLMR
58728282024-04-04 17:52:18383 days ago1712253138
0x501AeB9e...88d8B7fF7
600.37566198 GLMR
58728252024-04-04 17:51:42383 days ago1712253102
0x501AeB9e...88d8B7fF7
601.72930492 GLMR
58728252024-04-04 17:51:42383 days ago1712253102
0x501AeB9e...88d8B7fF7
601.72930492 GLMR
58727502024-04-04 17:36:42383 days ago1712252202
0x501AeB9e...88d8B7fF7
1,000.84013864 GLMR
View All Internal 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
File 1 of 9 : BeamswapHybridRouter.sol
// 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;
    uint256 private _maxFee;
    uint256 private _stableFee = 2;
    uint256 private constant feeCap = 200;

    address public immutable WETH;
    IBeamswapExectuor public _executor;

    bool private _feeOn;
    bool private _paused;

    mapping(address => bool) internal isStable;

    constructor(address WETH_, address executor_) {
        _feeDeposit = msg.sender;
        _minFee = 5;
        _maxFee = 10;
        WETH = WETH_;
        _executor = IBeamswapExectuor(executor_);
        _feeOn = true;
        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();
        _;
    }

    /**
     * @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);
    }

    /**
     * @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();

        // Initial transfer of tokens from user
        TransferHelper.safeTransferFrom(
            tokenIn,
            msg.sender,
            address(_executor),
            amountIn
        );

        _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);
    }

    /**
     * @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

        TransferHelper.safeTransferFrom(
            tokenIn,
            msg.sender,
            address(_executor),
            amountIn
        );

        _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);
    }

    // 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);
        }
    }

    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
    }
}

File 2 of 9 : Ownable.sol
// 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);
    }
}

File 3 of 9 : Context.sol
// 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;
    }
}

File 4 of 9 : IBeamswapV3Pool.sol
// 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;
}

File 7 of 9 : IEERC20.sol
// 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);
}

File 8 of 9 : IWETH.sol
// 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;
}

File 9 of 9 : TransferHelper.sol
// 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"},{"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"}]

60a060405260026004553480156200001657600080fd5b50604051620025333803806200253383398101604081905262000039916200019f565b620000443362000132565b600180546001600160a01b0319163317815560056002819055600a6003556001600160a01b0393841660805280546001600160a81b0319169290931691909117600160a01b1790915560066020527fb90cb5ebb1e4d45d34bcbcc31f8cab1f522991c64aa2003bd190c2261e20fd1f805460ff1990811683179091557fc1aa3f7e4f448bf687821a78dea13d817896a3975a68e16e07850c939b900904805482168317905573ffffffffea09fb06d082fd1275cd48b191cbcd1d6000527f6f3e346997c8a08029bbdbdc0bd38c9b479d6ee67ee0d40e553a1f235e43569580549091169091179055620001d7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200019a57600080fd5b919050565b60008060408385031215620001b357600080fd5b620001be8362000182565b9150620001ce6020840162000182565b90509250929050565b6080516123086200022b6000396000818161019f0152818161040f015281816105e70152818161065c015281816107120152818161078901528181610df101528181610e6a0152610ec401526123086000f3fe60806040526004361061018f5760003560e01c80638da5cb5b116100d6578063c34c08e51161007f578063f2fde38b11610059578063f2fde38b146104ae578063fb1a746f146104ce578063fc4064b3146104ee57600080fd5b8063c34c08e514610450578063cec10c111461046e578063d250185c1461048e57600080fd5b8063abca7290116100b0578063abca7290146103df578063ad5c4648146103fd578063b187bd261461043157600080fd5b80638da5cb5b1461037a578063a9b1a08e146103ac578063aa014a45146103bf57600080fd5b80635535240c11610138578063739f08c811610112578063739f08c81461031a5780637a883d6e1461033a578063840f94981461035a57600080fd5b80635535240c146102ac57806357376198146102e5578063715018a61461030557600080fd5b80631c3c0ea8116101695780631c3c0ea81461024c57806324ec75901461026c5780634f335d0a1461028157600080fd5b806301f59d16146101d357806312a6a6d4146101f757806316c38b3c1461022c57600080fd5b366101ce57336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101cc576101cc611a9f565b005b600080fd5b3480156101df57600080fd5b506003545b6040519081526020015b60405180910390f35b34801561020357600080fd5b50610217610212366004611b0c565b61050e565b604080519283526020830191909152016101ee565b34801561023857600080fd5b506101cc610247366004611ba0565b610805565b34801561025857600080fd5b506101cc610267366004611bc4565b61089d565b34801561027857600080fd5b506002546101e4565b34801561028d57600080fd5b50600554600160a01b900460ff165b60405190151581526020016101ee565b3480156102b857600080fd5b5061029c6102c7366004611bc4565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156102f157600080fd5b506101cc610300366004611be1565b61094d565b34801561031157600080fd5b506101cc6109c7565b34801561032657600080fd5b506101cc610335366004611c0d565b610a2d565b34801561034657600080fd5b506101cc610355366004611bc4565b610aa5565b34801561036657600080fd5b50610217610375366004611c26565b610b55565b34801561038657600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ee565b6102176103ba366004611cbe565b610d5a565b3480156103cb57600080fd5b506101cc6103da366004611d3a565b611010565b3480156103eb57600080fd5b506001546001600160a01b0316610394565b34801561040957600080fd5b506103947f000000000000000000000000000000000000000000000000000000000000000081565b34801561043d57600080fd5b50600554600160a81b900460ff1661029c565b34801561045c57600080fd5b506005546001600160a01b0316610394565b34801561047a57600080fd5b506101cc610489366004611d73565b611095565b34801561049a57600080fd5b506102176104a9366004611d9f565b61117b565b3480156104ba57600080fd5b506101cc6104c9366004611bc4565b611194565b3480156104da57600080fd5b50600554610394906001600160a01b031681565b3480156104fa57600080fd5b506101cc610509366004611ba0565b611273565b6005546000908190600160a81b900460ff161561053e5760405163f199645960e01b815260040160405180910390fd5b84428110156105605760405163368179bd60e21b815260040160405180910390fd5b8660000361058157604051631ca596a360e31b815260040160405180910390fd5b60008490036105a357604051635e4ae1ef60e01b815260040160405180910390fd5b6005546105bd908b9033906001600160a01b03168b611306565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b90610617908d907f0000000000000000000000000000000000000000000000000000000000000000908d908d908c908c90600401611dc1565b600060405180830381600087803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506370a082319150602401602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d19190611e1c565b9250868310156106f45760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff1661070d5760008361073a565b61073a7f000000000000000000000000000000000000000000000000000000000000000084898888611445565b9350915060006001600160a01b038a16156107555789610757565b335b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018690529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b505050506107f78185611783565b505097509795505050505050565b6000546001600160a01b031633146108645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60058054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146108f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b03811661091e5760405163c42313dd60e01b815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6109c3826109bd6000546001600160a01b031690565b8361182f565b5050565b6000546001600160a01b03163314610a215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b610a2b6000611965565b565b6000546001600160a01b03163314610a875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b610aa2610a9c6000546001600160a01b031690565b82611783565b50565b6000546001600160a01b03163314610aff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b038116610b265760405163c42313dd60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546000908190600160a81b900460ff1615610b855760405163f199645960e01b815260040160405180910390fd5b8442811015610ba75760405163368179bd60e21b815260040160405180910390fd5b86600003610bc857604051631ca596a360e31b815260040160405180910390fd5b6000849003610bea57604051635e4ae1ef60e01b815260040160405180910390fd5b600554610c04908c9033906001600160a01b03168b611306565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b90610c3e908e908e908d908d908c908c90600401611dc1565b600060405180830381600087803b158015610c5857600080fd5b505af1158015610c6c573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038d1692506370a082319150602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd89190611e1c565b925086831015610cfb5760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610d1457600083610d21565b610d218a84898888611445565b9350915060006001600160a01b038a1615610d3c5789610d3e565b335b9050610d4b8b828661182f565b50509850989650505050505050565b6005546000908190600160a81b900460ff1615610d8a5760405163f199645960e01b815260040160405180910390fd5b8442811015610dac5760405163368179bd60e21b815260040160405180910390fd5b86600003610dcd57604051631ca596a360e31b815260040160405180910390fd5b6000849003610def57604051635e4ae1ef60e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b5050600554610e9c93507f000000000000000000000000000000000000000000000000000000000000000092506001600160a01b031690503461182f565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b90610ef6907f0000000000000000000000000000000000000000000000000000000000000000908d9034908d908c908c90600401611dc1565b600060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038c1692506370a082319150602401602060405180830381865afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190611e1c565b925086831015610fb35760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610fcc57600083610fd9565b610fd98984898888611445565b9350915060006001600160a01b03891615610ff45788610ff6565b335b90506110038a828661182f565b5050965096945050505050565b6000546001600160a01b0316331461106a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b81831115611129576040517fac6d9eea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c882111561114b5760405163bd957e8160e01b815260040160405180910390fd5b60c881111561116d5760405163bd957e8160e01b815260040160405180910390fd5b600292909255600355600455565b60008061118884846119c2565b915091505b9250929050565b6000546001600160a01b031633146111ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b03811661126a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161085b565b610aa281611965565b6000546001600160a01b031633146112cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b60058054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916113989190611e35565b6000604051808303816000865af19150503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b50915091508115806114065750805115806114045750808060200190518101906114049190611e64565b155b1561143d576040517ff275e43500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6001600160a01b0385166000908152600660205260408120548190819060ff16801561172c5760006114798688018861207a565b805190915060005b8181101561172857600083828151811061149d5761149d6121e9565b60209081029190910181015160408101519181015180519193509060005b818110156117095760008482815181106114d7576114d76121e9565b60200260200101519050600260048111156114f4576114f46121ff565b8160200151600481111561150a5761150a6121ff565b036115195760019a5050611709565b600381602001516004811115611531576115316121ff565b0361170057600084838151811061154a5761154a6121e9565b602002602001015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b89190612215565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612215565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190612232565b6001600160a01b03841660009081526006602052604090205490915060ff1680156116c757506001600160a01b03821660009081526006602052604090205460ff165b80156116e857508062ffffff166101f414806116e857508062ffffff166064145b156116fb5760019e505050505050611709565b505050505b506001016114bb565b5088156117195750505050611728565b84600101945050505050611481565b5050505b81158015611738575080155b61174a5761174588611a65565b611754565b61175488886119c2565b9094509250831561177757600154611777908a906001600160a01b03168661182f565b50509550959350505050565b604080516000808252602082019092526001600160a01b0384169083906040516117ad9190611e35565b60006040518083038185875af1925050503d80600081146117ea576040519150601f19603f3d011682016040523d82523d6000602084013e6117ef565b606091505b505090508061182a576040517fc27196ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916118b99190611e35565b6000604051808303816000865af19150503d80600081146118f6576040519150601f19603f3d011682016040523d82523d6000602084013e6118fb565b606091505b50915091508115806119275750805115806119255750808060200190518101906119259190611e64565b155b1561195e576040517fe9e9cd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080806119d0848661226d565b905060006002806119e18888612286565b6119eb9190612299565b6119f7846127106122bb565b611a019190612299565b611a0b9190612299565b9050600254811015611a205750600254611a2f565b600354811115611a2f57506003545b6000612710611a3e83896122bb565b611a489190612299565b90506000611a56828961226d565b91989197509095505050505050565b600080600061271060045485611a7b91906122bb565b611a859190612299565b90506000611a93828661226d565b91959194509092505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114610aa257600080fd5b60008083601f840112611adc57600080fd5b50813567ffffffffffffffff811115611af457600080fd5b60208301915083602082850101111561118d57600080fd5b600080600080600080600060c0888a031215611b2757600080fd5b8735611b3281611ab5565b96506020880135611b4281611ab5565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611b7357600080fd5b611b7f8a828b01611aca565b989b979a50959850939692959293505050565b8015158114610aa257600080fd5b600060208284031215611bb257600080fd5b8135611bbd81611b92565b9392505050565b600060208284031215611bd657600080fd5b8135611bbd81611ab5565b60008060408385031215611bf457600080fd5b8235611bff81611ab5565b946020939093013593505050565b600060208284031215611c1f57600080fd5b5035919050565b60008060008060008060008060e0898b031215611c4257600080fd5b8835611c4d81611ab5565b97506020890135611c5d81611ab5565b96506040890135611c6d81611ab5565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115611c9e57600080fd5b611caa8b828c01611aca565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611cd757600080fd5b8635611ce281611ab5565b95506020870135611cf281611ab5565b94506040870135935060608701359250608087013567ffffffffffffffff811115611d1c57600080fd5b611d2889828a01611aca565b979a9699509497509295939492505050565b60008060408385031215611d4d57600080fd5b8235611d5881611ab5565b91506020830135611d6881611b92565b809150509250929050565b600080600060608486031215611d8857600080fd5b505081359360208301359350604090920135919050565b60008060408385031215611db257600080fd5b50508035926020909101359150565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b600060208284031215611e2e57600080fd5b5051919050565b6000825160005b81811015611e565760208186018101518583015201611e3c565b506000920191825250919050565b600060208284031215611e7657600080fd5b8151611bbd81611b92565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611eba57611eba611e81565b60405290565b6040516060810167ffffffffffffffff81118282101715611eba57611eba611e81565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f0c57611f0c611e81565b604052919050565b600067ffffffffffffffff821115611f2e57611f2e611e81565b5060051b60200190565b803560058110611f4757600080fd5b919050565b6000601f8381840112611f5e57600080fd5b82356020611f73611f6e83611f14565b611ee3565b82815260059290921b85018101918181019087841115611f9257600080fd5b8287015b8481101561206e57803567ffffffffffffffff80821115611fb75760008081fd5b908901906040601f19838d038101821315611fd25760008081fd5b611fda611e97565b8885013584811115611fec5760008081fd5b8501603f81018f13611ffe5760008081fd5b898101358581111561201257612012611e81565b6120218b858f84011601611ee3565b95508086528f8582840101111561203a57600093508384fd5b808583018c88013760009086018b015250838152612059858401611f38565b818a0152875250505092840192508301611f96565b50979650505050505050565b6000602080838503121561208d57600080fd5b823567ffffffffffffffff808211156120a557600080fd5b818501915085601f8301126120b957600080fd5b81356120c7611f6e82611f14565b81815260059190911b830184019084810190888311156120e657600080fd5b8585015b838110156121dc5780358581111561210157600080fd5b86016060818c03601f1901121561211757600080fd5b61211f611ec0565b88820135815260408201358781111561213757600080fd5b8201603f81018d1361214857600080fd5b89810135612158611f6e82611f14565b81815260059190911b8201604001908b8101908f83111561217857600080fd5b6040840193505b828410156121a157833561219281611ab5565b8252928c0192908c019061217f565b848d01525050506060820135878111156121ba57600080fd5b6121c88d8b83860101611f4c565b6040830152508452509186019186016120ea565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60006020828403121561222757600080fd5b8151611bbd81611ab5565b60006020828403121561224457600080fd5b815162ffffff81168114611bbd57600080fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561228057612280612257565b92915050565b8082018082111561228057612280612257565b6000826122b657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176122805761228061225756fea2646970667358221220569827af3004d674f94ab19fd27f7db6355e409144d0bf92ba343cf6d5f7e4c664736f6c63430008130033000000000000000000000000acc15dc74880c9944775448304b263d191c6077f00000000000000000000000015a5d31a64dc779a416e025882bce52022bab6d1

Deployed Bytecode

0x60806040526004361061018f5760003560e01c80638da5cb5b116100d6578063c34c08e51161007f578063f2fde38b11610059578063f2fde38b146104ae578063fb1a746f146104ce578063fc4064b3146104ee57600080fd5b8063c34c08e514610450578063cec10c111461046e578063d250185c1461048e57600080fd5b8063abca7290116100b0578063abca7290146103df578063ad5c4648146103fd578063b187bd261461043157600080fd5b80638da5cb5b1461037a578063a9b1a08e146103ac578063aa014a45146103bf57600080fd5b80635535240c11610138578063739f08c811610112578063739f08c81461031a5780637a883d6e1461033a578063840f94981461035a57600080fd5b80635535240c146102ac57806357376198146102e5578063715018a61461030557600080fd5b80631c3c0ea8116101695780631c3c0ea81461024c57806324ec75901461026c5780634f335d0a1461028157600080fd5b806301f59d16146101d357806312a6a6d4146101f757806316c38b3c1461022c57600080fd5b366101ce57336001600160a01b037f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f16146101cc576101cc611a9f565b005b600080fd5b3480156101df57600080fd5b506003545b6040519081526020015b60405180910390f35b34801561020357600080fd5b50610217610212366004611b0c565b61050e565b604080519283526020830191909152016101ee565b34801561023857600080fd5b506101cc610247366004611ba0565b610805565b34801561025857600080fd5b506101cc610267366004611bc4565b61089d565b34801561027857600080fd5b506002546101e4565b34801561028d57600080fd5b50600554600160a01b900460ff165b60405190151581526020016101ee565b3480156102b857600080fd5b5061029c6102c7366004611bc4565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156102f157600080fd5b506101cc610300366004611be1565b61094d565b34801561031157600080fd5b506101cc6109c7565b34801561032657600080fd5b506101cc610335366004611c0d565b610a2d565b34801561034657600080fd5b506101cc610355366004611bc4565b610aa5565b34801561036657600080fd5b50610217610375366004611c26565b610b55565b34801561038657600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016101ee565b6102176103ba366004611cbe565b610d5a565b3480156103cb57600080fd5b506101cc6103da366004611d3a565b611010565b3480156103eb57600080fd5b506001546001600160a01b0316610394565b34801561040957600080fd5b506103947f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f81565b34801561043d57600080fd5b50600554600160a81b900460ff1661029c565b34801561045c57600080fd5b506005546001600160a01b0316610394565b34801561047a57600080fd5b506101cc610489366004611d73565b611095565b34801561049a57600080fd5b506102176104a9366004611d9f565b61117b565b3480156104ba57600080fd5b506101cc6104c9366004611bc4565b611194565b3480156104da57600080fd5b50600554610394906001600160a01b031681565b3480156104fa57600080fd5b506101cc610509366004611ba0565b611273565b6005546000908190600160a81b900460ff161561053e5760405163f199645960e01b815260040160405180910390fd5b84428110156105605760405163368179bd60e21b815260040160405180910390fd5b8660000361058157604051631ca596a360e31b815260040160405180910390fd5b60008490036105a357604051635e4ae1ef60e01b815260040160405180910390fd5b6005546105bd908b9033906001600160a01b03168b611306565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b90610617908d907f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f908d908d908c908c90600401611dc1565b600060405180830381600087803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201527f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031692506370a082319150602401602060405180830381865afa1580156106ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d19190611e1c565b9250868310156106f45760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff1661070d5760008361073a565b61073a7f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f84898888611445565b9350915060006001600160a01b038a16156107555789610757565b335b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018690529091507f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156107d557600080fd5b505af11580156107e9573d6000803e3d6000fd5b505050506107f78185611783565b505097509795505050505050565b6000546001600160a01b031633146108645760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60058054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6000546001600160a01b031633146108f75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b03811661091e5760405163c42313dd60e01b815260040160405180910390fd5b6005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6109c3826109bd6000546001600160a01b031690565b8361182f565b5050565b6000546001600160a01b03163314610a215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b610a2b6000611965565b565b6000546001600160a01b03163314610a875760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b610aa2610a9c6000546001600160a01b031690565b82611783565b50565b6000546001600160a01b03163314610aff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b038116610b265760405163c42313dd60e01b815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546000908190600160a81b900460ff1615610b855760405163f199645960e01b815260040160405180910390fd5b8442811015610ba75760405163368179bd60e21b815260040160405180910390fd5b86600003610bc857604051631ca596a360e31b815260040160405180910390fd5b6000849003610bea57604051635e4ae1ef60e01b815260040160405180910390fd5b600554610c04908c9033906001600160a01b03168b611306565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b90610c3e908e908e908d908d908c908c90600401611dc1565b600060405180830381600087803b158015610c5857600080fd5b505af1158015610c6c573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038d1692506370a082319150602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd89190611e1c565b925086831015610cfb5760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610d1457600083610d21565b610d218a84898888611445565b9350915060006001600160a01b038a1615610d3c5789610d3e565b335b9050610d4b8b828661182f565b50509850989650505050505050565b6005546000908190600160a81b900460ff1615610d8a5760405163f199645960e01b815260040160405180910390fd5b8442811015610dac5760405163368179bd60e21b815260040160405180910390fd5b86600003610dcd57604051631ca596a360e31b815260040160405180910390fd5b6000849003610def57604051635e4ae1ef60e01b815260040160405180910390fd5b7f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f6001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610e4a57600080fd5b505af1158015610e5e573d6000803e3d6000fd5b5050600554610e9c93507f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f92506001600160a01b031690503461182f565b60055460405163b5bd447b60e01b81526001600160a01b039091169063b5bd447b90610ef6907f000000000000000000000000acc15dc74880c9944775448304b263d191c6077f908d9034908d908c908c90600401611dc1565b600060405180830381600087803b158015610f1057600080fd5b505af1158015610f24573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201526001600160a01b038c1692506370a082319150602401602060405180830381865afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190611e1c565b925086831015610fb35760405163628d226360e11b815260040160405180910390fd5b600554600160a01b900460ff16610fcc57600083610fd9565b610fd98984898888611445565b9350915060006001600160a01b03891615610ff45788610ff6565b335b90506110038a828661182f565b5050965096945050505050565b6000546001600160a01b0316331461106a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146110ef5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b81831115611129576040517fac6d9eea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c882111561114b5760405163bd957e8160e01b815260040160405180910390fd5b60c881111561116d5760405163bd957e8160e01b815260040160405180910390fd5b600292909255600355600455565b60008061118884846119c2565b915091505b9250929050565b6000546001600160a01b031633146111ee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b6001600160a01b03811661126a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161085b565b610aa281611965565b6000546001600160a01b031633146112cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161085b565b60058054911515600160a01b027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905291516000928392908816916113989190611e35565b6000604051808303816000865af19150503d80600081146113d5576040519150601f19603f3d011682016040523d82523d6000602084013e6113da565b606091505b50915091508115806114065750805115806114045750808060200190518101906114049190611e64565b155b1561143d576040517ff275e43500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6001600160a01b0385166000908152600660205260408120548190819060ff16801561172c5760006114798688018861207a565b805190915060005b8181101561172857600083828151811061149d5761149d6121e9565b60209081029190910181015160408101519181015180519193509060005b818110156117095760008482815181106114d7576114d76121e9565b60200260200101519050600260048111156114f4576114f46121ff565b8160200151600481111561150a5761150a6121ff565b036115195760019a5050611709565b600381602001516004811115611531576115316121ff565b0361170057600084838151811061154a5761154a6121e9565b602002602001015190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611594573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b89190612215565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161e9190612215565b90506000836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611660573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116849190612232565b6001600160a01b03841660009081526006602052604090205490915060ff1680156116c757506001600160a01b03821660009081526006602052604090205460ff165b80156116e857508062ffffff166101f414806116e857508062ffffff166064145b156116fb5760019e505050505050611709565b505050505b506001016114bb565b5088156117195750505050611728565b84600101945050505050611481565b5050505b81158015611738575080155b61174a5761174588611a65565b611754565b61175488886119c2565b9094509250831561177757600154611777908a906001600160a01b03168661182f565b50509550959350505050565b604080516000808252602082019092526001600160a01b0384169083906040516117ad9190611e35565b60006040518083038185875af1925050503d80600081146117ea576040519150601f19603f3d011682016040523d82523d6000602084013e6117ef565b606091505b505090508061182a576040517fc27196ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916118b99190611e35565b6000604051808303816000865af19150503d80600081146118f6576040519150601f19603f3d011682016040523d82523d6000602084013e6118fb565b606091505b50915091508115806119275750805115806119255750808060200190518101906119259190611e64565b155b1561195e576040517fe9e9cd1f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080806119d0848661226d565b905060006002806119e18888612286565b6119eb9190612299565b6119f7846127106122bb565b611a019190612299565b611a0b9190612299565b9050600254811015611a205750600254611a2f565b600354811115611a2f57506003545b6000612710611a3e83896122bb565b611a489190612299565b90506000611a56828961226d565b91989197509095505050505050565b600080600061271060045485611a7b91906122bb565b611a859190612299565b90506000611a93828661226d565b91959194509092505050565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b0381168114610aa257600080fd5b60008083601f840112611adc57600080fd5b50813567ffffffffffffffff811115611af457600080fd5b60208301915083602082850101111561118d57600080fd5b600080600080600080600060c0888a031215611b2757600080fd5b8735611b3281611ab5565b96506020880135611b4281611ab5565b955060408801359450606088013593506080880135925060a088013567ffffffffffffffff811115611b7357600080fd5b611b7f8a828b01611aca565b989b979a50959850939692959293505050565b8015158114610aa257600080fd5b600060208284031215611bb257600080fd5b8135611bbd81611b92565b9392505050565b600060208284031215611bd657600080fd5b8135611bbd81611ab5565b60008060408385031215611bf457600080fd5b8235611bff81611ab5565b946020939093013593505050565b600060208284031215611c1f57600080fd5b5035919050565b60008060008060008060008060e0898b031215611c4257600080fd5b8835611c4d81611ab5565b97506020890135611c5d81611ab5565b96506040890135611c6d81611ab5565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115611c9e57600080fd5b611caa8b828c01611aca565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611cd757600080fd5b8635611ce281611ab5565b95506020870135611cf281611ab5565b94506040870135935060608701359250608087013567ffffffffffffffff811115611d1c57600080fd5b611d2889828a01611aca565b979a9699509497509295939492505050565b60008060408385031215611d4d57600080fd5b8235611d5881611ab5565b91506020830135611d6881611b92565b809150509250929050565b600080600060608486031215611d8857600080fd5b505081359360208301359350604090920135919050565b60008060408385031215611db257600080fd5b50508035926020909101359150565b60006001600160a01b03808916835280881660208401525085604083015284606083015260a060808301528260a0830152828460c0840137600060c0848401015260c0601f19601f8501168301019050979650505050505050565b600060208284031215611e2e57600080fd5b5051919050565b6000825160005b81811015611e565760208186018101518583015201611e3c565b506000920191825250919050565b600060208284031215611e7657600080fd5b8151611bbd81611b92565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611eba57611eba611e81565b60405290565b6040516060810167ffffffffffffffff81118282101715611eba57611eba611e81565b604051601f8201601f1916810167ffffffffffffffff81118282101715611f0c57611f0c611e81565b604052919050565b600067ffffffffffffffff821115611f2e57611f2e611e81565b5060051b60200190565b803560058110611f4757600080fd5b919050565b6000601f8381840112611f5e57600080fd5b82356020611f73611f6e83611f14565b611ee3565b82815260059290921b85018101918181019087841115611f9257600080fd5b8287015b8481101561206e57803567ffffffffffffffff80821115611fb75760008081fd5b908901906040601f19838d038101821315611fd25760008081fd5b611fda611e97565b8885013584811115611fec5760008081fd5b8501603f81018f13611ffe5760008081fd5b898101358581111561201257612012611e81565b6120218b858f84011601611ee3565b95508086528f8582840101111561203a57600093508384fd5b808583018c88013760009086018b015250838152612059858401611f38565b818a0152875250505092840192508301611f96565b50979650505050505050565b6000602080838503121561208d57600080fd5b823567ffffffffffffffff808211156120a557600080fd5b818501915085601f8301126120b957600080fd5b81356120c7611f6e82611f14565b81815260059190911b830184019084810190888311156120e657600080fd5b8585015b838110156121dc5780358581111561210157600080fd5b86016060818c03601f1901121561211757600080fd5b61211f611ec0565b88820135815260408201358781111561213757600080fd5b8201603f81018d1361214857600080fd5b89810135612158611f6e82611f14565b81815260059190911b8201604001908b8101908f83111561217857600080fd5b6040840193505b828410156121a157833561219281611ab5565b8252928c0192908c019061217f565b848d01525050506060820135878111156121ba57600080fd5b6121c88d8b83860101611f4c565b6040830152508452509186019186016120ea565b5098975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b60006020828403121561222757600080fd5b8151611bbd81611ab5565b60006020828403121561224457600080fd5b815162ffffff81168114611bbd57600080fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111561228057612280612257565b92915050565b8082018082111561228057612280612257565b6000826122b657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176122805761228061225756fea2646970667358221220569827af3004d674f94ab19fd27f7db6355e409144d0bf92ba343cf6d5f7e4c664736f6c63430008130033

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

000000000000000000000000acc15dc74880c9944775448304b263d191c6077f00000000000000000000000015a5d31a64dc779a416e025882bce52022bab6d1

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f
Arg [1] : 00000000000000000000000015a5d31a64dc779a416e025882bce52022bab6d1


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
[ 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.