More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 252 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16914051 | 590 days ago | IN | 0 ETH | 0.0046464 | ||||
Withdraw | 16696848 | 621 days ago | IN | 0 ETH | 0.0052749 | ||||
Withdraw | 16657349 | 626 days ago | IN | 0 ETH | 0.00528785 | ||||
Withdraw | 16523283 | 645 days ago | IN | 0 ETH | 0.0033982 | ||||
Withdraw | 16523088 | 645 days ago | IN | 0 ETH | 0.00463277 | ||||
Withdraw | 16522230 | 645 days ago | IN | 0 ETH | 0.00463864 | ||||
Withdraw | 16516010 | 646 days ago | IN | 0 ETH | 0.00338899 | ||||
Withdraw | 16365604 | 667 days ago | IN | 0 ETH | 0.00463789 | ||||
Withdraw | 16361332 | 668 days ago | IN | 0 ETH | 0.00307626 | ||||
Withdraw | 16346949 | 670 days ago | IN | 0 ETH | 0.0032263 | ||||
Withdraw | 16319303 | 674 days ago | IN | 0 ETH | 0.00355175 | ||||
Withdraw | 16303161 | 676 days ago | IN | 0 ETH | 0.00395211 | ||||
Withdraw | 16299245 | 676 days ago | IN | 0 ETH | 0.00412592 | ||||
Withdraw | 16298455 | 677 days ago | IN | 0 ETH | 0.00393468 | ||||
Set Reflection R... | 16298361 | 677 days ago | IN | 0 ETH | 0.00086042 | ||||
Set Reflection R... | 16290492 | 678 days ago | IN | 0 ETH | 0.00034691 | ||||
Withdraw | 16286860 | 678 days ago | IN | 0 ETH | 0.00279391 | ||||
Withdraw | 16262786 | 682 days ago | IN | 0 ETH | 0.00241001 | ||||
Withdraw | 16262324 | 682 days ago | IN | 0 ETH | 0.00246768 | ||||
Withdraw | 16261729 | 682 days ago | IN | 0 ETH | 0.00243225 | ||||
Withdraw | 16238668 | 685 days ago | IN | 0 ETH | 0.00266991 | ||||
Withdraw | 16213426 | 688 days ago | IN | 0 ETH | 0.0026575 | ||||
Withdraw | 16198751 | 690 days ago | IN | 0 ETH | 0.00573875 | ||||
Withdraw | 16129159 | 700 days ago | IN | 0 ETH | 0.00273885 | ||||
Withdraw | 16084116 | 706 days ago | IN | 0 ETH | 0.00350663 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DerpyStaking
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; /** * @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; } } // File: contracts/libs/IBEP20.sol pragma solidity >=0.6.4; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity >=0.6.2 <0.8.0; /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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" ); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { 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); } } } } // File: contracts/libs/SafeBEP20.sol pragma solidity >=0.6.0 <0.8.0; /** * @title SafeBEP20 * @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IBEP20 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 * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 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), "SafeBEP20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IBEP20 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( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, "SafeBEP20: 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(IBEP20 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, "SafeBEP20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require( abi.decode(returndata, (bool)), "SafeBEP20: BEP20 operation did not succeed" ); } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity >=0.6.0 <0.8.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; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity >=0.6.0 <0.8.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. */ abstract 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; } } abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() internal { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } pragma solidity 0.6.12; contract DerpyStaking is Ownable, Pausable, ReentrancyGuard { using SafeMath for uint256; using SafeBEP20 for IBEP20; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } // Info of each pool. struct PoolInfo { IBEP20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. Rewards to distribute per block. uint256 lastRewardBlock; // Last block number that Rewards distribution occurs. uint256 accRewardPerShare; // Accumulated Rewards per share, times 1e9. See below. } IBEP20 public BaseToken; IBEP20 public rewardToken; // Reward tokens created per block. uint256 public rewardPerBlock; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(address => UserInfo) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 private totalAllocPoint = 0; // The block number when Reward mining starts. uint256 public startBlock; // The block number when Reward mining ends. uint256 public rewardEndBlock; mapping(address => uint256) public time; mapping(address => uint256) public reflectionsClaimed; mapping(address => uint256) public depositers; uint256 public totalStaked = 0; uint256 public totalReflectionRewards = 0; uint256 public totalRewardsDeposited = 0; uint256 public totalRewardsClaimed = 0; uint256 public totalReflectionsClaimed = 0; bool public depositsPaused = false; uint256 public lockupPeriod = 3628800; // in seconds uint256 public minStakingAmount = 100000000 * 10**9; //min staking amount bool public emergencyWithdrawEnabled = false; address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; event Deposit(address indexed user, uint256 amount); event DepositRewards(uint256 amount); event RewardClaim(address indexed user, uint256 amount); event ReflectionsClaim(address indexed user, uint256 amount); event ReflectionRewardsSet(uint256 amount); event Withdraw(address indexed user, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 amount); event EmergencyAdminWithdraw(); event EmergencyWithdrawToggled(bool toggled); event DepositsPaused(bool pause); event AdminTokenRecovery(address tokenRecovered, uint256 amount); constructor( IBEP20 _BaseToken, IBEP20 _rewardToken, uint256 _rewardPerBlock, uint256 _startBlock, uint256 _rewardEndBlock ) public { BaseToken = _BaseToken; rewardToken = _rewardToken; rewardPerBlock = _rewardPerBlock; startBlock = _startBlock; rewardEndBlock = _rewardEndBlock; // staking pool poolInfo.push( PoolInfo({ lpToken: _BaseToken, allocPoint: 1000, lastRewardBlock: startBlock, accRewardPerShare: 0 }) ); totalAllocPoint = 1000; } function pauseContract() public onlyOwner { _pause(); } function unpauseContract() public onlyOwner { _unpause(); } modifier notContract() { require(!_isContract(msg.sender), "contract not allowed"); require(msg.sender == tx.origin, "proxy contract not allowed"); _; } function _isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } function pauseDeposits(bool pause) external onlyOwner { depositsPaused = pause; emit DepositsPaused(pause); } function changeMinTime(uint256 _time) external onlyOwner { lockupPeriod = _time; } function changeMinStakingAmount(uint256 amount) external onlyOwner { minStakingAmount = amount; } function adjustEndBlock(uint256 _blockNumber) public onlyOwner { rewardEndBlock = _blockNumber; } function stopReward() public onlyOwner { rewardEndBlock = block.number; } function setReflectionRewards(uint256 _reflectionRewards) external onlyOwner { totalReflectionRewards = _reflectionRewards; emit ReflectionRewardsSet(_reflectionRewards); } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { if (_to <= rewardEndBlock) { return _to.sub(_from); } else if (_from >= rewardEndBlock) { return 0; } else { return rewardEndBlock.sub(_from); } } function pendingReward(address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[_user]; if (user.amount == 0) { return 0; } uint256 accRewardPerShare = pool.accRewardPerShare; uint256 lpSupply = totalStaked; if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 rewardReward = multiplier .mul(rewardPerBlock) .mul(pool.allocPoint) .div(totalAllocPoint); accRewardPerShare = accRewardPerShare.add( rewardReward.mul(1e9).div(lpSupply) ); } return user.amount.mul(accRewardPerShare).div(1e9).sub(user.rewardDebt); } function updatePool(uint256 _pid) private { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = totalStaked; if (lpSupply == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 rewardReward = multiplier .mul(rewardPerBlock) .mul(pool.allocPoint) .div(totalAllocPoint); pool.accRewardPerShare = pool.accRewardPerShare.add( rewardReward.mul(1e9).div(lpSupply) ); pool.lastRewardBlock = block.number; } function massUpdatePools() private { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } function deposit(uint256 _amount) public notContract whenNotPaused nonReentrant { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; require(block.number >= startBlock, "deposit: too early to deposit"); require(block.number <= rewardEndBlock, "deposit: too late to deposit"); require(!depositsPaused, "deposit: deposits in pause mode"); require( depositers[msg.sender] == 0, "deposit: this address has deposited already" ); updatePool(0); if (user.amount == 0) { require( _amount >= minStakingAmount, "deposit: amount should greator than equal to min" ); } if (_amount > 0) { pool.lpToken.safeTransferFrom( address(msg.sender), address(this), _amount ); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e9); if (time[msg.sender] == 0) { uint256 lockupFactor = (block.timestamp % 20) + 1; time[msg.sender] = block.timestamp + lockupPeriod + (lockupFactor * 86400); } totalStaked += _amount; depositers[msg.sender] = 1; emit Deposit(msg.sender, _amount); } function depositStakingRewards(uint256 _amount) public onlyOwner { PoolInfo storage pool = poolInfo[0]; pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); totalRewardsDeposited += _amount; emit DepositRewards(_amount); } function withdraw() public notContract whenNotPaused nonReentrant { PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; require(time[msg.sender] <= block.timestamp, "withdraw: cant withdraw yet"); require( block.number > rewardEndBlock, "withdraw: cant withdraw before staking ends" ); require(user.amount > 0, "withdraw: address empty"); require( totalReflectionRewards > 0, "withdraw: totalReflectionRewards finished" ); uint256 amountCached = user.amount; updatePool(0); uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e9).sub( user.rewardDebt ); uint256 totalRewards = (rewardEndBlock.sub(startBlock)).mul(rewardPerBlock); if ( reflectionsClaimed[msg.sender] == 0 && totalRewards > 0 && pending > 0 && totalReflectionRewards > 0 ) { uint256 reflectionReward = pending.mul(totalReflectionRewards).div( totalRewards ); totalReflectionsClaimed += reflectionReward; reflectionsClaimed[msg.sender] = 1; rewardToken.safeTransfer(address(msg.sender), reflectionReward); emit ReflectionsClaim(msg.sender, reflectionReward); } if (pending > 0) { rewardToken.safeTransfer(address(msg.sender), pending); totalRewardsClaimed += pending; emit RewardClaim(msg.sender, pending); } user.amount = 0; pool.lpToken.safeTransfer(address(msg.sender), amountCached); totalStaked -= amountCached; user.rewardDebt = amountCached.mul(pool.accRewardPerShare).div(1e9); emit Withdraw(msg.sender, amountCached); } function toggleEmergencyWithdraw(bool _toggle) public onlyOwner { emergencyWithdrawEnabled = _toggle; emit EmergencyWithdrawToggled(_toggle); } function emergencyWithdraw() public notContract whenNotPaused nonReentrant { require(emergencyWithdrawEnabled, "emergencyWithdraw: not enabled"); PoolInfo storage pool = poolInfo[0]; UserInfo storage user = userInfo[msg.sender]; pool.lpToken.safeTransfer(address(msg.sender), user.amount); user.amount = 0; user.rewardDebt = 0; emit EmergencyWithdraw(msg.sender, user.amount); } function emergencyAdminWithdraw() public onlyOwner { PoolInfo storage pool = poolInfo[0]; pool.lpToken.safeTransfer( address(msg.sender), pool.lpToken.balanceOf(address(this)) ); emit EmergencyAdminWithdraw(); } function getUserInfo(address userAddress) public view returns (uint256, uint256) { UserInfo storage user = userInfo[userAddress]; return (user.amount, user.rewardDebt); } function recoverWrongTokens(address _tokenAddress, uint256 _tokenAmount) external onlyOwner { block.number > rewardEndBlock + 1000; IBEP20(_tokenAddress).safeTransfer(address(msg.sender), _tokenAmount); emit AdminTokenRecovery(_tokenAddress, _tokenAmount); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IBEP20","name":"_BaseToken","type":"address"},{"internalType":"contract IBEP20","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"uint256","name":"_startBlock","type":"uint256"},{"internalType":"uint256","name":"_rewardEndBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenRecovered","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AdminTokenRecovery","type":"event"},{"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":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"pause","type":"bool"}],"name":"DepositsPaused","type":"event"},{"anonymous":false,"inputs":[],"name":"EmergencyAdminWithdraw","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":false,"internalType":"bool","name":"toggled","type":"bool"}],"name":"EmergencyWithdrawToggled","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReflectionRewardsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReflectionsClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BaseToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockNumber","type":"uint256"}],"name":"adjustEndBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"changeMinStakingAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"changeMinTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"depositStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"depositers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositsPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyAdminWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdrawEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockupPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStakingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"pause","type":"bool"}],"name":"pauseDeposits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IBEP20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"recoverWrongTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reflectionsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEndBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionRewards","type":"uint256"}],"name":"setReflectionRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stopReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_toggle","type":"bool"}],"name":"toggleEmergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalReflectionRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardsDeposited","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","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":"unpauseContract","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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260006007819055600d819055600e819055600f81905560108190556011556012805460ff1990811690915562375f0060135567016345785d8a000060145560158054909116905534801561005757600080fd5b50604051612720380380612720833981810160405260a081101561007a57600080fd5b5080516020820151604083015160608401516080909401519293919290919060006100a3610221565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b191681556001808055600280546001600160a01b039889166001600160a01b0319918216811790925560038054988a169882169890981790975560049586556008859055600993909355604080516080810182529384526103e860208501818152918501958652606085018481526005805494850181559094529351919095027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101805492909816919096161790955591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db283015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db390910155600755610225565b3390565b6124ec806102346000396000f3fe608060405234801561001057600080fd5b506004361061025e5760003560e01c8063715018a611610146578063931e3bfa116100c3578063db2e21bc11610087578063db2e21bc146105a6578063ee947a7c146105ae578063f2fde38b146105b6578063f40f0f52146105dc578063f7c618c114610602578063fccc28131461060a5761025e565b8063931e3bfa14610554578063a34b0f7614610571578063b33712c514610579578063b6b55f2514610581578063d3f86a001461059e5761025e565b80638381ef9b1161010a5780638381ef9b146104e05780638ae39cac146104fd5780638da5cb5b146105055780638dbb1e3a1461052957806390f817021461054c5761025e565b8063715018a614610483578063738b62e51461048b5780637c67a3e2146104aa57806380dc0672146104d0578063817b1cd2146104d85761025e565b8063439766ce116101df5780635ccaabe6116101a35780635ccaabe614610400578063604ef2e51461040857806360da3e83146104105780636384c045146104185780636386c1c71461043e578063706bb6ab146104645761025e565b8063439766ce146103c457806347c56876146103cc57806348cd4cb1146103d45780635747e69f146103dc5780635c975abb146103f85761025e565b806325c065b11161022657806325c065b11461034e578063292e32e1146103565780633ccfd60b146103735780633f138d4b1461037b5780634375995d146103a75761025e565b80630bf0e881146102635780631526fe27146102825780631959a002146102cf5780631a8428721461030e5780631f4c74fd14610346575b600080fd5b6102806004803603602081101561027957600080fd5b5035610612565b005b61029f6004803603602081101561029857600080fd5b503561066f565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b6102f5600480360360208110156102e557600080fd5b50356001600160a01b03166106b0565b6040805192835260208301919091528051918290030190f35b6103346004803603602081101561032457600080fd5b50356001600160a01b03166106c9565b60408051918252519081900360200190f35b6103346106db565b6103346106e1565b6102806004803603602081101561036c57600080fd5b50356106e7565b610280610744565b6102806004803603604081101561039157600080fd5b506001600160a01b038135169060200135610c07565b610280600480360360208110156103bd57600080fd5b5035610cbb565b610280610d18565b610334610d7a565b610334610d80565b6103e4610d86565b604080519115158252519081900360200190f35b6103e4610d8f565b610334610d9f565b610334610da5565b6103e4610dab565b6103346004803603602081101561042e57600080fd5b50356001600160a01b0316610db4565b6102f56004803603602081101561045457600080fd5b50356001600160a01b0316610dc6565b6102806004803603602081101561047a57600080fd5b50351515610de9565b610280610e88565b610280600480360360208110156104a157600080fd5b50351515610f2a565b610334600480360360208110156104c057600080fd5b50356001600160a01b0316610fc9565b610280610fdb565b610334611039565b610280600480360360208110156104f657600080fd5b503561103f565b6103346110d2565b61050d6110d8565b604080516001600160a01b039092168252519081900360200190f35b6103346004803603604081101561053f57600080fd5b50803590602001356110e7565b61050d611127565b6102806004803603602081101561056a57600080fd5b5035611136565b610334611207565b61028061120d565b6102806004803603602081101561059757600080fd5b503561126d565b610280611672565b6102806117a5565b6103346119e0565b610280600480360360208110156105cc57600080fd5b50356001600160a01b03166119e6565b610334600480360360208110156105f257600080fd5b50356001600160a01b0316611ade565b61050d611bd6565b61050d611be5565b61061a611beb565b6000546001600160a01b0390811691161461066a576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b601355565b6005818154811061067c57fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6006602052600090815260409020805460019091015482565b600b6020526000908152604090205481565b600f5481565b60145481565b6106ef611beb565b6000546001600160a01b0390811691161461073f576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600955565b61074d33611bef565b15610796576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b3332146107e7576040805162461bcd60e51b815260206004820152601a6024820152791c1c9bde1e4818dbdb9d1c9858dd081b9bdd08185b1b1bddd95960321b604482015290519081900360640190fd5b6107ef610d8f565b15610834576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561088c576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600181905550600060056000815481106108a457fe5b60009182526020808320338452600682526040808520600a9093529093205460049092029092019250421015610921576040805162461bcd60e51b815260206004820152601b60248201527f77697468647261773a2063616e74207769746864726177207965740000000000604482015290519081900360640190fd5b60095443116109615760405162461bcd60e51b815260040180806020018281038252602b81526020018061248c602b913960400191505060405180910390fd5b80546109b4576040805162461bcd60e51b815260206004820152601760248201527f77697468647261773a206164647265737320656d707479000000000000000000604482015290519081900360640190fd5b6000600e54116109f55760405162461bcd60e51b81526004018080602001828103825260298152602001806124226029913960400191505060405180910390fd5b8054610a016000611bf5565b6000610a3a8360010154610a34633b9aca00610a2e88600301548860000154611ca990919063ffffffff16565b90611d09565b90611d4b565b90506000610a61600454610a5b600854600954611d4b90919063ffffffff16565b90611ca9565b336000908152600b6020526040902054909150158015610a815750600081115b8015610a8d5750600082115b8015610a9b57506000600e54115b15610b28576000610abb82610a2e600e5486611ca990919063ffffffff16565b6011805482019055336000818152600b6020526040902060019055600354919250610af0916001600160a01b03169083611d8d565b60408051828152905133917f5dcf60d9fa692fd30676f075bc5f1b94820f419d631f22976c49bce6f193a66b919081900360200190a2505b8115610b8457600354610b45906001600160a01b03163384611d8d565b601080548301905560408051838152905133917f75690555e75b04e280e646889defdcbefd8401507e5394d1173fd84290944c29919081900360200190a25b600084558454610b9e906001600160a01b03163385611d8d565b600d805484900390556003850154610bc190633b9aca0090610a2e908690611ca9565b600185015560408051848152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505060018055505050565b610c0f611beb565b6000546001600160a01b03908116911614610c5f576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b610c736001600160a01b0383163383611d8d565b604080516001600160a01b03841681526020810183905281517f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129929181900390910190a15050565b610cc3611beb565b6000546001600160a01b03908116911614610d13576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b601455565b610d20611beb565b6000546001600160a01b03908116911614610d70576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b610d78611de4565b565b60115481565b60085481565b60155460ff1681565b600054600160a01b900460ff1690565b600e5481565b60095481565b60125460ff1681565b600c6020526000908152604090205481565b6001600160a01b0316600090815260066020526040902080546001909101549091565b610df1611beb565b6000546001600160a01b03908116911614610e41576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6015805482151560ff19909116811790915560408051918252517f4fb4fe1d48605773c41203249c0d2ce916ab20c17f80ba0885db54c1468176af9181900360200190a150565b610e90611beb565b6000546001600160a01b03908116911614610ee0576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610f32611beb565b6000546001600160a01b03908116911614610f82576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6012805482151560ff19909116811790915560408051918252517f5ef34f53269a04b5b817e5be24a51ba6b477118b399ec9dd5b2baf5b299563dc9181900360200190a150565b600a6020526000908152604090205481565b610fe3611beb565b6000546001600160a01b03908116911614611033576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b43600955565b600d5481565b611047611beb565b6000546001600160a01b03908116911614611097576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600e8190556040805182815290517f89c186d2ef488d1ec621a9c39ca575cf088105f7934af64f59c750682711b3649181900360200190a150565b60045481565b6000546001600160a01b031690565b60006009548211611103576110fc8284611d4b565b9050611121565b600954831061111457506000611121565b6009546110fc9084611d4b565b92915050565b6002546001600160a01b031681565b61113e611beb565b6000546001600160a01b0390811691161461118e576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6000600560008154811061119e57fe5b6000918252602090912060049091020180549091506111c8906001600160a01b0316333085611e8a565b600f8054830190556040805183815290517f754fe3a3c69256b66ca56365fda4bbf3299d7c94038c105ffd43fb4b37f56db69181900360200190a15050565b60105481565b611215611beb565b6000546001600160a01b03908116911614611265576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b610d78611eea565b61127633611bef565b156112bf576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b333214611310576040805162461bcd60e51b815260206004820152601a6024820152791c1c9bde1e4818dbdb9d1c9858dd081b9bdd08185b1b1bddd95960321b604482015290519081900360640190fd5b611318610d8f565b1561135d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156113b5576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600181905550600060056000815481106113cd57fe5b600091825260208083203384526006909152604090922060085460049092029092019250431015611445576040805162461bcd60e51b815260206004820152601d60248201527f6465706f7369743a20746f6f206561726c7920746f206465706f736974000000604482015290519081900360640190fd5b60095443111561149c576040805162461bcd60e51b815260206004820152601c60248201527f6465706f7369743a20746f6f206c61746520746f206465706f73697400000000604482015290519081900360640190fd5b60125460ff16156114f4576040805162461bcd60e51b815260206004820152601f60248201527f6465706f7369743a206465706f7369747320696e207061757365206d6f646500604482015290519081900360640190fd5b336000908152600c6020526040902054156115405760405162461bcd60e51b815260040180806020018281038252602b8152602001806123a1602b913960400191505060405180910390fd5b61154a6000611bf5565b8054611591576014548310156115915760405162461bcd60e51b81526004018080602001828103825260308152602001806123f26030913960400191505060405180910390fd5b82156115bd5781546115ae906001600160a01b0316333086611e8a565b80546115ba9084611f70565b81555b600382015481546115d791633b9aca0091610a2e91611ca9565b6001820155336000908152600a602052604090205461161957601354336000908152600a60205260409020601442908106600101620151800292019190910190555b600d805484019055336000818152600c602090815260409182902060019055815186815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a250506001805550565b61167a611beb565b6000546001600160a01b039081169116146116ca576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600060056000815481106116da57fe5b60009182526020918290206004918202018054604080516370a0823160e01b81523094810194909452519194506117799333936001600160a01b03909216926370a08231926024808201939291829003018186803b15801561173b57600080fd5b505afa15801561174f573d6000803e3d6000fd5b505050506040513d602081101561176557600080fd5b505183546001600160a01b03169190611d8d565b6040517f6722f139daafc6b4449697a4013c7449b1135b1450459825eda107e17557773090600090a150565b6117ae33611bef565b156117f7576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b333214611848576040805162461bcd60e51b815260206004820152601a6024820152791c1c9bde1e4818dbdb9d1c9858dd081b9bdd08185b1b1bddd95960321b604482015290519081900360640190fd5b611850610d8f565b15611895576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156118ed576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015560155460ff16611949576040805162461bcd60e51b815260206004820152601e60248201527f656d657267656e637957697468647261773a206e6f7420656e61626c65640000604482015290519081900360640190fd5b6000600560008154811061195957fe5b600091825260208083203380855260069092526040909320805460049093029093018054909450611997926001600160a01b03919091169190611d8d565b600080825560018201819055604080519182525133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a2505060018055565b60135481565b6119ee611beb565b6000546001600160a01b03908116911614611a3e576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6001600160a01b038116611a835760405162461bcd60e51b815260040180806020018281038252602681526020018061237b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806005600081548110611aef57fe5b600091825260208083206001600160a01b038716845260069091526040909220805460049092029092019250611b2a57600092505050611bd1565b6003820154600d54600284015443118015611b4457508015155b15611ba3576000611b598560020154436110e7565b90506000611b80600754610a2e8860010154610a5b60045487611ca990919063ffffffff16565b9050611b9e611b9784610a2e84633b9aca00611ca9565b8590611f70565b935050505b611bca8360010154610a34633b9aca00610a2e868860000154611ca990919063ffffffff16565b9450505050505b919050565b6003546001600160a01b031681565b61dead81565b3390565b3b151590565b600060058281548110611c0457fe5b9060005260206000209060040201905080600201544311611c255750611ca6565b600d5480611c3a575043600290910155611ca6565b6000611c4a8360020154436110e7565b90506000611c71600754610a2e8660010154610a5b60045487611ca990919063ffffffff16565b9050611c93611c8884610a2e84633b9aca00611ca9565b600386015490611f70565b6003850155505043600290920191909155505b50565b600082611cb857506000611121565b82820282848281611cc557fe5b0414611d025760405162461bcd60e51b815260040180806020018281038252602181526020018061244b6021913960400191505060405180910390fd5b9392505050565b6000611d0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fca565b6000611d0283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061206c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611ddf9084906120c6565b505050565b611dec610d8f565b15611e31576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e6d611beb565b604080516001600160a01b039092168252519081900360200190a1565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ee49085906120c6565b50505050565b611ef2610d8f565b611f3a576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e6d611beb565b600082820183811015611d02576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836120565760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561201b578181015183820152602001612003565b50505050905090810190601f1680156120485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161206257fe5b0495945050505050565b600081848411156120be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561201b578181015183820152602001612003565b505050900390565b606061211b826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121779092919063ffffffff16565b805190915015611ddf5780806020019051602081101561213a57600080fd5b5051611ddf5760405162461bcd60e51b815260040180806020018281038252602a815260200180612351602a913960400191505060405180910390fd5b6060612186848460008561218e565b949350505050565b6060824710156121cf5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cc6026913960400191505060405180910390fd5b6121d885611bef565b612229576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106122685780518252601f199092019160209182019101612249565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146122ca576040519150601f19603f3d011682016040523d82523d6000602084013e6122cf565b606091505b50915091506122df8282866122ea565b979650505050505050565b606083156122f9575081611d02565b8251156123095782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561201b57818101518382015260200161200356fe5361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736465706f7369743a2074686973206164647265737320686173206465706f736974656420616c7265616479416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c6465706f7369743a20616d6f756e742073686f756c642067726561746f72207468616e20657175616c20746f206d696e77697468647261773a20746f74616c5265666c656374696f6e526577617264732066696e6973686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657277697468647261773a2063616e74207769746864726177206265666f7265207374616b696e6720656e6473a2646970667358221220938b7a1b12efd1e622ce3ceb5f170ce145237ae7404b13c1852272bec2c12fe264736f6c634300060c0033000000000000000000000000c4f4fd359e36b831a989986385d127f11124ce0a000000000000000000000000c4f4fd359e36b831a989986385d127f11124ce0a00000000000000000000000000000000000000000000000000002d79883d20000000000000000000000000000000000000000000000000000000000000ecc61c0000000000000000000000000000000000000000000000000000000000f0e4cc
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061025e5760003560e01c8063715018a611610146578063931e3bfa116100c3578063db2e21bc11610087578063db2e21bc146105a6578063ee947a7c146105ae578063f2fde38b146105b6578063f40f0f52146105dc578063f7c618c114610602578063fccc28131461060a5761025e565b8063931e3bfa14610554578063a34b0f7614610571578063b33712c514610579578063b6b55f2514610581578063d3f86a001461059e5761025e565b80638381ef9b1161010a5780638381ef9b146104e05780638ae39cac146104fd5780638da5cb5b146105055780638dbb1e3a1461052957806390f817021461054c5761025e565b8063715018a614610483578063738b62e51461048b5780637c67a3e2146104aa57806380dc0672146104d0578063817b1cd2146104d85761025e565b8063439766ce116101df5780635ccaabe6116101a35780635ccaabe614610400578063604ef2e51461040857806360da3e83146104105780636384c045146104185780636386c1c71461043e578063706bb6ab146104645761025e565b8063439766ce146103c457806347c56876146103cc57806348cd4cb1146103d45780635747e69f146103dc5780635c975abb146103f85761025e565b806325c065b11161022657806325c065b11461034e578063292e32e1146103565780633ccfd60b146103735780633f138d4b1461037b5780634375995d146103a75761025e565b80630bf0e881146102635780631526fe27146102825780631959a002146102cf5780631a8428721461030e5780631f4c74fd14610346575b600080fd5b6102806004803603602081101561027957600080fd5b5035610612565b005b61029f6004803603602081101561029857600080fd5b503561066f565b604080516001600160a01b0390951685526020850193909352838301919091526060830152519081900360800190f35b6102f5600480360360208110156102e557600080fd5b50356001600160a01b03166106b0565b6040805192835260208301919091528051918290030190f35b6103346004803603602081101561032457600080fd5b50356001600160a01b03166106c9565b60408051918252519081900360200190f35b6103346106db565b6103346106e1565b6102806004803603602081101561036c57600080fd5b50356106e7565b610280610744565b6102806004803603604081101561039157600080fd5b506001600160a01b038135169060200135610c07565b610280600480360360208110156103bd57600080fd5b5035610cbb565b610280610d18565b610334610d7a565b610334610d80565b6103e4610d86565b604080519115158252519081900360200190f35b6103e4610d8f565b610334610d9f565b610334610da5565b6103e4610dab565b6103346004803603602081101561042e57600080fd5b50356001600160a01b0316610db4565b6102f56004803603602081101561045457600080fd5b50356001600160a01b0316610dc6565b6102806004803603602081101561047a57600080fd5b50351515610de9565b610280610e88565b610280600480360360208110156104a157600080fd5b50351515610f2a565b610334600480360360208110156104c057600080fd5b50356001600160a01b0316610fc9565b610280610fdb565b610334611039565b610280600480360360208110156104f657600080fd5b503561103f565b6103346110d2565b61050d6110d8565b604080516001600160a01b039092168252519081900360200190f35b6103346004803603604081101561053f57600080fd5b50803590602001356110e7565b61050d611127565b6102806004803603602081101561056a57600080fd5b5035611136565b610334611207565b61028061120d565b6102806004803603602081101561059757600080fd5b503561126d565b610280611672565b6102806117a5565b6103346119e0565b610280600480360360208110156105cc57600080fd5b50356001600160a01b03166119e6565b610334600480360360208110156105f257600080fd5b50356001600160a01b0316611ade565b61050d611bd6565b61050d611be5565b61061a611beb565b6000546001600160a01b0390811691161461066a576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b601355565b6005818154811061067c57fe5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6006602052600090815260409020805460019091015482565b600b6020526000908152604090205481565b600f5481565b60145481565b6106ef611beb565b6000546001600160a01b0390811691161461073f576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600955565b61074d33611bef565b15610796576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b3332146107e7576040805162461bcd60e51b815260206004820152601a6024820152791c1c9bde1e4818dbdb9d1c9858dd081b9bdd08185b1b1bddd95960321b604482015290519081900360640190fd5b6107ef610d8f565b15610834576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561088c576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600181905550600060056000815481106108a457fe5b60009182526020808320338452600682526040808520600a9093529093205460049092029092019250421015610921576040805162461bcd60e51b815260206004820152601b60248201527f77697468647261773a2063616e74207769746864726177207965740000000000604482015290519081900360640190fd5b60095443116109615760405162461bcd60e51b815260040180806020018281038252602b81526020018061248c602b913960400191505060405180910390fd5b80546109b4576040805162461bcd60e51b815260206004820152601760248201527f77697468647261773a206164647265737320656d707479000000000000000000604482015290519081900360640190fd5b6000600e54116109f55760405162461bcd60e51b81526004018080602001828103825260298152602001806124226029913960400191505060405180910390fd5b8054610a016000611bf5565b6000610a3a8360010154610a34633b9aca00610a2e88600301548860000154611ca990919063ffffffff16565b90611d09565b90611d4b565b90506000610a61600454610a5b600854600954611d4b90919063ffffffff16565b90611ca9565b336000908152600b6020526040902054909150158015610a815750600081115b8015610a8d5750600082115b8015610a9b57506000600e54115b15610b28576000610abb82610a2e600e5486611ca990919063ffffffff16565b6011805482019055336000818152600b6020526040902060019055600354919250610af0916001600160a01b03169083611d8d565b60408051828152905133917f5dcf60d9fa692fd30676f075bc5f1b94820f419d631f22976c49bce6f193a66b919081900360200190a2505b8115610b8457600354610b45906001600160a01b03163384611d8d565b601080548301905560408051838152905133917f75690555e75b04e280e646889defdcbefd8401507e5394d1173fd84290944c29919081900360200190a25b600084558454610b9e906001600160a01b03163385611d8d565b600d805484900390556003850154610bc190633b9aca0090610a2e908690611ca9565b600185015560408051848152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505060018055505050565b610c0f611beb565b6000546001600160a01b03908116911614610c5f576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b610c736001600160a01b0383163383611d8d565b604080516001600160a01b03841681526020810183905281517f74545154aac348a3eac92596bd1971957ca94795f4e954ec5f613b55fab78129929181900390910190a15050565b610cc3611beb565b6000546001600160a01b03908116911614610d13576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b601455565b610d20611beb565b6000546001600160a01b03908116911614610d70576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b610d78611de4565b565b60115481565b60085481565b60155460ff1681565b600054600160a01b900460ff1690565b600e5481565b60095481565b60125460ff1681565b600c6020526000908152604090205481565b6001600160a01b0316600090815260066020526040902080546001909101549091565b610df1611beb565b6000546001600160a01b03908116911614610e41576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6015805482151560ff19909116811790915560408051918252517f4fb4fe1d48605773c41203249c0d2ce916ab20c17f80ba0885db54c1468176af9181900360200190a150565b610e90611beb565b6000546001600160a01b03908116911614610ee0576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610f32611beb565b6000546001600160a01b03908116911614610f82576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6012805482151560ff19909116811790915560408051918252517f5ef34f53269a04b5b817e5be24a51ba6b477118b399ec9dd5b2baf5b299563dc9181900360200190a150565b600a6020526000908152604090205481565b610fe3611beb565b6000546001600160a01b03908116911614611033576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b43600955565b600d5481565b611047611beb565b6000546001600160a01b03908116911614611097576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600e8190556040805182815290517f89c186d2ef488d1ec621a9c39ca575cf088105f7934af64f59c750682711b3649181900360200190a150565b60045481565b6000546001600160a01b031690565b60006009548211611103576110fc8284611d4b565b9050611121565b600954831061111457506000611121565b6009546110fc9084611d4b565b92915050565b6002546001600160a01b031681565b61113e611beb565b6000546001600160a01b0390811691161461118e576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6000600560008154811061119e57fe5b6000918252602090912060049091020180549091506111c8906001600160a01b0316333085611e8a565b600f8054830190556040805183815290517f754fe3a3c69256b66ca56365fda4bbf3299d7c94038c105ffd43fb4b37f56db69181900360200190a15050565b60105481565b611215611beb565b6000546001600160a01b03908116911614611265576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b610d78611eea565b61127633611bef565b156112bf576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b333214611310576040805162461bcd60e51b815260206004820152601a6024820152791c1c9bde1e4818dbdb9d1c9858dd081b9bdd08185b1b1bddd95960321b604482015290519081900360640190fd5b611318610d8f565b1561135d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156113b5576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600181905550600060056000815481106113cd57fe5b600091825260208083203384526006909152604090922060085460049092029092019250431015611445576040805162461bcd60e51b815260206004820152601d60248201527f6465706f7369743a20746f6f206561726c7920746f206465706f736974000000604482015290519081900360640190fd5b60095443111561149c576040805162461bcd60e51b815260206004820152601c60248201527f6465706f7369743a20746f6f206c61746520746f206465706f73697400000000604482015290519081900360640190fd5b60125460ff16156114f4576040805162461bcd60e51b815260206004820152601f60248201527f6465706f7369743a206465706f7369747320696e207061757365206d6f646500604482015290519081900360640190fd5b336000908152600c6020526040902054156115405760405162461bcd60e51b815260040180806020018281038252602b8152602001806123a1602b913960400191505060405180910390fd5b61154a6000611bf5565b8054611591576014548310156115915760405162461bcd60e51b81526004018080602001828103825260308152602001806123f26030913960400191505060405180910390fd5b82156115bd5781546115ae906001600160a01b0316333086611e8a565b80546115ba9084611f70565b81555b600382015481546115d791633b9aca0091610a2e91611ca9565b6001820155336000908152600a602052604090205461161957601354336000908152600a60205260409020601442908106600101620151800292019190910190555b600d805484019055336000818152600c602090815260409182902060019055815186815291517fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9281900390910190a250506001805550565b61167a611beb565b6000546001600160a01b039081169116146116ca576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b600060056000815481106116da57fe5b60009182526020918290206004918202018054604080516370a0823160e01b81523094810194909452519194506117799333936001600160a01b03909216926370a08231926024808201939291829003018186803b15801561173b57600080fd5b505afa15801561174f573d6000803e3d6000fd5b505050506040513d602081101561176557600080fd5b505183546001600160a01b03169190611d8d565b6040517f6722f139daafc6b4449697a4013c7449b1135b1450459825eda107e17557773090600090a150565b6117ae33611bef565b156117f7576040805162461bcd60e51b815260206004820152601460248201527318dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b604482015290519081900360640190fd5b333214611848576040805162461bcd60e51b815260206004820152601a6024820152791c1c9bde1e4818dbdb9d1c9858dd081b9bdd08185b1b1bddd95960321b604482015290519081900360640190fd5b611850610d8f565b15611895576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156118ed576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015560155460ff16611949576040805162461bcd60e51b815260206004820152601e60248201527f656d657267656e637957697468647261773a206e6f7420656e61626c65640000604482015290519081900360640190fd5b6000600560008154811061195957fe5b600091825260208083203380855260069092526040909320805460049093029093018054909450611997926001600160a01b03919091169190611d8d565b600080825560018201819055604080519182525133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a2505060018055565b60135481565b6119ee611beb565b6000546001600160a01b03908116911614611a3e576040805162461bcd60e51b8152602060048201819052602482015260008051602061246c833981519152604482015290519081900360640190fd5b6001600160a01b038116611a835760405162461bcd60e51b815260040180806020018281038252602681526020018061237b6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806005600081548110611aef57fe5b600091825260208083206001600160a01b038716845260069091526040909220805460049092029092019250611b2a57600092505050611bd1565b6003820154600d54600284015443118015611b4457508015155b15611ba3576000611b598560020154436110e7565b90506000611b80600754610a2e8860010154610a5b60045487611ca990919063ffffffff16565b9050611b9e611b9784610a2e84633b9aca00611ca9565b8590611f70565b935050505b611bca8360010154610a34633b9aca00610a2e868860000154611ca990919063ffffffff16565b9450505050505b919050565b6003546001600160a01b031681565b61dead81565b3390565b3b151590565b600060058281548110611c0457fe5b9060005260206000209060040201905080600201544311611c255750611ca6565b600d5480611c3a575043600290910155611ca6565b6000611c4a8360020154436110e7565b90506000611c71600754610a2e8660010154610a5b60045487611ca990919063ffffffff16565b9050611c93611c8884610a2e84633b9aca00611ca9565b600386015490611f70565b6003850155505043600290920191909155505b50565b600082611cb857506000611121565b82820282848281611cc557fe5b0414611d025760405162461bcd60e51b815260040180806020018281038252602181526020018061244b6021913960400191505060405180910390fd5b9392505050565b6000611d0283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fca565b6000611d0283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061206c565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611ddf9084906120c6565b505050565b611dec610d8f565b15611e31576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e6d611beb565b604080516001600160a01b039092168252519081900360200190a1565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611ee49085906120c6565b50505050565b611ef2610d8f565b611f3a576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e6d611beb565b600082820183811015611d02576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836120565760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561201b578181015183820152602001612003565b50505050905090810190601f1680156120485780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161206257fe5b0495945050505050565b600081848411156120be5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561201b578181015183820152602001612003565b505050900390565b606061211b826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121779092919063ffffffff16565b805190915015611ddf5780806020019051602081101561213a57600080fd5b5051611ddf5760405162461bcd60e51b815260040180806020018281038252602a815260200180612351602a913960400191505060405180910390fd5b6060612186848460008561218e565b949350505050565b6060824710156121cf5760405162461bcd60e51b81526004018080602001828103825260268152602001806123cc6026913960400191505060405180910390fd5b6121d885611bef565b612229576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106122685780518252601f199092019160209182019101612249565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146122ca576040519150601f19603f3d011682016040523d82523d6000602084013e6122cf565b606091505b50915091506122df8282866122ea565b979650505050505050565b606083156122f9575081611d02565b8251156123095782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561201b57818101518382015260200161200356fe5361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573736465706f7369743a2074686973206164647265737320686173206465706f736974656420616c7265616479416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c6465706f7369743a20616d6f756e742073686f756c642067726561746f72207468616e20657175616c20746f206d696e77697468647261773a20746f74616c5265666c656374696f6e526577617264732066696e6973686564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657277697468647261773a2063616e74207769746864726177206265666f7265207374616b696e6720656e6473a2646970667358221220938b7a1b12efd1e622ce3ceb5f170ce145237ae7404b13c1852272bec2c12fe264736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c4f4fd359e36b831a989986385d127f11124ce0a000000000000000000000000c4f4fd359e36b831a989986385d127f11124ce0a00000000000000000000000000000000000000000000000000002d79883d20000000000000000000000000000000000000000000000000000000000000ecc61c0000000000000000000000000000000000000000000000000000000000f0e4cc
-----Decoded View---------------
Arg [0] : _BaseToken (address): 0xC4F4Fd359E36B831a989986385d127F11124ce0a
Arg [1] : _rewardToken (address): 0xC4F4Fd359E36B831a989986385d127F11124ce0a
Arg [2] : _rewardPerBlock (uint256): 50000000000000
Arg [3] : _startBlock (uint256): 15517212
Arg [4] : _rewardEndBlock (uint256): 15787212
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000c4f4fd359e36b831a989986385d127f11124ce0a
Arg [1] : 000000000000000000000000c4f4fd359e36b831a989986385d127f11124ce0a
Arg [2] : 00000000000000000000000000000000000000000000000000002d79883d2000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000ecc61c
Arg [4] : 0000000000000000000000000000000000000000000000000000000000f0e4cc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.