Contract 0x074890524059905096caa0d1a7b5715c6203c155

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7f2dcdc48bdf06353ba5312e5fc5d93fdb783180810a0f2edd1a6152fa7643e5Create Crowd Poo...34312782021-11-29 11:41:25849 days 22 hrs ago0x3b138fc7ec06b2a44565994cfde5134a75915995 IN  DODO: Cp Proxy0.02 ETH0.005726812629 ETH1.011895708
0xd689a0c619f720888931a424d2487c8cc42b93f86844ff529c3d213a6de4ccdaCreate Crowd Poo...20027522021-10-07 17:49:55902 days 16 hrs ago0xc40cbf37430cf0c9eaa66eed35e57ca2e327a0fe IN  DODO: Cp Proxy0.02 ETH0.006382695418 ETH1.126995364
0x06fb8c201ed918b543fc894b4d9ebd5842990da91fa1f28142431542171a7794Create Crowd Poo...16833912021-09-27 11:49:01912 days 22 hrs ago0x123bed23ca8e705f48630cb780df683fce163892 IN  DODO: Cp Proxy0.02 ETH0.002981719652 ETH0.567716486
0x806ce707e99a49d02f75fa458f345bff7ca4e9502a8e6c40534c6660c509e253Create Crowd Poo...16704352021-09-27 3:58:42913 days 6 hrs ago0x16121d4a9255601d8c7fb643c1649d0b17732787 IN  DODO: Cp Proxy0.02 ETH0.002983556226 ETH0.546984752
0xe114ff20927d2a85b42156206b03520d55e10d677a956fade6d1cfb953d053c0Create Crowd Poo...13912042021-09-21 6:24:03919 days 4 hrs ago0x769b100c21ccc90dc96ee15b1ff888a446dbe4d9 IN  DODO: Cp Proxy0.02 ETH0.003561931755 ETH0.704428841
0xd79245578308da8ec57d6eb8adc41218c2882da7570f5a6950b09530ff648fd5Create Crowd Poo...13910782021-09-21 6:20:11919 days 4 hrs ago0x769b100c21ccc90dc96ee15b1ff888a446dbe4d9 IN  DODO: Cp Proxy0.02 ETH0.003899486169 ETH0.714289461
0x669938557763eed3fbf4fe0b1f703751ac9156354ee274bcd6e6382e6dc1f5afCreate Crowd Poo...13780492021-09-21 2:15:24919 days 8 hrs ago0x123bed23ca8e705f48630cb780df683fce163892 IN  DODO: Cp Proxy0.02 ETH0.004026048739 ETH0.737798433
0x4fd4514b866a71edcdae44a473bddf81b9154b1c801a51c1ec8e023f1ca6f920Create Crowd Poo...5671092021-09-12 13:10:23927 days 21 hrs ago0x3c9f68e0f63541168907253acd3149b70b2f45c2 IN  DODO: Cp Proxy0.02 ETH0.003649451629 ETH0.696005042
0x99cc3bfcff3049caeb5c09e533bae02c1228696f205d10f0804902afc781f614Create Crowd Poo...2359642021-09-01 8:21:07939 days 2 hrs ago0x8a10c613195176fd4fb9019d561338f9f7275f16 IN  DODO: Cp Proxy0.02 ETH0.005855742969 ETH1.117925502
0x477b3166a5380d8946268916295b87c184aa3d9522662d606b99622865e43797Create Crowd Poo...2270552021-08-31 6:55:58940 days 3 hrs ago0x7081685ff3ff16fb6c0df08ac93bdb7299eeefc9 IN  DODO: Cp Proxy0.02 ETH0.005065127022 ETH1.044858912
0xdfc1f6da32a8b4041e302eeb8937687e1f0aca326f2b3165cb6e5304847a9b17Create Crowd Poo...2270032021-08-31 3:48:46940 days 6 hrs ago0x7081685ff3ff16fb6c0df08ac93bdb7299eeefc9 IN  DODO: Cp Proxy0.02 ETH0.005108115004 ETH0.973238822
0x7df132788b066687218db296427c8766e18f0baf426a806cf93a6768c400764a0x610100602266162021-08-30 9:21:49941 days 1 hr ago0x7081685ff3ff16fb6c0df08ac93bdb7299eeefc9 IN  Create: DODOCpProxy0 ETH0.026346935182 ETH0.868038491
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x7f2dcdc48bdf06353ba5312e5fc5d93fdb783180810a0f2edd1a6152fa7643e534312782021-11-29 11:41:25849 days 22 hrs ago DODO: Cp Proxy 0xa6e6d3a0cbddf00a374860bb0f5da6cf6c905e800.02 ETH
0x7f2dcdc48bdf06353ba5312e5fc5d93fdb783180810a0f2edd1a6152fa7643e534312782021-11-29 11:41:25849 days 22 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0x7f2dcdc48bdf06353ba5312e5fc5d93fdb783180810a0f2edd1a6152fa7643e534312782021-11-29 11:41:25849 days 22 hrs ago DODO: Cp Proxy 0xdde839b65efcf7ea8a7dec7525103c2a21c229070.02 ETH
0x7f2dcdc48bdf06353ba5312e5fc5d93fdb783180810a0f2edd1a6152fa7643e534312782021-11-29 11:41:25849 days 22 hrs ago DODO: Cp Proxy DODO: Approve Proxy V20 ETH
0x7f2dcdc48bdf06353ba5312e5fc5d93fdb783180810a0f2edd1a6152fa7643e534312782021-11-29 11:41:25849 days 22 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0xd689a0c619f720888931a424d2487c8cc42b93f86844ff529c3d213a6de4ccda20027522021-10-07 17:49:55902 days 16 hrs ago DODO: Cp Proxy 0xa6e6d3a0cbddf00a374860bb0f5da6cf6c905e800.02 ETH
0xd689a0c619f720888931a424d2487c8cc42b93f86844ff529c3d213a6de4ccda20027522021-10-07 17:49:55902 days 16 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0xd689a0c619f720888931a424d2487c8cc42b93f86844ff529c3d213a6de4ccda20027522021-10-07 17:49:55902 days 16 hrs ago DODO: Cp Proxy 0xe79a0e5553423acd62a940ff170875073961fe1f0.02 ETH
0xd689a0c619f720888931a424d2487c8cc42b93f86844ff529c3d213a6de4ccda20027522021-10-07 17:49:55902 days 16 hrs ago DODO: Cp Proxy DODO: Approve Proxy V20 ETH
0xd689a0c619f720888931a424d2487c8cc42b93f86844ff529c3d213a6de4ccda20027522021-10-07 17:49:55902 days 16 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0x06fb8c201ed918b543fc894b4d9ebd5842990da91fa1f28142431542171a779416833912021-09-27 11:49:01912 days 22 hrs ago DODO: Cp Proxy 0xa6e6d3a0cbddf00a374860bb0f5da6cf6c905e800.02 ETH
0x06fb8c201ed918b543fc894b4d9ebd5842990da91fa1f28142431542171a779416833912021-09-27 11:49:01912 days 22 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0x06fb8c201ed918b543fc894b4d9ebd5842990da91fa1f28142431542171a779416833912021-09-27 11:49:01912 days 22 hrs ago DODO: Cp Proxy 0x170f3bc2c5ef52c076554b63bb174d407bbd4f7d0.02 ETH
0x06fb8c201ed918b543fc894b4d9ebd5842990da91fa1f28142431542171a779416833912021-09-27 11:49:01912 days 22 hrs ago DODO: Cp Proxy DODO: Approve Proxy V20 ETH
0x06fb8c201ed918b543fc894b4d9ebd5842990da91fa1f28142431542171a779416833912021-09-27 11:49:01912 days 22 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0x806ce707e99a49d02f75fa458f345bff7ca4e9502a8e6c40534c6660c509e25316704352021-09-27 3:58:42913 days 6 hrs ago DODO: Cp Proxy 0xa6e6d3a0cbddf00a374860bb0f5da6cf6c905e800.02 ETH
0x806ce707e99a49d02f75fa458f345bff7ca4e9502a8e6c40534c6660c509e25316704352021-09-27 3:58:42913 days 6 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0x806ce707e99a49d02f75fa458f345bff7ca4e9502a8e6c40534c6660c509e25316704352021-09-27 3:58:42913 days 6 hrs ago DODO: Cp Proxy 0xce8ff014becd75c72485e52bc06dcc8e9150f1670.02 ETH
0x806ce707e99a49d02f75fa458f345bff7ca4e9502a8e6c40534c6660c509e25316704352021-09-27 3:58:42913 days 6 hrs ago DODO: Cp Proxy DODO: Approve Proxy V20 ETH
0x806ce707e99a49d02f75fa458f345bff7ca4e9502a8e6c40534c6660c509e25316704352021-09-27 3:58:42913 days 6 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0xe114ff20927d2a85b42156206b03520d55e10d677a956fade6d1cfb953d053c013912042021-09-21 6:24:03919 days 4 hrs ago DODO: Cp Proxy 0xa6e6d3a0cbddf00a374860bb0f5da6cf6c905e800.02 ETH
0xe114ff20927d2a85b42156206b03520d55e10d677a956fade6d1cfb953d053c013912042021-09-21 6:24:03919 days 4 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
0xe114ff20927d2a85b42156206b03520d55e10d677a956fade6d1cfb953d053c013912042021-09-21 6:24:03919 days 4 hrs ago DODO: Cp Proxy 0xe15f0a16b244b72e2afef6ebf3d316d0a347defc0.02 ETH
0xe114ff20927d2a85b42156206b03520d55e10d677a956fade6d1cfb953d053c013912042021-09-21 6:24:03919 days 4 hrs ago DODO: Cp Proxy DODO: Approve Proxy V20 ETH
0xe114ff20927d2a85b42156206b03520d55e10d677a956fade6d1cfb953d053c013912042021-09-21 6:24:03919 days 4 hrs ago DODO: Cp Proxy DODO: DODO Crowd Pooling Factory0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DODOCpProxy

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 Arbiscan.io on 2021-08-30
*/

// File: contracts/intf/IDODOApprove.sol

/*

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

*/

pragma solidity 0.6.9;

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/SmartRoute/intf/IDODOV2.sol


interface IDODOV2 {

    //========== Common ==================

    function sellBase(address to) external returns (uint256 receiveQuoteAmount);

    function sellQuote(address to) external returns (uint256 receiveBaseAmount);

    function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve);

    function _BASE_TOKEN_() external view returns (address);

    function _QUOTE_TOKEN_() external view returns (address);

    function getPMMStateForCall() external view returns (
            uint256 i,
            uint256 K,
            uint256 B,
            uint256 Q,
            uint256 B0,
            uint256 Q0,
            uint256 R
    );

    function getUserFeeRate(address user) external view returns (uint256 lpFeeRate, uint256 mtFeeRate);

    
    function getDODOPoolBidirection(address token0, address token1) external view returns (address[] memory, address[] memory);

    //========== DODOVendingMachine ========
    
    function createDODOVendingMachine(
        address baseToken,
        address quoteToken,
        uint256 lpFeeRate,
        uint256 i,
        uint256 k,
        bool isOpenTWAP
    ) external returns (address newVendingMachine);
    
    function buyShares(address to) external returns (uint256,uint256,uint256);


    //========== DODOPrivatePool ===========

    function createDODOPrivatePool() external returns (address newPrivatePool);

    function initDODOPrivatePool(
        address dppAddress,
        address creator,
        address baseToken,
        address quoteToken,
        uint256 lpFeeRate,
        uint256 k,
        uint256 i,
        bool isOpenTwap
    ) external;

    function reset(
        address operator,
        uint256 newLpFeeRate,
        uint256 newI,
        uint256 newK,
        uint256 baseOutAmount,
        uint256 quoteOutAmount,
        uint256 minBaseReserve,
        uint256 minQuoteReserve
    ) external returns (bool); 


    function _OWNER_() external returns (address);
    
    //========== CrowdPooling ===========

    function createCrowdPooling() external returns (address payable newCrowdPooling);

    function initCrowdPooling(
        address cpAddress,
        address creator,
        address baseToken,
        address quoteToken,
        uint256[] memory timeLine,
        uint256[] memory valueList,
        bool isOpenTWAP
    ) external;

    function bid(address to) external;
}

// 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/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/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/ReentrancyGuard.sol


/**
 * @title ReentrancyGuard
 * @author DODO Breeder
 *
 * @notice Protect functions from Reentrancy Attack
 */
contract ReentrancyGuard {
    // https://solidity.readthedocs.io/en/latest/control-structures.html?highlight=zero-state#scoping-and-declarations
    // zero-state of _ENTERED_ is false
    bool private _ENTERED_;

    modifier preventReentrant() {
        require(!_ENTERED_, "REENTRANT");
        _ENTERED_ = true;
        _;
        _ENTERED_ = false;
    }
}

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



/**
 * @title DODOCpProxy
 * @author DODO Breeder
 *
 * @notice CrowdPooling && UpCrowdPooling Proxy
 */
contract DODOCpProxy is ReentrancyGuard {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

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

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

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

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

    fallback() external payable {}

    receive() external payable {}

    constructor(
        address payable weth,
        address cpFactory,
        address upCpFactory,
        address dodoApproveProxy
    ) public {
        _WETH_ = weth;
        _CP_FACTORY_ = cpFactory;
        _UPCP_FACTORY_ = upCpFactory;
        _DODO_APPROVE_PROXY_ = dodoApproveProxy;
    }

    //============ UpCrowdPooling Functions (create) ============

    function createUpCrowdPooling(
        address baseToken,
        address quoteToken,
        uint256 baseInAmount,
        uint256[] memory timeLine,
        uint256[] memory valueList,
        bool isOpenTWAP,
        uint256 deadLine
    ) external payable preventReentrant judgeExpired(deadLine) returns (address payable newUpCrowdPooling) {
        address _baseToken = baseToken;
        address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken;
        
        newUpCrowdPooling = IDODOV2(_UPCP_FACTORY_).createCrowdPooling();

        _deposit(
            msg.sender,
            newUpCrowdPooling,
            _baseToken,
            baseInAmount,
            false
        );

        (bool success, ) = newUpCrowdPooling.call{value: msg.value}("");
        require(success, "DODOCpProxy: Transfer failed");

        IDODOV2(_UPCP_FACTORY_).initCrowdPooling(
            newUpCrowdPooling,
            msg.sender,
            _baseToken,
            _quoteToken,
            timeLine,
            valueList,
            isOpenTWAP
        );
    }

    //============ CrowdPooling Functions (create) ============

    function createCrowdPooling(
        address baseToken,
        address quoteToken,
        uint256 baseInAmount,
        uint256[] memory timeLine,
        uint256[] memory valueList,
        bool isOpenTWAP,
        uint256 deadLine
    ) external payable preventReentrant judgeExpired(deadLine) returns (address payable newCrowdPooling) {
        address _baseToken = baseToken;
        address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken;
        
        newCrowdPooling = IDODOV2(_CP_FACTORY_).createCrowdPooling();

        _deposit(
            msg.sender,
            newCrowdPooling,
            _baseToken,
            baseInAmount,
            false
        );
        
        (bool success, ) = newCrowdPooling.call{value: msg.value}("");
        require(success, "DODOCpProxy: Transfer failed");

        IDODOV2(_CP_FACTORY_).initCrowdPooling(
            newCrowdPooling,
            msg.sender,
            _baseToken,
            _quoteToken,
            timeLine,
            valueList,
            isOpenTWAP
        );
    }

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

    function _deposit(
        address from,
        address to,
        address token,
        uint256 amount,
        bool isETH
    ) internal {
        if (isETH) {
            if (amount > 0) {
                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 ABI

[{"inputs":[{"internalType":"address payable","name":"weth","type":"address"},{"internalType":"address","name":"cpFactory","type":"address"},{"internalType":"address","name":"upCpFactory","type":"address"},{"internalType":"address","name":"dodoApproveProxy","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_CP_FACTORY_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DODO_APPROVE_PROXY_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_UPCP_FACTORY_","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":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"uint256","name":"baseInAmount","type":"uint256"},{"internalType":"uint256[]","name":"timeLine","type":"uint256[]"},{"internalType":"uint256[]","name":"valueList","type":"uint256[]"},{"internalType":"bool","name":"isOpenTWAP","type":"bool"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"createCrowdPooling","outputs":[{"internalType":"address payable","name":"newCrowdPooling","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"baseToken","type":"address"},{"internalType":"address","name":"quoteToken","type":"address"},{"internalType":"uint256","name":"baseInAmount","type":"uint256"},{"internalType":"uint256[]","name":"timeLine","type":"uint256[]"},{"internalType":"uint256[]","name":"valueList","type":"uint256[]"},{"internalType":"bool","name":"isOpenTWAP","type":"bool"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"createUpCrowdPooling","outputs":[{"internalType":"address payable","name":"newUpCrowdPooling","type":"address"}],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61010060405234801561001157600080fd5b50604051610f24380380610f248339818101604052608081101561003457600080fd5b508051602082015160408301516060938401516001600160601b031993851b841660805291841b831660e052831b821660c05290911b1660a05260805160601c60a05160601c60c05160601c60e05160601c610e486100dc6000398061045852806105955280610ab0525080610749528061085d528061099a525080610a8c5280610bcc525080610434528061072552806108395280610ae05280610b685250610e486000f3fe6080604052600436106100595760003560e01c8063018c9fda146100625780630d4eec8f146101c85780633afe1f4c146101dd5780638fe21dec146101f2578063eb99be121461033c578063faa980e41461035157610060565b3661006057005b005b6101ac600480360360e081101561007857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460208302840111600160201b831117156100e557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460208302840111600160201b8311171561016757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505080351515915060200135610366565b604080516001600160a01b039092168252519081900360200190f35b3480156101d457600080fd5b506101ac610723565b3480156101e957600080fd5b506101ac610747565b6101ac600480360360e081101561020857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050508035151591506020013561076b565b34801561034857600080fd5b506101ac610a8a565b34801561035d57600080fd5b506101ac610aae565b6000805460ff16156103ab576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff191660011790558142811015610405576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104325789610454565b7f00000000000000000000000000000000000000000000000000000000000000005b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505050506040513d60208110156104db57600080fd5b505193506104ed3385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d8060008114610538576040519150601f19603f3d011682016040523d82523d6000602084013e61053d565b606091505b5050905080610593576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b8381101561068657818101518382015260200161066e565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156106c55781810151838201526020016106ad565b505050509050019950505050505050505050600060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b50506000805460ff1916905550949c9b505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000805460ff16156107b0576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff19166001179055814281101561080a576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146108375789610859565b7f00000000000000000000000000000000000000000000000000000000000000005b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b505193506108f23385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b5050905080610998576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360008381101561068657818101518382015260200161066e565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b8015610b93578115610b8e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506001600160a01b03851630149050610b8e57610b8e7f00000000000000000000000000000000000000000000000000000000000000008584610c36565b610c2f565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c88908490610c8d565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ccb5780518252601f199092019160209182019101610cac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b509150915081610d89576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610de257808060200190516020811015610da557600080fd5b5051610de25760405162461bcd60e51b815260040180806020018281038252602a815260200180610de9602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122099c282afac42525d96cc0493fac53510e9e3427aebafca9f301852fb2ba6311364736f6c6343000609003300000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd89218000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c25000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f0

Deployed Bytecode

0x6080604052600436106100595760003560e01c8063018c9fda146100625780630d4eec8f146101c85780633afe1f4c146101dd5780638fe21dec146101f2578063eb99be121461033c578063faa980e41461035157610060565b3661006057005b005b6101ac600480360360e081101561007857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460208302840111600160201b831117156100e557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460208302840111600160201b8311171561016757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505080351515915060200135610366565b604080516001600160a01b039092168252519081900360200190f35b3480156101d457600080fd5b506101ac610723565b3480156101e957600080fd5b506101ac610747565b6101ac600480360360e081101561020857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050508035151591506020013561076b565b34801561034857600080fd5b506101ac610a8a565b34801561035d57600080fd5b506101ac610aae565b6000805460ff16156103ab576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff191660011790558142811015610405576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104325789610454565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab15b90507f0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd892186001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505050506040513d60208110156104db57600080fd5b505193506104ed3385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d8060008114610538576040519150601f19603f3d011682016040523d82523d6000602084013e61053d565b606091505b5050905080610593576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd892186001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b8381101561068657818101518382015260200161066e565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156106c55781810151838201526020016106ad565b505050509050019950505050505050505050600060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b50506000805460ff1916905550949c9b505050505050505050505050565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181565b7f000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c2581565b6000805460ff16156107b0576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff19166001179055814281101561080a576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146108375789610859565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab15b90507f000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c256001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b505193506108f23385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b5050905080610998576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c256001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360008381101561068657818101518382015260200161066e565b7f000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f081565b7f0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd8921881565b8015610b93578115610b8e577f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506001600160a01b03851630149050610b8e57610b8e7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18584610c36565b610c2f565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f090921691630a5ea4669160848082019260009290919082900301818387803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c88908490610c8d565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ccb5780518252601f199092019160209182019101610cac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b509150915081610d89576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610de257808060200190516020811015610da557600080fd5b5051610de25760405162461bcd60e51b815260040180806020018281038252602a815260200180610de9602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122099c282afac42525d96cc0493fac53510e9e3427aebafca9f301852fb2ba6311364736f6c63430006090033

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

00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd89218000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c25000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f0

-----Decoded View---------------
Arg [0] : weth (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Arg [1] : cpFactory (address): 0x6E5f239f729c83E976a7A280F81Dd1685dd89218
Arg [2] : upCpFactory (address): 0xE92787F457F541a9D5Ae17C1dbdBffA8D3BA3C25
Arg [3] : dodoApproveProxy (address): 0x311E670c3305a0BD55184c1C6580eBeA1FA611F0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [1] : 0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd89218
Arg [2] : 000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c25
Arg [3] : 000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f0


Deployed ByteCode Sourcemap

15099:3920:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17348:1100;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17348:1100:0;;;;;;;;-1:-1:-1;17348:1100:0;;-1:-1:-1;;;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17348:1100:0;;-1:-1:-1;;;;17348:1100:0;;;;;-1:-1:-1;17348:1100:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;17348:1100:0;;;;;;;;;;;;;;15340:31;;;;;;;;;;;;;:::i;15430:39::-;;;;;;;;;;;;;:::i;16165:1108::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16165:1108:0;;;;;;;;-1:-1:-1;16165:1108:0;;-1:-1:-1;;;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16165:1108:0;;-1:-1:-1;;;;16165:1108:0;;;;;-1:-1:-1;16165:1108:0;;;;:::i;15378:45::-;;;;;;;;;;;;;:::i;15476:37::-;;;;;;;;;;;;;:::i;17348:1100::-;17663:31;14822:9;;;;14821:10;14813:32;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;;;;14856:9;:16;;-1:-1:-1;;14856:16:0;14868:4;14856:16;;;17644:8;15639:15:::1;15627:27:::0;::::1;;15619:60;;;::::0;;-1:-1:-1;;;15619:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15619:60:0;;;;;;;;;;;;;::::1;;17728:9:::0;17707:18:::2;-1:-1:-1::0;;;;;17770:27:0;::::2;15291:42;17770:27;:49;;17809:10;17770:49;;;17800:6;17770:49;17748:71;;17866:12;-1:-1:-1::0;;;;;17858:40:0::2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;17858:42:0;;-1:-1:-1;17913:146:0::2;17936:10;17858:42:::0;17991:10;18016:12;18043:5:::2;17913:8;:146::i;:::-;18099:42;::::0;18081:12:::2;::::0;-1:-1:-1;;;;;18099:20:0;::::2;::::0;18127:9:::2;::::0;18081:12;18099:42;18081:12;18099:42;18127:9;18099:20;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18080:61;;;18160:7;18152:48;;;::::0;;-1:-1:-1;;;18152:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;18221:12;-1:-1:-1::0;;;;;18213:38:0::2;;18266:15;18296:10;18321;18346:11;18372:8;18395:9;18419:10;18213:227;;;;;;;;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14907:5:0;14895:17;;-1:-1:-1;;14895:17:0;;;-1:-1:-1;17348:1100:0;;;-1:-1:-1;;;;;;;;;;;;17348:1100:0:o;15340:31::-;;;:::o;15430:39::-;;;:::o;16165:1108::-;16482:33;14822:9;;;;14821:10;14813:32;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;;;;14856:9;:16;;-1:-1:-1;;14856:16:0;14868:4;14856:16;;;16463:8;15639:15:::1;15627:27:::0;::::1;;15619:60;;;::::0;;-1:-1:-1;;;15619:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15619:60:0;;;;;;;;;;;;;::::1;;16549:9:::0;16528:18:::2;-1:-1:-1::0;;;;;16591:27:0;::::2;15291:42;16591:27;:49;;16630:10;16591:49;;;16621:6;16591:49;16569:71;;16689:14;-1:-1:-1::0;;;;;16681:42:0::2;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;16681:44:0;;-1:-1:-1;16738:148:0::2;16761:10;16681:44:::0;16818:10;16843:12;16870:5:::2;16738:8;:148::i;:::-;16918:44;::::0;16900:12:::2;::::0;-1:-1:-1;;;;;16918:22:0;::::2;::::0;16948:9:::2;::::0;16900:12;16918:44;16900:12;16918:44;16948:9;16918:22;:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16899:63;;;16981:7;16973:48;;;::::0;;-1:-1:-1;;;16973:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;17042:14;-1:-1:-1::0;;;;;17034:40:0::2;;17089:17;17121:10;17146;17171:11;17197:8;17220:9;17244:10;17034:231;;;;;;;;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;15378:45:::0;;;:::o;15476:37::-;;;:::o;18521:495::-;18684:5;18680:329;;;18710:10;;18706:183;;18747:6;-1:-1:-1;;;;;18741:21:0;;18770:6;18741:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;18802:19:0;;18816:4;18802:19;;-1:-1:-1;18798:75:0;;18823:50;18853:6;18862:2;18866:6;18823:22;:50::i;:::-;18680:329;;;18921:76;;;-1:-1:-1;;;18921:76:0;;-1:-1:-1;;;;;18921:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18939:20;18921:51;;;;;;:76;;;;;-1:-1:-1;;18921:76:0;;;;;;;;-1:-1:-1;18921:51:0;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:329;18521:495;;;;;:::o;11082:211::-;11226:58;;;-1:-1:-1;;;;;11226:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11226:58:0;-1:-1:-1;;;11226:58:0;;;11199:86;;11219:5;;11199:19;:86::i;:::-;11082:211;;;:::o;12655:1046::-;13315:12;13329:23;13364:5;-1:-1:-1;;;;;13356:19:0;13376:4;13356:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13356:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13314:67;;;;13400:7;13392:52;;;;;-1:-1:-1;;;13392:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13461:17;;:21;13457:237;;13616:10;13605:30;;;;;;;;;;;;;;;-1:-1:-1;13605:30:0;13597:85;;;;-1:-1:-1;;;13597:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12655:1046;;;;:::o

Metadata Hash

99c282afac42525d96cc0493fac53510e9e3427aebafca9f301852fb2ba63113
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.