Contract 0xF6f1A1Ef2f5b56bb289993F75C12Eb41e4abC2f7 1

 

Contract Overview

DODO: DPP Proxy V2
Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x17ebf5f5456124bf388226c186714475d2a4b71407ea1c04ebc1420c64aec5bfReset DODO Priva...366184882022-12-09 12:46:216 hrs 13 mins ago0xb57c5c22aa7b9cd25d557f061df61cbce1898456 IN  DODO: DPP Proxy V20 MATIC0.041894735517 287.391172192
0xf4f3f2d44767c28bbb61be3025681082e3b36c9c32f9c60a158f74f597007218Reset DODO Priva...366183852022-12-09 12:42:516 hrs 16 mins ago0xb57c5c22aa7b9cd25d557f061df61cbce1898456 IN  DODO: DPP Proxy V20 MATIC0.046182461707 316.778210189
0xfa18c3f39d1ad9d1d2be22c63ef5315bc816e4c343ac5059493991370b0b9322Reset DODO Priva...366176592022-12-09 12:17:516 hrs 41 mins ago0xb57c5c22aa7b9cd25d557f061df61cbce1898456 IN  DODO: DPP Proxy V20 MATIC0.031606707998 174.974578705
0xa0a756ccf60f6ed2f875a0ce7a00cfb6b3ec67b8efcc711ebc8a77fc339fe580Reset DODO Priva...365606802022-12-08 2:41:511 day 16 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00503197141
0xc8789d9d5dacdf45b2b6f65f4970e363dee9bc4e71bdf887ec1643d21b2ea140Reset DODO Priva...365567652022-12-08 0:20:531 day 18 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00377417632
0x50df157644135ebb64df8260a82bfde5e0c67d77d8f546bc99ed7bfb92c00d26Reset DODO Priva...365565102022-12-08 0:12:071 day 18 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00557567837
0x1fcfe9e4937439cfefafec33141ed0e3e76069982621e0fd9f5897876e890889Reset DODO Priva...365564822022-12-08 0:11:111 day 18 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00479025339
0xa1f8596ac9980ee7a56a0f12c2b50e1b01b923adada6a4d4fcfc80ef078da495Reset DODO Priva...365564452022-12-08 0:09:481 day 18 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.0072406635
0x70344bb1c188135ce6491dc3a5546b29339a9087b899288281564c8b7da2a965Reset DODO Priva...365548692022-12-07 23:13:181 day 19 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00573685233
0x8c948f86ff5d7f8c3db585f81c493504e58e2bca703f64d01bf47da8c73d9dffReset DODO Priva...365546352022-12-07 23:05:181 day 19 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00473325633
0xd901337c6688952f7beb3cf5010a239b1858434cd93fe0a8897a71dc1ab4079eReset DODO Priva...365544982022-12-07 23:00:361 day 19 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.0050205435
0x1eaea7bd54be31afd06200e7dbaa563865318887c25ba805becab5eb2b3080daReset DODO Priva...365544102022-12-07 22:56:081 day 20 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20 MATIC0.00516139236
0x9c647e669bfb5d7c5e19a06e3b9cb30eb7a3539f369daceff494347cdabdbdb0Create DODO Priv...365543832022-12-07 22:53:261 day 20 hrs ago0x69633612f04d5e1b5775c1e9aea6ebeff2719367 IN  DODO: DPP Proxy V20.000000150178 MATIC0.0239520840
0x2e07ff29d509a8500ebd23f27267a2ce1f44d4f4f58a813a0899b36aca37d728Create DODO Priv...365481722022-12-07 19:07:431 day 23 hrs ago0x7e02448c9112100f761c1c3d3ea199a4d6ab23d2 IN  DODO: DPP Proxy V20 MATIC0.021842417018 33.552254493
0xfdab77ebaa08b728b1f911814bbcad55fd0b5505d825ee729e870b176cb2f727Reset DODO Priva...365307122022-12-07 8:56:432 days 10 hrs ago0xd5954871657283887bd8738baaa36e2741d6de97 IN  DODO: DPP Proxy V20 MATIC0.009196845806 37.847257833
0x39a0f39ac539a5f7860af7c5a71642d7a5d48d8ac2460018bf7671db2d9efbcbReset DODO Priva...364449632022-12-05 6:45:034 days 12 hrs ago0x4461d605a73f4f0ea2d52b89c8b36ec78d7f56fd IN  DODO: DPP Proxy V20 MATIC0.007450866148 31.943555004
0xd1e8b2b4a857dbad4fee5f7e4deaac3135cc56f5dd05b0bb9afcb90778e2f2d6Reset DODO Priva...364188262022-12-04 15:07:545 days 3 hrs ago0xa352c59d3336d7ca85af39975c8f2e9fcb910c7e IN  DODO: DPP Proxy V20 MATIC0.015949225194111.882774787
0xf81af90fe4fc176029ae4e7ce6212da280ceb8c073fa4f93cde7ec2320fc8965Reset DODO Priva...364188062022-12-04 15:07:105 days 3 hrs ago0xa352c59d3336d7ca85af39975c8f2e9fcb910c7e IN  DODO: DPP Proxy V20 MATIC0.015789727464110.763908615
0x54295970c5255071f0faea07c0c023875ae258bd99d819e95e3c92b8b9cbf924Create DODO Priv...364086492022-12-04 8:59:125 days 10 hrs ago0x6866c58c9095406df06d810e7fb28520aadf11da IN  DODO: DPP Proxy V20 MATIC0.019666080458 30.000000699
0x93177a4ab042c47ef37a605571a6202a55ed0f1d480d42af284b33fb34d868caReset DODO Priva...363699822022-12-03 9:49:506 days 9 hrs ago0x4461d605a73f4f0ea2d52b89c8b36ec78d7f56fd IN  DODO: DPP Proxy V20 MATIC0.007160639862 31.064739304
0xcbe45702518c2de3c76a04a590fc4027620888c4c3b048d68bfd4f5a2b4a7f9bReset DODO Priva...363698392022-12-03 9:44:566 days 9 hrs ago0x4461d605a73f4f0ea2d52b89c8b36ec78d7f56fd IN  DODO: DPP Proxy V20 MATIC0.007429812919 31.845649379
0xc290ab7997fe82bc7d914036275371a4cedb6f95dea154cb9ff10a6425f3c7faReset DODO Priva...363608972022-12-03 4:19:186 days 14 hrs ago0x2029ba7ad196da403c6c42fa77dca798aec5ed90 IN  DODO: DPP Proxy V20 MATIC0.01028969800745.513928852
0xda050b8a88900fe87c12aeb5db965fc85c9bb6a521fed822073b66e407061e3aReset DODO Priva...363170342022-12-02 2:02:417 days 16 hrs ago0x6aa2cf46317042b32a26b819b8ed67683848274f IN  DODO: DPP Proxy V20 MATIC0.016690601223 91.140228709
0x67e18028ce9d8c77995bb61fea2000c9525d281bfcceb7bcfb5453c7bcbde13fCreate DODO Priv...363163682022-12-02 1:39:467 days 17 hrs ago0x6aa2cf46317042b32a26b819b8ed67683848274f IN  DODO: DPP Proxy V20 MATIC0.024763069532 37.885918058
0x7985bdb3f659feff7faf356945219b706c77af9f1640c430a670bf7b1eeb39d2Create DODO Priv...363095872022-12-01 21:46:247 days 21 hrs ago0x6aa2cf46317042b32a26b819b8ed67683848274f IN  DODO: DPP Proxy V21.5 MATIC0.021661204349 33.957000145
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9c647e669bfb5d7c5e19a06e3b9cb30eb7a3539f369daceff494347cdabdbdb0365543832022-12-07 22:53:261 day 20 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.000000150178 MATIC
0x7985bdb3f659feff7faf356945219b706c77af9f1640c430a670bf7b1eeb39d2363095872022-12-01 21:46:247 days 21 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1.5 MATIC
0x3bfb1576a27ad783ebad08d1abadcf699838ad61cc6474ac9fbb5cdde122c2fa361072332022-11-26 22:13:0812 days 20 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.01 MATIC
0xfb7206dd37d85c7c392aaab2c07d54e9326c7b6a3c7eee8e4af66e83d1d11f4e361032492022-11-26 19:52:1912 days 23 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.01 MATIC
0x0e559e8cd9ee08c939c188e6b59a605525f966ab92fb462892e44dc9ba458c54359896032022-11-24 1:51:5015 days 17 hrs ago DODO: DPP Proxy V20xa352c59d3336d7ca85af39975c8f2e9fcb910c7e500 MATIC
0x0e559e8cd9ee08c939c188e6b59a605525f966ab92fb462892e44dc9ba458c54359896032022-11-24 1:51:5015 days 17 hrs ago Polygon: WMATIC Token DODO: DPP Proxy V2500 MATIC
0x691310b71b330d08e72d6b9485da2e8d93f98ab503bac353694d1466d3221459359098552022-11-22 3:20:5217 days 15 hrs ago DODO: DPP Proxy V20xa352c59d3336d7ca85af39975c8f2e9fcb910c7e100 MATIC
0x691310b71b330d08e72d6b9485da2e8d93f98ab503bac353694d1466d3221459359098552022-11-22 3:20:5217 days 15 hrs ago Polygon: WMATIC Token DODO: DPP Proxy V2100 MATIC
0xa3f373a1f545d9cff8f632c5b22cab852e4e52830633c5a5d0a8234710848794356952202022-11-16 22:13:1522 days 20 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token20 MATIC
0x83bd2eff35fcac1e6e1563730d9363b26fe0db19acd0f2e1cbfe660b2b65a213355576502022-11-13 14:16:4326 days 4 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token2 MATIC
0x90bf6bcd419b25567d6ce6b0df4ab879d7151037fffd7d2a5a0080335b4fecce355217362022-11-12 16:35:1427 days 2 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.2 MATIC
0xaa820cd8e9303f39651db44003b994de42803c12140a60ef70daafd2cae3a87f353124342022-11-07 11:37:2532 days 7 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1 MATIC
0x05130ebf9734b93bd84fdc152fd3b45450b000f12ce082e5fe6d9cfa2983ba4a352763442022-11-06 14:45:2833 days 4 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1 MATIC
0x37a5b8c5e4bba9ed33d70442eece01bcc92fd54a143b706e9d8f6f0ec0518869352741472022-11-06 13:29:4733 days 5 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1 MATIC
0x15c573c8c0a24c66d3c384eb46dfd8dfa14ba70562f8c842dfdc387b2ad75bba352703922022-11-06 11:20:4133 days 7 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1 MATIC
0xbe8bafb388567f4083da88cdff1026666bb29af3eae498b399035594ae50e111351567562022-11-03 17:01:2236 days 1 hr ago DODO: DPP Proxy V2 Polygon: WMATIC Token1.609745139834026554 MATIC
0x1f863299f9450222d6ef111619e3f72ab7efbb30ff1c2d99bf7e01a96ad044e0347460492022-10-24 15:11:0846 days 3 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token10 MATIC
0x7652edc5717dc7c4ac6938d8080a2bfa7433c7258514053995e70efc51c503ee339922122022-10-06 6:16:0364 days 12 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.5 MATIC
0x9defcb7f07932a60d735e6dbc86fd4a5086b52c63124ea4d63c5f5e148c64b3f338953182022-10-03 22:17:1266 days 20 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token5 MATIC
0x9e11a6c0aa516edfb500a4233d7bb337c8372bcb60f9fc51170497c41a256895338905572022-10-03 19:31:1066 days 23 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1 MATIC
0x565ef9b6f18618bb54f189003dbe4688f0b4781eef48a1337d9ffd67e6b7502b338882172022-10-03 18:10:3267 days 49 mins ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.00001 MATIC
0x977b051cb9ed3e88413a79519db0305047f7f05503e7cfb57994d19b2f63426b334321792022-09-22 16:51:4378 days 2 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.173 MATIC
0x3ddb183bcfac24dec8304ad7f406d4969b450896cb591d19df345cf939218334332515002022-09-18 7:12:5382 days 11 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token1 MATIC
0x334ef05f9619e0c6097c599b4e8f1e6f037f25c85c3424c72e609db5b4111be7330998152022-09-14 15:26:0786 days 3 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.1 MATIC
0x8f4b0a44f3b05a0fd6277160ebaeed8272a84991d4acbe57dbcdfa824d3c02d2330684922022-09-13 21:27:0286 days 21 hrs ago DODO: DPP Proxy V2 Polygon: WMATIC Token0.1 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DODODppProxy

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-10-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/DODODppProxy.sol


/**
 * @title DODODppProxy
 * @author DODO Breeder
 *
 * @notice DODO Private Pool Proxy
 */
contract DODODppProxy 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 _DPP_FACTORY_;

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

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

    fallback() external payable {}

    receive() external payable {}

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

    
    function createDODOPrivatePool(
        address baseToken,
        address quoteToken,
        uint256 baseInAmount,
        uint256 quoteInAmount,
        uint256 lpFeeRate,
        uint256 i,
        uint256 k,
        bool isOpenTwap,
        uint256 deadLine
    )
        external
        payable
        preventReentrant
        judgeExpired(deadLine)
        returns (address newPrivatePool)
    {
        newPrivatePool = IDODOV2(_DPP_FACTORY_).createDODOPrivatePool();

        address _baseToken = baseToken;
        address _quoteToken = quoteToken;
        _deposit(msg.sender, newPrivatePool, _baseToken, baseInAmount, _baseToken == _ETH_ADDRESS_);
        _deposit(
            msg.sender,
            newPrivatePool,
            _quoteToken,
            quoteInAmount,
            _quoteToken == _ETH_ADDRESS_
        );

        if (_baseToken == _ETH_ADDRESS_) _baseToken = _WETH_;
        if (_quoteToken == _ETH_ADDRESS_) _quoteToken = _WETH_;

        IDODOV2(_DPP_FACTORY_).initDODOPrivatePool(
            newPrivatePool,
            msg.sender,
            _baseToken,
            _quoteToken,
            lpFeeRate,
            k,
            i,
            isOpenTwap
        );
    }

    function resetDODOPrivatePool(
        address dppAddress,
        uint256[] memory paramList,  //0 - newLpFeeRate, 1 - newI, 2 - newK
        uint256[] memory amountList, //0 - baseInAmount, 1 - quoteInAmount, 2 - baseOutAmount, 3- quoteOutAmount
        uint8 flag, // 0 - ERC20, 1 - baseInETH, 2 - quoteInETH, 3 - baseOutETH, 4 - quoteOutETH
        uint256 minBaseReserve,
        uint256 minQuoteReserve,
        uint256 deadLine
    ) external payable preventReentrant judgeExpired(deadLine) {
        _deposit(
            msg.sender,
            dppAddress,
            IDODOV2(dppAddress)._BASE_TOKEN_(),
            amountList[0],
            flag == 1
        );
        _deposit(
            msg.sender,
            dppAddress,
            IDODOV2(dppAddress)._QUOTE_TOKEN_(),
            amountList[1],
            flag == 2
        );

        require(IDODOV2(IDODOV2(dppAddress)._OWNER_()).reset(
            msg.sender,
            paramList[0],
            paramList[1],
            paramList[2],
            amountList[2],
            amountList[3],
            minBaseReserve,
            minQuoteReserve
        ), "Reset Failed");

        _withdraw(msg.sender, IDODOV2(dppAddress)._BASE_TOKEN_(), amountList[2], flag == 3);
        _withdraw(msg.sender, IDODOV2(dppAddress)._QUOTE_TOKEN_(), amountList[3], flag == 4);
    }

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

    function _withdraw(
        address payable to,
        address token,
        uint256 amount,
        bool isETH
    ) internal {
        if (isETH) {
            if (amount > 0) {
                IWETH(_WETH_).withdraw(amount);
                to.transfer(amount);
            }
        } else {
            if (amount > 0) {
                SafeERC20.safeTransfer(IERC20(token), to, amount);
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"weth","type":"address"},{"internalType":"address","name":"dodoApproveProxy","type":"address"},{"internalType":"address","name":"dppFactory","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_DODO_APPROVE_PROXY_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_DPP_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":"quoteInAmount","type":"uint256"},{"internalType":"uint256","name":"lpFeeRate","type":"uint256"},{"internalType":"uint256","name":"i","type":"uint256"},{"internalType":"uint256","name":"k","type":"uint256"},{"internalType":"bool","name":"isOpenTwap","type":"bool"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"createDODOPrivatePool","outputs":[{"internalType":"address","name":"newPrivatePool","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"dppAddress","type":"address"},{"internalType":"uint256[]","name":"paramList","type":"uint256[]"},{"internalType":"uint256[]","name":"amountList","type":"uint256[]"},{"internalType":"uint8","name":"flag","type":"uint8"},{"internalType":"uint256","name":"minBaseReserve","type":"uint256"},{"internalType":"uint256","name":"minQuoteReserve","type":"uint256"},{"internalType":"uint256","name":"deadLine","type":"uint256"}],"name":"resetDODOPrivatePool","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405234801561001057600080fd5b50604051610f66380380610f668339818101604052606081101561003357600080fd5b50805160208201516040909201516001600160601b0319606092831b811660805292821b831660a052901b1660c05260805160601c60a05160601c60c05160601c610ea76100bf6000398061032052806104e65280610a13525080610a375280610b5352508061025d528061042852806104725280610a675280610aef5280610bcb5250610ea76000f3fe60806040526004361061004e5760003560e01c80630d4eec8f146100575780630d9be5001461008857806312ff148d146100e6578063b730d15014610231578063eb99be121461024657610055565b3661005557005b005b34801561006357600080fd5b5061006c61025b565b604080516001600160a01b039092168252519081900360200190f35b61006c600480360361012081101561009f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060808101359060a08101359060c08101359060e0810135151590610100013561027f565b610055600480360360e08110156100fc57600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184602083028401116401000000008311171561015b57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092959493602081019350359150506401000000008111156101ab57600080fd5b8201836020820111156101bd57600080fd5b803590602001918460208302840111640100000000831117156101df57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505060ff8335169350505060208101359060408101359060600135610564565b34801561023d57600080fd5b5061006c610a11565b34801561025257600080fd5b5061006c610a35565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000805460ff16156102c4576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff19166001179055814281101561031e576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166309b8adb86040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561037957600080fd5b505af115801561038d573d6000803e3d6000fd5b505050506040513d60208110156103a357600080fd5b505191508a8a6103d53385848e6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610a59565b6104013385838d6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610a59565b6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561044a577f000000000000000000000000000000000000000000000000000000000000000091505b6001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561049257507f00000000000000000000000000000000000000000000000000000000000000005b6040805162caf77f60e51b81526001600160a01b03868116600483015233602483015284811660448301528381166064830152608482018c905260a482018a905260c482018b905288151560e483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163195eefe0916101048082019260009290919082900301818387803b15801561053157600080fd5b505af1158015610545573d6000803e3d6000fd5b50506000805460ff1916905550939d9c50505050505050505050505050565b60005460ff16156105a8576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff191660011790558042811015610602576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b61068d33898a6001600160a01b0316634a248d2a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561064057600080fd5b505afa158015610654573d6000803e3d6000fd5b505050506040513d602081101561066a57600080fd5b505189518a9060009061067957fe5b60200260200101518960ff16600114610a59565b61071a33898a6001600160a01b031663d4b970466040518163ffffffff1660e01b815260040160206040518083038186803b1580156106cb57600080fd5b505afa1580156106df573d6000803e3d6000fd5b505050506040513d60208110156106f557600080fd5b505189518a90600190811061070657fe5b60200260200101518960ff16600214610a59565b876001600160a01b03166316048bc46040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561075557600080fd5b505af1158015610769573d6000803e3d6000fd5b505050506040513d602081101561077f57600080fd5b505187516001600160a01b0390911690638ff3928c9033908a906000906107a257fe5b60200260200101518a6001815181106107b757fe5b60200260200101518b6002815181106107cc57fe5b60200260200101518b6002815181106107e157fe5b60200260200101518c6003815181106107f657fe5b60200260200101518b8b6040518963ffffffff1660e01b815260040180896001600160a01b03166001600160a01b0316815260200188815260200187815260200186815260200185815260200184815260200183815260200182815260200198505050505050505050602060405180830381600087803b15801561087957600080fd5b505af115801561088d573d6000803e3d6000fd5b505050506040513d60208110156108a357600080fd5b50516108e5576040805162461bcd60e51b815260206004820152600c60248201526b14995cd95d0811985a5b195960a21b604482015290519081900360640190fd5b61097133896001600160a01b0316634a248d2a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561092257600080fd5b505afa158015610936573d6000803e3d6000fd5b505050506040513d602081101561094c57600080fd5b505188518990600290811061095d57fe5b60200260200101518860ff16600314610bbd565b6109fd33896001600160a01b031663d4b970466040518163ffffffff1660e01b815260040160206040518083038186803b1580156109ae57600080fd5b505afa1580156109c2573d6000803e3d6000fd5b505050506040513d60208110156109d857600080fd5b50518851899060039081106109e957fe5b60200260200101518860ff16600414610bbd565b50506000805460ff19169055505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b8015610b1a578115610b15577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ac057600080fd5b505af1158015610ad4573d6000803e3d6000fd5b505050506001600160a01b03851630149050610b1557610b157f00000000000000000000000000000000000000000000000000000000000000008584610c9b565b610bb6565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b158015610b9d57600080fd5b505af1158015610bb1573d6000803e3d6000fd5b505050505b5050505050565b8015610c84578115610c7f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610c2f57600080fd5b505af1158015610c43573d6000803e3d6000fd5b50506040516001600160a01b038716925084156108fc02915084906000818181858888f19350505050158015610c7d573d6000803e3d6000fd5b505b610c95565b8115610c9557610c95838584610c9b565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ced908490610cf2565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b60208310610d305780518252601f199092019160209182019101610d11565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d92576040519150601f19603f3d011682016040523d82523d6000602084013e610d97565b606091505b509150915081610dee576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610c9557808060200190516020811015610e0a57600080fd5b5051610c955760405162461bcd60e51b815260040180806020018281038252602a815260200180610e48602a913960400191505060405180910390fdfe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212205d0b20148aa6c0d4eae357d2744adbc08781188f0b705b9f1869a6861109d9a664736f6c634300060900330000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000001feea29da5ae41b0b5f6b10b93ee34752ef80d7000000000000000000000000d24153244066f0afa9415563bfc7ba248bfb7a51

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

0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf127000000000000000000000000001feea29da5ae41b0b5f6b10b93ee34752ef80d7000000000000000000000000d24153244066f0afa9415563bfc7ba248bfb7a51

-----Decoded View---------------
Arg [0] : weth (address): 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [1] : dodoApproveProxy (address): 0x01feea29da5ae41b0b5f6b10b93ee34752ef80d7
Arg [2] : dppFactory (address): 0xd24153244066f0afa9415563bfc7ba248bfb7a51

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [1] : 00000000000000000000000001feea29da5ae41b0b5f6b10b93ee34752ef80d7
Arg [2] : 000000000000000000000000d24153244066f0afa9415563bfc7ba248bfb7a51


Deployed ByteCode Sourcemap

15090:4554:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15332:31;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15332:31:0;;;;;;;;;;;;;;15983:1252;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15983:1252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17243:1382::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17243:1382:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17243:1382:0;;;;;;;;-1:-1:-1;17243:1382:0;;-1:-1:-1;;17243:1382:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17243:1382:0;;-1:-1:-1;;17243:1382:0;;;;;-1:-1:-1;;;17243:1382:0;;;;;;;;;;;;;;:::i;15422:38::-;;;;;;;;;;;;;:::i;15370:45::-;;;;;;;;;;;;;:::i;15332:31::-;;;:::o;15983:1252::-;16373:22;14826:9;;;;14825:10;14817:32;;;;;-1:-1:-1;;;14817:32:0;;;;;;;;;;;;-1:-1:-1;;;14817:32:0;;;;;;;;;;;;;;;14860:9;:16;;-1:-1:-1;;14860:16:0;14872:4;14860:16;;;16345:8;15586:15:::1;15574:27:::0;::::1;;15566:60;;;::::0;;-1:-1:-1;;;15566:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15566:60:0;;;;;;;;;;;;;::::1;;16438:13:::2;-1:-1:-1::0;;;;;16430:44:0::2;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;16430:46:0;;-1:-1:-1;16510:9:0;16552:10;16573:91:::2;16582:10;16430:46:::0;16510:9;16622:12;-1:-1:-1;;;;;16636:27:0;::::2;15283:42;16636:27;16573:8;:91::i;:::-;16675:170;16698:10;16723:14:::0;16752:11;16778:13;-1:-1:-1;;;;;16806:28:0;::::2;15283:42;16806:28;16675:8;:170::i;:::-;-1:-1:-1::0;;;;;16862:27:0;::::2;15283:42;16862:27;16858:52;;;16904:6;16891:19;;16858:52;-1:-1:-1::0;;;;;16925:28:0;::::2;15283:42;16925:28;16921:54;;;-1:-1:-1::0;16969:6:0::2;16921:54;16988:239;::::0;;-1:-1:-1;;;16988:239:0;;-1:-1:-1;;;;;16988:239:0;;::::2;;::::0;::::2;::::0;17074:10:::2;16988:239:::0;;;;;;::::2;::::0;;;;;;::::2;::::0;;;;;;;;;;;;;;;;;;;;;;;::::2;;::::0;;;;;;16996:13:::2;16988:42:::0;;::::2;::::0;::::2;::::0;:239;;;;;-1:-1:-1;;16988:239:0;;;;;;;;-1:-1:-1;16988:42:0;:239;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14911:5:0;14899:17;;-1:-1:-1;;14899:17:0;;;-1:-1:-1;15983:1252:0;;;-1:-1:-1;;;;;;;;;;;;;15983:1252:0:o;17243:1382::-;14826:9;;;;14825:10;14817:32;;;;;-1:-1:-1;;;14817:32:0;;;;;;;;;;;;-1:-1:-1;;;14817:32:0;;;;;;;;;;;;;;;14860:9;:16;;-1:-1:-1;;14860:16:0;14872:4;14860:16;;;17739:8;15586:15:::1;15574:27:::0;::::1;;15566:60;;;::::0;;-1:-1:-1;;;15566:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15566:60:0;;;;;;;;;;;;;::::1;;17760:170:::2;17783:10;17808;17841;-1:-1:-1::0;;;;;17833:32:0::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;17833:34:0;17882:13;;:10;;17893:1:::2;::::0;17882:13:::2;;;;;;;;;;17910:4;:9;;17918:1;17910:9;17760:8;:170::i;:::-;17941:171;17964:10;17989;18022;-1:-1:-1::0;;;;;18014:33:0::2;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18014:35:0;18064:13;;:10;;18075:1:::2;::::0;18064:13;::::2;;;;;;;;;;;18092:4;:9;;18100:1;18092:9;17941:8;:171::i;:::-;18149:10;-1:-1:-1::0;;;;;18141:27:0::2;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18141:29:0;18217:12;;-1:-1:-1;;;;;18133:44:0;;::::2;::::0;::::2;::::0;18192:10:::2;::::0;18217:9;;18227:1:::2;::::0;18217:12:::2;;;;;;;;;;18244:9;18254:1;18244:12;;;;;;;;;;;;;;18271:9;18281:1;18271:12;;;;;;;;;;;;;;18298:10;18309:1;18298:13;;;;;;;;;;;;;;18326:10;18337:1;18326:13;;;;;;;;;;;;;;18354:14;18383:15;18133:276;;;;;;;;;;;;;-1:-1:-1::0;;;;;18133:276:0::2;-1:-1:-1::0;;;;;18133:276:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18133:276:0;18125:301:::2;;;::::0;;-1:-1:-1;;;18125:301:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;18125:301:0;;;;;;;;;;;;;::::2;;18439:83;18449:10;18469;-1:-1:-1::0;;;;;18461:32:0::2;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18461:34:0;18497:13;;:10;;18508:1:::2;::::0;18497:13;::::2;;;;;;;;;;;18512:4;:9;;18520:1;18512:9;18439;:83::i;:::-;18533:84;18543:10;18563;-1:-1:-1::0;;;;;18555:33:0::2;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18555:35:0;18592:13;;:10;;18603:1:::2;::::0;18592:13;::::2;;;;;;;;;;;18607:4;:9;;18615:1;18607:9;18533;:84::i;:::-;-1:-1:-1::0;;14911:5:0;14899:17;;-1:-1:-1;;14899:17:0;;;-1:-1:-1;;;;;;17243:1382:0:o;15422:38::-;;;:::o;15370:45::-;;;:::o;18698:495::-;18861:5;18857:329;;;18887:10;;18883:183;;18924:6;-1:-1:-1;;;;;18918:21:0;;18947:6;18918:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;18979:19:0;;18993:4;18979:19;;-1:-1:-1;18975:75:0;;19000:50;19030:6;19039:2;19043:6;19000:22;:50::i;:::-;18857:329;;;19098:76;;;-1:-1:-1;;;19098:76:0;;-1:-1:-1;;;;;19098:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19116:20;19098:51;;;;;;:76;;;;;-1:-1:-1;;19098:76:0;;;;;;;;-1:-1:-1;19098:51:0;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18857:329;18698:495;;;;;:::o;19201:440::-;19350:5;19346:288;;;19376:10;;19372:119;;19413:6;-1:-1:-1;;;;;19407:22:0;;19430:6;19407:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19456:19:0;;-1:-1:-1;;;;;19456:11:0;;;-1:-1:-1;19456:19:0;;;;;-1:-1:-1;19468:6:0;;19456:19;;;;19468:6;19456:11;:19;;;;;;;;;;;;;;;;;;;;;19372:119;19346:288;;;19527:10;;19523:100;;19558:49;19588:5;19596:2;19600:6;19558:22;:49::i;:::-;19201:440;;;;:::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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://5d0b20148aa6c0d4eae357d2744adbc08781188f0b705b9f1869a6861109d9a6
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.