My Name Tag:
Not Available, login to update
Txn Hash | Method |
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0x9682cdb815e4fdf493ede5a1ad3a3be29bc179e7c5e12ac993685f3bbd07cdef | Create Crowd Poo... | 922178 | 500 days 3 hrs ago | 0x3c9f68e0f63541168907253acd3149b70b2f45c2 | IN | DODO: Cp Proxy | 0.2 MOVR | 0.000573774 | |
0xfe5c43aabc9f4f51548f496c7cfbdf86bd033ef55634d739b9e47df564f7458e | Transfer Ownersh... | 853347 | 513 days 4 hrs ago | 0x16cc37d06fe5061cd0023fb8d142abaabb396a2b | IN | DODO: Cp Proxy | 0 MOVR | 0.000026587 | |
0xbbda396f5ebeae19da01d3cb1d2b0286f7fb220b3c01ab594c440c964f1ce0dc | Init Owner | 591425 | 555 days 8 hrs ago | 0x16cc37d06fe5061cd0023fb8d142abaabb396a2b | IN | DODO: Cp Proxy | 0 MOVR | 0.000064198 | |
0xe0baba86c5b00a8532ed4ea7b8a16614a035c742ad9216b3a9ec4f6312a77c3b | 0x60e06040 | 591017 | 555 days 10 hrs ago | 0x16cc37d06fe5061cd0023fb8d142abaabb396a2b | IN | Create: DODOCpProxy | 0 MOVR | 0.001050141 |
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x9682cdb815e4fdf493ede5a1ad3a3be29bc179e7c5e12ac993685f3bbd07cdef | 922178 | 500 days 3 hrs ago | DODO: Cp Proxy | 0xd09abe32ec3943bc694675b22e4dcc656d39ab31 | 0.2 MOVR |
[ Download CSV Export ]
Contract Name:
DODOCpProxy
Compiler Version
v0.6.9+commit.3e3065ac
Contract Source Code (Solidity)
/** *Submitted for verification at moonriver.moonscan.io on 2021-11-05 */ // 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 InitializableOwnable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // ============ Storage ============ address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public _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; } function replaceWETH (address newWeth) public onlyOwner { _WETH_ = newWeth; } //============ 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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferPrepared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"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":"_NEW_OWNER_","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_OWNER_","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":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWeth","type":"address"}],"name":"replaceWETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60e060405234801561001057600080fd5b5060405161126b38038061126b8339818101604052608081101561003357600080fd5b50805160208201516040830151606093840151600280546001600160a01b0319166001600160a01b0395861617905582851b6001600160601b031990811660c05282861b811660a0529481901b90941660805292821692821691166111a16100ca6000398061057c52806106b95280610e285250806108f25280610ac25280610bff525080610d5e5280610f2552506111a16000f3fe6080604052600436106100ab5760003560e01c80638456db15116100645780638456db15146102a15780638fe21dec146102b6578063c67f873d14610400578063eb99be1214610433578063f2fde38b14610448578063faa980e41461047b576100b2565b8063018c9fda146100b45780630d0092971461021a5780630d4eec8f1461024d57806316048bc4146102625780633afe1f4c146102775780634e71e0c81461028c576100b2565b366100b257005b005b6101fe600480360360e08110156100ca57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561010457600080fd5b82018360208201111561011657600080fd5b803590602001918460208302840111600160201b8311171561013757600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561018657600080fd5b82018360208201111561019857600080fd5b803590602001918460208302840111600160201b831117156101b957600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505080351515915060200135610490565b604080516001600160a01b039092168252519081900360200190f35b34801561022657600080fd5b506100b26004803603602081101561023d57600080fd5b50356001600160a01b031661084a565b34801561025957600080fd5b506101fe6108d2565b34801561026e57600080fd5b506101fe6108e1565b34801561028357600080fd5b506101fe6108f0565b34801561029857600080fd5b506100b2610914565b3480156102ad57600080fd5b506101fe6109c7565b6101fe600480360360e08110156102cc57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561030657600080fd5b82018360208201111561031857600080fd5b803590602001918460208302840111600160201b8311171561033957600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561038857600080fd5b82018360208201111561039a57600080fd5b803590602001918460208302840111600160201b831117156103bb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505050803515159150602001356109d6565b34801561040c57600080fd5b506100b26004803603602081101561042357600080fd5b50356001600160a01b0316610cef565b34801561043f57600080fd5b506101fe610d5c565b34801561045457600080fd5b506100b26004803603602081101561046b57600080fd5b50356001600160a01b0316610d80565b34801561048757600080fd5b506101fe610e26565b600154600090600160a81b900460ff16156104de576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6001805460ff60a81b1916600160a81b179055814281101561053e576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461056b5789610578565b6002546001600160a01b03165b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156105d557600080fd5b505af11580156105e9573d6000803e3d6000fd5b505050506040513d60208110156105ff57600080fd5b505193506106113385848c6000610e4a565b6040516000906001600160a01b0386169034908381818185875af1925050503d806000811461065c576040519150601f19603f3d011682016040523d82523d6000602084013e610661565b606091505b50509050806106b7576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001806020018060200184151515158152602001838103835286818151815260200191508051906020019060200280838360005b838110156107aa578181015183820152602001610792565b50505050905001838103825285818151815260200191508051906020019060200280838360005b838110156107e95781810151838201526020016107d1565b505050509050019950505050505050505050600060405180830381600087803b15801561081557600080fd5b505af1158015610829573d6000803e3d6000fd5b50506001805460ff60a81b1916905550949c9b505050505050505050505050565b600154600160a01b900460ff161561089c576040805162461bcd60e51b815260206004820152601060248201526f1113d113d7d25392551250531256915160821b604482015290519081900360640190fd5b6001805460ff60a01b1916600160a01b179055600080546001600160a01b039092166001600160a01b0319909216919091179055565b6002546001600160a01b031681565b6000546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b03163314610963576040805162461bcd60e51b815260206004820152600d60248201526c494e56414c49445f434c41494d60981b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6001546001600160a01b031681565b600154600090600160a81b900460ff1615610a24576040805162461bcd60e51b815260206004820152600960248201526814915153951490539560ba1b604482015290519081900360640190fd5b6001805460ff60a81b1916600160a81b1790558142811015610a84576040805162461bcd60e51b81526020600482015260146024820152731113d113d0dc141c9bde1e4e881156141254915160621b604482015290519081900360640190fd5b8860006001600160a01b038a1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610ab15789610abe565b6002546001600160a01b03165b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166389edcf146040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610b1b57600080fd5b505af1158015610b2f573d6000803e3d6000fd5b505050506040513d6020811015610b4557600080fd5b50519350610b573385848c6000610e4a565b6040516000906001600160a01b0386169034908381818185875af1925050503d8060008114610ba2576040519150601f19603f3d011682016040523d82523d6000602084013e610ba7565b606091505b5050905080610bfd576040805162461bcd60e51b815260206004820152601c60248201527f444f444f437050726f78793a205472616e73666572206661696c656400000000604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ecfc2db0863386868e8e8e6040518863ffffffff1660e01b815260040180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b03168152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b0316815260200180602001806020018415151515815260200183810383528681815181526020019150805190602001906020028083836000838110156107aa578181015183820152602001610792565b6000546001600160a01b03163314610d3a576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b03163314610dcb576040805162461bcd60e51b81526020600482015260096024820152682727aa2fa7aba722a960b91b604482015290519081900360640190fd5b600080546040516001600160a01b03808516939216917fdcf55418cee3220104fef63f979ff3c4097ad240c0c43dcb33ce837748983e6291a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b8015610eec578115610ee757600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ea657600080fd5b505af1158015610eba573d6000803e3d6000fd5b505050506001600160a01b03851630149050610ee757600254610ee7906001600160a01b03168584610f8f565b610f88565b6040805163052f523360e11b81526001600160a01b038581166004830152878116602483015286811660448301526064820185905291517f000000000000000000000000000000000000000000000000000000000000000090921691630a5ea4669160848082019260009290919082900301818387803b158015610f6f57600080fd5b505af1158015610f83573d6000803e3d6000fd5b505050505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610fe1908490610fe6565b505050565b60006060836001600160a01b0316836040518082805190602001908083835b602083106110245780518252601f199092019160209182019101611005565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611086576040519150601f19603f3d011682016040523d82523d6000602084013e61108b565b606091505b5091509150816110e2576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b80511561113b578080602001905160208110156110fe57600080fd5b505161113b5760405162461bcd60e51b815260040180806020018281038252602a815260200180611142602a913960400191505060405180910390fd5b5050505056fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212205ee679be5080886c39da911b51f67d18fcf5bdca87e0ed100d65cbaee7bec8be64736f6c63430006090033000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d0000000000000000000000000596908263ef2724fbfbcafa1c983fcd7a629038000000000000000000000000043957f7554275b90c5178872fae851dcfc1089d0000000000000000000000007737fd30535c69545deeea54ab8dd590ccaebd3c
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d0000000000000000000000000596908263ef2724fbfbcafa1c983fcd7a629038000000000000000000000000043957f7554275b90c5178872fae851dcfc1089d0000000000000000000000007737fd30535c69545deeea54ab8dd590ccaebd3c
-----Decoded View---------------
Arg [0] : weth (address): 0xf50225a84382c74cbdea10b0c176f71fc3de0c4d
Arg [1] : cpFactory (address): 0x0596908263ef2724fbfbcafa1c983fcd7a629038
Arg [2] : upCpFactory (address): 0x043957f7554275b90c5178872fae851dcfc1089d
Arg [3] : dodoApproveProxy (address): 0x7737fd30535c69545deeea54ab8dd590ccaebd3c
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000f50225a84382c74cbdea10b0c176f71fc3de0c4d
Arg [1] : 0000000000000000000000000596908263ef2724fbfbcafa1c983fcd7a629038
Arg [2] : 000000000000000000000000043957f7554275b90c5178872fae851dcfc1089d
Arg [3] : 0000000000000000000000007737fd30535c69545deeea54ab8dd590ccaebd3c
Deployed ByteCode Sourcemap
15097:4031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17457:1100;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17457:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17457:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17457:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17457:1100:0;;;;;;;;-1:-1:-1;17457:1100:0;;-1:-1:-1;;;;;17457:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;17457:1100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17457:1100:0;;-1:-1:-1;;;;17457:1100:0;;;;;-1:-1:-1;17457:1100:0;;;;:::i;:::-;;;;-1:-1:-1;;;;;17457:1100:0;;;;;;;;;;;;;;1158:127;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1158:127:0;-1:-1:-1;;;;;1158:127:0;;:::i;15360:21::-;;;;;;;;;;;;;:::i;525:22::-;;;;;;;;;;;;;:::i;15440:39::-;;;;;;;;;;;;;:::i;1464:228::-;;;;;;;;;;;;;:::i;554:26::-;;;;;;;;;;;;;:::i;16274:1108::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16274:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16274:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16274:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16274:1108:0;;;;;;;;-1:-1:-1;16274:1108:0;;-1:-1:-1;;;;;16274:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16274:1108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16274:1108:0;;-1:-1:-1;;;;16274:1108:0;;;;;-1:-1:-1;16274:1108:0;;;;:::i;16106:91::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16106:91:0;-1:-1:-1;;;;;16106:91:0;;:::i;15388:45::-;;;;;;;;;;;;;:::i;1293:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1293:163:0;-1:-1:-1;;;;;1293:163:0;;:::i;15486:37::-;;;;;;;;;;;;;:::i;17457:1100::-;14822:9;;17772:31;;-1:-1:-1;;;14822:9:0;;;;14821:10;14813:32;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;;;;14868:4;14856:16;;-1:-1:-1;;;;14856:16:0;-1:-1:-1;;;14856:16:0;;;17753:8;15649:15:::1;15637:27:::0;::::1;;15629:60;;;::::0;;-1:-1:-1;;;15629:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15629:60:0;;;;;;;;;;;;;::::1;;17837:9:::0;17816:18:::2;-1:-1:-1::0;;;;;17879:27:0;::::2;15311:42;17879:27;:49;;17918:10;17879:49;;;17909:6;::::0;-1:-1:-1;;;;;17909:6:0::2;17879:49;17857:71;;17975:12;-1:-1:-1::0;;;;;17967:40:0::2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;17967:42:0;;-1:-1:-1;18022:146:0::2;18045:10;17967:42:::0;18100:10;18125:12;18152:5:::2;18022:8;:146::i;:::-;18208:42;::::0;18190:12:::2;::::0;-1:-1:-1;;;;;18208:20:0;::::2;::::0;18236:9:::2;::::0;18190:12;18208:42;18190:12;18208:42;18236:9;18208:20;:42:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18189:61;;;18269:7;18261:48;;;::::0;;-1:-1:-1;;;18261:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;18330:12;-1:-1:-1::0;;;;;18322:38:0::2;;18375:15;18405:10;18430;18455:11;18481:8;18504:9;18528:10;18322:227;;;;;;;;;;;;;-1:-1:-1::0;;;;;18322:227:0::2;-1:-1:-1::0;;;;;18322:227:0::2;;;;;;-1:-1:-1::0;;;;;18322:227:0::2;-1:-1:-1::0;;;;;18322:227:0::2;;;;;;-1:-1:-1::0;;;;;18322:227:0::2;-1:-1:-1::0;;;;;18322:227:0::2;;;;;;-1:-1:-1::0;;;;;18322:227:0::2;-1:-1:-1::0;;;;;18322:227:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;14895:9:0;:17;;-1:-1:-1;;;;14895:17:0;;;-1:-1:-1;17457:1100:0;;;-1:-1:-1;;;;;;;;;;;;17457:1100:0:o;1158:127::-;947:13;;-1:-1:-1;;;947:13:0;;;;946:14;938:43;;;;;-1:-1:-1;;;938:43:0;;;;;;;;;;;;-1:-1:-1;;;938:43:0;;;;;;;;;;;;;;;1244:4:::1;1228:20:::0;;-1:-1:-1;;;;1228:20:0::1;-1:-1:-1::0;;;1228:20:0::1;::::0;;;1259:18;;-1:-1:-1;;;;;1259:18:0;;::::1;-1:-1:-1::0;;;;;;1259:18:0;;::::1;::::0;;;::::1;::::0;;1158:127::o;15360:21::-;;;-1:-1:-1;;;;;15360:21:0;;:::o;525:22::-;;;-1:-1:-1;;;;;525:22:0;;:::o;15440:39::-;;;:::o;1464:228::-;1530:11;;-1:-1:-1;;;;;1530:11:0;1516:10;:25;1508:51;;;;;-1:-1:-1;;;1508:51:0;;;;;;;;;;;;-1:-1:-1;;;1508:51:0;;;;;;;;;;;;;;;1605:11;;;1596:7;;1575:42;;-1:-1:-1;;;;;1605:11:0;;;;1596:7;;;;1575:42;;;1638:11;;;;1628:21;;-1:-1:-1;;;;;;1628:21:0;;;-1:-1:-1;;;;;1638:11:0;;1628:21;;;;1660:24;;;1464:228::o;554:26::-;;;-1:-1:-1;;;;;554:26:0;;:::o;16274:1108::-;14822:9;;16591:33;;-1:-1:-1;;;14822:9:0;;;;14821:10;14813:32;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;-1:-1:-1;;;14813:32:0;;;;;;;;;;;;;;;14868:4;14856:16;;-1:-1:-1;;;;14856:16:0;-1:-1:-1;;;14856:16:0;;;16572:8;15649:15:::1;15637:27:::0;::::1;;15629:60;;;::::0;;-1:-1:-1;;;15629:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15629:60:0;;;;;;;;;;;;;::::1;;16658:9:::0;16637:18:::2;-1:-1:-1::0;;;;;16700:27:0;::::2;15311:42;16700:27;:49;;16739:10;16700:49;;;16730:6;::::0;-1:-1:-1;;;;;16730:6:0::2;16700:49;16678:71;;16798:14;-1:-1:-1::0;;;;;16790:42:0::2;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;16790:44:0;;-1:-1:-1;16847:148:0::2;16870:10;16790:44:::0;16927:10;16952:12;16979:5:::2;16847:8;:148::i;:::-;17027:44;::::0;17009:12:::2;::::0;-1:-1:-1;;;;;17027:22:0;::::2;::::0;17057:9:::2;::::0;17009:12;17027:44;17009:12;17027:44;17057:9;17027:22;:44:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17008:63;;;17090:7;17082:48;;;::::0;;-1:-1:-1;;;17082:48:0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;17151:14;-1:-1:-1::0;;;;;17143:40:0::2;;17198:17;17230:10;17255;17280:11;17306:8;17329:9;17353:10;17143:231;;;;;;;;;;;;;-1:-1:-1::0;;;;;17143:231:0::2;-1:-1:-1::0;;;;;17143:231:0::2;;;;;;-1:-1:-1::0;;;;;17143:231:0::2;-1:-1:-1::0;;;;;17143:231:0::2;;;;;;-1:-1:-1::0;;;;;17143:231:0::2;-1:-1:-1::0;;;;;17143:231:0::2;;;;;;-1:-1:-1::0;;;;;17143:231:0::2;-1:-1:-1::0;;;;;17143:231:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;16106:91:::0;1063:7;;-1:-1:-1;;;;;1063:7:0;1049:10;:21;1041:43;;;;;-1:-1:-1;;;1041:43:0;;;;;;;;;;;;-1:-1:-1;;;1041:43:0;;;;;;;;;;;;;;;16173:6:::1;:16:::0;;-1:-1:-1;;;;;;16173:16:0::1;-1:-1:-1::0;;;;;16173:16:0;;;::::1;::::0;;;::::1;::::0;;16106:91::o;15388:45::-;;;:::o;1293:163::-;1063:7;;-1:-1:-1;;;;;1063:7:0;1049:10;:21;1041:43;;;;;-1:-1:-1;;;1041:43:0;;;;;;;;;;;;-1:-1:-1;;;1041:43:0;;;;;;;;;;;;;;;1397:7:::1;::::0;;1371:44:::1;::::0;-1:-1:-1;;;;;1371:44:0;;::::1;::::0;1397:7;::::1;::::0;1371:44:::1;::::0;::::1;1426:11;:22:::0;;-1:-1:-1;;;;;;1426:22:0::1;-1:-1:-1::0;;;;;1426:22:0;;;::::1;::::0;;;::::1;::::0;;1293:163::o;15486:37::-;;;:::o;18630:495::-;18793:5;18789:329;;;18819:10;;18815:183;;18856:6;;;;;;;;;-1:-1:-1;;;;;18856:6:0;-1:-1:-1;;;;;18850:21:0;;18879:6;18850:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;18911:19:0;;18925:4;18911:19;;-1:-1:-1;18907:75:0;;18962:6;;18932:50;;-1:-1:-1;;;;;18962:6:0;18971:2;18975:6;18932:22;:50::i;:::-;18789:329;;;19030:76;;;-1:-1:-1;;;19030:76:0;;-1:-1:-1;;;;;19030:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19048:20;19030:51;;;;;;:76;;;;;-1:-1:-1;;19030:76:0;;;;;;;;-1:-1:-1;19030:51:0;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18789:329;18630:495;;;;;:::o;11080:211::-;11224:58;;;-1:-1:-1;;;;;11224:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11224:58:0;-1:-1:-1;;;11224:58:0;;;11197:86;;11217:5;;11197:19;:86::i;:::-;11080:211;;;:::o;12653:1046::-;13313:12;13327:23;13362:5;-1:-1:-1;;;;;13354:19:0;13374:4;13354:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13354:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13312:67;;;;13398:7;13390:52;;;;;-1:-1:-1;;;13390:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13459:17;;:21;13455:237;;13614:10;13603:30;;;;;;;;;;;;;;;-1:-1:-1;13603:30:0;13595:85;;;;-1:-1:-1;;;13595:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12653:1046;;;;:::o
Swarm Source
ipfs://5ee679be5080886c39da911b51f67d18fcf5bdca87e0ed100d65cbaee7bec8be
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.