AVAX Price: $22.77 (+11.71%)
Gas: 1 nAVAX
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Dodo Mutli Swap325070592023-07-12 13:20:50650 days ago1689168050IN
0x409E377A...8895D1dD9
0 AVAX0.0153007530
Mix Swap308195662023-06-02 16:12:01690 days ago1685722321IN
0x409E377A...8895D1dD9
0.1 AVAX0.0065527225
Mix Swap308172842023-06-02 14:54:49690 days ago1685717689IN
0x409E377A...8895D1dD9
0 AVAX0.009682325
Mix Swap308161062023-06-02 14:15:06690 days ago1685715306IN
0x409E377A...8895D1dD9
0 AVAX0.006868225
Mix Swap308160442023-06-02 14:13:00690 days ago1685715180IN
0x409E377A...8895D1dD9
0 AVAX0.0068128725
Dodo Mutli Swap307643352023-06-01 8:42:35692 days ago1685608955IN
0x409E377A...8895D1dD9
0 AVAX0.0075661725
Mix Swap307559762023-06-01 3:54:53692 days ago1685591693IN
0x409E377A...8895D1dD9
0 AVAX0.005466725
Mix Swap306817132023-05-30 9:52:54694 days ago1685440374IN
0x409E377A...8895D1dD9
0.00015 AVAX0.0017526427.88433572
Mix Swap306815552023-05-30 9:47:36694 days ago1685440056IN
0x409E377A...8895D1dD9
0.00027 AVAX0.0014867428.05130001
Mix Swap306812342023-05-30 9:36:55694 days ago1685439415IN
0x409E377A...8895D1dD9
0.0003 AVAX0.0018254929.03786001
Mix Swap306804902023-05-30 9:11:42694 days ago1685437902IN
0x409E377A...8895D1dD9
0.00045 AVAX0.001440427.32223258
Mix Swap306777432023-05-30 7:38:29694 days ago1685432309IN
0x409E377A...8895D1dD9
0.0005 AVAX0.0013993526.5
Mix Swap306776342023-05-30 7:34:48694 days ago1685432088IN
0x409E377A...8895D1dD9
0.00025 AVAX0.0013967326.5
Mix Swap306774992023-05-30 7:30:13694 days ago1685431813IN
0x409E377A...8895D1dD9
0.00037 AVAX0.00140926.72668763
Mix Swap304564002023-05-25 1:53:38699 days ago1684979618IN
0x409E377A...8895D1dD9
0.00043 AVAX0.0013970526.5
Mix Swap304514802023-05-24 23:07:46699 days ago1684969666IN
0x409E377A...8895D1dD9
0.00032 AVAX0.0014070426.5
Mix Swap304507532023-05-24 22:43:18699 days ago1684968198IN
0x409E377A...8895D1dD9
0.00031 AVAX0.0013993526.5
Mix Swap304487382023-05-24 21:35:17699 days ago1684964117IN
0x409E377A...8895D1dD9
0.00039 AVAX0.0013970526.5
Mix Swap304485212023-05-24 21:27:58699 days ago1684963678IN
0x409E377A...8895D1dD9
0.00022 AVAX0.0016715626.51770366
Mix Swap304475792023-05-24 20:56:07699 days ago1684961767IN
0x409E377A...8895D1dD9
0.00044 AVAX0.0014073626.5
Mix Swap304460832023-05-24 20:05:27699 days ago1684958727IN
0x409E377A...8895D1dD9
0.00029 AVAX0.0014073626.5
Mix Swap304452872023-05-24 19:38:32699 days ago1684957112IN
0x409E377A...8895D1dD9
0.00046 AVAX0.0014010426.53198365
Mix Swap304422202023-05-24 17:55:13699 days ago1684950913IN
0x409E377A...8895D1dD9
0.00015 AVAX0.0014070426.5
Mix Swap304398792023-05-24 16:36:21699 days ago1684946181IN
0x409E377A...8895D1dD9
0.00015 AVAX0.0014052626.66187129
Mix Swap304345242023-05-24 13:35:44699 days ago1684935344IN
0x409E377A...8895D1dD9
0.00032 AVAX0.0098398737.03044827
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
325757172023-07-14 3:43:33649 days ago1689306213
0x409E377A...8895D1dD9
0.0346 AVAX
325757172023-07-14 3:43:33649 days ago1689306213
0x409E377A...8895D1dD9
0.0346 AVAX
325638702023-07-13 21:07:38649 days ago1689282458
0x409E377A...8895D1dD9
12 AVAX
325638702023-07-13 21:07:38649 days ago1689282458
0x409E377A...8895D1dD9
12 AVAX
325636582023-07-13 21:00:34649 days ago1689282034
0x409E377A...8895D1dD9
12 AVAX
325636582023-07-13 21:00:34649 days ago1689282034
0x409E377A...8895D1dD9
12 AVAX
325636252023-07-13 20:59:27649 days ago1689281967
0x409E377A...8895D1dD9
12 AVAX
325636252023-07-13 20:59:27649 days ago1689281967
0x409E377A...8895D1dD9
12 AVAX
325596112023-07-13 18:45:00649 days ago1689273900
0x409E377A...8895D1dD9
87 AVAX
325596112023-07-13 18:45:00649 days ago1689273900
0x409E377A...8895D1dD9
87 AVAX
325535002023-07-13 15:21:47649 days ago1689261707
0x409E377A...8895D1dD9
0.005 AVAX
325535002023-07-13 15:21:47649 days ago1689261707
0x409E377A...8895D1dD9
0.005 AVAX
325508372023-07-13 13:51:44649 days ago1689256304
0x409E377A...8895D1dD9
1.98602 AVAX
325508372023-07-13 13:51:44649 days ago1689256304
0x409E377A...8895D1dD9
1.98602 AVAX
325439902023-07-13 10:00:30650 days ago1689242430
0x409E377A...8895D1dD9
12.26325994 AVAX
325439902023-07-13 10:00:30650 days ago1689242430
0x409E377A...8895D1dD9
12.26325994 AVAX
325432792023-07-13 9:36:37650 days ago1689240997
0x409E377A...8895D1dD9
11.45 AVAX
325432792023-07-13 9:36:37650 days ago1689240997
0x409E377A...8895D1dD9
11.45 AVAX
325429532023-07-13 9:25:45650 days ago1689240345
0x409E377A...8895D1dD9
11.83 AVAX
325429532023-07-13 9:25:45650 days ago1689240345
0x409E377A...8895D1dD9
11.83 AVAX
325139772023-07-12 17:12:10650 days ago1689181930
0x409E377A...8895D1dD9
1 AVAX
325139772023-07-12 17:12:10650 days ago1689181930
0x409E377A...8895D1dD9
1 AVAX
325128552023-07-12 16:34:45650 days ago1689179685
0x409E377A...8895D1dD9
20 AVAX
325128552023-07-12 16:34:45650 days ago1689179685
0x409E377A...8895D1dD9
20 AVAX
324991862023-07-12 8:56:43651 days ago1689152203
0x409E377A...8895D1dD9
0.54968 AVAX
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DODORouteProxy

Compiler Version
v0.6.9+commit.3e3065ac

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Apache-2.0 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowscan.xyz on 2021-12-21
*/

// File: contracts/intf/IDODOApprove.sol

/*

    Copyright 2020 DODO ZOO.
    SPDX-License-Identifier: Apache-2.0

*/

pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;

interface IDODOApprove {
    function claimTokens(address token,address who,address dest,uint256 amount) external;
    function getDODOProxy() external view returns (address);
}

// File: contracts/lib/InitializableOwnable.sol

/**
 * @title Ownable
 * @author DODO Breeder
 *
 * @notice Ownership related functions
 */
contract InitializableOwnable {
    address public _OWNER_;
    address public _NEW_OWNER_;
    bool internal _INITIALIZED_;

    // ============ Events ============

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

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

    // ============ Modifiers ============

    modifier notInitialized() {
        require(!_INITIALIZED_, "DODO_INITIALIZED");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == _OWNER_, "NOT_OWNER");
        _;
    }

    // ============ Functions ============

    function initOwner(address newOwner) public notInitialized {
        _INITIALIZED_ = true;
        _OWNER_ = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        emit OwnershipTransferPrepared(_OWNER_, newOwner);
        _NEW_OWNER_ = newOwner;
    }

    function claimOwnership() public {
        require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM");
        emit OwnershipTransferred(_OWNER_, _NEW_OWNER_);
        _OWNER_ = _NEW_OWNER_;
        _NEW_OWNER_ = address(0);
    }
}

// File: contracts/SmartRoute/DODOApproveProxy.sol



interface IDODOApproveProxy {
    function isAllowedProxy(address _proxy) external view returns (bool);
    function claimTokens(address token,address who,address dest,uint256 amount) external;
}

/**
 * @title DODOApproveProxy
 * @author DODO Breeder
 *
 * @notice Allow different version dodoproxy to claim from DODOApprove
 */
contract DODOApproveProxy is InitializableOwnable {
    
    // ============ Storage ============
    uint256 private constant _TIMELOCK_DURATION_ = 3 days;
    mapping (address => bool) public _IS_ALLOWED_PROXY_;
    uint256 public _TIMELOCK_;
    address public _PENDING_ADD_DODO_PROXY_;
    address public immutable _DODO_APPROVE_;

    // ============ Modifiers ============
    modifier notLocked() {
        require(
            _TIMELOCK_ <= block.timestamp,
            "SetProxy is timelocked"
        );
        _;
    }

    constructor(address dodoApporve) public {
        _DODO_APPROVE_ = dodoApporve;
    }

    function init(address owner, address[] memory proxies) external {
        initOwner(owner);
        for(uint i = 0; i < proxies.length; i++) 
            _IS_ALLOWED_PROXY_[proxies[i]] = true;
    }

    function unlockAddProxy(address newDodoProxy) public onlyOwner {
        _TIMELOCK_ = block.timestamp + _TIMELOCK_DURATION_;
        _PENDING_ADD_DODO_PROXY_ = newDodoProxy;
    }

    function lockAddProxy() public onlyOwner {
       _PENDING_ADD_DODO_PROXY_ = address(0);
       _TIMELOCK_ = 0;
    }


    function addDODOProxy() external onlyOwner notLocked() {
        _IS_ALLOWED_PROXY_[_PENDING_ADD_DODO_PROXY_] = true;
        lockAddProxy();
    }

    function removeDODOProxy (address oldDodoProxy) public onlyOwner {
        _IS_ALLOWED_PROXY_[oldDodoProxy] = false;
    }
    
    function claimTokens(
        address token,
        address who,
        address dest,
        uint256 amount
    ) external {
        require(_IS_ALLOWED_PROXY_[msg.sender], "DODOApproveProxy:Access restricted");
        IDODOApprove(_DODO_APPROVE_).claimTokens(
            token,
            who,
            dest,
            amount
        );
    }

    function isAllowedProxy(address _proxy) external view returns (bool) {
        return _IS_ALLOWED_PROXY_[_proxy];
    }
}

// File: contracts/intf/IERC20.sol


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint8);

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

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

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/intf/IWETH.sol

interface IWETH {
    function totalSupply() external view returns (uint256);

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

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

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

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

    function transferFrom(
        address src,
        address dst,
        uint256 wad
    ) external returns (bool);

    function deposit() external payable;

    function withdraw(uint256 wad) external;
}

// File: contracts/lib/SafeMath.sol


/**
 * @title SafeMath
 * @author DODO Breeder
 *
 * @notice Math operations with safety checks that revert on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "MUL_ERROR");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "DIVIDING_ERROR");
        return a / b;
    }

    function divCeil(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 quotient = div(a, b);
        uint256 remainder = a - quotient * b;
        if (remainder > 0) {
            return quotient + 1;
        } else {
            return quotient;
        }
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SUB_ERROR");
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "ADD_ERROR");
        return c;
    }

    function sqrt(uint256 x) internal pure returns (uint256 y) {
        uint256 z = x / 2 + 1;
        y = x;
        while (z < y) {
            y = z;
            z = (x / z + z) / 2;
        }
    }
}

// File: contracts/lib/SafeERC20.sol


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using SafeMath for uint256;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

// File: contracts/SmartRoute/lib/UniversalERC20.sol



library UniversalERC20 {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    IERC20 private constant ETH_ADDRESS = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);

    function universalTransfer(
        IERC20 token,
        address payable to,
        uint256 amount
    ) internal {
        if (amount > 0) {
            if (isETH(token)) {
                to.transfer(amount);
            } else {
                token.safeTransfer(to, amount);
            }
        }
    }

    function universalApproveMax(
        IERC20 token,
        address to,
        uint256 amount
    ) internal {
        uint256 allowance = token.allowance(address(this), to);
        if (allowance < amount) {
            if (allowance > 0) {
                token.safeApprove(to, 0);
            }
            token.safeApprove(to, uint256(-1));
        }
    }

    function universalBalanceOf(IERC20 token, address who) internal view returns (uint256) {
        if (isETH(token)) {
            return who.balance;
        } else {
            return token.balanceOf(who);
        }
    }

    function tokenBalanceOf(IERC20 token, address who) internal view returns (uint256) {
        return token.balanceOf(who);
    }

    function isETH(IERC20 token) internal pure returns (bool) {
        return token == ETH_ADDRESS;
    }
}

// File: contracts/SmartRoute/intf/IDODOAdapter.sol


interface IDODOAdapter {
    
    function sellBase(address to, address pool, bytes memory data) external;

    function sellQuote(address to, address pool, bytes memory data) external;
}

// File: contracts/SmartRoute/proxies/DODORouteProxy.sol


/**
 * @title DODORouteProxy
 * @author DODO Breeder
 *
 * @notice Entrance of Split trading in DODO platform
 */
contract DODORouteProxy {
    using SafeMath for uint256;
    using UniversalERC20 for IERC20;

    // ============ Storage ============

    address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
    address public immutable _WETH_;
    address public immutable _DODO_APPROVE_PROXY_;

    struct PoolInfo {
        uint256 direction;
        uint256 poolEdition;
        uint256 weight;
        address pool;
        address adapter;
        bytes moreInfo;
    }

    // ============ Events ============

     event OrderHistory(
        address fromToken,
        address toToken,
        address sender,
        uint256 fromAmount,
        uint256 returnAmount
    );

    // ============ Modifiers ============

    modifier judgeExpired(uint256 deadLine) {
        require(deadLine >= block.timestamp, "DODORouteProxy: EXPIRED");
        _;
    }

    fallback() external payable {}

    receive() external payable {}

    constructor (
        address payable weth,
        address dodoApproveProxy
    ) public {
        _WETH_ = weth;
        _DODO_APPROVE_PROXY_ = dodoApproveProxy;
    }

    function mixSwap(
        address fromToken,
        address toToken,
        uint256 fromTokenAmount,
        uint256 minReturnAmount,
        address[] memory mixAdapters,
        address[] memory mixPairs,
        address[] memory assetTo,
        uint256 directions,
        bytes[] memory moreInfos,
        uint256 deadLine
    ) external payable judgeExpired(deadLine) returns (uint256 returnAmount) {
        require(mixPairs.length > 0, "DODORouteProxy: PAIRS_EMPTY");
        require(mixPairs.length == mixAdapters.length, "DODORouteProxy: PAIR_ADAPTER_NOT_MATCH");
        require(mixPairs.length == assetTo.length - 1, "DODORouteProxy: PAIR_ASSETTO_NOT_MATCH");
        require(minReturnAmount > 0, "DODORouteProxy: RETURN_AMOUNT_ZERO");

        address _fromToken = fromToken;
        address _toToken = toToken;
        uint256 _fromTokenAmount = fromTokenAmount;
        
        uint256 toTokenOriginBalance = IERC20(_toToken).universalBalanceOf(msg.sender);
        
        _deposit(msg.sender, assetTo[0], _fromToken, _fromTokenAmount, _fromToken == _ETH_ADDRESS_);

        for (uint256 i = 0; i < mixPairs.length; i++) {
            if (directions & 1 == 0) {
                IDODOAdapter(mixAdapters[i]).sellBase(assetTo[i + 1],mixPairs[i], moreInfos[i]);
            } else {
                IDODOAdapter(mixAdapters[i]).sellQuote(assetTo[i + 1],mixPairs[i], moreInfos[i]);
            }
            directions = directions >> 1;
        }

        if(_toToken == _ETH_ADDRESS_) {
            returnAmount = IWETH(_WETH_).balanceOf(address(this));
            IWETH(_WETH_).withdraw(returnAmount);
            msg.sender.transfer(returnAmount);
        }else {
            returnAmount = IERC20(_toToken).tokenBalanceOf(msg.sender).sub(toTokenOriginBalance);
        }

        require(returnAmount >= minReturnAmount, "DODORouteProxy: Return amount is not enough");

        emit OrderHistory(
            _fromToken,
            _toToken,
            msg.sender,
            _fromTokenAmount,
            returnAmount
        );
    }

    function dodoMutliSwap(
        uint256 fromTokenAmount,
        uint256 minReturnAmount,
        uint256[] memory totalWeight,
        uint256[] memory splitNumber,
        address[] memory midToken,
        address[] memory assetFrom,
        bytes[] memory sequence,
        uint256 deadLine
    ) external payable judgeExpired(deadLine) returns (uint256 returnAmount) {
        require(assetFrom.length == splitNumber.length, 'DODORouteProxy: PAIR_ASSETTO_NOT_MATCH');        
        require(minReturnAmount > 0, "DODORouteProxy: RETURN_AMOUNT_ZERO");
        
        uint256 _fromTokenAmount = fromTokenAmount;
        address fromToken = midToken[0];
        address toToken = midToken[midToken.length - 1];

        uint256 toTokenOriginBalance = IERC20(toToken).universalBalanceOf(msg.sender);

        _deposit(msg.sender, assetFrom[0], fromToken, _fromTokenAmount, fromToken == _ETH_ADDRESS_);

        _multiSwap(totalWeight, midToken, splitNumber, sequence, assetFrom);
    
        if(toToken == _ETH_ADDRESS_) {
            returnAmount = IWETH(_WETH_).balanceOf(address(this));
            IWETH(_WETH_).withdraw(returnAmount);
            msg.sender.transfer(returnAmount);
        }else {
            returnAmount = IERC20(toToken).tokenBalanceOf(msg.sender).sub(toTokenOriginBalance);
        }

        require(returnAmount >= minReturnAmount, "DODORouteProxy: Return amount is not enough");
    
        emit OrderHistory(
            fromToken,
            toToken,
            msg.sender,
            _fromTokenAmount,
            returnAmount
        );    
    }

    
    //====================== internal =======================

    function _multiSwap(
        uint256[] memory totalWeight,
        address[] memory midToken,
        uint256[] memory splitNumber,
        bytes[] memory swapSequence,
        address[] memory assetFrom
    ) internal { 
        for(uint256 i = 1; i < splitNumber.length; i++) { 
            // define midtoken address, ETH -> WETH address
            uint256 curTotalAmount = IERC20(midToken[i]).tokenBalanceOf(assetFrom[i-1]);
            uint256 curTotalWeight = totalWeight[i-1];
            
            for(uint256 j = splitNumber[i-1]; j < splitNumber[i]; j++) {
                PoolInfo memory curPoolInfo;
                {
                    (address pool, address adapter, uint256 mixPara, bytes memory moreInfo) = abi.decode(swapSequence[j], (address, address, uint256, bytes));
                
                    curPoolInfo.direction = mixPara >> 17;
                    curPoolInfo.weight = (0xffff & mixPara) >> 9;
                    curPoolInfo.poolEdition = (0xff & mixPara);
                    curPoolInfo.pool = pool;
                    curPoolInfo.adapter = adapter;
                    curPoolInfo.moreInfo = moreInfo;
                }

                if(assetFrom[i-1] == address(this)) {
                    uint256 curAmount = curTotalAmount.mul(curPoolInfo.weight).div(curTotalWeight);
            
                    if(curPoolInfo.poolEdition == 1) {   
                        //For using transferFrom pool (like dodoV1, Curve)
                        IERC20(midToken[i]).transfer(curPoolInfo.adapter, curAmount);
                    } else {
                        //For using transfer pool (like dodoV2)
                        IERC20(midToken[i]).transfer(curPoolInfo.pool, curAmount);
                    }
                }
                
                if(curPoolInfo.direction == 0) {
                    IDODOAdapter(curPoolInfo.adapter).sellBase(assetFrom[i], curPoolInfo.pool, curPoolInfo.moreInfo);
                } else {
                    IDODOAdapter(curPoolInfo.adapter).sellQuote(assetFrom[i], curPoolInfo.pool, curPoolInfo.moreInfo);
                }
            }
        }
    }

    function _deposit(
        address from,
        address to,
        address token,
        uint256 amount,
        bool isETH
    ) internal {
        if (isETH) {
            if (amount > 0) {
                require(msg.value == amount, "ETH_VALUE_WRONG");
                IWETH(_WETH_).deposit{value: amount}();
                if (to != address(this)) SafeERC20.safeTransfer(IERC20(_WETH_), to, amount);
            }
        } else {
            IDODOApproveProxy(_DODO_APPROVE_PROXY_).claimTokens(token, from, to, amount);
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address payable","name":"weth","type":"address"},{"internalType":"address","name":"dodoApproveProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"fromToken","type":"address"},{"indexed":false,"internalType":"address","name":"toToken","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"fromAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"returnAmount","type":"uint256"}],"name":"OrderHistory","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_DODO_APPROVE_PROXY_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_WETH_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"uint256[]","name":"totalWeight","type":"uint256[]"},{"internalType":"uint256[]","name":"splitNumber","type":"uint256[]"},{"internalType":"address[]","name":"midToken","type":"address[]"},{"internalType":"address[]","name":"assetFrom","type":"address[]"},{"internalType":"bytes[]","name":"sequence","type":"bytes[]"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"dodoMutliSwap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"fromToken","type":"address"},{"internalType":"address","name":"toToken","type":"address"},{"internalType":"uint256","name":"fromTokenAmount","type":"uint256"},{"internalType":"uint256","name":"minReturnAmount","type":"uint256"},{"internalType":"address[]","name":"mixAdapters","type":"address[]"},{"internalType":"address[]","name":"mixPairs","type":"address[]"},{"internalType":"address[]","name":"assetTo","type":"address[]"},{"internalType":"uint256","name":"directions","type":"uint256"},{"internalType":"bytes[]","name":"moreInfos","type":"bytes[]"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"mixSwap","outputs":[{"internalType":"uint256","name":"returnAmount","type":"uint256"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b5060405162001ab938038062001ab9833981016040819052620000349162000053565b6001600160601b0319606092831b8116608052911b1660a052620000aa565b6000806040838503121562000066578182fd5b8251620000738162000091565b6020840151909250620000868162000091565b809150509250929050565b6001600160a01b0381168114620000a757600080fd5b50565b60805160601c60a05160601c6119c3620000f6600039806108b55280610a7452508060c152806103c3528061046252806106ea528061078952806109aa5280610a3252506119c36000f3fe6080604052600436106100435760003560e01c80630d4eec8f1461004c5780637617b389146100775780638179178814610097578063eb99be12146100aa5761004a565b3661004a57005b005b34801561005857600080fd5b506100616100bf565b60405161006e9190611560565b60405180910390f35b61008a61008536600461132f565b6100e3565b60405161006e91906118d5565b61008a6100a536600461145b565b61059a565b3480156100b657600080fd5b506100616108b3565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000814281101561010f5760405162461bcd60e51b815260040161010690611638565b60405180910390fd5b60008751116101305760405162461bcd60e51b81526004016101069061166f565b87518751146101515760405162461bcd60e51b8152600401610106906116a6565b60018651038751146101755760405162461bcd60e51b8152600401610106906117f9565b600089116101955760405162461bcd60e51b815260040161010690611794565b8b8b8b60006101b36001600160a01b0384163363ffffffff6108d716565b90506101fe338b6000815181106101c657fe5b6020026020010151868573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316896001600160a01b03161461097d565b60005b8b518110156103865760018a166102c8578c818151811061021e57fe5b60200260200101516001600160a01b03166330e6ae318c836001018151811061024357fe5b60200260200101518e848151811061025757fe5b60200260200101518c858151811061026b57fe5b60200260200101516040518463ffffffff1660e01b8152600401610291939291906115d2565b600060405180830381600087803b1580156102ab57600080fd5b505af11580156102bf573d6000803e3d6000fd5b5050505061037a565b8c81815181106102d457fe5b60200260200101516001600160a01b0316636f7929f28c83600101815181106102f957fe5b60200260200101518e848151811061030d57fe5b60200260200101518c858151811061032157fe5b60200260200101516040518463ffffffff1660e01b8152600401610347939291906115d2565b600060405180830381600087803b15801561036157600080fd5b505af1158015610375573d6000803e3d6000fd5b505050505b6001998a1c9901610201565b506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156104fc576040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906103f8903090600401611560565b60206040518083038186803b15801561041057600080fd5b505afa158015610424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104489190611443565b604051632e1a7d4d60e01b81529096506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d906104979089906004016118d5565b600060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505060405133925088156108fc02915088906000818181858888f193505050501580156104f6573d6000803e3d6000fd5b50610528565b610525816105196001600160a01b0386163363ffffffff610ae916565b9063ffffffff610b1816565b95505b8c8610156105485760405162461bcd60e51b8152600401610106906116ec565b7f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a5221787848433858a60405161057f959493929190611574565b60405180910390a150505050509a9950505050505050505050565b600081428110156105bd5760405162461bcd60e51b815260040161010690611638565b86518551146105de5760405162461bcd60e51b8152600401610106906117f9565b600089116105fe5760405162461bcd60e51b815260040161010690611794565b60008a905060008760008151811061061257fe5b6020026020010151905060008860018a51038151811061062e57fe5b60200260200101519050600061065633836001600160a01b03166108d790919063ffffffff16565b90506106a1338a60008151811061066957fe5b6020026020010151858773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316886001600160a01b03161461097d565b6106ae8c8b8d8b8d610b40565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610823576040516370a0823160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319061071f903090600401611560565b60206040518083038186803b15801561073757600080fd5b505afa15801561074b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076f9190611443565b604051632e1a7d4d60e01b81529096506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632e1a7d4d906107be9089906004016118d5565b600060405180830381600087803b1580156107d857600080fd5b505af11580156107ec573d6000803e3d6000fd5b505060405133925088156108fc02915088906000818181858888f1935050505015801561081d573d6000803e3d6000fd5b50610843565b610840816105196001600160a01b0385163363ffffffff610ae916565b95505b8c8610156108635760405162461bcd60e51b8152600401610106906116ec565b7f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a5221787838333878a60405161089a959493929190611574565b60405180910390a1505050505098975050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006108e283610f20565b156108f857506001600160a01b03811631610977565b6040516370a0823160e01b81526001600160a01b038416906370a0823190610924908590600401611560565b60206040518083038186803b15801561093c57600080fd5b505afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109749190611443565b90505b92915050565b8015610a5d578115610a58578134146109a85760405162461bcd60e51b81526004016101069061183f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506001600160a01b03851630149050610a5857610a587f00000000000000000000000000000000000000000000000000000000000000008584610f45565b610ae2565b60405163052f523360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630a5ea46690610aaf9086908990899088906004016115a8565b600060405180830381600087803b158015610ac957600080fd5b505af1158015610add573d6000803e3d6000fd5b505050505b5050505050565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610924908590600401611560565b600082821115610b3a5760405162461bcd60e51b8152600401610106906117d6565b50900390565b60015b8351811015610f18576000610b93836001840381518110610b6057fe5b6020026020010151878481518110610b7457fe5b60200260200101516001600160a01b0316610ae990919063ffffffff16565b90506000876001840381518110610ba657fe5b602002602001015190506000866001850381518110610bc157fe5b602002602001015190505b868481518110610bd857fe5b6020026020010151811015610f0d57610bef6110c9565b600080600060608a8681518110610c0257fe5b6020026020010151806020019051810190610c1d9190611288565b601182901c8952607f600983901c1660408a015260ff90911660208901526001600160a01b0392831660608901529116608087015260a0860152505087513092508891506000198801908110610c6f57fe5b60200260200101516001600160a01b03161415610df6576000610caf84610ca3846040015188610fa090919063ffffffff16565b9063ffffffff610fda16565b9050816020015160011415610d5b57898681518110610cca57fe5b60200260200101516001600160a01b031663a9059cbb8360800151836040518363ffffffff1660e01b8152600401610d0392919061161f565b602060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611423565b50610df4565b898681518110610d6757fe5b60200260200101516001600160a01b031663a9059cbb8360600151836040518363ffffffff1660e01b8152600401610da092919061161f565b602060405180830381600087803b158015610dba57600080fd5b505af1158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190611423565b505b505b8051610e825780608001516001600160a01b03166330e6ae31878781518110610e1b57fe5b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401610e4b939291906115d2565b600060405180830381600087803b158015610e6557600080fd5b505af1158015610e79573d6000803e3d6000fd5b50505050610f04565b80608001516001600160a01b0316636f7929f2878781518110610ea157fe5b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401610ed1939291906115d2565b600060405180830381600087803b158015610eeb57600080fd5b505af1158015610eff573d6000803e3d6000fd5b505050505b50600101610bcc565b505050600101610b43565b505050505050565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b610f9b8363a9059cbb60e01b8484604051602401610f6492919061161f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261100c565b505050565b600082610faf57506000610977565b82820282848281610fbc57fe5b04146109745760405162461bcd60e51b8152600401610106906118b2565b6000808211610ffb5760405162461bcd60e51b81526004016101069061176c565b81838161100457fe5b049392505050565b60006060836001600160a01b0316836040516110289190611544565b6000604051808303816000865af19150503d8060008114611065576040519150601f19603f3d011682016040523d82523d6000602084013e61106a565b606091505b50915091508161108c5760405162461bcd60e51b815260040161010690611737565b8051156110c357808060200190518101906110a79190611423565b6110c35760405162461bcd60e51b815260040161010690611868565b50505050565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b803561097781611975565b600082601f83011261112c578081fd5b813561113f61113a82611905565b6118de565b81815291506020808301908481018184028601820187101561116057600080fd5b60005b8481101561118857813561117681611975565b84529282019290820190600101611163565b505050505092915050565b600082601f8301126111a3578081fd5b81356111b161113a82611905565b818152915060208083019084810160005b84811015611188578135870188603f8201126111dd57600080fd5b838101356111ed61113a82611925565b81815260408b8184860101111561120357600080fd5b828185018884013750600091810186019190915285525092820192908201906001016111c2565b600082601f83011261123a578081fd5b813561124861113a82611905565b81815291506020808301908481018184028601820187101561126957600080fd5b60005b848110156111885781358452928201929082019060010161126c565b6000806000806080858703121561129d578384fd5b84516112a881611975565b60208601519094506112b981611975565b60408601516060870151919450925067ffffffffffffffff8111156112dc578182fd5b80860187601f8201126112ed578283fd5b805191506112fd61113a83611925565b828152886020848401011115611311578384fd5b611322836020830160208501611949565b9598949750929550505050565b6000806000806000806000806000806101408b8d03121561134e578586fd5b6113588c8c611111565b99506113678c60208d01611111565b985060408b0135975060608b0135965060808b013567ffffffffffffffff80821115611391578788fd5b61139d8e838f0161111c565b975060a08d01359150808211156113b2578687fd5b6113be8e838f0161111c565b965060c08d01359150808211156113d3578586fd5b6113df8e838f0161111c565b955060e08d013594506101008d01359150808211156113fc578384fd5b506114098d828e01611193565b9250506101208b013590509295989b9194979a5092959850565b600060208284031215611434578081fd5b81518015158114610974578182fd5b600060208284031215611454578081fd5b5051919050565b600080600080600080600080610100898b031215611477578384fd5b8835975060208901359650604089013567ffffffffffffffff8082111561149c578586fd5b6114a88c838d0161122a565b975060608b01359150808211156114bd578586fd5b6114c98c838d0161122a565b965060808b01359150808211156114de578586fd5b6114ea8c838d0161111c565b955060a08b01359150808211156114ff578485fd5b61150b8c838d0161111c565b945060c08b0135915080821115611520578384fd5b5061152d8b828c01611193565b92505060e089013590509295985092959890939650565b60008251611556818460208701611949565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060018060a01b038086168352808516602084015250606060408301528251806060840152611609816080850160208701611949565b601f01601f191691909101608001949350505050565b6001600160a01b03929092168252602082015260400190565b60208082526017908201527f444f444f526f75746550726f78793a2045585049524544000000000000000000604082015260600190565b6020808252601b908201527f444f444f526f75746550726f78793a2050414952535f454d5054590000000000604082015260600190565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f414441505445525f4e4f546040820152650be9a82a886960d31b606082015260800190565b6020808252602b908201527f444f444f526f75746550726f78793a2052657475726e20616d6f756e7420697360408201526a040dcdee840cadcdeeaced60ab1b606082015260800190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526022908201527f444f444f526f75746550726f78793a2052455455524e5f414d4f554e545f5a45604082015261524f60f01b606082015260800190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f4153534554544f5f4e4f546040820152650be9a82a886960d31b606082015260800190565b6020808252600f908201526e4554485f56414c55455f57524f4e4760881b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff811182821017156118fd57600080fd5b604052919050565b600067ffffffffffffffff82111561191b578081fd5b5060209081020190565b600067ffffffffffffffff82111561193b578081fd5b50601f01601f191660200190565b60005b8381101561196457818101518382015260200161194c565b838111156110c35750506000910152565b6001600160a01b038116811461198a57600080fd5b5056fea2646970667358221220e366ef97630f42f2e519a38a6d8b19b0cba96281e3c4d791595de2fdec19a3e164736f6c63430006090033000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000096a75d73b3de29c009863fa6329d96b2181d3dc4

Deployed Bytecode

0x6080604052600436106100435760003560e01c80630d4eec8f1461004c5780637617b389146100775780638179178814610097578063eb99be12146100aa5761004a565b3661004a57005b005b34801561005857600080fd5b506100616100bf565b60405161006e9190611560565b60405180910390f35b61008a61008536600461132f565b6100e3565b60405161006e91906118d5565b61008a6100a536600461145b565b61059a565b3480156100b657600080fd5b506100616108b3565b7f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c781565b6000814281101561010f5760405162461bcd60e51b815260040161010690611638565b60405180910390fd5b60008751116101305760405162461bcd60e51b81526004016101069061166f565b87518751146101515760405162461bcd60e51b8152600401610106906116a6565b60018651038751146101755760405162461bcd60e51b8152600401610106906117f9565b600089116101955760405162461bcd60e51b815260040161010690611794565b8b8b8b60006101b36001600160a01b0384163363ffffffff6108d716565b90506101fe338b6000815181106101c657fe5b6020026020010151868573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316896001600160a01b03161461097d565b60005b8b518110156103865760018a166102c8578c818151811061021e57fe5b60200260200101516001600160a01b03166330e6ae318c836001018151811061024357fe5b60200260200101518e848151811061025757fe5b60200260200101518c858151811061026b57fe5b60200260200101516040518463ffffffff1660e01b8152600401610291939291906115d2565b600060405180830381600087803b1580156102ab57600080fd5b505af11580156102bf573d6000803e3d6000fd5b5050505061037a565b8c81815181106102d457fe5b60200260200101516001600160a01b0316636f7929f28c83600101815181106102f957fe5b60200260200101518e848151811061030d57fe5b60200260200101518c858151811061032157fe5b60200260200101516040518463ffffffff1660e01b8152600401610347939291906115d2565b600060405180830381600087803b15801561036157600080fd5b505af1158015610375573d6000803e3d6000fd5b505050505b6001998a1c9901610201565b506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14156104fc576040516370a0823160e01b81526001600160a01b037f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c716906370a08231906103f8903090600401611560565b60206040518083038186803b15801561041057600080fd5b505afa158015610424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104489190611443565b604051632e1a7d4d60e01b81529096506001600160a01b037f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c71690632e1a7d4d906104979089906004016118d5565b600060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505060405133925088156108fc02915088906000818181858888f193505050501580156104f6573d6000803e3d6000fd5b50610528565b610525816105196001600160a01b0386163363ffffffff610ae916565b9063ffffffff610b1816565b95505b8c8610156105485760405162461bcd60e51b8152600401610106906116ec565b7f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a5221787848433858a60405161057f959493929190611574565b60405180910390a150505050509a9950505050505050505050565b600081428110156105bd5760405162461bcd60e51b815260040161010690611638565b86518551146105de5760405162461bcd60e51b8152600401610106906117f9565b600089116105fe5760405162461bcd60e51b815260040161010690611794565b60008a905060008760008151811061061257fe5b6020026020010151905060008860018a51038151811061062e57fe5b60200260200101519050600061065633836001600160a01b03166108d790919063ffffffff16565b90506106a1338a60008151811061066957fe5b6020026020010151858773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0316886001600160a01b03161461097d565b6106ae8c8b8d8b8d610b40565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415610823576040516370a0823160e01b81526001600160a01b037f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c716906370a082319061071f903090600401611560565b60206040518083038186803b15801561073757600080fd5b505afa15801561074b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076f9190611443565b604051632e1a7d4d60e01b81529096506001600160a01b037f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c71690632e1a7d4d906107be9089906004016118d5565b600060405180830381600087803b1580156107d857600080fd5b505af11580156107ec573d6000803e3d6000fd5b505060405133925088156108fc02915088906000818181858888f1935050505015801561081d573d6000803e3d6000fd5b50610843565b610840816105196001600160a01b0385163363ffffffff610ae916565b95505b8c8610156108635760405162461bcd60e51b8152600401610106906116ec565b7f92ceb067a9883c85aba061e46b9edf505a0d6e81927c4b966ebed543a5221787838333878a60405161089a959493929190611574565b60405180910390a1505050505098975050505050505050565b7f00000000000000000000000096a75d73b3de29c009863fa6329d96b2181d3dc481565b60006108e283610f20565b156108f857506001600160a01b03811631610977565b6040516370a0823160e01b81526001600160a01b038416906370a0823190610924908590600401611560565b60206040518083038186803b15801561093c57600080fd5b505afa158015610950573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109749190611443565b90505b92915050565b8015610a5d578115610a58578134146109a85760405162461bcd60e51b81526004016101069061183f565b7f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610a0357600080fd5b505af1158015610a17573d6000803e3d6000fd5b505050506001600160a01b03851630149050610a5857610a587f000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c78584610f45565b610ae2565b60405163052f523360e11b81526001600160a01b037f00000000000000000000000096a75d73b3de29c009863fa6329d96b2181d3dc41690630a5ea46690610aaf9086908990899088906004016115a8565b600060405180830381600087803b158015610ac957600080fd5b505af1158015610add573d6000803e3d6000fd5b505050505b5050505050565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190610924908590600401611560565b600082821115610b3a5760405162461bcd60e51b8152600401610106906117d6565b50900390565b60015b8351811015610f18576000610b93836001840381518110610b6057fe5b6020026020010151878481518110610b7457fe5b60200260200101516001600160a01b0316610ae990919063ffffffff16565b90506000876001840381518110610ba657fe5b602002602001015190506000866001850381518110610bc157fe5b602002602001015190505b868481518110610bd857fe5b6020026020010151811015610f0d57610bef6110c9565b600080600060608a8681518110610c0257fe5b6020026020010151806020019051810190610c1d9190611288565b601182901c8952607f600983901c1660408a015260ff90911660208901526001600160a01b0392831660608901529116608087015260a0860152505087513092508891506000198801908110610c6f57fe5b60200260200101516001600160a01b03161415610df6576000610caf84610ca3846040015188610fa090919063ffffffff16565b9063ffffffff610fda16565b9050816020015160011415610d5b57898681518110610cca57fe5b60200260200101516001600160a01b031663a9059cbb8360800151836040518363ffffffff1660e01b8152600401610d0392919061161f565b602060405180830381600087803b158015610d1d57600080fd5b505af1158015610d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d559190611423565b50610df4565b898681518110610d6757fe5b60200260200101516001600160a01b031663a9059cbb8360600151836040518363ffffffff1660e01b8152600401610da092919061161f565b602060405180830381600087803b158015610dba57600080fd5b505af1158015610dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df29190611423565b505b505b8051610e825780608001516001600160a01b03166330e6ae31878781518110610e1b57fe5b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401610e4b939291906115d2565b600060405180830381600087803b158015610e6557600080fd5b505af1158015610e79573d6000803e3d6000fd5b50505050610f04565b80608001516001600160a01b0316636f7929f2878781518110610ea157fe5b602002602001015183606001518460a001516040518463ffffffff1660e01b8152600401610ed1939291906115d2565b600060405180830381600087803b158015610eeb57600080fd5b505af1158015610eff573d6000803e3d6000fd5b505050505b50600101610bcc565b505050600101610b43565b505050505050565b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14919050565b610f9b8363a9059cbb60e01b8484604051602401610f6492919061161f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261100c565b505050565b600082610faf57506000610977565b82820282848281610fbc57fe5b04146109745760405162461bcd60e51b8152600401610106906118b2565b6000808211610ffb5760405162461bcd60e51b81526004016101069061176c565b81838161100457fe5b049392505050565b60006060836001600160a01b0316836040516110289190611544565b6000604051808303816000865af19150503d8060008114611065576040519150601f19603f3d011682016040523d82523d6000602084013e61106a565b606091505b50915091508161108c5760405162461bcd60e51b815260040161010690611737565b8051156110c357808060200190518101906110a79190611423565b6110c35760405162461bcd60e51b815260040161010690611868565b50505050565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b803561097781611975565b600082601f83011261112c578081fd5b813561113f61113a82611905565b6118de565b81815291506020808301908481018184028601820187101561116057600080fd5b60005b8481101561118857813561117681611975565b84529282019290820190600101611163565b505050505092915050565b600082601f8301126111a3578081fd5b81356111b161113a82611905565b818152915060208083019084810160005b84811015611188578135870188603f8201126111dd57600080fd5b838101356111ed61113a82611925565b81815260408b8184860101111561120357600080fd5b828185018884013750600091810186019190915285525092820192908201906001016111c2565b600082601f83011261123a578081fd5b813561124861113a82611905565b81815291506020808301908481018184028601820187101561126957600080fd5b60005b848110156111885781358452928201929082019060010161126c565b6000806000806080858703121561129d578384fd5b84516112a881611975565b60208601519094506112b981611975565b60408601516060870151919450925067ffffffffffffffff8111156112dc578182fd5b80860187601f8201126112ed578283fd5b805191506112fd61113a83611925565b828152886020848401011115611311578384fd5b611322836020830160208501611949565b9598949750929550505050565b6000806000806000806000806000806101408b8d03121561134e578586fd5b6113588c8c611111565b99506113678c60208d01611111565b985060408b0135975060608b0135965060808b013567ffffffffffffffff80821115611391578788fd5b61139d8e838f0161111c565b975060a08d01359150808211156113b2578687fd5b6113be8e838f0161111c565b965060c08d01359150808211156113d3578586fd5b6113df8e838f0161111c565b955060e08d013594506101008d01359150808211156113fc578384fd5b506114098d828e01611193565b9250506101208b013590509295989b9194979a5092959850565b600060208284031215611434578081fd5b81518015158114610974578182fd5b600060208284031215611454578081fd5b5051919050565b600080600080600080600080610100898b031215611477578384fd5b8835975060208901359650604089013567ffffffffffffffff8082111561149c578586fd5b6114a88c838d0161122a565b975060608b01359150808211156114bd578586fd5b6114c98c838d0161122a565b965060808b01359150808211156114de578586fd5b6114ea8c838d0161111c565b955060a08b01359150808211156114ff578485fd5b61150b8c838d0161111c565b945060c08b0135915080821115611520578384fd5b5061152d8b828c01611193565b92505060e089013590509295985092959890939650565b60008251611556818460208701611949565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b600060018060a01b038086168352808516602084015250606060408301528251806060840152611609816080850160208701611949565b601f01601f191691909101608001949350505050565b6001600160a01b03929092168252602082015260400190565b60208082526017908201527f444f444f526f75746550726f78793a2045585049524544000000000000000000604082015260600190565b6020808252601b908201527f444f444f526f75746550726f78793a2050414952535f454d5054590000000000604082015260600190565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f414441505445525f4e4f546040820152650be9a82a886960d31b606082015260800190565b6020808252602b908201527f444f444f526f75746550726f78793a2052657475726e20616d6f756e7420697360408201526a040dcdee840cadcdeeaced60ab1b606082015260800190565b6020808252818101527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604082015260600190565b6020808252600e908201526d2224ab24a224a723afa2a92927a960911b604082015260600190565b60208082526022908201527f444f444f526f75746550726f78793a2052455455524e5f414d4f554e545f5a45604082015261524f60f01b606082015260800190565b60208082526009908201526829aaa12fa2a92927a960b91b604082015260600190565b60208082526026908201527f444f444f526f75746550726f78793a20504149525f4153534554544f5f4e4f546040820152650be9a82a886960d31b606082015260800190565b6020808252600f908201526e4554485f56414c55455f57524f4e4760881b604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526009908201526826aaa62fa2a92927a960b91b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff811182821017156118fd57600080fd5b604052919050565b600067ffffffffffffffff82111561191b578081fd5b5060209081020190565b600067ffffffffffffffff82111561193b578081fd5b50601f01601f191660200190565b60005b8381101561196457818101518382015260200161194c565b838111156110c35750506000910152565b6001600160a01b038116811461198a57600080fd5b5056fea2646970667358221220e366ef97630f42f2e519a38a6d8b19b0cba96281e3c4d791595de2fdec19a3e164736f6c63430006090033

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

000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000096a75d73b3de29c009863fa6329d96b2181d3dc4

-----Decoded View---------------
Arg [0] : weth (address): 0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7
Arg [1] : dodoApproveProxy (address): 0x96a75d73b3de29c009863fA6329D96b2181D3Dc4

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7
Arg [1] : 00000000000000000000000096a75d73b3de29c009863fa6329d96b2181d3dc4


Deployed Bytecode Sourcemap

13741:7760:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13971:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14915:2111;;;;;;;;;:::i;:::-;;;;;;;;17034:1628;;;;;;;;;:::i;14009:45::-;;;;;;;;;;;;;:::i;13971:31::-;;;:::o;14915:2111::-;15311:20;15292:8;14586:15;14574:8;:27;;14566:63;;;;-1:-1:-1;;;14566:63:0;;;;;;;;;;;;;;;;;15370:1:::1;15352:8;:15;:19;15344:59;;;;-1:-1:-1::0;;;15344:59:0::1;;;;;;;;;15441:11;:18;15422:8;:15;:37;15414:88;;;;-1:-1:-1::0;;;15414:88:0::1;;;;;;;;;15557:1;15540:7;:14;:18;15521:8;:15;:37;15513:88;;;;-1:-1:-1::0;;;15513:88:0::1;;;;;;;;;15638:1;15620:15;:19;15612:66;;;;-1:-1:-1::0;;;15612:66:0::1;;;;;;;;;15712:9:::0;15751:7;15796:15;15691:18:::1;15863:47;-1:-1:-1::0;;;;;15863:35:0;::::1;15899:10;15863:47;:35;:47;:::i;:::-;15832:78;;15931:91;15940:10;15952:7;15960:1;15952:10;;;;;;;;;;;;;;15964;15976:16;13922:42;-1:-1:-1::0;;;;;15994:27:0::1;:10;-1:-1:-1::0;;;;;15994:27:0::1;;15931:8;:91::i;:::-;16040:9;16035:375;16059:8;:15;16055:1;:19;16035:375;;;16113:1;16100:14:::0;::::1;16096:260;;16153:11;16165:1;16153:14;;;;;;;;;;;;;;-1:-1:-1::0;;;;;16140:37:0::1;;16178:7;16186:1;16190;16186:5;16178:14;;;;;;;;;;;;;;16193:8;16202:1;16193:11;;;;;;;;;;;;;;16206:9;16216:1;16206:12;;;;;;;;;;;;;;16140:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16096:260;;;16273:11;16285:1;16273:14;;;;;;;;;;;;;;-1:-1:-1::0;;;;;16260:38:0::1;;16299:7;16307:1;16311;16307:5;16299:14;;;;;;;;;;;;;;16314:8;16323:1;16314:11;;;;;;;;;;;;;;16327:9;16337:1;16327:12;;;;;;;;;;;;;;16260:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16096:260;16397:1;16383:15:::0;;::::1;::::0;16076:3:::1;16035:375;;;-1:-1:-1::0;;;;;;16425:25:0;::::1;13922:42;16425:25;16422:325;;;16482:38;::::0;-1:-1:-1;;;16482:38:0;;-1:-1:-1;;;;;16488:6:0::1;16482:23;::::0;::::1;::::0;:38:::1;::::0;16514:4:::1;::::0;16482:38:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16535:36;::::0;-1:-1:-1;;;16535:36:0;;16467:53;;-1:-1:-1;;;;;;16541:6:0::1;16535:22;::::0;::::1;::::0;:36:::1;::::0;16467:53;;16535:36:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16586:33:0::1;::::0;:10:::1;::::0;-1:-1:-1;16586:33:0;::::1;;;::::0;-1:-1:-1;16606:12:0;;16586:33:::1;::::0;;;16606:12;16586:10;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16422:325;;;16666:69;16714:20:::0;16666:43:::1;-1:-1:-1::0;;;;;16666:31:0;::::1;16698:10;16666:43;:31;:43;:::i;:::-;:47:::0;:69:::1;:47;:69;:::i;:::-;16651:84;;16422:325;16783:15;16767:12;:31;;16759:87;;;;-1:-1:-1::0;;;16759:87:0::1;;;;;;;;;16864:154;16891:10;16916:8;16939:10;16964:16;16995:12;16864:154;;;;;;;;;;;;;;;;;;;14640:1;;;;14915:2111:::0;;;;;;;;;;;;;:::o;17034:1628::-;17393:20;17374:8;14586:15;14574:8;:27;;14566:63;;;;-1:-1:-1;;;14566:63:0;;;;;;;;;17454:11:::1;:18;17434:9;:16;:38;17426:89;;;;-1:-1:-1::0;;;17426:89:0::1;;;;;;;;;17560:1;17542:15;:19;17534:66;;;;-1:-1:-1::0;;;17534:66:0::1;;;;;;;;;17621:24;17648:15;17621:42;;17674:17;17694:8;17703:1;17694:11;;;;;;;;;;;;;;17674:31;;17716:15;17734:8;17761:1;17743:8;:15;:19;17734:29;;;;;;;;;;;;;;17716:47;;17776:28;17807:46;17842:10;17814:7;-1:-1:-1::0;;;;;17807:34:0::1;;;:46;;;;:::i;:::-;17776:77;;17866:91;17875:10;17887:9;17897:1;17887:12;;;;;;;;;;;;;;17901:9;17912:16;13922:42;-1:-1:-1::0;;;;;17930:26:0::1;:9;-1:-1:-1::0;;;;;17930:26:0::1;;17866:8;:91::i;:::-;17970:67;17981:11;17994:8;18004:11;18017:8;18027:9;17970:10;:67::i;:::-;-1:-1:-1::0;;;;;18057:24:0;::::1;13922:42;18057:24;18054:323;;;18113:38;::::0;-1:-1:-1;;;18113:38:0;;-1:-1:-1;;;;;18119:6:0::1;18113:23;::::0;::::1;::::0;:38:::1;::::0;18145:4:::1;::::0;18113:38:::1;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18166:36;::::0;-1:-1:-1;;;18166:36:0;;18098:53;;-1:-1:-1;;;;;;18172:6:0::1;18166:22;::::0;::::1;::::0;:36:::1;::::0;18098:53;;18166:36:::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18217:33:0::1;::::0;:10:::1;::::0;-1:-1:-1;18217:33:0;::::1;;;::::0;-1:-1:-1;18237:12:0;;18217:33:::1;::::0;;;18237:12;18217:10;:33;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;18054:323;;;18297:68;18344:20:::0;18297:42:::1;-1:-1:-1::0;;;;;18297:30:0;::::1;18328:10;18297:42;:30;:42;:::i;:68::-;18282:83;;18054:323;18413:15;18397:12;:31;;18389:87;;;;-1:-1:-1::0;;;18389:87:0::1;;;;;;;;;18498:152;18525:9;18549:7;18571:10;18596:16;18627:12;18498:152;;;;;;;;;;;;;;;;;;;14640:1;;;;17034:1628:::0;;;;;;;;;;;:::o;14009:45::-;;;:::o;12822:228::-;12900:7;12924:12;12930:5;12924;:12::i;:::-;12920:123;;;-1:-1:-1;;;;;;12960:11:0;;;12953:18;;12920:123;13011:20;;-1:-1:-1;;;13011:20:0;;-1:-1:-1;;;;;13011:15:0;;;;;:20;;13027:3;;13011:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13004:27;;12920:123;12822:228;;;;:::o;20937:561::-;21100:5;21096:395;;;21126:10;;21122:249;;21178:6;21165:9;:19;21157:47;;;;-1:-1:-1;;;21157:47:0;;;;;;;;;21229:6;-1:-1:-1;;;;;21223:21:0;;21252:6;21223:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;21284:19:0;;21298:4;21284:19;;-1:-1:-1;21280:75:0;;21305:50;21335:6;21344:2;21348:6;21305:22;:50::i;:::-;21096:395;;;21403:76;;-1:-1:-1;;;21403:76:0;;-1:-1:-1;;;;;21421:20:0;21403:51;;;;:76;;21455:5;;21462:4;;21468:2;;21472:6;;21403:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21096:395;20937:561;;;;;:::o;13058:129::-;13159:20;;-1:-1:-1;;;13159:20:0;;13132:7;;-1:-1:-1;;;;;13159:15:0;;;;;:20;;13175:3;;13159:20;;;;8134:137;8192:7;8225:1;8220;:6;;8212:28;;;;-1:-1:-1;;;8212:28:0;;;;;;;;;-1:-1:-1;8258:5:0;;;8134:137::o;18741:2188::-;18994:1;18978:1944;19001:11;:18;18997:1;:22;18978:1944;;;19103:22;19128:50;19163:9;19175:1;19173;:3;19163:14;;;;;;;;;;;;;;19135:8;19144:1;19135:11;;;;;;;;;;;;;;-1:-1:-1;;;;;19128:34:0;;;:50;;;;:::i;:::-;19103:75;;19193:22;19218:11;19232:1;19230;:3;19218:16;;;;;;;;;;;;;;19193:41;;19267:9;19279:11;19293:1;19291;:3;19279:16;;;;;;;;;;;;;;19267:28;;19263:1648;19301:11;19313:1;19301:14;;;;;;;;;;;;;;19297:1;:18;19263:1648;;;19341:27;;:::i;:::-;19411:12;19425:15;19442;19459:21;19495:12;19508:1;19495:15;;;;;;;;;;;;;;19484:63;;;;;;;;;;;;;;19623:2;19612:13;;;19588:37;;19669:23;19691:1;19669:23;;;;19648:18;;;:44;19742:4;:14;;;19715:23;;;:42;-1:-1:-1;;;;;19780:23:0;;;:16;;;:23;19826:29;;:19;;;:29;19878:20;;;:31;-1:-1:-1;;19952:14:0;;19978:4;;-1:-1:-1;19952:9:0;;-1:-1:-1;;;19962:3:0;;;19952:14;;;;;;;;;;;;-1:-1:-1;;;;;19952:31:0;;19949:595;;;20008:17;20028:58;20071:14;20028:38;20047:11;:18;;;20028:14;:18;;:38;;;;:::i;:::-;:42;:58;:42;:58;:::i;:::-;20008:78;;20126:11;:23;;;20153:1;20126:28;20123:402;;;20269:8;20278:1;20269:11;;;;;;;;;;;;;;-1:-1:-1;;;;;20262:28:0;;20291:11;:19;;;20312:9;20262:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20123:402;;;20451:8;20460:1;20451:11;;;;;;;;;;;;;;-1:-1:-1;;;;;20444:28:0;;20473:11;:16;;;20491:9;20444:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20123:402;19949:595;;20583:21;;20580:316;;20647:11;:19;;;-1:-1:-1;;;;;20634:42:0;;20677:9;20687:1;20677:12;;;;;;;;;;;;;;20691:11;:16;;;20709:11;:20;;;20634:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20580:316;;;20792:11;:19;;;-1:-1:-1;;;;;20779:43:0;;20823:9;20833:1;20823:12;;;;;;;;;;;;;;20837:11;:16;;;20855:11;:20;;;20779:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20580:316;-1:-1:-1;19317:3:0;;19263:1648;;;-1:-1:-1;;;19021:3:0;;18978:1944;;;;18741:2188;;;;;:::o;13195:104::-;-1:-1:-1;;;;;13271:20:0;;12057:42;13271:20;13195:104;;;:::o;9228:211::-;9345:86;9365:5;9395:23;;;9420:2;9424:5;9372:58;;;;;;;;;;;;;;-1:-1:-1;;9372:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9372:58:0;-1:-1:-1;;;;;;9372:58:0;;;;;;;;;;9345:19;:86::i;:::-;9228:211;;;:::o;7455:226::-;7513:7;7537:6;7533:47;;-1:-1:-1;7567:1:0;7560:8;;7533:47;7604:5;;;7608:1;7604;:5;:1;7628:5;;;;;:10;7620:32;;;;-1:-1:-1;;;7620:32:0;;;;;;;;7689:141;7747:7;7779:1;7775;:5;7767:32;;;;-1:-1:-1;;;7767:32:0;;;;;;;;;7821:1;7817;:5;;;;;;;7689:141;-1:-1:-1;;;7689:141:0:o;10801:1046::-;11461:12;11475:23;11510:5;-1:-1:-1;;;;;11502:19:0;11522:4;11502:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11460:67;;;;11546:7;11538:52;;;;-1:-1:-1;;;11538:52:0;;;;;;;;;11607:17;;:21;11603:237;;11762:10;11751:30;;;;;;;;;;;;;;11743:85;;;;-1:-1:-1;;;11743:85:0;;;;;;;;;10801:1046;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130::-;72:20;;97:33;72:20;97:33;;317:707;;434:3;427:4;419:6;415:17;411:27;401:2;;-1:-1;;442:12;401:2;489:6;476:20;511:80;526:64;583:6;526:64;;;511:80;;;619:21;;;502:89;-1:-1;663:4;676:14;;;;651:17;;;765;;;756:27;;;;753:36;-1:-1;750:2;;;802:1;;792:12;750:2;827:1;812:206;837:6;834:1;831:13;812:206;;;85:6;72:20;97:33;124:5;97:33;;;905:50;;969:14;;;;997;;;;859:1;852:9;812:206;;;816:14;;;;;394:630;;;;;1048:705;;1174:3;1167:4;1159:6;1155:17;1151:27;1141:2;;-1:-1;;1182:12;1141:2;1229:6;1216:20;1251:89;1266:73;1332:6;1266:73;;1251:89;1368:21;;;1242:98;-1:-1;1412:4;1425:14;;;;1400:17;;;1520:1;1505:242;1530:6;1527:1;1524:13;1505:242;;;1613:3;1600:17;1404:6;1588:30;2731:3;2712:17;1588:30;2712:17;2708:27;2698:2;;1520:1;;2739:12;2698:2;1412:4;1588:30;;2773:20;2808:64;2823:48;2864:6;2823:48;;2808:64;2892:6;2885:5;2878:21;2916:17;2996:3;2916:17;2987:6;1588:30;2978:16;;2975:25;2972:2;;;1520:1;;3003:12;2972:2;25541:6;2916:17;1588:30;2916:17;1412:4;2954:5;2950:16;25518:30;-1:-1;1520:1;25579:16;;;;;25572:27;;;;1625:59;;-1:-1;1698:14;;;;1726;;;;1552:1;1545:9;1505:242;;1779:707;;1896:3;1889:4;1881:6;1877:17;1873:27;1863:2;;-1:-1;;1904:12;1863:2;1951:6;1938:20;1973:80;1988:64;2045:6;1988:64;;1973:80;2081:21;;;1964:89;-1:-1;2125:4;2138:14;;;;2113:17;;;2227;;;2218:27;;;;2215:36;-1:-1;2212:2;;;2264:1;;2254:12;2212:2;2289:1;2274:206;2299:6;2296:1;2293:13;2274:206;;;3596:20;;2367:50;;2431:14;;;;2459;;;;2321:1;2314:9;2274:206;;3807:801;;;;;3998:3;3986:9;3977:7;3973:23;3969:33;3966:2;;;-1:-1;;4005:12;3966:2;234:6;228:13;246:41;281:5;246:41;;;4176:2;4234:22;;228:13;4057:82;;-1:-1;246:41;228:13;246:41;;;4303:2;4353:22;;3744:13;4443:2;4428:18;;4422:25;4184:82;;-1:-1;3744:13;-1:-1;4467:18;4456:30;;4453:2;;;-1:-1;;4489:12;4453:2;4575:6;4564:9;4560:22;3191:3;3184:4;3176:6;3172:17;3168:27;3158:2;;-1:-1;;3199:12;3158:2;3239:6;3233:13;3219:27;;3261:64;3276:48;3317:6;3276:48;;3261:64;3345:6;3338:5;3331:21;3449:3;4176:2;3440:6;3373;3431:16;;3428:25;3425:2;;;-1:-1;;3456:12;3425:2;3476:39;3508:6;4176:2;3407:5;3403:16;4176:2;3373:6;3369:17;3476:39;;;3960:648;;;;-1:-1;3960:648;;-1:-1;;;;3960:648;4615:1935;;;;;;;;;;;4981:3;4969:9;4960:7;4956:23;4952:33;4949:2;;;-1:-1;;4988:12;4949:2;5050:53;5095:7;5071:22;5050:53;;;5040:63;;5158:53;5203:7;5140:2;5183:9;5179:22;5158:53;;;5148:63;;5248:2;5291:9;5287:22;3596:20;5256:63;;5356:2;5399:9;5395:22;3596:20;5364:63;;5492:3;5481:9;5477:19;5464:33;5517:18;;5509:6;5506:30;5503:2;;;-1:-1;;5539:12;5503:2;5569:78;5639:7;5630:6;5619:9;5615:22;5569:78;;;5559:88;;5712:3;5701:9;5697:19;5684:33;5670:47;;5517:18;5729:6;5726:30;5723:2;;;-1:-1;;5759:12;5723:2;5789:78;5859:7;5850:6;5839:9;5835:22;5789:78;;;5779:88;;5932:3;5921:9;5917:19;5904:33;5890:47;;5517:18;5949:6;5946:30;5943:2;;;-1:-1;;5979:12;5943:2;6009:78;6079:7;6070:6;6059:9;6055:22;6009:78;;;5999:88;;6124:3;6168:9;6164:22;3596:20;6133:63;;6261:3;6250:9;6246:19;6233:33;6219:47;;5517:18;6278:6;6275:30;6272:2;;;-1:-1;;6308:12;6272:2;;6338:87;6417:7;6408:6;6397:9;6393:22;6338:87;;;6328:97;;;6462:3;6506:9;6502:22;3596:20;6471:63;;4943:1607;;;;;;;;;;;;;;6557:257;;6669:2;6657:9;6648:7;6644:23;6640:32;6637:2;;;-1:-1;;6675:12;6637:2;2575:6;2569:13;26340:5;24847:13;24840:21;26318:5;26315:32;26305:2;;-1:-1;;26351:12;6821:263;;6936:2;6924:9;6915:7;6911:23;6907:32;6904:2;;;-1:-1;;6942:12;6904:2;-1:-1;3744:13;;6898:186;-1:-1;6898:186;7091:1819;;;;;;;;;7448:3;7436:9;7427:7;7423:23;7419:33;7416:2;;;-1:-1;;7455:12;7416:2;7538:22;3596:20;7507:63;;7607:2;7650:9;7646:22;3596:20;7615:63;;7743:2;7732:9;7728:18;7715:32;7767:18;;7759:6;7756:30;7753:2;;;-1:-1;;7789:12;7753:2;7819:78;7889:7;7880:6;7869:9;7865:22;7819:78;;;7809:88;;7962:2;7951:9;7947:18;7934:32;7920:46;;7767:18;7978:6;7975:30;7972:2;;;-1:-1;;8008:12;7972:2;8038:78;8108:7;8099:6;8088:9;8084:22;8038:78;;;8028:88;;8181:3;8170:9;8166:19;8153:33;8139:47;;7767:18;8198:6;8195:30;8192:2;;;-1:-1;;8228:12;8192:2;8258:78;8328:7;8319:6;8308:9;8304:22;8258:78;;;8248:88;;8401:3;8390:9;8386:19;8373:33;8359:47;;7767:18;8418:6;8415:30;8412:2;;;-1:-1;;8448:12;8412:2;8478:78;8548:7;8539:6;8528:9;8524:22;8478:78;;;8468:88;;8621:3;8610:9;8606:19;8593:33;8579:47;;7767:18;8638:6;8635:30;8632:2;;;-1:-1;;8668:12;8632:2;;8698:87;8777:7;8768:6;8757:9;8753:22;8698:87;;;8688:97;;;8822:3;8866:9;8862:22;3596:20;8831:63;;7410:1500;;;;;;;;;;;;14234:271;;9696:5;24040:12;9807:52;9852:6;9847:3;9840:4;9833:5;9829:16;9807:52;;;9871:16;;;;;14368:137;-1:-1;;14368:137;14512:222;-1:-1;;;;;24935:54;;;;9137:37;;14639:2;14624:18;;14610:124;14986:684;-1:-1;;;;;24935:54;;;9137:37;;24935:54;;;15398:2;15383:18;;9137:37;24935:54;;;;15489:2;15474:18;;8996:58;15572:2;15557:18;;14185:37;;;;15655:3;15640:19;;14185:37;;;;15233:3;15218:19;;15204:466;15677:556;-1:-1;;;;;24935:54;;;9137:37;;24935:54;;;16053:2;16038:18;;9137:37;24935:54;;16136:2;16121:18;;9137:37;16219:2;16204:18;;14185:37;;;;15888:3;15873:19;;15859:374;16240:528;;4467:18;;24946:42;;;;24939:5;24935:54;9144:3;9137:37;24946:42;24939:5;24935:54;16605:2;16594:9;16590:18;9137:37;;16441:2;16642;16631:9;16627:18;16620:48;9328:5;24040:12;24196:6;16441:2;16430:9;16426:18;24184:19;9421:52;9466:6;24224:14;16430:9;24224:14;16605:2;9447:5;9443:16;9421:52;;;25974:7;25958:14;-1:-1;;25954:28;9485:39;;;;24224:14;9485:39;;16412:356;-1:-1;;;;16412:356;16775:333;-1:-1;;;;;24935:54;;;;9137:37;;17094:2;17079:18;;14185:37;16930:2;16915:18;;16901:207;17115:416;17315:2;17329:47;;;10124:2;17300:18;;;24184:19;10160:25;24224:14;;;10140:46;10205:12;;;17286:245;17538:416;17738:2;17752:47;;;10456:2;17723:18;;;24184:19;10492:29;24224:14;;;10472:50;10541:12;;;17709:245;17961:416;18161:2;18175:47;;;10792:2;18146:18;;;24184:19;10828:34;24224:14;;;10808:55;-1:-1;;;10883:12;;;10876:30;10925:12;;;18132:245;18384:416;18584:2;18598:47;;;11176:2;18569:18;;;24184:19;11212:34;24224:14;;;11192:55;-1:-1;;;11267:12;;;11260:35;11314:12;;;18555:245;18807:416;19007:2;19021:47;;;18992:18;;;24184:19;11601:34;24224:14;;;11581:55;11655:12;;;18978:245;19230:416;19430:2;19444:47;;;11906:2;19415:18;;;24184:19;-1:-1;;;24224:14;;;11922:37;11978:12;;;19401:245;19653:416;19853:2;19867:47;;;12229:2;19838:18;;;24184:19;12265:34;24224:14;;;12245:55;-1:-1;;;12320:12;;;12313:26;12358:12;;;19824:245;20076:416;20276:2;20290:47;;;12609:1;20261:18;;;24184:19;-1:-1;;;24224:14;;;12624:32;12675:12;;;20247:245;20499:416;20699:2;20713:47;;;12926:2;20684:18;;;24184:19;12962:34;24224:14;;;12942:55;-1:-1;;;13017:12;;;13010:30;13059:12;;;20670:245;20922:416;21122:2;21136:47;;;13310:2;21107:18;;;24184:19;-1:-1;;;24224:14;;;13326:38;13383:12;;;21093:245;21345:416;21545:2;21559:47;;;13634:2;21530:18;;;24184:19;13670:34;24224:14;;;13650:55;-1:-1;;;13725:12;;;13718:34;13771:12;;;21516:245;21768:416;21968:2;21982:47;;;14022:1;21953:18;;;24184:19;-1:-1;;;24224:14;;;14037:32;14088:12;;;21939:245;22191:222;14185:37;;;22318:2;22303:18;;22289:124;22420:256;22482:2;22476:9;22508:17;;;22583:18;22568:34;;22604:22;;;22565:62;22562:2;;;22640:1;;22630:12;22562:2;22482;22649:22;22460:216;;-1:-1;22460:216;22683:304;;22842:18;22834:6;22831:30;22828:2;;;-1:-1;;22864:12;22828:2;-1:-1;22909:4;22897:17;;;22962:15;;22765:222;23625:321;;23768:18;23760:6;23757:30;23754:2;;;-1:-1;;23790:12;23754:2;-1:-1;25974:7;23844:17;-1:-1;;23840:33;23931:4;23921:15;;23691:255;25614:268;25679:1;25686:101;25700:6;25697:1;25694:13;25686:101;;;25767:11;;;25761:18;25748:11;;;25741:39;25722:2;25715:10;25686:101;;;25802:6;25799:1;25796:13;25793:2;;;-1:-1;;25679:1;25849:16;;25842:27;25663:219;25995:117;-1:-1;;;;;24935:54;;26054:35;;26044:2;;26103:1;;26093:12;26044:2;26038:74;

Swarm Source

ipfs://e366ef97630f42f2e519a38a6d8b19b0cba96281e3c4d791595de2fdec19a3e1

Block Transaction Gas Used Reward
view all blocks ##produced##

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

Validator Index Block Amount
View All Withdrawals

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

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