Polygon Sponsored slots available. Book your slot here!
Overview
POL Balance
0 POL
POL Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,303 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 64244397 | 29 days ago | IN | 0 POL | 0.00456209 | ||||
Deposit | 64222033 | 30 days ago | IN | 0 POL | 0.01951859 | ||||
Withdraw | 64221942 | 30 days ago | IN | 0 POL | 0.01275498 | ||||
Deposit | 64187664 | 31 days ago | IN | 0 POL | 0.00843137 | ||||
Withdraw | 64187653 | 31 days ago | IN | 0 POL | 0.00596731 | ||||
Withdraw | 64094253 | 33 days ago | IN | 0 POL | 0.00494226 | ||||
Withdraw | 64088532 | 33 days ago | IN | 0 POL | 0.00212736 | ||||
Deposit | 63277472 | 53 days ago | IN | 0 POL | 0.00264746 | ||||
Withdraw | 63277458 | 53 days ago | IN | 0 POL | 0.00187395 | ||||
Deposit | 61774220 | 90 days ago | IN | 0 POL | 0.00329527 | ||||
Deposit | 61774220 | 90 days ago | IN | 0 POL | 0.00673211 | ||||
Withdraw | 61774181 | 90 days ago | IN | 0 POL | 0.00487426 | ||||
Deposit | 58853785 | 164 days ago | IN | 0 POL | 0.00317292 | ||||
Withdraw | 58853776 | 164 days ago | IN | 0 POL | 0.00224589 | ||||
Withdraw | 57938112 | 187 days ago | IN | 0 POL | 0.00213045 | ||||
Withdraw | 57938096 | 187 days ago | IN | 0 POL | 0.00213095 | ||||
Withdraw | 57262422 | 204 days ago | IN | 0 POL | 0.00538807 | ||||
Deposit | 56943423 | 213 days ago | IN | 0 POL | 0.00317292 | ||||
Withdraw | 56943407 | 213 days ago | IN | 0 POL | 0.00224589 | ||||
Deposit | 56409436 | 227 days ago | IN | 0 POL | 0.00346268 | ||||
Withdraw | 56409416 | 227 days ago | IN | 0 POL | 0.00245696 | ||||
Withdraw | 55860027 | 241 days ago | IN | 0 POL | 0.01355651 | ||||
Withdraw | 55635576 | 247 days ago | IN | 0 POL | 0.00743803 | ||||
Deposit | 55577773 | 249 days ago | IN | 0 POL | 0.00834263 | ||||
Withdraw | 55577759 | 249 days ago | IN | 0 POL | 0.00586231 |
Loading...
Loading
Contract Name:
PerpetualPool
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-03-22 */ /** *Submitted for verification at polygonscan.com on 2021-08-10 */ // SPDX-License-Identifier: MIT /******************************************/ /* IERC20 starts here */ /******************************************/ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @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); /** * @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); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /******************************************/ /* SafeMath starts here */ /******************************************/ // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /******************************************/ /* Address starts here */ /******************************************/ // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /******************************************/ /* SafeERC20 starts here */ /******************************************/ // File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.0; /** * @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 IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; 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)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ 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)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @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. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "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"); } } } /******************************************/ /* Context starts here */ /******************************************/ // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /******************************************/ /* Ownable starts here */ /******************************************/ // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /******************************************/ /* PerpetualPool starts here */ /******************************************/ pragma solidity 0.6.12; contract PerpetualPool is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; struct UserInfo { uint256 amount; // How many GREEN tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } struct PoolInfo { uint256 lastRewardBlock; // Last block number that reward distribution occured. uint256 accRewardPerShare; // Accumulated reward per share, times 1e12. See below. uint256 entryFee; // Fee taken on entry as BPS (1/10000). } IERC20 public immutable GREEN; // Green token. IERC20 public immutable REWARD; // Reward token. uint256 public rewardPerBlock; // Reward tokens created per block. uint256 public immutable startBlock; // The block number at which reward distribution starts. uint256 public endBlock; // The block number at which reward distribution ends. uint256 public stakedGreen; // Total Green tokens staked in the contract. PoolInfo public poolInfo; address public feeTo; mapping (address => UserInfo) public userInfo; // Info of each user that stakes GREEN tokens. event Withdraw(address indexed user, uint256 amount); event Deposit(address indexed user, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 amount); constructor(IERC20 _GREEN, IERC20 _REWARD, uint256 _rewardPerBlock, uint256 _startBlock, uint256 _endBlock, uint256 _entryFee) public { require(address(_GREEN) != address(0), "_GREEN address not set!"); require(address(_REWARD) != address(0), "_REWARD address not set!"); require(_rewardPerBlock != 0, "_rewardPerBlock not set!"); require(_startBlock < _endBlock, "_startBlock too high!"); GREEN = _GREEN; REWARD = _REWARD; rewardPerBlock = _rewardPerBlock; startBlock = _startBlock; endBlock = _endBlock; poolInfo = PoolInfo({ lastRewardBlock: _startBlock, accRewardPerShare: 0, entryFee: _entryFee }); } /** * @dev Return reward multiplier over the given _from to _to blocks based on block count. * @param _from First block. * @param _to Last block. * @return Number of blocks. */ function getMultiplier(uint256 _from, uint256 _to) internal view returns (uint256) { if (_to < endBlock) { return _to.sub(_from); } else if (_from >= endBlock) { return 0; } else { return endBlock.sub(_from); } } /** * @dev View function to see pending rewards on frontend. * @param _user Address of a specific user. * @return Pending rewards. */ function pendingReward(address _user) external view returns (uint256) { UserInfo storage user = userInfo[_user]; uint256 accRewardPerShare = poolInfo.accRewardPerShare; if (block.number > poolInfo.lastRewardBlock && stakedGreen != 0) { uint256 multiplier = getMultiplier(poolInfo.lastRewardBlock, block.number); uint256 tokenReward = multiplier.mul(rewardPerBlock); accRewardPerShare = accRewardPerShare.add(tokenReward.mul(1e12).div(stakedGreen)); } return user.amount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt); } /** * @dev Update reward variables of the given pool to be up-to-date. */ function updatePool() public { if (block.number <= poolInfo.lastRewardBlock) { return; } if (stakedGreen == 0) { poolInfo.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(poolInfo.lastRewardBlock, block.number); uint256 tokenReward = multiplier.mul(rewardPerBlock); poolInfo.accRewardPerShare = poolInfo.accRewardPerShare.add(tokenReward.mul(1e12).div(stakedGreen)); poolInfo.lastRewardBlock = block.number; } /** * @dev Deposit Green tokens to the Perpetual Pool for reward allocation. * @param _amount Amount of LP tokens to deposit. */ function deposit(uint256 _amount) public { require(_amount >= 0, "Can't deposit zero tokens."); UserInfo storage user = userInfo[msg.sender]; updatePool(); if (user.amount > 0) { uint256 pending = user.amount.mul(poolInfo.accRewardPerShare).div(1e12).sub(user.rewardDebt); safeRewardTransfer(msg.sender, pending); } uint256 fee = _amount * poolInfo.entryFee / 10000; GREEN.safeTransferFrom(address(msg.sender), feeTo, fee); GREEN.safeTransferFrom(address(msg.sender), address(this), _amount - fee); stakedGreen = stakedGreen.add(_amount - fee); user.amount = user.amount.add(_amount - fee); user.rewardDebt = user.amount.mul(poolInfo.accRewardPerShare).div(1e12); emit Deposit(msg.sender, _amount - fee); } /** * @dev Withdraw Green tokens from the Perpetual Pool. * @param _amount Amount of LP tokens to withdraw. */ function withdraw(uint256 _amount) public { UserInfo storage user = userInfo[msg.sender]; require(user.amount >= _amount, "Can't withdraw more tokens than previously deposited."); updatePool(); uint256 pending = user.amount.mul(poolInfo.accRewardPerShare).div(1e12).sub(user.rewardDebt); safeRewardTransfer(msg.sender, pending); user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(poolInfo.accRewardPerShare).div(1e12); GREEN.safeTransfer(address(msg.sender), _amount); stakedGreen = stakedGreen.sub(_amount); emit Withdraw(msg.sender, _amount); } /** * @dev Safe transfer function, just in case if rounding error causes faucet to not have enough rewards. * @param _to Target address. * @param _amount Amount of rewards to transfer. */ function safeRewardTransfer(address _to, uint256 _amount) internal { uint256 rewardBalance = REWARD.balanceOf(address(this)); if (_amount > rewardBalance) { REWARD.safeTransfer(_to, rewardBalance); } else { REWARD.safeTransfer(_to, _amount); } } /** * @dev Withdraw without caring about rewards. EMERGENCY ONLY. */ function emergencyWithdraw() public { UserInfo storage user = userInfo[msg.sender]; GREEN.safeTransfer(address(msg.sender), user.amount); stakedGreen = stakedGreen.sub(user.amount); emit EmergencyWithdraw(msg.sender, user.amount); user.amount = 0; user.rewardDebt = 0; } /** * @dev Transfer reward tokens. EMERGENCY ONLY. * @return Success. */ function emergencyTransfer(address _to) external onlyOwner returns (bool) { if (GREEN == REWARD) { return REWARD.transfer(_to, REWARD.balanceOf(address(this)) - stakedGreen); } else { return REWARD.transfer(_to, REWARD.balanceOf(address(this))); } } /** * @dev Define last block on which reward distribution occurs. * @return Last block number. */ function setEndBlock(uint256 _endBlock) external onlyOwner returns (uint256) { require(block.number < endBlock, "Reward distribution already ended."); require(_endBlock > block.number, "Block needs to be in the future."); endBlock = _endBlock; return endBlock; } /** * @dev Update rewards per block. * @return Reward per block. */ function setGreenPerBlock(uint256 _rewardPerBLock) external onlyOwner returns (uint256) { require(_rewardPerBLock > 0, "Green per Block must be greater than 0."); updatePool(); rewardPerBlock = _rewardPerBLock; return rewardPerBlock; } /** * @dev Update entry fee. */ function setEntryFee(uint256 _entryFee) external onlyOwner { require(_entryFee <= 10000, "Entry fee can't be more than 100%."); poolInfo.entryFee = _entryFee; } /** * @dev Update fee recipient. */ function setFeeTo(address _feeTo) external onlyOwner { feeTo = _feeTo; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_GREEN","type":"address"},{"internalType":"contract IERC20","name":"_REWARD","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_endBlock","type":"uint256"},{"internalType":"uint256","name":"_entryFee","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"GREEN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"emergencyTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"uint256","name":"entryFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endBlock","type":"uint256"}],"name":"setEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_entryFee","type":"uint256"}],"name":"setEntryFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBLock","type":"uint256"}],"name":"setGreenPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedGreen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162002b1838038062002b18833981810160405260c08110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505060006200008c6200042f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415620001ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f5f475245454e2061646472657373206e6f74207365742100000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141562000272576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5f5245574152442061646472657373206e6f742073657421000000000000000081525060200191505060405180910390fd5b6000841415620002ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5f726577617264506572426c6f636b206e6f742073657421000000000000000081525060200191505060405180910390fd5b81831062000360576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5f7374617274426c6f636b20746f6f206869676821000000000000000000000081525060200191505060405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508473ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050836001819055508260c081815250508160028190555060405180606001604052808481526020016000815260200182815250600460008201518160000155602082015181600101556040820151816002015590505050505050505062000437565b600033905090565b60805160601c60a05160601c60c05161266d620004ab60003980610c4f52508061067852806106ec528061072c528061088452806108c1528061141b5280611c9c5280611d6d5280611dbd5250806106af5280610b9b5280610e17528061110d528061115c528061148b525061266d6000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063db2e21bc1161007c578063db2e21bc1461045e578063e3161ddd14610468578063eb770d0c14610472578063f2fde38b146104a0578063f40f0f52146104e4578063f46901ed1461053c57610142565b80638da5cb5b14610344578063b327cc5214610378578063b6b55f25146103ba578063c713aa94146103e8578063cab34c081461042a57610142565b806348cd4cb11161010a57806348cd4cb1146102805780635a2f3d091461029e5780635a6b6d1c146102ca578063715018a6146102e857806378ec96a0146102f25780638ae39cac1461032657610142565b8063017e7e5814610147578063083c63231461017b5780630e501834146101995780631959a002146101f35780632e1a7d4d14610252575b600080fd5b61014f610580565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101836105a6565b6040518082815260200191505060405180910390f35b6101db600480360360208110156101af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105ac565b60405180821515815260200191505060405180910390f35b6102356004803603602081101561020957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a17565b604051808381526020018281526020019250505060405180910390f35b61027e6004803603602081101561026857600080fd5b8101908080359060200190929190505050610a3b565b005b610288610c4d565b6040518082815260200191505060405180910390f35b6102a6610c71565b60405180848152602001838152602001828152602001935050505060405180910390f35b6102d2610c89565b6040518082815260200191505060405180910390f35b6102f0610c8f565b005b6102fa610e15565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61032e610e39565b6040518082815260200191505060405180910390f35b61034c610e3f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a46004803603602081101561038e57600080fd5b8101908080359060200190929190505050610e68565b6040518082815260200191505060405180910390f35b6103e6600480360360208110156103d057600080fd5b8101908080359060200190929190505050610fa4565b005b610414600480360360208110156103fe57600080fd5b810190808035906020019092919050505061126f565b6040518082815260200191505060405180910390f35b610432611419565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61046661143d565b005b610470611557565b005b61049e6004803603602081101561048857600080fd5b8101908080359060200190929190505050611609565b005b6104e2600480360360208110156104b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611739565b005b610526600480360360208110156104fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611944565b6040518082815260200191505060405180910390f35b61057e6004803603602081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6a565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60006105b6611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610676576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161415610882577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb836003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107b157600080fd5b505afa1580156107c5573d6000803e3d6000fd5b505050506040513d60208110156107db57600080fd5b8101908080519060200190929190505050036040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b505050506040513d602081101561086a57600080fd5b81019080805190602001909291905050509050610a12565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094657600080fd5b505afa15801561095a573d6000803e3d6000fd5b505050506040513d602081101561097057600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156109d457600080fd5b505af11580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b810190808051906020019092919050505090505b919050565b60086020528060005260406000206000915090508060000154908060010154905082565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001541015610adb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806125276035913960400191505060405180910390fd5b610ae3611557565b6000610b2e8260010154610b2064e8d4a51000610b126004600101548760000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b611c4e90919063ffffffff16565b9050610b3a3382611c98565b610b51838360000154611c4e90919063ffffffff16565b8260000181905550610b8c64e8d4a51000610b7e6004600101548560000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b8260010181905550610bdf33847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b610bf483600354611c4e90919063ffffffff16565b6003819055503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040518082815260200191505060405180910390a2505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60048060000154908060010154908060020154905083565b60035481565b610c97611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610e72611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008211610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806125e76027913960400191505060405180910390fd5b610f93611557565b816001819055506001549050919050565b600081101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f43616e2774206465706f736974207a65726f20746f6b656e732e00000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611066611557565b6000816000015411156110cc5760006110be82600101546110b064e8d4a510006110a26004600101548760000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b611c4e90919063ffffffff16565b90506110ca3382611c98565b505b60006127106004600201548402816110e057fe5b04905061115233600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611ea9909392919063ffffffff16565b6111a133308386037f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611ea9909392919063ffffffff16565b6111b8818403600354611f6a90919063ffffffff16565b6003819055506111d78184038360000154611f6a90919063ffffffff16565b826000018190555061121264e8d4a510006112046004600101548560000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8285036040518082815260200191505060405180910390a2505050565b6000611279611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6002544310611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125a46022913960400191505060405180910390fd5b438211611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f426c6f636b206e6565647320746f20626520696e20746865206675747572652e81525060200191505060405180910390fd5b816002819055506002549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506114cf3382600001547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b6114e88160000154600354611c4e90919063ffffffff16565b6003819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969582600001546040518082815260200191505060405180910390a2600081600001819055506000816001018190555050565b600460000154431161156857611607565b600060035414156115825743600460000181905550611607565b600061159360046000015443611ff2565b905060006115ac60015483611b7e90919063ffffffff16565b90506115f16115dd6003546115cf64e8d4a5100085611b7e90919063ffffffff16565b611c0490919063ffffffff16565b600460010154611f6a90919063ffffffff16565b6004600101819055504360046000018190555050505b565b611611611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61271081111561172c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125826022913960400191505060405180910390fd5b8060046002018190555050565b611741611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061255c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006004600101549050600460000154431180156119a95750600060035414155b15611a1d5760006119bf60046000015443611ff2565b905060006119d860015483611b7e90919063ffffffff16565b9050611a18611a096003546119fb64e8d4a5100085611b7e90919063ffffffff16565b611c0490919063ffffffff16565b84611f6a90919063ffffffff16565b925050505b611a618260010154611a5364e8d4a51000611a45858760000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b611c4e90919063ffffffff16565b92505050919050565b611a72611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600080831415611b915760009050611bfe565b6000828402905082848281611ba257fe5b0414611bf9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125c66021913960400191505060405180910390fd5b809150505b92915050565b6000611c4683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612048565b905092915050565b6000611c9083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061210e565b905092915050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d2157600080fd5b505afa158015611d35573d6000803e3d6000fd5b505050506040513d6020811015611d4b57600080fd5b8101908080519060200190929190505050905080821115611db657611db183827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b611e02565b611e0183837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b5b505050565b611ea48363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ce565b505050565b611f64846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ce565b50505050565b600080828401905083811015611fe8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600254821015612018576120118383611c4e90919063ffffffff16565b9050612042565b600254831061202a5760009050612042565b61203f83600254611c4e90919063ffffffff16565b90505b92915050565b600080831182906120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120b957808201518184015260208101905061209e565b50505050905090810190601f1680156120e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161210057fe5b049050809150509392505050565b60008383111582906121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612180578082015181840152602081019050612165565b50505050905090810190601f1680156121ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060612230826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122bd9092919063ffffffff16565b90506000815111156122b85780806020019051602081101561225157600080fd5b81019080805190602001909291905050506122b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061260e602a913960400191505060405180910390fd5b5b505050565b60606122cc84846000856122d5565b90509392505050565b60606122e0856124db565b612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106123a2578051825260208201915060208101905060208303925061237f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612404576040519150601f19603f3d011682016040523d82523d6000602084013e612409565b606091505b5091509150811561241e5780925050506124d3565b6000815111156124315780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561249857808201518184015260208101905061247d565b50505050905090810190601f1680156124c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561251d57506000801b8214155b9250505091905056fe43616e2774207769746864726177206d6f726520746f6b656e73207468616e2070726576696f75736c79206465706f73697465642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373456e747279206665652063616e2774206265206d6f7265207468616e20313030252e52657761726420646973747269627574696f6e20616c726561647920656e6465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77477265656e2070657220426c6f636b206d7573742062652067726561746572207468616e20302e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220c9ebf837ee2dc5767832e2b26c95f17bd6837eec1343cda646ddd3fda3def85964736f6c634300060c003300000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27800000000000000000000000040db6d7812b8288eca452f912ca9f262b186f278000000000000000000000000000000000000000000000000120a871cc002000000000000000000000000000000000000000000000000000000000000019238c0000000000000000000000000000000000000000000000000000000003b9ac9ff0000000000000000000000000000000000000000000000000000000000000014
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063db2e21bc1161007c578063db2e21bc1461045e578063e3161ddd14610468578063eb770d0c14610472578063f2fde38b146104a0578063f40f0f52146104e4578063f46901ed1461053c57610142565b80638da5cb5b14610344578063b327cc5214610378578063b6b55f25146103ba578063c713aa94146103e8578063cab34c081461042a57610142565b806348cd4cb11161010a57806348cd4cb1146102805780635a2f3d091461029e5780635a6b6d1c146102ca578063715018a6146102e857806378ec96a0146102f25780638ae39cac1461032657610142565b8063017e7e5814610147578063083c63231461017b5780630e501834146101995780631959a002146101f35780632e1a7d4d14610252575b600080fd5b61014f610580565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101836105a6565b6040518082815260200191505060405180910390f35b6101db600480360360208110156101af57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105ac565b60405180821515815260200191505060405180910390f35b6102356004803603602081101561020957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a17565b604051808381526020018281526020019250505060405180910390f35b61027e6004803603602081101561026857600080fd5b8101908080359060200190929190505050610a3b565b005b610288610c4d565b6040518082815260200191505060405180910390f35b6102a6610c71565b60405180848152602001838152602001828152602001935050505060405180910390f35b6102d2610c89565b6040518082815260200191505060405180910390f35b6102f0610c8f565b005b6102fa610e15565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61032e610e39565b6040518082815260200191505060405180910390f35b61034c610e3f565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103a46004803603602081101561038e57600080fd5b8101908080359060200190929190505050610e68565b6040518082815260200191505060405180910390f35b6103e6600480360360208110156103d057600080fd5b8101908080359060200190929190505050610fa4565b005b610414600480360360208110156103fe57600080fd5b810190808035906020019092919050505061126f565b6040518082815260200191505060405180910390f35b610432611419565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61046661143d565b005b610470611557565b005b61049e6004803603602081101561048857600080fd5b8101908080359060200190929190505050611609565b005b6104e2600480360360208110156104b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611739565b005b610526600480360360208110156104fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611944565b6040518082815260200191505060405180910390f35b61057e6004803603602081101561055257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a6a565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60006105b6611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610676576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff161415610882577f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb836003547f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107b157600080fd5b505afa1580156107c5573d6000803e3d6000fd5b505050506040513d60208110156107db57600080fd5b8101908080519060200190929190505050036040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561084057600080fd5b505af1158015610854573d6000803e3d6000fd5b505050506040513d602081101561086a57600080fd5b81019080805190602001909291905050509050610a12565b7f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb837f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561094657600080fd5b505afa15801561095a573d6000803e3d6000fd5b505050506040513d602081101561097057600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156109d457600080fd5b505af11580156109e8573d6000803e3d6000fd5b505050506040513d60208110156109fe57600080fd5b810190808051906020019092919050505090505b919050565b60086020528060005260406000206000915090508060000154908060010154905082565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508181600001541015610adb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806125276035913960400191505060405180910390fd5b610ae3611557565b6000610b2e8260010154610b2064e8d4a51000610b126004600101548760000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b611c4e90919063ffffffff16565b9050610b3a3382611c98565b610b51838360000154611c4e90919063ffffffff16565b8260000181905550610b8c64e8d4a51000610b7e6004600101548560000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b8260010181905550610bdf33847f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b610bf483600354611c4e90919063ffffffff16565b6003819055503373ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364846040518082815260200191505060405180910390a2505050565b7f00000000000000000000000000000000000000000000000000000000019238c081565b60048060000154908060010154908060020154905083565b60035481565b610c97611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b7f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27881565b60015481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610e72611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008211610f8b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806125e76027913960400191505060405180910390fd5b610f93611557565b816001819055506001549050919050565b600081101561101b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f43616e2774206465706f736974207a65726f20746f6b656e732e00000000000081525060200191505060405180910390fd5b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611066611557565b6000816000015411156110cc5760006110be82600101546110b064e8d4a510006110a26004600101548760000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b611c4e90919063ffffffff16565b90506110ca3382611c98565b505b60006127106004600201548402816110e057fe5b04905061115233600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16837f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff16611ea9909392919063ffffffff16565b6111a133308386037f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff16611ea9909392919063ffffffff16565b6111b8818403600354611f6a90919063ffffffff16565b6003819055506111d78184038360000154611f6a90919063ffffffff16565b826000018190555061121264e8d4a510006112046004600101548560000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b82600101819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c8285036040518082815260200191505060405180910390a2505050565b6000611279611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6002544310611393576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125a46022913960400191505060405180910390fd5b438211611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f426c6f636b206e6565647320746f20626520696e20746865206675747572652e81525060200191505060405180910390fd5b816002819055506002549050919050565b7f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27881565b6000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506114cf3382600001547f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b6114e88160000154600354611c4e90919063ffffffff16565b6003819055503373ffffffffffffffffffffffffffffffffffffffff167f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd969582600001546040518082815260200191505060405180910390a2600081600001819055506000816001018190555050565b600460000154431161156857611607565b600060035414156115825743600460000181905550611607565b600061159360046000015443611ff2565b905060006115ac60015483611b7e90919063ffffffff16565b90506115f16115dd6003546115cf64e8d4a5100085611b7e90919063ffffffff16565b611c0490919063ffffffff16565b600460010154611f6a90919063ffffffff16565b6004600101819055504360046000018190555050505b565b611611611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61271081111561172c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806125826022913960400191505060405180910390fd5b8060046002018190555050565b611741611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061255c6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060006004600101549050600460000154431180156119a95750600060035414155b15611a1d5760006119bf60046000015443611ff2565b905060006119d860015483611b7e90919063ffffffff16565b9050611a18611a096003546119fb64e8d4a5100085611b7e90919063ffffffff16565b611c0490919063ffffffff16565b84611f6a90919063ffffffff16565b925050505b611a618260010154611a5364e8d4a51000611a45858760000154611b7e90919063ffffffff16565b611c0490919063ffffffff16565b611c4e90919063ffffffff16565b92505050919050565b611a72611b76565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600080831415611b915760009050611bfe565b6000828402905082848281611ba257fe5b0414611bf9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806125c66021913960400191505060405180910390fd5b809150505b92915050565b6000611c4683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612048565b905092915050565b6000611c9083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061210e565b905092915050565b60007f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d2157600080fd5b505afa158015611d35573d6000803e3d6000fd5b505050506040513d6020811015611d4b57600080fd5b8101908080519060200190929190505050905080821115611db657611db183827f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b611e02565b611e0183837f00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27873ffffffffffffffffffffffffffffffffffffffff16611e079092919063ffffffff16565b5b505050565b611ea48363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ce565b505050565b611f64846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506121ce565b50505050565b600080828401905083811015611fe8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600254821015612018576120118383611c4e90919063ffffffff16565b9050612042565b600254831061202a5760009050612042565b61203f83600254611c4e90919063ffffffff16565b90505b92915050565b600080831182906120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120b957808201518184015260208101905061209e565b50505050905090810190601f1680156120e65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161210057fe5b049050809150509392505050565b60008383111582906121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612180578082015181840152602081019050612165565b50505050905090810190601f1680156121ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6060612230826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122bd9092919063ffffffff16565b90506000815111156122b85780806020019051602081101561225157600080fd5b81019080805190602001909291905050506122b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061260e602a913960400191505060405180910390fd5b5b505050565b60606122cc84846000856122d5565b90509392505050565b60606122e0856124db565b612352576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106123a2578051825260208201915060208101905060208303925061237f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612404576040519150601f19603f3d011682016040523d82523d6000602084013e612409565b606091505b5091509150811561241e5780925050506124d3565b6000815111156124315780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561249857808201518184015260208101905061247d565b50505050905090810190601f1680156124c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561251d57506000801b8214155b9250505091905056fe43616e2774207769746864726177206d6f726520746f6b656e73207468616e2070726576696f75736c79206465706f73697465642e4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373456e747279206665652063616e2774206265206d6f7265207468616e20313030252e52657761726420646973747269627574696f6e20616c726561647920656e6465642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77477265656e2070657220426c6f636b206d7573742062652067726561746572207468616e20302e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220c9ebf837ee2dc5767832e2b26c95f17bd6837eec1343cda646ddd3fda3def85964736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f27800000000000000000000000040db6d7812b8288eca452f912ca9f262b186f278000000000000000000000000000000000000000000000000120a871cc002000000000000000000000000000000000000000000000000000000000000019238c0000000000000000000000000000000000000000000000000000000003b9ac9ff0000000000000000000000000000000000000000000000000000000000000014
-----Decoded View---------------
Arg [0] : _GREEN (address): 0x40DB6d7812b8288eCA452F912ca9F262b186f278
Arg [1] : _REWARD (address): 0x40DB6d7812b8288eCA452F912ca9F262b186f278
Arg [2] : _rewardPerBlock (uint256): 1300000000000000000
Arg [3] : _startBlock (uint256): 26360000
Arg [4] : _endBlock (uint256): 999999999
Arg [5] : _entryFee (uint256): 20
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f278
Arg [1] : 00000000000000000000000040db6d7812b8288eca452f912ca9f262b186f278
Arg [2] : 000000000000000000000000000000000000000000000000120a871cc0020000
Arg [3] : 00000000000000000000000000000000000000000000000000000000019238c0
Arg [4] : 000000000000000000000000000000000000000000000000000000003b9ac9ff
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Deployed Bytecode Sourcemap
22527:8639:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23751:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23513:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29662:307;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23780:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;27926:664;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23403:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23720:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23621:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21806:148;;;:::i;:::-;;23175:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23314;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21164:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30500:276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26939:845;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30098:303;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23244:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29225:329;;;:::i;:::-;;26226:553;;;:::i;:::-;;30833:183;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22109:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25512:615;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31077:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23751:20;;;;;;;;;;;;;:::o;23513:23::-;;;;:::o;29662:307::-;29730:4;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29760:6:::1;29751:15;;:5;:15;;;29747:215;;;29790:6;:15;;;29806:3;29845:11;;29811:6;:16;;;29836:4;29811:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;:45;29790:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;29783:74;;;;29747:215;29897:6;:15;;;29913:3;29918:6;:16;;;29943:4;29918:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;29897:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;29890:60;;21446:1;29662:307:::0;;;:::o;23780:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27926:664::-;27979:21;28003:8;:20;28012:10;28003:20;;;;;;;;;;;;;;;27979:44;;28057:7;28042:4;:11;;;:22;;28034:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28133:12;:10;:12::i;:::-;28156:15;28174:74;28232:4;:15;;;28174:53;28222:4;28174:43;28190:8;:26;;;28174:4;:11;;;:15;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;:57;;:74;;;;:::i;:::-;28156:92;;28259:39;28278:10;28290:7;28259:18;:39::i;:::-;28323:24;28339:7;28323:4;:11;;;:15;;:24;;;;:::i;:::-;28309:4;:11;;:38;;;;28376:53;28424:4;28376:43;28392:8;:26;;;28376:4;:11;;;:15;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;28358:4;:15;;:71;;;;28440:48;28467:10;28480:7;28440:5;:18;;;;:48;;;;;:::i;:::-;28513:24;28529:7;28513:11;;:15;;:24;;;;:::i;:::-;28499:11;:38;;;;28562:10;28553:29;;;28574:7;28553:29;;;;;;;;;;;;;;;;;;27926:664;;;:::o;23403:35::-;;;:::o;23720:24::-;;;;;;;;;;;;;;;;;;;:::o;23621:26::-;;;;:::o;21806:148::-;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21913:1:::1;21876:40;;21897:6;::::0;::::1;;;;;;;;21876:40;;;;;;;;;;;;21944:1;21927:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;21806:148::o:0;23175:29::-;;;:::o;23314:::-;;;;:::o;21164:79::-;21202:7;21229:6;;;;;;;;;;;21222:13;;21164:79;:::o;30500:276::-;30579:7;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30625:1:::1;30607:15;:19;30599:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30681:12;:10;:12::i;:::-;30721:15;30704:14;:32;;;;30754:14;;30747:21;;30500:276:::0;;;:::o;26939:845::-;27010:1;26999:7;:12;;26991:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27053:21;27077:8;:20;27086:10;27077:20;;;;;;;;;;;;;;;27053:44;;27108:12;:10;:12::i;:::-;27149:1;27135:4;:11;;;:15;27131:194;;;27167:15;27185:74;27243:4;:15;;;27185:53;27233:4;27185:43;27201:8;:26;;;27185:4;:11;;;:15;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;:57;;:74;;;;:::i;:::-;27167:92;;27274:39;27293:10;27305:7;27274:18;:39::i;:::-;27131:194;;27335:11;27379:5;27359:8;:17;;;27349:7;:27;:35;;;;;;27335:49;;27395:55;27426:10;27439:5;;;;;;;;;;;27446:3;27395:5;:22;;;;:55;;;;;;:::i;:::-;27461:73;27492:10;27513:4;27530:3;27520:7;:13;27461:5;:22;;;;:73;;;;;;:::i;:::-;27559:30;27585:3;27575:7;:13;27559:11;;:15;;:30;;;;:::i;:::-;27545:11;:44;;;;27614:30;27640:3;27630:7;:13;27614:4;:11;;;:15;;:30;;;;:::i;:::-;27600:4;:11;;:44;;;;27673:53;27721:4;27673:43;27689:8;:26;;;27673:4;:11;;;:15;;:43;;;;:::i;:::-;:47;;:53;;;;:::i;:::-;27655:4;:15;;:71;;;;27750:10;27742:34;;;27772:3;27762:7;:13;27742:34;;;;;;;;;;;;;;;;;;26939:845;;;:::o;30098:303::-;30166:7;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30209:8:::1;;30194:12;:23;30186:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30287:12;30275:9;:24;30267:69;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;30358:9;30347:8;:20;;;;30385:8;;30378:15;;30098:303:::0;;;:::o;23244:30::-;;;:::o;29225:329::-;29272:21;29296:8;:20;29305:10;29296:20;;;;;;;;;;;;;;;29272:44;;29327:52;29354:10;29367:4;:11;;;29327:5;:18;;;;:52;;;;;:::i;:::-;29404:28;29420:4;:11;;;29404;;:15;;:28;;;;:::i;:::-;29390:11;:42;;;;29466:10;29448:42;;;29478:4;:11;;;29448:42;;;;;;;;;;;;;;;;;;29515:1;29501:4;:11;;:15;;;;29545:1;29527:4;:15;;:19;;;;29225:329;:::o;26226:553::-;26286:8;:24;;;26270:12;:40;26266:79;;26327:7;;26266:79;26374:1;26359:11;;:16;26355:109;;;26419:12;26392:8;:24;;:39;;;;26446:7;;26355:109;26474:18;26495:53;26509:8;:24;;;26535:12;26495:13;:53::i;:::-;26474:74;;26559:19;26581:30;26596:14;;26581:10;:14;;:30;;;;:::i;:::-;26559:52;;26651:70;26682:38;26708:11;;26682:21;26698:4;26682:11;:15;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;26651:8;:26;;;:30;;:70;;;;:::i;:::-;26622:8;:26;;:99;;;;26759:12;26732:8;:24;;:39;;;;26226:553;;;:::o;30833:183::-;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30924:5:::1;30911:9;:18;;30903:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30999:9;30979:8;:17;;:29;;;;30833:183:::0;:::o;22109:244::-;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22218:1:::1;22198:22;;:8;:22;;;;22190:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22308:8;22279:38;;22300:6;::::0;::::1;;;;;;;;22279:38;;;;;;;;;;;;22337:8;22328:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;22109:244:::0;:::o;25512:615::-;25573:7;25593:21;25617:8;:15;25626:5;25617:15;;;;;;;;;;;;;;;25593:39;;25643:25;25671:8;:26;;;25643:54;;25727:8;:24;;;25712:12;:39;:59;;;;;25770:1;25755:11;;:16;;25712:59;25708:329;;;25788:18;25809:53;25823:8;:24;;;25849:12;25809:13;:53::i;:::-;25788:74;;25877:19;25899:30;25914:14;;25899:10;:14;;:30;;;;:::i;:::-;25877:52;;25964:61;25986:38;26012:11;;25986:21;26002:4;25986:11;:15;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;25964:17;:21;;:61;;;;:::i;:::-;25944:81;;25708:329;;;26054:65;26103:4;:15;;;26054:44;26093:4;26054:34;26070:17;26054:4;:11;;;:15;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;:48;;:65;;;;:::i;:::-;26047:72;;;;25512:615;;;:::o;31077:86::-;21386:12;:10;:12::i;:::-;21376:22;;:6;;;;;;;;;;:22;;;21368:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31149:6:::1;31141:5;;:14;;;;;;;;;;;;;;;;;;31077:86:::0;:::o;19580:106::-;19633:15;19668:10;19661:17;;19580:106;:::o;5467:471::-;5525:7;5775:1;5770;:6;5766:47;;;5800:1;5793:8;;;;5766:47;5825:9;5841:1;5837;:5;5825:17;;5870:1;5865;5861;:5;;;;;;:10;5853:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5929:1;5922:8;;;5467:471;;;;;:::o;6414:132::-;6472:7;6499:39;6503:1;6506;6499:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6492:46;;6414:132;;;;:::o;4577:136::-;4635:7;4662:43;4666:1;4669;4662:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4655:50;;4577:136;;;;:::o;28815:312::-;28893:21;28917:6;:16;;;28942:4;28917:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28893:55;;28973:13;28963:7;:23;28959:161;;;29003:39;29023:3;29028:13;29003:6;:19;;;;:39;;;;;:::i;:::-;28959:161;;;29075:33;29095:3;29100:7;29075:6;:19;;;;:33;;;;;:::i;:::-;28959:161;28815:312;;;:::o;15745:177::-;15828:86;15848:5;15878:23;;;15903:2;15907:5;15855:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15828:19;:86::i;:::-;15745:177;;;:::o;15930:205::-;16031:96;16051:5;16081:27;;;16110:4;16116:2;16120:5;16058:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16031:19;:96::i;:::-;15930:205;;;;:::o;4113:181::-;4171:7;4191:9;4207:1;4203;:5;4191:17;;4232:1;4227;:6;;4219:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4285:1;4278:8;;;4113:181;;;;:::o;25044:297::-;25118:7;25148:8;;25142:3;:14;25138:191;;;25180:14;25188:5;25180:3;:7;;:14;;;;:::i;:::-;25173:21;;;;25138:191;25225:8;;25216:5;:17;25212:117;;25257:1;25250:8;;;;25212:117;25298:19;25311:5;25298:8;;:12;;:19;;;;:::i;:::-;25291:26;;25044:297;;;;;:::o;7042:278::-;7128:7;7160:1;7156;:5;7163:12;7148:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7187:9;7203:1;7199;:5;;;;;;7187:17;;7311:1;7304:8;;;7042:278;;;;;:::o;5016:192::-;5102:7;5135:1;5130;:6;;5138:12;5122:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5162:9;5178:1;5174;:5;5162:17;;5199:1;5192:8;;;5016:192;;;;;:::o;18050:761::-;18474:23;18500:69;18528:4;18500:69;;;;;;;;;;;;;;;;;18508:5;18500:27;;;;:69;;;;;:::i;:::-;18474:95;;18604:1;18584:10;:17;:21;18580:224;;;18726:10;18715:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18707:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18580:224;18050:761;;;:::o;12592:196::-;12695:12;12727:53;12750:6;12758:4;12764:1;12767:12;12727:22;:53::i;:::-;12720:60;;12592:196;;;;;:::o;13969:979::-;14099:12;14132:18;14143:6;14132:10;:18::i;:::-;14124:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14258:12;14272:23;14299:6;:11;;14319:8;14330:4;14299:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14257:78;;;;14350:7;14346:595;;;14381:10;14374:17;;;;;;14346:595;14515:1;14495:10;:17;:21;14491:439;;;14758:10;14752:17;14819:15;14806:10;14802:2;14798:19;14791:44;14706:148;14901:12;14894:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13969:979;;;;;;;:::o;9477:619::-;9537:4;9799:16;9826:19;9848:66;9826:88;;;;10017:7;10005:20;9993:32;;10057:11;10045:8;:23;;:42;;;;;10084:3;10072:15;;:8;:15;;10045:42;10037:51;;;;9477:619;;;:::o
Swarm Source
ipfs://c9ebf837ee2dc5767832e2b26c95f17bd6837eec1343cda646ddd3fda3def859
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.005859 | 311,629.3822 | $1,825.83 |
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.