My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
DODOCpProxy
Compiler Version
v0.6.9+commit.3e3065ac
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2021-08-30 */ // File: contracts/intf/IDODOApprove.sol /* Copyright 2020 DODO ZOO. SPDX-License-Identifier: Apache-2.0 */ pragma solidity 0.6.9; interface IDODOApprove { function claimTokens(address token,address who,address dest,uint256 amount) external; function getDODOProxy() external view returns (address); } // File: contracts/lib/InitializableOwnable.sol /** * @title Ownable * @author DODO Breeder * * @notice Ownership related functions */ contract InitializableOwnable { address public _OWNER_; address public _NEW_OWNER_; bool internal _INITIALIZED_; // ============ Events ============ event OwnershipTransferPrepared(address indexed previousOwner, address indexed newOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); // ============ Modifiers ============ modifier notInitialized() { require(!_INITIALIZED_, "DODO_INITIALIZED"); _; } modifier onlyOwner() { require(msg.sender == _OWNER_, "NOT_OWNER"); _; } // ============ Functions ============ function initOwner(address newOwner) public notInitialized { _INITIALIZED_ = true; _OWNER_ = newOwner; } function transferOwnership(address newOwner) public onlyOwner { emit OwnershipTransferPrepared(_OWNER_, newOwner); _NEW_OWNER_ = newOwner; } function claimOwnership() public { require(msg.sender == _NEW_OWNER_, "INVALID_CLAIM"); emit OwnershipTransferred(_OWNER_, _NEW_OWNER_); _OWNER_ = _NEW_OWNER_; _NEW_OWNER_ = address(0); } } // File: contracts/SmartRoute/DODOApproveProxy.sol interface IDODOApproveProxy { function isAllowedProxy(address _proxy) external view returns (bool); function claimTokens(address token,address who,address dest,uint256 amount) external; } /** * @title DODOApproveProxy * @author DODO Breeder * * @notice Allow different version dodoproxy to claim from DODOApprove */ contract DODOApproveProxy is InitializableOwnable { // ============ Storage ============ uint256 private constant _TIMELOCK_DURATION_ = 3 days; mapping (address => bool) public _IS_ALLOWED_PROXY_; uint256 public _TIMELOCK_; address public _PENDING_ADD_DODO_PROXY_; address public immutable _DODO_APPROVE_; // ============ Modifiers ============ modifier notLocked() { require( _TIMELOCK_ <= block.timestamp, "SetProxy is timelocked" ); _; } constructor(address dodoApporve) public { _DODO_APPROVE_ = dodoApporve; } function init(address owner, address[] memory proxies) external { initOwner(owner); for(uint i = 0; i < proxies.length; i++) _IS_ALLOWED_PROXY_[proxies[i]] = true; } function unlockAddProxy(address newDodoProxy) public onlyOwner { _TIMELOCK_ = block.timestamp + _TIMELOCK_DURATION_; _PENDING_ADD_DODO_PROXY_ = newDodoProxy; } function lockAddProxy() public onlyOwner { _PENDING_ADD_DODO_PROXY_ = address(0); _TIMELOCK_ = 0; } function addDODOProxy() external onlyOwner notLocked() { _IS_ALLOWED_PROXY_[_PENDING_ADD_DODO_PROXY_] = true; lockAddProxy(); } function removeDODOProxy (address oldDodoProxy) public onlyOwner { _IS_ALLOWED_PROXY_[oldDodoProxy] = false; } function claimTokens( address token, address who, address dest, uint256 amount ) external { require(_IS_ALLOWED_PROXY_[msg.sender], "DODOApproveProxy:Access restricted"); IDODOApprove(_DODO_APPROVE_).claimTokens( token, who, dest, amount ); } function isAllowedProxy(address _proxy) external view returns (bool) { return _IS_ALLOWED_PROXY_[_proxy]; } } // File: contracts/SmartRoute/intf/IDODOV2.sol interface IDODOV2 { //========== Common ================== function sellBase(address to) external returns (uint256 receiveQuoteAmount); function sellQuote(address to) external returns (uint256 receiveBaseAmount); function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve); function _BASE_TOKEN_() external view returns (address); function _QUOTE_TOKEN_() external view returns (address); function getPMMStateForCall() external view returns ( uint256 i, uint256 K, uint256 B, uint256 Q, uint256 B0, uint256 Q0, uint256 R ); function getUserFeeRate(address user) external view returns (uint256 lpFeeRate, uint256 mtFeeRate); function getDODOPoolBidirection(address token0, address token1) external view returns (address[] memory, address[] memory); //========== DODOVendingMachine ======== function createDODOVendingMachine( address baseToken, address quoteToken, uint256 lpFeeRate, uint256 i, uint256 k, bool isOpenTWAP ) external returns (address newVendingMachine); function buyShares(address to) external returns (uint256,uint256,uint256); //========== DODOPrivatePool =========== function createDODOPrivatePool() external returns (address newPrivatePool); function initDODOPrivatePool( address dppAddress, address creator, address baseToken, address quoteToken, uint256 lpFeeRate, uint256 k, uint256 i, bool isOpenTwap ) external; function reset( address operator, uint256 newLpFeeRate, uint256 newI, uint256 newK, uint256 baseOutAmount, uint256 quoteOutAmount, uint256 minBaseReserve, uint256 minQuoteReserve ) external returns (bool); function _OWNER_() external returns (address); //========== CrowdPooling =========== function createCrowdPooling() external returns (address payable newCrowdPooling); function initCrowdPooling( address cpAddress, address creator, address baseToken, address quoteToken, uint256[] memory timeLine, uint256[] memory valueList, bool isOpenTWAP ) external; function bid(address to) external; } // File: contracts/intf/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function name() external view returns (string memory); function symbol() external view returns (string memory); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); } // File: contracts/lib/SafeMath.sol /** * @title SafeMath * @author DODO Breeder * * @notice Math operations with safety checks that revert on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "MUL_ERROR"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "DIVIDING_ERROR"); return a / b; } function divCeil(uint256 a, uint256 b) internal pure returns (uint256) { uint256 quotient = div(a, b); uint256 remainder = a - quotient * b; if (remainder > 0) { return quotient + 1; } else { return quotient; } } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SUB_ERROR"); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "ADD_ERROR"); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = x / 2 + 1; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } } // File: contracts/lib/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/intf/IWETH.sol interface IWETH { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address src, address dst, uint256 wad ) external returns (bool); function deposit() external payable; function withdraw(uint256 wad) external; } // File: contracts/lib/ReentrancyGuard.sol /** * @title ReentrancyGuard * @author DODO Breeder * * @notice Protect functions from Reentrancy Attack */ contract ReentrancyGuard { // https://solidity.readthedocs.io/en/latest/control-structures.html?highlight=zero-state#scoping-and-declarations // zero-state of _ENTERED_ is false bool private _ENTERED_; modifier preventReentrant() { require(!_ENTERED_, "REENTRANT"); _ENTERED_ = true; _; _ENTERED_ = false; } } // File: contracts/SmartRoute/proxies/DODOCpProxy.sol /** * @title DODOCpProxy * @author DODO Breeder * * @notice CrowdPooling && UpCrowdPooling Proxy */ contract DODOCpProxy is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // ============ Storage ============ address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public immutable _WETH_; address public immutable _DODO_APPROVE_PROXY_; address public immutable _UPCP_FACTORY_; address public immutable _CP_FACTORY_; // ============ Modifiers ============ modifier judgeExpired(uint256 deadLine) { require(deadLine >= block.timestamp, "DODOCpProxy: EXPIRED"); _; } fallback() external payable {} receive() external payable {} constructor( address payable weth, address cpFactory, address upCpFactory, address dodoApproveProxy ) public { _WETH_ = weth; _CP_FACTORY_ = cpFactory; _UPCP_FACTORY_ = upCpFactory; _DODO_APPROVE_PROXY_ = dodoApproveProxy; } //============ UpCrowdPooling Functions (create) ============ function createUpCrowdPooling( address baseToken, address quoteToken, uint256 baseInAmount, uint256[] memory timeLine, uint256[] memory valueList, bool isOpenTWAP, uint256 deadLine ) external payable preventReentrant judgeExpired(deadLine) returns (address payable newUpCrowdPooling) { address _baseToken = baseToken; address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken; newUpCrowdPooling = IDODOV2(_UPCP_FACTORY_).createCrowdPooling(); _deposit( msg.sender, newUpCrowdPooling, _baseToken, baseInAmount, false ); (bool success, ) = newUpCrowdPooling.call{value: msg.value}(""); require(success, "DODOCpProxy: Transfer failed"); IDODOV2(_UPCP_FACTORY_).initCrowdPooling( newUpCrowdPooling, msg.sender, _baseToken, _quoteToken, timeLine, valueList, isOpenTWAP ); } //============ CrowdPooling Functions (create) ============ function createCrowdPooling( address baseToken, address quoteToken, uint256 baseInAmount, uint256[] memory timeLine, uint256[] memory valueList, bool isOpenTWAP, uint256 deadLine ) external payable preventReentrant judgeExpired(deadLine) returns (address payable newCrowdPooling) { address _baseToken = baseToken; address _quoteToken = quoteToken == _ETH_ADDRESS_ ? _WETH_ : quoteToken; newCrowdPooling = IDODOV2(_CP_FACTORY_).createCrowdPooling(); _deposit( msg.sender, newCrowdPooling, _baseToken, baseInAmount, false ); (bool success, ) = newCrowdPooling.call{value: msg.value}(""); require(success, "DODOCpProxy: Transfer failed"); IDODOV2(_CP_FACTORY_).initCrowdPooling( newCrowdPooling, msg.sender, _baseToken, _quoteToken, timeLine, valueList, isOpenTWAP ); } //====================== internal ======================= function _deposit( address from, address to, address token, uint256 amount, bool isETH ) internal { if (isETH) { if (amount > 0) { IWETH(_WETH_).deposit{value: amount}(); if (to != address(this)) SafeERC20.safeTransfer(IERC20(_WETH_), to, amount); } } else { IDODOApproveProxy(_DODO_APPROVE_PROXY_).claimTokens(token, from, to, amount); } } }
[{"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"}]
Contract Creation Code
61010060405234801561001157600080fd5b50604051610f24380380610f248339818101604052608081101561003457600080fd5b508051602082015160408301516060938401516001600160601b031993851b841660805291841b831660e052831b821660c05290911b1660a05260805160601c60a05160601c60c05160601c60e05160601c610e486100dc6000398061045852806105955280610ab0525080610749528061085d528061099a525080610a8c5280610bcc525080610434528061072552806108395280610ae05280610b685250610e486000f3fe6080604052600436106100595760003560e01c8063018c9fda146100625780630d4eec8f146101c85780633afe1f4c146101dd5780638fe21dec146101f2578063eb99be121461033c578063faa980e41461035157610060565b3661006057005b005b6101ac600480360360e081101561007857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460208302840111600160201b831117156100e557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460208302840111600160201b8311171561016757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505080351515915060200135610366565b604080516001600160a01b039092168252519081900360200190f35b3480156101d457600080fd5b506101ac610723565b3480156101e957600080fd5b506101ac610747565b6101ac600480360360e081101561020857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050508035151591506020013561076b565b34801561034857600080fd5b506101ac610a8a565b34801561035d57600080fd5b506101ac610aae565b6000805460ff16156103ab576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff191660011790558142811015610405576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104325789610454565b7f00000000000000000000000000000000000000000000000000000000000000005b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505050506040513d60208110156104db57600080fd5b505193506104ed3385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d8060008114610538576040519150601f19603f3d011682016040523d82523d6000602084013e61053d565b606091505b5050905080610593576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b8381101561068657818101518382015260200161066e565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156106c55781810151838201526020016106ad565b505050509050019950505050505050505050600060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b50506000805460ff1916905550949c9b505050505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000805460ff16156107b0576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff19166001179055814281101561080a576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146108375789610859565b7f00000000000000000000000000000000000000000000000000000000000000005b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b505193506108f23385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b5050905080610998576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360008381101561068657818101518382015260200161066e565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b8015610b93578115610b8e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506001600160a01b03851630149050610b8e57610b8e7f00000000000000000000000000000000000000000000000000000000000000008584610c36565b610c2f565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c88908490610c8d565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ccb5780518252601f199092019160209182019101610cac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b509150915081610d89576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610de257808060200190516020811015610da557600080fd5b5051610de25760405162461bcd60e51b815260040180806020018281038252602a815260200180610de9602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122099c282afac42525d96cc0493fac53510e9e3427aebafca9f301852fb2ba6311364736f6c6343000609003300000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd89218000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c25000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f0
Deployed Bytecode
0x6080604052600436106100595760003560e01c8063018c9fda146100625780630d4eec8f146101c85780633afe1f4c146101dd5780638fe21dec146101f2578063eb99be121461033c578063faa980e41461035157610060565b3661006057005b005b6101ac600480360360e081101561007857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156100b257600080fd5b8201836020820111156100c457600080fd5b803590602001918460208302840111600160201b831117156100e557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460208302840111600160201b8311171561016757600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505080351515915060200135610366565b604080516001600160a01b039092168252519081900360200190f35b3480156101d457600080fd5b506101ac610723565b3480156101e957600080fd5b506101ac610747565b6101ac600480360360e081101561020857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561024257600080fd5b82018360208201111561025457600080fd5b803590602001918460208302840111600160201b8311171561027557600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156102c457600080fd5b8201836020820111156102d657600080fd5b803590602001918460208302840111600160201b831117156102f757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295505050508035151591506020013561076b565b34801561034857600080fd5b506101ac610a8a565b34801561035d57600080fd5b506101ac610aae565b6000805460ff16156103ab576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff191660011790558142811015610405576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146104325789610454565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab15b90507f0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd892186001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156104b157600080fd5b505af11580156104c5573d6000803e3d6000fd5b505050506040513d60208110156104db57600080fd5b505193506104ed3385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d8060008114610538576040519150601f19603f3d011682016040523d82523d6000602084013e61053d565b606091505b5050905080610593576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd892186001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b8381101561068657818101518382015260200161066e565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156106c55781810151838201526020016106ad565b505050509050019950505050505050505050600060405180830381600087803b1580156106f157600080fd5b505af1158015610705573d6000803e3d6000fd5b50506000805460ff1916905550949c9b505050505050505050505050565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab181565b7f000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c2581565b6000805460ff16156107b0576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6000805460ff19166001179055814281101561080a576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146108375789610859565b7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab15b90507f000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c256001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156108b657600080fd5b505af11580156108ca573d6000803e3d6000fd5b505050506040513d60208110156108e057600080fd5b505193506108f23385848c6000610ad2565b6040516000906001600160a01b0386169034908381818185875af1925050503d806000811461093d576040519150601f19603f3d011682016040523d82523d6000602084013e610942565b606091505b5050905080610998576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c256001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360008381101561068657818101518382015260200161066e565b7f000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f081565b7f0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd8921881565b8015610b93578115610b8e577f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab16001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610b3957600080fd5b505af1158015610b4d573d6000803e3d6000fd5b505050506001600160a01b03851630149050610b8e57610b8e7f00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab18584610c36565b610c2f565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f090921691630a5ea4669160848082019260009290919082900301818387803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610c88908490610c8d565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b60208310610ccb5780518252601f199092019160209182019101610cac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d2d576040519150601f19603f3d011682016040523d82523d6000602084013e610d32565b606091505b509150915081610d89576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610de257808060200190516020811015610da557600080fd5b5051610de25760405162461bcd60e51b815260040180806020018281038252602a815260200180610de9602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122099c282afac42525d96cc0493fac53510e9e3427aebafca9f301852fb2ba6311364736f6c63430006090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab10000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd89218000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c25000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f0
-----Decoded View---------------
Arg [0] : weth (address): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1
Arg [1] : cpFactory (address): 0x6E5f239f729c83E976a7A280F81Dd1685dd89218
Arg [2] : upCpFactory (address): 0xE92787F457F541a9D5Ae17C1dbdBffA8D3BA3C25
Arg [3] : dodoApproveProxy (address): 0x311E670c3305a0BD55184c1C6580eBeA1FA611F0
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [1] : 0000000000000000000000006e5f239f729c83e976a7a280f81dd1685dd89218
Arg [2] : 000000000000000000000000e92787f457f541a9d5ae17c1dbdbffa8d3ba3c25
Arg [3] : 000000000000000000000000311e670c3305a0bd55184c1c6580ebea1fa611f0
Deployed ByteCode Sourcemap
15099:3920:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17348:1100;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17348:1100:0;;;;;;;;-1:-1:-1;17348:1100:0;;-1:-1:-1;;;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17348:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17348:1100:0;;-1:-1:-1;;;;17348:1100:0;;;;;-1:-1:-1;17348:1100:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;17348:1100:0;;;;;;;;;;;;;;15340:31;;;;;;;;;;;;;:::i;15430:39::-;;;;;;;;;;;;;:::i;16165:1108::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16165:1108:0;;;;;;;;-1:-1:-1;16165:1108:0;;-1:-1:-1;;;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16165:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16165:1108:0;;-1:-1:-1;;;;16165:1108:0;;;;;-1:-1:-1;16165:1108:0;;;;:::i;15378:45::-;;;;;;;;;;;;;:::i;15476:37::-;;;;;;;;;;;;;:::i;17348:1100::-;17663:31;14822:9;;;;14821:10;14813:32;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;;;;14856:9;:16;;-1:-1:-1;;14856:16:0;14868:4;14856:16;;;17644:8;15639:15:::1;15627:27:::0;::::1;;15619:60;;;::::0;;-1:-1:-1;;;15619:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15619:60:0;;;;;;;;;;;;;::::1;;17728:9:::0;17707:18:::2;-1:-1:-1::0;;;;;17770:27:0;::::2;15291:42;17770:27;:49;;17809:10;17770:49;;;17800:6;17770:49;17748:71;;17866:12;-1:-1:-1::0;;;;;17858:40:0::2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;17858:42:0;;-1:-1:-1;17913:146:0::2;17936:10;17858:42:::0;17991:10;18016:12;18043:5:::2;17913:8;:146::i;:::-;18099:42;::::0;18081:12:::2;::::0;-1:-1:-1;;;;;18099:20:0;::::2;::::0;18127:9:::2;::::0;18081:12;18099:42;18081:12;18099:42;18127:9;18099:20;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18080:61;;;18160:7;18152:48;;;::::0;;-1:-1:-1;;;18152:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;18221:12;-1:-1:-1::0;;;;;18213:38:0::2;;18266:15;18296:10;18321;18346:11;18372:8;18395:9;18419:10;18213:227;;;;;;;;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;-1:-1:-1::0;;;;;18213:227:0::2;-1:-1:-1::0;;;;;18213:227:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14907:5:0;14895:17;;-1:-1:-1;;14895:17:0;;;-1:-1:-1;17348:1100:0;;;-1:-1:-1;;;;;;;;;;;;17348:1100:0:o;15340:31::-;;;:::o;15430:39::-;;;:::o;16165:1108::-;16482:33;14822:9;;;;14821:10;14813:32;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;;;;14856:9;:16;;-1:-1:-1;;14856:16:0;14868:4;14856:16;;;16463:8;15639:15:::1;15627:27:::0;::::1;;15619:60;;;::::0;;-1:-1:-1;;;15619:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15619:60:0;;;;;;;;;;;;;::::1;;16549:9:::0;16528:18:::2;-1:-1:-1::0;;;;;16591:27:0;::::2;15291:42;16591:27;:49;;16630:10;16591:49;;;16621:6;16591:49;16569:71;;16689:14;-1:-1:-1::0;;;;;16681:42:0::2;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;16681:44:0;;-1:-1:-1;16738:148:0::2;16761:10;16681:44:::0;16818:10;16843:12;16870:5:::2;16738:8;:148::i;:::-;16918:44;::::0;16900:12:::2;::::0;-1:-1:-1;;;;;16918:22:0;::::2;::::0;16948:9:::2;::::0;16900:12;16918:44;16900:12;16918:44;16948:9;16918:22;:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16899:63;;;16981:7;16973:48;;;::::0;;-1:-1:-1;;;16973:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;17042:14;-1:-1:-1::0;;;;;17034:40:0::2;;17089:17;17121:10;17146;17171:11;17197:8;17220:9;17244:10;17034:231;;;;;;;;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;-1:-1:-1::0;;;;;17034:231:0::2;-1:-1:-1::0;;;;;17034:231:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;15378:45:::0;;;:::o;15476:37::-;;;:::o;18521:495::-;18684:5;18680:329;;;18710:10;;18706:183;;18747:6;-1:-1:-1;;;;;18741:21:0;;18770:6;18741:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;18802:19:0;;18816:4;18802:19;;-1:-1:-1;18798:75:0;;18823:50;18853:6;18862:2;18866:6;18823:22;:50::i;:::-;18680:329;;;18921:76;;;-1:-1:-1;;;18921:76:0;;-1:-1:-1;;;;;18921:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18939:20;18921:51;;;;;;:76;;;;;-1:-1:-1;;18921:76:0;;;;;;;;-1:-1:-1;18921:51:0;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:329;18521:495;;;;;:::o;11082:211::-;11226:58;;;-1:-1:-1;;;;;11226:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11226:58:0;-1:-1:-1;;;11226:58:0;;;11199:86;;11219:5;;11199:19;:86::i;:::-;11082:211;;;:::o;12655:1046::-;13315:12;13329:23;13364:5;-1:-1:-1;;;;;13356:19:0;13376:4;13356:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13356:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13314:67;;;;13400:7;13392:52;;;;;-1:-1:-1;;;13392:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13461:17;;:21;13457:237;;13616:10;13605:30;;;;;;;;;;;;;;;-1:-1:-1;13605:30:0;13597:85;;;;-1:-1:-1;;;13597:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12655:1046;;;;:::o
Metadata Hash
99c282afac42525d96cc0493fac53510e9e3427aebafca9f301852fb2ba63113
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.