Contract 0xfdD51aAba2f949195a460121aA3f2D392d2524A9

 

Contract Overview

DODO: Cp Proxy V2
Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe6d99464613cee47b7cc9db031a33505fc74a0bc064c785b6fc33fb7dbc3d043Create Crowd Poo...334319022022-09-22 16:42:1278 days 3 hrs ago0xcd2652b8fbda43d0eb3e121e77bdc528b141a8e7 IN  DODO: Cp Proxy V20.2 MATIC0.01885233001 30.000000016
0x9f5fdb1442b42767f06351b92cce24a372b4f48814e699f6635f2a4b284ba50eCreate Crowd Poo...236750562022-01-13 14:56:30330 days 5 hrs ago0xf29f53782c13fcf87681ad50ed4c5ab0ed5c47ec IN  DODO: Cp Proxy V20.2 MATIC0.021073765934.1
0x6baf07333f4e7d62018103b6aba840a30d5452b554c15e728193eeee3b5a23a5Create Crowd Poo...236692232022-01-13 11:22:56330 days 8 hrs ago0x546d090bbcec3d96903d41e38c3436c1c601af9c IN  DODO: Cp Proxy V20.2 MATIC0.201329534322
0x076237d71a14aac327173ad173f670c618072d44475c7f91269cab942aabb1abCreate Up Crowd ...236462542022-01-12 21:17:14330 days 23 hrs ago0x50fd5e4e2319c8e76eb11827f942b847719fafc3 IN  DODO: Cp Proxy V20.2 MATIC0.01959277859230.320367
0x2a1fce39feb9219e3f913774e22a7d3ff97aa8259f72d6e10d4dd7a54f32edbcCreate Crowd Poo...236420292022-01-12 18:41:20331 days 1 hr ago0x866555093f07e26447e09e93c6326ffec9524e47 IN  DODO: Cp Proxy V20.2 MATIC0.01977785632
0xc42e5f8bfd9d35017c9d8eb039b89f7afe2a468c9ca1f5a4e76946d20397e5cbCreate Up Crowd ...236415752022-01-12 18:19:20331 days 1 hr ago0x866555093f07e26447e09e93c6326ffec9524e47 IN  DODO: Cp Proxy V20.2 MATIC0.020298632430.6
0x06f7ce846748a2f953d218ac44a4f36e393fb378446fe406de4e5e49de519f2fCreate Crowd Poo...236398392022-01-12 17:17:31331 days 3 hrs ago0xafc01e26780317423086a3a6c427ff17d51af381 IN  DODO: Cp Proxy V20.2 MATIC0.024751240
0xb7c38d2afd82e3a6754b66d2f59f6846c74f57618d3aad3b5b0b10542a9efd87Create Up Crowd ...235699012022-01-10 21:09:16332 days 23 hrs ago0xd943e8ac302f605241433a380b4b8fbadf54a987 IN  DODO: Cp Proxy V20.2 MATIC0.00556174968.800000001
0x5315b29e2eec9d233dc802c5c17e8b891fd4b93abeae463c0b5b3b7cc2c1224bCreate Crowd Poo...235628402022-01-10 16:37:53333 days 3 hrs ago0xfd12e8802178b156fdd5a5fc1c2044608d8412c9 IN  DODO: Cp Proxy V20.2 MATIC0.027431759345.1
0x8ec3c6422c44658f361b23ce6d807125e87cf2a27473d8a3d5cceeba24e7921fCreate Up Crowd ...235533582022-01-10 10:18:55333 days 10 hrs ago0x3761f56c8191730db5780d1d328dc9338162ec58 IN  DODO: Cp Proxy V20.2 MATIC0.0198991830
0xb859d814dbb219177518fa640de18bb8fa2a70775c942feaef12e4aa1c6fc8deCreate Crowd Poo...235224982022-01-09 15:26:41334 days 4 hrs ago0x3018dedcf8de5ba4c25ba44fa75a8d627e2675e0 IN  DODO: Cp Proxy V20.2 MATIC0.0189709230
0x5f9936a830b45486656ebe9cc0f0c877d47370ec90f72158663b769e5bc911b0Create Crowd Poo...232549532022-01-02 8:47:21341 days 11 hrs ago0xc2bdff1997a03f2c06889f2f9db732a47d14ef29 IN  DODO: Cp Proxy V20.2 MATIC0.0184549830
0x4d590b89804f6b459e21dfda33604dae2bac8f6b36450a7d66b397eb56a89463Create Up Crowd ...232518982022-01-02 6:57:53341 days 13 hrs ago0x2098d455ed6eb252b6471ffe74579917a219dfe3 IN  DODO: Cp Proxy V20.2 MATIC0.0205635431
0x437319892bd18833e1b52af5aee256a0d93068bb72a8c4437008f21964f276c8Create Up Crowd ...232164182022-01-01 9:04:51342 days 11 hrs ago0x122dc8d320c96f8fab4bcad796fd9ebd8c7f833f IN  DODO: Cp Proxy V20.2 MATIC0.040170354467.1
0x4dd293c1c6ca16ed803979c8f23a4b2f2664979eb0d90eb5cc24be5d6bac34e1Create Up Crowd ...232162012022-01-01 8:57:25342 days 11 hrs ago0x122dc8d320c96f8fab4bcad796fd9ebd8c7f833f IN  DODO: Cp Proxy V20.2 MATIC0.042464369267.1
0x52687010391b796e5bb46e499a107d3fe16613989afd719f1fd2a3545ce0c693Create Crowd Poo...231974842021-12-31 21:47:44342 days 22 hrs ago0xdccb15efef8c330f5c7748e086721f16551ab0b5 IN  DODO: Cp Proxy V20.2 MATIC0.0250765640
0xf65d54a890dea77b0ee19920fc572e38c12e57a242e5dde01514476b4a12dfb2Create Crowd Poo...231926562021-12-31 18:48:46343 days 1 hr ago0x76914515f5fbf344e0cf3486f3db100bfe925d42 IN  DODO: Cp Proxy V20.2 MATIC0.10434006165
0xd3cabe12fd73f7579210897e4e6864912c96bb97c6381dbba7d9ad68d8faddafCreate Crowd Poo...231785482021-12-31 10:19:55343 days 9 hrs ago0x5274dce8c9973586c39ffed6402e2fce9ca6e1cc IN  DODO: Cp Proxy V20.2 MATIC0.0259785640
0x81d98a503ff1e3e4af855ad5f31656b151fd88e3cf86033468111359a31d7024Create Crowd Poo...231489112021-12-30 16:55:14344 days 3 hrs ago0x76914515f5fbf344e0cf3486f3db100bfe925d42 IN  DODO: Cp Proxy V20.2 MATIC0.018970230.000000001
0xbdb3643025cc4d0ec0ecafd2c5921a93e81972188c3debe0447b3001732a6b18Create Crowd Poo...231474902021-12-30 16:03:19344 days 4 hrs ago0x76914515f5fbf344e0cf3486f3db100bfe925d42 IN  DODO: Cp Proxy V20.2 MATIC0.0189687630
0xb005774eac0ae78d7d3a6296c9efb22811d8bac9e4cb18739cd6c7b792afedeaCreate Crowd Poo...231214692021-12-30 0:02:31344 days 20 hrs ago0xb431ced7ae64b4cf6570c99522b14e5f3fa0343d IN  DODO: Cp Proxy V20.2 MATIC0.0194846430
0xb7d9c00f07eed7446311707e32366cff1e7c593b7981fb821dd9b5a31069b6c9Create Crowd Poo...230682962021-12-28 15:36:25346 days 4 hrs ago0x15ecf5d7ab15a1f37fd4e83b53dba890ae51b761 IN  DODO: Cp Proxy V20.2 MATIC0.01805430
0x91b2f5506a8f1a5d007cf6b37f0fdc31eff77ec022aa1179ee918affe6e506f4Create Up Crowd ...230380002021-12-27 21:26:48346 days 22 hrs ago0xac787717da67b450e221e281579e20dc2a6d2b26 IN  DODO: Cp Proxy V20.2 MATIC0.018504930
0x4b57c0c68739edf642604bd1a6a3254ad266047d7f39d646cf1fce4644f02579Create Crowd Poo...230247912021-12-27 13:17:09347 days 7 hrs ago0x4c2f8b13561389c10201c0179084f699697aa71d IN  DODO: Cp Proxy V20.2 MATIC0.0194842830
0x6c651293824a7ae7eaefc9463652dc15ea9eb56420dccf89f9423564730d2a7dCreate Crowd Poo...229499702021-12-25 15:21:53349 days 4 hrs ago0x7a992866346e88cecf8b391da0e43c82083a69ce IN  DODO: Cp Proxy V20.2 MATIC0.0187156230
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xe6d99464613cee47b7cc9db031a33505fc74a0bc064c785b6fc33fb7dbc3d043334319022022-09-22 16:42:1278 days 3 hrs ago DODO: Cp Proxy V2 0xf3170516af9881db1ebd1165df47a74e7842d4d20.2 MATIC
0x9f5fdb1442b42767f06351b92cce24a372b4f48814e699f6635f2a4b284ba50e236750562022-01-13 14:56:30330 days 5 hrs ago DODO: Cp Proxy V2 0x705ae74209a690146597985cad8a8a20fed44be80.2 MATIC
0x6baf07333f4e7d62018103b6aba840a30d5452b554c15e728193eeee3b5a23a5236692232022-01-13 11:22:56330 days 8 hrs ago DODO: Cp Proxy V2 0x4e974ec8586f4ba8b836257da8267593ac7c0f740.2 MATIC
0x076237d71a14aac327173ad173f670c618072d44475c7f91269cab942aabb1ab236462542022-01-12 21:17:14330 days 23 hrs ago DODO: Cp Proxy V2 0x78aaafd7956e582df4860b4677ae7fbb5d4de2730.2 MATIC
0x2a1fce39feb9219e3f913774e22a7d3ff97aa8259f72d6e10d4dd7a54f32edbc236420292022-01-12 18:41:20331 days 1 hr ago DODO: Cp Proxy V2 0xf936643a778d01f720aeb97c9bc2f79feb2ef5bf0.2 MATIC
0xc42e5f8bfd9d35017c9d8eb039b89f7afe2a468c9ca1f5a4e76946d20397e5cb236415752022-01-12 18:19:20331 days 1 hr ago DODO: Cp Proxy V2 0x145783f204d7cf79bf5ffc7762e6617074d27baa0.2 MATIC
0x06f7ce846748a2f953d218ac44a4f36e393fb378446fe406de4e5e49de519f2f236398392022-01-12 17:17:31331 days 3 hrs ago DODO: Cp Proxy V2 0x28ba65f33b45370556d1f4a28c79962de0acef7f0.2 MATIC
0xb7c38d2afd82e3a6754b66d2f59f6846c74f57618d3aad3b5b0b10542a9efd87235699012022-01-10 21:09:16332 days 23 hrs ago DODO: Cp Proxy V2 0x2e6ecdc131934171499e824e960867087a918eb20.2 MATIC
0x5315b29e2eec9d233dc802c5c17e8b891fd4b93abeae463c0b5b3b7cc2c1224b235628402022-01-10 16:37:53333 days 3 hrs ago DODO: Cp Proxy V2 0x4844855134f57fdecddbe9859da10c7e6c66af610.2 MATIC
0x8ec3c6422c44658f361b23ce6d807125e87cf2a27473d8a3d5cceeba24e7921f235533582022-01-10 10:18:55333 days 10 hrs ago DODO: Cp Proxy V2 0x59611c598289f13b5805f3a710542f02620eeeeb0.2 MATIC
0xb859d814dbb219177518fa640de18bb8fa2a70775c942feaef12e4aa1c6fc8de235224982022-01-09 15:26:41334 days 4 hrs ago DODO: Cp Proxy V2 0xe3552cef7686abbc7de19a35a1656c82002760a40.2 MATIC
0x5f9936a830b45486656ebe9cc0f0c877d47370ec90f72158663b769e5bc911b0232549532022-01-02 8:47:21341 days 11 hrs ago DODO: Cp Proxy V2 0x66e3aa3e2bd591691b782b9c213db4f0d5ed3c0f0.2 MATIC
0x4d590b89804f6b459e21dfda33604dae2bac8f6b36450a7d66b397eb56a89463232518982022-01-02 6:57:53341 days 13 hrs ago DODO: Cp Proxy V2 0xab2a4ef41b1e919dfe86d2d899f9e7050f7b28cd0.2 MATIC
0x437319892bd18833e1b52af5aee256a0d93068bb72a8c4437008f21964f276c8232164182022-01-01 9:04:51342 days 11 hrs ago DODO: Cp Proxy V2 0x6f39cae8a65f19519e978c23372d0fa87f82095e0.2 MATIC
0x4dd293c1c6ca16ed803979c8f23a4b2f2664979eb0d90eb5cc24be5d6bac34e1232162012022-01-01 8:57:25342 days 11 hrs ago DODO: Cp Proxy V2 0x7c86892880b757330ac9f08d4f4c0acdd68b578f0.2 MATIC
0x52687010391b796e5bb46e499a107d3fe16613989afd719f1fd2a3545ce0c693231974842021-12-31 21:47:44342 days 22 hrs ago DODO: Cp Proxy V2 0xecb2e16fb6c7ae89b7b5e382a31478c634b0febd0.2 MATIC
0xf65d54a890dea77b0ee19920fc572e38c12e57a242e5dde01514476b4a12dfb2231926562021-12-31 18:48:46343 days 1 hr ago DODO: Cp Proxy V2 0xe77830ea8f4a29b5db6079422fd74d7f54107f3a0.2 MATIC
0xd3cabe12fd73f7579210897e4e6864912c96bb97c6381dbba7d9ad68d8faddaf231785482021-12-31 10:19:55343 days 9 hrs ago DODO: Cp Proxy V2 0xd70ea35235522cbc67e0d8f108813b87a56885270.2 MATIC
0x81d98a503ff1e3e4af855ad5f31656b151fd88e3cf86033468111359a31d7024231489112021-12-30 16:55:14344 days 3 hrs ago DODO: Cp Proxy V2 0xd888ce0996584bfb6b741c8910fda10c94cb77bd0.2 MATIC
0xbdb3643025cc4d0ec0ecafd2c5921a93e81972188c3debe0447b3001732a6b18231474902021-12-30 16:03:19344 days 4 hrs ago DODO: Cp Proxy V2 0x5f09e79ca8ee009648934974c6da696339749e7b0.2 MATIC
0xb005774eac0ae78d7d3a6296c9efb22811d8bac9e4cb18739cd6c7b792afedea231214692021-12-30 0:02:31344 days 20 hrs ago DODO: Cp Proxy V2 0x21d3bb7c8742297bdb302b5792c76fcf1467e19b0.2 MATIC
0xb7d9c00f07eed7446311707e32366cff1e7c593b7981fb821dd9b5a31069b6c9230682962021-12-28 15:36:25346 days 4 hrs ago DODO: Cp Proxy V2 0x3c77b8151bff4332a46e936fdedc9605405885af0.2 MATIC
0x91b2f5506a8f1a5d007cf6b37f0fdc31eff77ec022aa1179ee918affe6e506f4230380002021-12-27 21:26:48346 days 22 hrs ago DODO: Cp Proxy V2 0xec1262ae3abe7de008d24dfad77a4b5a97c5b0fd0.2 MATIC
0x4b57c0c68739edf642604bd1a6a3254ad266047d7f39d646cf1fce4644f02579230247912021-12-27 13:17:09347 days 7 hrs ago DODO: Cp Proxy V2 0x4e0a94e1ccf8e478b77596900ccd3783cf4923310.2 MATIC
0x6c651293824a7ae7eaefc9463652dc15ea9eb56420dccf89f9423564730d2a7d229499702021-12-25 15:21:53349 days 4 hrs ago DODO: Cp Proxy V2 0xa36d6d5bbffc1453d4b7c55306849382286c66d00.2 MATIC
[ 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 polygonscan.com on 2021-06-11
*/

// 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 Security Audit

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

61010060405234801561001157600080fd5b50604051610f24380380610f248339818101604052608081101561003457600080fd5b508051602082015160408301516060938401516001600160601b031993851b841660805291841b831660e052831b821660c05290911b1660a05260805160601c60a05160601c60c05160601c60e05160601c610e486100dc6000398061045852806105955280610ab0525080610749528061085d528061099a525080610a8c5280610bcc525080610434528061072552806108395280610ae05280610b685250610e486000f3fe6080604052600436106100595760003560e01c8063018c9fda146100625780630d4eec8f146101c85780633afe1f4c146101dd5780638fe21dec146101f2578063eb99be121461033c578063faa980e41461035157610060565b3661006057005b005b6101ac600480360360e081101561007857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460208302840111600160201b831117156100e557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460208302840111600160201b8311171561016757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505080351515915060200135610366565b604080516001600160a01b039092168252519081900360200190f35b3480156101d457600080fd5b506101ac610723565b3480156101e957600080fd5b506101ac610747565b6101ac600480360360e081101561020857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050508035151591506020013561076b565b34801561034857600080fd5b506101ac610a8a565b34801561035d57600080fd5b506101ac610aae565b6000805460ff16156103ab576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff191660011790558142811015610405576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104325789610454565b7f00000000000000000000000000000000000000000000000000000000000000005b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505050506040513d60208110156104db57600080fd5b505193506104ed3385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d8060008114610538576040519150601f19603f3d011682016040523d82523d6000602084013e61053d565b606091505b5050905080610593576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b8381101561068657818101518382015260200161066e565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156106c55781810151838201526020016106ad565b505050509050019950505050505050505050600060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b50506000805460ff1916905550949c9b505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000805460ff16156107b0576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff19166001179055814281101561080a576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146108375789610859565b7f00000000000000000000000000000000000000000000000000000000000000005b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b505193506108f23385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b5050905080610998576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360008381101561068657818101518382015260200161066e565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b8015610b93578115610b8e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506001600160a01b03851630149050610b8e57610b8e7f00000000000000000000000000000000000000000000000000000000000000008584610c36565b610c2f565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c88908490610c8d565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ccb5780518252601f199092019160209182019101610cac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b509150915081610d89576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610de257808060200190516020811015610da557600080fd5b5051610de25760405162461bcd60e51b815260040180806020018281038252602a815260200180610de9602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212201d9e31a4c193ba4e21869a056cc63797d9608b8118f5bf5649a904127f163d9864736f6c634300060900330000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000042ddec68db70f5992eb7ab22dfad8a57109841c9000000000000000000000000326c788c4c236f2bcec9476c66f8593aa31be4fc00000000000000000000000001feea29da5ae41b0b5f6b10b93ee34752ef80d7

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

0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000042ddec68db70f5992eb7ab22dfad8a57109841c9000000000000000000000000326c788c4c236f2bcec9476c66f8593aa31be4fc00000000000000000000000001feea29da5ae41b0b5f6b10b93ee34752ef80d7

-----Decoded View---------------
Arg [0] : weth (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [1] : cpFactory (address): 0x42ddec68db70f5992eb7ab22dfad8a57109841c9
Arg [2] : upCpFactory (address): 0x326c788c4c236f2bcec9476c66f8593aa31be4fc
Arg [3] : dodoApproveProxy (address): 0x01feea29da5ae41b0b5f6b10b93ee34752ef80d7

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [1] : 00000000000000000000000042ddec68db70f5992eb7ab22dfad8a57109841c9
Arg [2] : 000000000000000000000000326c788c4c236f2bcec9476c66f8593aa31be4fc
Arg [3] : 00000000000000000000000001feea29da5ae41b0b5f6b10b93ee34752ef80d7


Deployed ByteCode Sourcemap

15103:3920:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17352:1100;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17352:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17352:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17352:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17352:1100:0;;;;;;;;-1:-1:-1;17352:1100:0;;-1:-1:-1;;;;;17352:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17352:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17352:1100:0;;-1:-1:-1;;;;17352:1100:0;;;;;-1:-1:-1;17352:1100:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;17352:1100:0;;;;;;;;;;;;;;15344:31;;;;;;;;;;;;;:::i;15434:39::-;;;;;;;;;;;;;:::i;16169:1108::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16169:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16169:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16169:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16169:1108:0;;;;;;;;-1:-1:-1;16169:1108:0;;-1:-1:-1;;;;;16169:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16169:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16169:1108:0;;-1:-1:-1;;;;16169:1108:0;;;;;-1:-1:-1;16169:1108:0;;;;:::i;15382:45::-;;;;;;;;;;;;;:::i;15480:37::-;;;;;;;;;;;;;:::i;17352:1100::-;17667:31;14828:9;;;;14827:10;14819:32;;;;;-1:-1:-1;;;14819:32:0;;;;;;;;;;;;-1:-1:-1;;;14819:32:0;;;;;;;;;;;;;;;14862:9;:16;;-1:-1:-1;;14862:16:0;14874:4;14862:16;;;17648:8;15643:15:::1;15631:27:::0;::::1;;15623:60;;;::::0;;-1:-1:-1;;;15623:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15623:60:0;;;;;;;;;;;;;::::1;;17732:9:::0;17711:18:::2;-1:-1:-1::0;;;;;17774:27:0;::::2;15295:42;17774:27;:49;;17813:10;17774:49;;;17804:6;17774:49;17752:71;;17870:12;-1:-1:-1::0;;;;;17862:40:0::2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;17862:42:0;;-1:-1:-1;17917:146:0::2;17940:10;17862:42:::0;17995:10;18020:12;18047:5:::2;17917:8;:146::i;:::-;18103:42;::::0;18085:12:::2;::::0;-1:-1:-1;;;;;18103:20:0;::::2;::::0;18131:9:::2;::::0;18085:12;18103:42;18085:12;18103:42;18131:9;18103:20;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18084:61;;;18164:7;18156:48;;;::::0;;-1:-1:-1;;;18156:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;18225:12;-1:-1:-1::0;;;;;18217:38:0::2;;18270:15;18300:10;18325;18350:11;18376:8;18399:9;18423:10;18217:227;;;;;;;;;;;;;-1:-1:-1::0;;;;;18217:227:0::2;-1:-1:-1::0;;;;;18217:227:0::2;;;;;;-1:-1:-1::0;;;;;18217:227:0::2;-1:-1:-1::0;;;;;18217:227:0::2;;;;;;-1:-1:-1::0;;;;;18217:227:0::2;-1:-1:-1::0;;;;;18217:227:0::2;;;;;;-1:-1:-1::0;;;;;18217:227:0::2;-1:-1:-1::0;;;;;18217:227:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14913:5:0;14901:17;;-1:-1:-1;;14901:17:0;;;-1:-1:-1;17352:1100:0;;;-1:-1:-1;;;;;;;;;;;;17352:1100:0:o;15344:31::-;;;:::o;15434:39::-;;;:::o;16169:1108::-;16486:33;14828:9;;;;14827:10;14819:32;;;;;-1:-1:-1;;;14819:32:0;;;;;;;;;;;;-1:-1:-1;;;14819:32:0;;;;;;;;;;;;;;;14862:9;:16;;-1:-1:-1;;14862:16:0;14874:4;14862:16;;;16467:8;15643:15:::1;15631:27:::0;::::1;;15623:60;;;::::0;;-1:-1:-1;;;15623:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15623:60:0;;;;;;;;;;;;;::::1;;16553:9:::0;16532:18:::2;-1:-1:-1::0;;;;;16595:27:0;::::2;15295:42;16595:27;:49;;16634:10;16595:49;;;16625:6;16595:49;16573:71;;16693:14;-1:-1:-1::0;;;;;16685:42:0::2;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;16685:44:0;;-1:-1:-1;16742:148:0::2;16765:10;16685:44:::0;16822:10;16847:12;16874:5:::2;16742:8;:148::i;:::-;16922:44;::::0;16904:12:::2;::::0;-1:-1:-1;;;;;16922:22:0;::::2;::::0;16952:9:::2;::::0;16904:12;16922:44;16904:12;16922:44;16952:9;16922:22;:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16903:63;;;16985:7;16977:48;;;::::0;;-1:-1:-1;;;16977:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;17046:14;-1:-1:-1::0;;;;;17038:40:0::2;;17093:17;17125:10;17150;17175:11;17201:8;17224:9;17248:10;17038:231;;;;;;;;;;;;;-1:-1:-1::0;;;;;17038:231:0::2;-1:-1:-1::0;;;;;17038:231:0::2;;;;;;-1:-1:-1::0;;;;;17038:231:0::2;-1:-1:-1::0;;;;;17038:231:0::2;;;;;;-1:-1:-1::0;;;;;17038:231:0::2;-1:-1:-1::0;;;;;17038:231:0::2;;;;;;-1:-1:-1::0;;;;;17038:231:0::2;-1:-1:-1::0;;;;;17038:231:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;15382:45:::0;;;:::o;15480:37::-;;;:::o;18525:495::-;18688:5;18684:329;;;18714:10;;18710:183;;18751:6;-1:-1:-1;;;;;18745:21:0;;18774:6;18745:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;18806:19:0;;18820:4;18806:19;;-1:-1:-1;18802:75:0;;18827:50;18857:6;18866:2;18870:6;18827:22;:50::i;:::-;18684:329;;;18925:76;;;-1:-1:-1;;;18925:76:0;;-1:-1:-1;;;;;18925:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18943:20;18925:51;;;;;;:76;;;;;-1:-1:-1;;18925:76:0;;;;;;;;-1:-1:-1;18925:51:0;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18684:329;18525:495;;;;;:::o;11086:211::-;11230:58;;;-1:-1:-1;;;;;11230:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11230:58:0;-1:-1:-1;;;11230:58:0;;;11203:86;;11223:5;;11203:19;:86::i;:::-;11086:211;;;:::o;12659:1046::-;13319:12;13333:23;13368:5;-1:-1:-1;;;;;13360:19:0;13380:4;13360:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13360:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13318:67;;;;13404:7;13396:52;;;;;-1:-1:-1;;;13396:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13465:17;;:21;13461:237;;13620:10;13609:30;;;;;;;;;;;;;;;-1:-1:-1;13609:30:0;13601:85;;;;-1:-1:-1;;;13601:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12659:1046;;;;:::o

Swarm Source

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