Polygon Sponsored slots available. Book your slot here!
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Contract Name:
MasterChef
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-07-01 */ // File: contracts/SafeMath.sol // SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.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; } } // File: contracts/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: contracts/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/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: contracts/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: contracts/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; } } // File: contracts/ReentrancyGuard.sol 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; } } // File: contracts/BEP20.sol pragma solidity >=0.4.0; /** * @dev Implementation of the {IBEP20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {BEP20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-BEP20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of BEP20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IBEP20-approve}. */ contract BEP20 is Context, IBEP20, Ownable { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor(string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the bep token owner. */ function getOwner() external override view returns (address) { return owner(); } /** * @dev Returns the name of the token. */ function name() public override view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public override view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. */ function decimals() public override view returns (uint8) { return _decimals; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply() public override view returns (uint256) { return _totalSupply; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account) public override view returns (uint256) { return _balances[account]; } /** * @dev See {BEP20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) public override view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom (address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, 'BEP20: transfer amount exceeds allowance') ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, 'BEP20: decreased allowance below zero')); return true; } /** * @dev Creates `amount` tokens and assigns them to `msg.sender`, increasing * the total supply. * * Requirements * * - `msg.sender` must be the token owner */ function mint(uint256 amount) public onlyOwner returns (bool) { _mint(_msgSender(), amount); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer (address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), 'BEP20: transfer from the zero address'); require(recipient != address(0), 'BEP20: transfer to the zero address'); _balances[sender] = _balances[sender].sub(amount, 'BEP20: transfer amount exceeds balance'); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), 'BEP20: mint to the zero address'); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), 'BEP20: burn from the zero address'); _balances[account] = _balances[account].sub(amount, 'BEP20: burn amount exceeds balance'); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve (address owner, address spender, uint256 amount) internal { require(owner != address(0), 'BEP20: approve from the zero address'); require(spender != address(0), 'BEP20: approve to the zero address'); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, 'BEP20: burn amount exceeds allowance')); } } // File: contracts/RACOON.sol pragma solidity 0.6.12; // PolyRacoon Token contract PolyRacoon is BEP20{ // Burn address address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; // DEV address address public constant DEV_ADDRESS = 0x461572c60D6Cfc76C75e9C61ac6708Fec60c5E48; // Fee address address public constant FEE_ADDRESS = 0x15a63C117fc1F688Dc96060af14319A4688e98ab; // Max transfer rate: 5%. uint16 public constant MAXIMUM_TRANSFER_RATE = 500; // Max transfer rate: 0.5%. uint16 public constant MINIMUM_TRANSFER_RATE = 50; // Anti Whale! Max transfer amount rate in basis points. 2.5%! uint16 public maxTransferAmountRate = 250; // Transfer Burn Rate: 4%. uint16 public constant BURN_RATE = 40; // Transfer FEE Rate: 1%. uint16 public constant FEE_RATE = 10; // Addresses that excluded from antiWhale mapping(address => bool) private _excludedFromAntiWhale; // The operator can only update the transfer tax rate address private _operator; // Events event OperatorTransferred(address indexed previousOperator, address indexed newOperator); event MaxTransferAmountRateUpdated(address indexed operator, uint256 previousRate, uint256 newRate); modifier onlyOperator() { require(_operator == msg.sender, "operator: caller is not the operator"); _; } modifier antiWhale(address sender, address recipient, uint256 amount) { if (maxTransferAmount() > 0) { if ( _excludedFromAntiWhale[sender] == false && _excludedFromAntiWhale[recipient] == false ) { require(amount <= maxTransferAmount(), "RACOON::antiWhale: Transfer amount exceeds the maxTransferAmount"); } } _; } /** * @notice Constructs the PolyRacoon contract. */ constructor() public BEP20('PolyRacoon Token', 'RACOON') { _operator = _msgSender(); emit OperatorTransferred(address(0), _operator); _excludedFromAntiWhale[msg.sender] = true; _excludedFromAntiWhale[address(this)] = true; _excludedFromAntiWhale[BURN_ADDRESS] = true; _excludedFromAntiWhale[FEE_ADDRESS] = true; } /// @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef). function mint(address _to, uint256 _amount) public onlyOwner { _mint(_to, _amount); } function _transfer(address sender, address recipient, uint256 amount) internal virtual override antiWhale(sender, recipient, amount) { if (recipient == BURN_ADDRESS || sender == DEV_ADDRESS || recipient == FEE_ADDRESS ) { super._transfer(sender, recipient, amount); } else { // 4.5% of every transfer burnt uint256 burnAmount = amount.mul(BURN_RATE).div(1000); // 0.5% of every transfer ist sent to FEE_ADDRESS uint256 feeAmount = amount.mul(FEE_RATE).div(1000); // 0% of transfer sent to recipient uint256 sendAmount = amount.sub(burnAmount).sub(feeAmount); require(amount == sendAmount + burnAmount + feeAmount, "tokens::transfer: Burn value invalid"); super._transfer(sender, BURN_ADDRESS, burnAmount); super._transfer(sender, FEE_ADDRESS, feeAmount); super._transfer(sender, recipient, sendAmount); amount = sendAmount; } } /** * @dev Returns the max transfer amount. */ function maxTransferAmount() public view returns (uint256) { return totalSupply().mul(maxTransferAmountRate).div(10000); } /** * @dev Returns the address is excluded from antiWhale or not. */ function isExcludedFromAntiWhale(address _account) public view returns (bool) { return _excludedFromAntiWhale[_account]; } /** * @dev Update the max transfer amount rate. * Can only be called by the current operator. * Maximum Transfer Amount rate is hardcoded to 5%. * Minimum Transfer Amount rate is hardcoded to 0.5%. */ function updateMaxTransferAmountRate(uint16 _maxTransferAmountRate) public onlyOperator { require(_maxTransferAmountRate <= MAXIMUM_TRANSFER_RATE, "RACOON::updateMaxTransferAmountRate: Max transfer amount rate must not exceed the maximum rate."); require(_maxTransferAmountRate >= MINIMUM_TRANSFER_RATE, "RACOON::updateMaxTransferAmountRate: Max transfer amount rate can not be bleow minimum rate."); emit MaxTransferAmountRateUpdated(msg.sender, maxTransferAmountRate, _maxTransferAmountRate); maxTransferAmountRate = _maxTransferAmountRate; } function setExcludedFromAntiWhale(address _account, bool _excluded) public onlyOperator { _excludedFromAntiWhale[_account] = _excluded; } /** * @dev Returns the address of the current operator. */ function operator() public view returns (address) { return _operator; } /** * @dev Transfers operator of the contract to a new account (`newOperator`). * Can only be called by the current operator. */ function transferOperator(address newOperator) public onlyOperator { require(newOperator != address(0), "RACOON::transferOperator: new operator is the zero address"); emit OperatorTransferred(_operator, newOperator); _operator = newOperator; } } // File: contracts/Masterchef.sol pragma solidity 0.6.12; // MasterChef is the master of RACOON. He can make RACOON and he is a fair guy. // // Note that it's ownable and the owner wields tremendous power. The ownership // will be transferred to a governance smart contract once RACOON is sufficiently // // Have fun reading it. Hopefully it's bug-free. God bless. contract MasterChef is Ownable, 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. // // We do some fancy math here. Basically, any point in time, the amount of RACOONs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accRacoonPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accRacoonPerShare` (and `lastRewardBlock`) gets updated. // 2. User receives the pending reward sent to his/her address. // 3. User's `amount` gets updated. // 4. User's `rewardDebt` gets updated. } // Info of each pool. struct PoolInfo { IBEP20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. Racoons to distribute per block. uint256 lastRewardBlock; // Last block number that Racoons distribution occurs. uint256 accRacoonPerShare; // Accumulated Racoons per share, times 1e12. See below. uint16 depositFeeBP; // Deposit fee in basis points } // The Racoon TOKEN! PolyRacoon public racoon; // Dev address. address public devAddress = 0x461572c60D6Cfc76C75e9C61ac6708Fec60c5E48; // Deposit Fee address address public feeAddress = 0x15a63C117fc1F688Dc96060af14319A4688e98ab; // Racoon tokens created per block. uint256 public racoonPerBlock; // Bonus muliplier for early racoon makers. uint256 public constant BONUS_MULTIPLIER = 1; // Initial emission rate: 1 racoon per block. uint256 public constant INITIAL_EMISSION_RATE = 1000 finney; // Minimum emission rate: 0.00 racoon per block. uint256 public constant MINIMUM_EMISSION_RATE = 0 finney; // Reduce emission every 7200 blocks ~ 6 hours. uint256 public constant EMISSION_REDUCTION_PERIOD_BLOCKS = 7200; // Emission reduction rate per period in basis points: 5%. uint256 public constant EMISSION_REDUCTION_RATE_PER_PERIOD = 500; // Last reduction period index uint256 public lastReductionPeriodIndex = 0; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block number when racoon mining starts. uint256 public startBlock; event Deposit(address indexed user, uint256 indexed pid, uint256 amount); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount); event EmissionRateUpdated(address indexed caller, uint256 previousAmount, uint256 newAmount); constructor( PolyRacoon _racoon, uint256 _startBlock ) public { racoon = _racoon; startBlock = _startBlock; racoonPerBlock = INITIAL_EMISSION_RATE; } function poolLength() external view returns (uint256) { return poolInfo.length; } // Add a new lp to the pool. Can only be called by the owner. // XXX DO NOT add the same LP token more than once. Rewards will be messed up if you do. function add(uint256 _allocPoint, IBEP20 _lpToken, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner { require(_depositFeeBP <= 400, "add: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accRacoonPerShare: 0, depositFeeBP: _depositFeeBP })); } // Update the given pool's Racoon allocation point and deposit fee. Can only be called by the owner. function set(uint256 _pid, uint256 _allocPoint, uint16 _depositFeeBP, bool _withUpdate) public onlyOwner { require(_depositFeeBP <= 400, "set: invalid deposit fee basis points"); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].depositFeeBP = _depositFeeBP; } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) { return _to.sub(_from).mul(BONUS_MULTIPLIER); } // View function to see pending Racoons on frontend. function pendingRacoon(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accRacoonPerShare = pool.accRacoonPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 racoonReward = multiplier.mul(racoonPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accRacoonPerShare = accRacoonPerShare.add(racoonReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accRacoonPerShare).div(1e12).sub(user.rewardDebt); } // Update reward variables for all pools. Be careful of gas spending! function massUpdatePools() public { uint256 length = poolInfo.length; for (uint256 pid = 0; pid < length; ++pid) { updatePool(pid); } } // Update reward variables of the given pool to be up-to-date. function updatePool(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; if (block.number <= pool.lastRewardBlock) { return; } uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (lpSupply == 0 || pool.allocPoint == 0) { pool.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 racoonReward = multiplier.mul(racoonPerBlock).mul(pool.allocPoint).div(totalAllocPoint); racoon.mint(devAddress, racoonReward.div(10)); racoon.mint(address(this), racoonReward); pool.accRacoonPerShare = pool.accRacoonPerShare.add(racoonReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for Racoon allocation. // Take care of adding the RIGHT transfetrax of Racoon token! function deposit(uint256 _pid, uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accRacoonPerShare).div(1e12).sub(user.rewardDebt); if (pending > 0) { safeRacoonTransfer(msg.sender, pending); } } if (_amount > 0) { pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); if (address(pool.lpToken) == address(racoon)) { uint256 transferTax = _amount.mul(5).div(100); // enter correct Transfertax of the reward Token here! _amount = _amount.sub(transferTax); } if (pool.depositFeeBP > 0) { uint256 depositFee = _amount.mul(pool.depositFeeBP).div(10000); pool.lpToken.safeTransfer(feeAddress, depositFee); user.amount = user.amount.add(_amount).sub(depositFee); } else { user.amount = user.amount.add(_amount); } } user.rewardDebt = user.amount.mul(pool.accRacoonPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(_pid); uint256 pending = user.amount.mul(pool.accRacoonPerShare).div(1e12).sub(user.rewardDebt); if (pending > 0) { safeRacoonTransfer(msg.sender, pending); } if (_amount > 0) { user.amount = user.amount.sub(_amount); pool.lpToken.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(pool.accRacoonPerShare).div(1e12); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public nonReentrant { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; pool.lpToken.safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(msg.sender, _pid, amount); } // Safe Racoon transfer function, just in case if rounding error causes pool to not have enough Racoons. function safeRacoonTransfer(address _to, uint256 _amount) internal { uint256 racoonBal = racoon.balanceOf(address(this)); bool transferSuccess = false; if (_amount > racoonBal) { transferSuccess = racoon.transfer(_to, racoonBal); } else { transferSuccess = racoon.transfer(_to, _amount); } require(transferSuccess, "safeRacoonTransfer: Transfer failed"); } // Reduce emission rate by 5% every 7200 blocks ~ 6hours. This function can be called publicly. function updateEmissionRate() public { require(block.number > startBlock, "updateEmissionRate: Can only be called after mining starts"); require(racoonPerBlock > MINIMUM_EMISSION_RATE, "updateEmissionRate: Emission rate has reached the minimum threshold"); uint256 currentIndex = block.number.sub(startBlock).div(EMISSION_REDUCTION_PERIOD_BLOCKS); if (currentIndex <= lastReductionPeriodIndex) { return; } uint256 newEmissionRate = racoonPerBlock; for (uint256 index = lastReductionPeriodIndex; index < currentIndex; ++index) { newEmissionRate = newEmissionRate.mul(1e4 - EMISSION_REDUCTION_RATE_PER_PERIOD).div(1e4); } newEmissionRate = newEmissionRate < MINIMUM_EMISSION_RATE ? MINIMUM_EMISSION_RATE : newEmissionRate; if (newEmissionRate >= racoonPerBlock) { return; } massUpdatePools(); lastReductionPeriodIndex = currentIndex; uint256 previousEmissionRate = racoonPerBlock; racoonPerBlock = newEmissionRate; emit EmissionRateUpdated(msg.sender, previousEmissionRate, newEmissionRate); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract PolyRacoon","name":"_racoon","type":"address"},{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"EmissionRateUpdated","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":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BONUS_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMISSION_REDUCTION_PERIOD_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EMISSION_REDUCTION_RATE_PER_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_EMISSION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_EMISSION_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IBEP20","name":"_lpToken","type":"address"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pure","type":"function"},{"inputs":[],"name":"lastReductionPeriodIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingRacoon","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":"accRacoonPerShare","type":"uint256"},{"internalType":"uint16","name":"depositFeeBP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"racoon","outputs":[{"internalType":"contract PolyRacoon","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"racoonPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint16","name":"_depositFeeBP","type":"uint16"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocPoint","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":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"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":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600380546001600160a01b031990811673461572c60d6cfc76c75e9c61ac6708fec60c5e4817909155600480549091167315a63c117fc1f688dc96060af14319a4688e98ab1790556000600681905560095534801561006257600080fd5b50604051611e8f380380611e8f8339818101604052604081101561008557600080fd5b508051602090910151600061009861011b565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060018055600280546001600160a01b0319166001600160a01b039390931692909217909155600a55670de0b6b3a764000060055561011f565b3390565b611d618061012e6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806384e82a33116100f9578063b7eee1f111610097578063e2bbb15811610071578063e2bbb15814610407578063f2fde38b1461042a578063f805580214610450578063fd2c06941461047c576101c4565b8063b7eee1f1146103c2578063d4adafdf146103ca578063d9638422146103d2576101c4565b80638dbb1e3a116100d35780638dbb1e3a1461034a57806391bb809c1461036d57806393f1a40b146103755780639d677ec1146103ba576101c4565b806384e82a33146102fc5780638aa285501461033a5780638da5cb5b14610342576101c4565b806351eb05a61161016657806361e0c4681161014057806361e0c468146102dc578063630b5ba1146102e45780636a9a7660146102ec578063715018a6146102f4576101c4565b806351eb05a61461029a5780635312ea8e146102b757806359d7a717146102d4576101c4565b80633ad10ef6116101a25780633ad10ef6146102415780634127535814610265578063441a3e701461026d57806348cd4cb114610292576101c4565b8063081e3eda146101c95780631526fe27146101e357806317caf6f114610239575b600080fd5b6101d1610484565b60408051918252519081900360200190f35b610200600480360360208110156101f957600080fd5b503561048a565b604080516001600160a01b039096168652602086019490945284840192909252606084015261ffff166080830152519081900360a00190f35b6101d16104d6565b6102496104dc565b604080516001600160a01b039092168252519081900360200190f35b6102496104eb565b6102906004803603604081101561028357600080fd5b50803590602001356104fa565b005b6101d16106bd565b610290600480360360208110156102b057600080fd5b50356106c3565b610290600480360360208110156102cd57600080fd5b50356108f9565b6102496109f9565b6101d1610a08565b610290610a0d565b6101d1610a30565b610290610a36565b6102906004803603608081101561031257600080fd5b508035906001600160a01b036020820135169061ffff60408201351690606001351515610ad8565b6101d1610cdc565b610249610ce1565b6101d16004803603604081101561036057600080fd5b5080359060200135610cf0565b6101d1610d0a565b6103a16004803603604081101561038b57600080fd5b50803590602001356001600160a01b0316610d16565b6040805192835260208301919091528051918290030190f35b610290610d3a565b6101d1610e7a565b6101d1610e80565b610290600480360360808110156103e857600080fd5b5080359060208101359061ffff60408201351690606001351515610e86565b6102906004803603604081101561041d57600080fd5b5080359060200135610fd6565b6102906004803603602081101561044057600080fd5b50356001600160a01b03166111ec565b6101d16004803603604081101561046657600080fd5b50803590602001356001600160a01b03166112e4565b6101d1611442565b60075490565b6007818154811061049757fe5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b0390931694509092909161ffff1685565b60095481565b6003546001600160a01b031681565b6004546001600160a01b031681565b60026001541415610552576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260018190555060006007838154811061056957fe5b6000918252602080832086845260088252604080852033865290925292208054600590920290920192508311156105dc576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6105e5846106c3565b600061061f826001015461061964e8d4a510006106138760030154876000015461144890919063ffffffff16565b906114a1565b906114e3565b90508015610631576106313382611525565b831561065b57815461064390856114e3565b8255825461065b906001600160a01b031633866116f8565b600383015482546106769164e8d4a510009161061391611448565b6001830155604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a3505060018055505050565b600a5481565b6000600782815481106106d257fe5b90600052602060002090600502019050806002015443116106f357506108f6565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561073d57600080fd5b505afa158015610751573d6000803e3d6000fd5b505050506040513d602081101561076757600080fd5b5051905080158061077a57506001820154155b1561078c5750436002909101556108f6565b600061079c836002015443610cf0565b905060006107c960095461061386600101546107c36005548761144890919063ffffffff16565b90611448565b6002546003549192506001600160a01b03908116916340c10f1991166107f084600a6114a1565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561083657600080fd5b505af115801561084a573d6000803e3d6000fd5b5050600254604080516340c10f1960e01b81523060048201526024810186905290516001600160a01b0390921693506340c10f19925060448082019260009290919082900301818387803b1580156108a157600080fd5b505af11580156108b5573d6000803e3d6000fd5b505050506108e36108d88461061364e8d4a510008561144890919063ffffffff16565b60038601549061174f565b6003850155505043600290920191909155505b50565b60026001541415610951576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260018190555060006007828154811061096857fe5b6000918252602080832085845260088252604080852033808752935284208054858255600182019590955560059093020180549094509192916109b8916001600160a01b039190911690836116f8565b604080518281529051859133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a35050600180555050565b6002546001600160a01b031681565b600081565b60075460005b81811015610a2c57610a24816106c3565b600101610a13565b5050565b60065481565b610a3e6117a9565b6000546001600160a01b03908116911614610a8e576040805162461bcd60e51b81526020600482018190526024820152600080516020611c8f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610ae06117a9565b6000546001600160a01b03908116911614610b30576040805162461bcd60e51b81526020600482018190526024820152600080516020611c8f833981519152604482015290519081900360640190fd5b6101908261ffff161115610b755760405162461bcd60e51b8152600401808060200182810382526025815260200180611b8b6025913960400191505060405180910390fd5b8015610b8357610b83610a0d565b6000600a544311610b9657600a54610b98565b435b600954909150610ba8908661174f565b6009556040805160a0810182526001600160a01b0395861681526020810196875290810191825260006060820181815261ffff9586166080840190815260078054600181018255935292517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688600590930292830180546001600160a01b031916919098161790965595517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68987015590517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a86015592517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68b8501555090517fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68c909201805461ffff191692909116919091179055565b600181565b6000546001600160a01b031690565b6000610d0160016107c384866114e3565b90505b92915050565b670de0b6b3a764000081565b60086020908152600092835260408084209091529082529020805460019091015482565b600a544311610d7a5760405162461bcd60e51b815260040180806020018281038252603a815260200180611caf603a913960400191505060405180910390fd5b600060055411610dbb5760405162461bcd60e51b8152600401808060200182810382526043815260200180611ce96043913960600191505060405180910390fd5b6000610dd8611c20610613600a54436114e390919063ffffffff16565b90506006548111610de95750610e78565b6005546006545b82811015610e1457610e0a6127106106138461251c611448565b9150600101610df0565b506005548110610e25575050610e78565b610e2d610a0d565b600682905560058054908290556040805182815260208101849052815133927feedc6338c9c1ad8f3cd6c90dd09dbe98dbd57e610d3e59a17996d07acb0d9511928290030190a25050505b565b6101f481565b611c2081565b610e8e6117a9565b6000546001600160a01b03908116911614610ede576040805162461bcd60e51b81526020600482018190526024820152600080516020611c8f833981519152604482015290519081900360640190fd5b6101908261ffff161115610f235760405162461bcd60e51b8152600401808060200182810382526025815260200180611c6a6025913960400191505060405180910390fd5b8015610f3157610f31610a0d565b610f6e83610f6860078781548110610f4557fe5b9060005260206000209060050201600101546009546114e390919063ffffffff16565b9061174f565b6009819055508260078581548110610f8257fe5b9060005260206000209060050201600101819055508160078581548110610fa557fe5b906000526020600020906005020160040160006101000a81548161ffff021916908361ffff16021790555050505050565b6002600154141561102e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260018190555060006007838154811061104557fe5b60009182526020808320868452600882526040808520338652909252922060059091029091019150611076846106c3565b8054156110bf5760006110ab826001015461061964e8d4a510006106138760030154876000015461144890919063ffffffff16565b905080156110bd576110bd3382611525565b505b821561118b5781546110dc906001600160a01b03163330866117ad565b60025482546001600160a01b03908116911614156111165760006111066064610613866005611448565b905061111284826114e3565b9350505b600482015461ffff161561117c576004820154600090611143906127109061061390879061ffff16611448565b6004548454919250611162916001600160a01b039081169116836116f8565b8154611174908290610619908761174f565b82555061118b565b8054611188908461174f565b81555b600382015481546111a69164e8d4a510009161061391611448565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35050600180555050565b6111f46117a9565b6000546001600160a01b03908116911614611244576040805162461bcd60e51b81526020600482018190526024820152600080516020611c8f833981519152604482015290519081900360640190fd5b6001600160a01b0381166112895760405162461bcd60e51b8152600401808060200182810382526026815260200180611bda6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080600784815481106112f457fe5b600091825260208083208784526008825260408085206001600160a01b0389811687529084528186206005959095029092016003810154815483516370a0823160e01b815230600482015293519298509596909590949316926370a082319260248082019391829003018186803b15801561136e57600080fd5b505afa158015611382573d6000803e3d6000fd5b505050506040513d602081101561139857600080fd5b50516002850154909150431180156113af57508015155b1561140f5760006113c4856002015443610cf0565b905060006113eb60095461061388600101546107c36005548761144890919063ffffffff16565b905061140a611403846106138464e8d4a51000611448565b859061174f565b935050505b611437836001015461061964e8d4a5100061061386886000015461144890919063ffffffff16565b979650505050505050565b60055481565b60008261145757506000610d04565b8282028284828161146457fe5b0414610d015760405162461bcd60e51b8152600401808060200182810382526021815260200180611c496021913960400191505060405180910390fd5b6000610d0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611807565b6000610d0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506118ab565b600254604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561157057600080fd5b505afa158015611584573d6000803e3d6000fd5b505050506040513d602081101561159a57600080fd5b50519050600081831115611631576002546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156115fe57600080fd5b505af1158015611612573d6000803e3d6000fd5b505050506040513d602081101561162857600080fd5b505190506116b6565b6002546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018790529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561168757600080fd5b505af115801561169b573d6000803e3d6000fd5b505050506040513d60208110156116b157600080fd5b505190505b806116f25760405162461bcd60e51b8152600401808060200182810382526023815260200180611c266023913960400191505060405180910390fd5b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261174a908490611905565b505050565b600082820183811015610d01576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526116f2908590611905565b600081836118935760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611858578181015183820152602001611840565b50505050905090810190601f1680156118855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161189f57fe5b049150505b9392505050565b600081848411156118fd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611858578181015183820152602001611840565b505050900390565b606061195a826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166119b69092919063ffffffff16565b80519091501561174a5780806020019051602081101561197957600080fd5b505161174a5760405162461bcd60e51b815260040180806020018281038252602a815260200180611bb0602a913960400191505060405180910390fd5b60606119c584846000856119cd565b949350505050565b606082471015611a0e5760405162461bcd60e51b8152600401808060200182810382526026815260200180611c006026913960400191505060405180910390fd5b611a1785611b1e565b611a68576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611aa75780518252601f199092019160209182019101611a88565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611b09576040519150601f19603f3d011682016040523d82523d6000602084013e611b0e565b606091505b5091509150611437828286611b24565b3b151590565b60608315611b335750816118a4565b825115611b435782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561185857818101518382015260200161184056fe6164643a20696e76616c6964206465706f7369742066656520626173697320706f696e74735361666542455032303a204245503230206f7065726174696f6e20646964206e6f7420737563636565644f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c736166655261636f6f6e5472616e736665723a205472616e73666572206661696c6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777365743a20696e76616c6964206465706f7369742066656520626173697320706f696e74734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572757064617465456d697373696f6e526174653a2043616e206f6e6c792062652063616c6c6564206166746572206d696e696e6720737461727473757064617465456d697373696f6e526174653a20456d697373696f6e207261746520686173207265616368656420746865206d696e696d756d207468726573686f6c64a2646970667358221220c20a6d39c5a475670c94819bd39e3adcc669712449f651263af000400129e7de64736f6c634300060c0033000000000000000000000000c07f279830aafa63e25c87227b45e426e84e6db20000000000000000000000000000000000000000000000000000000000fb446a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c07f279830aafa63e25c87227b45e426e84e6db20000000000000000000000000000000000000000000000000000000000fb446a
-----Decoded View---------------
Arg [0] : _racoon (address): 0xc07f279830aafa63e25c87227b45e426e84e6db2
Arg [1] : _startBlock (uint256): 16467050
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c07f279830aafa63e25c87227b45e426e84e6db2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000fb446a
Deployed ByteCode Sourcemap
41322:11858:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44843:95;;;:::i;:::-;;;;;;;;;;;;;;;;43882:26;;;;;;;;;;;;;;;;-1:-1:-1;43882:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;43882:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44135:34;;;:::i;42872:70::-;;;:::i;:::-;;;;-1:-1:-1;;;;;42872:70:0;;;;;;;;;;;;;;42983;;;:::i;50088:761::-;;;;;;;;;;;;;;;;-1:-1:-1;50088:761:0;;;;;;;:::i;:::-;;44234:25;;;:::i;47743:826::-;;;;;;;;;;;;;;;;-1:-1:-1;47743:826:0;;:::i;50920:398::-;;;;;;;;;;;;;;;;-1:-1:-1;50920:398:0;;:::i;42814:24::-;;;:::i;43428:56::-;;;:::i;47487:180::-;;;:::i;43803:43::-;;;:::i;21983:148::-;;;:::i;45107:660::-;;;;;;;;;;;;;;;;-1:-1:-1;45107:660:0;;;-1:-1:-1;;;;;45107:660:0;;;;;;;;;;;;;;;;;;;:::i;43198:44::-;;;:::i;21341:79::-;;;:::i;46418:143::-;;;;;;;;;;;;;;;;-1:-1:-1;46418:143:0;;;;;;;:::i;43302:59::-;;;:::i;43970:64::-;;;;;;;;;;;;;;;;-1:-1:-1;43970:64:0;;;;;;-1:-1:-1;;;;;43970:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;51988:1187;;;:::i;43690:64::-;;;:::i;43550:63::-;;;:::i;45881:461::-;;;;;;;;;;;;;;;;-1:-1:-1;45881:461:0;;;;;;;;;;;;;;;;;;;;;:::i;48707:1329::-;;;;;;;;;;;;;;;;-1:-1:-1;48707:1329:0;;;;;;;:::i;22286:244::-;;;;;;;;;;;;;;;;-1:-1:-1;22286:244:0;-1:-1:-1;;;;;22286:244:0;;:::i;46627:777::-;;;;;;;;;;;;;;;;-1:-1:-1;46627:777:0;;;;;;-1:-1:-1;;;;;46627:777:0;;:::i;43107:29::-;;;:::i;44843:95::-;44915:8;:15;44843:95;:::o;43882:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43882:26:0;;;;-1:-1:-1;43882:26:0;;;;;;;:::o;44135:34::-;;;;:::o;42872:70::-;;;-1:-1:-1;;;;;42872:70:0;;:::o;42983:::-;;;-1:-1:-1;;;;;42983:70:0;;:::o;50088:761::-;24265:1;24871:7;;:19;;24863:63;;;;;-1:-1:-1;;;24863:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24265:1;25004:7;:18;;;;50168:21:::1;50192:8;50201:4;50192:14;;;;;;;;;::::0;;;::::1;::::0;;;50241;;;:8:::1;:14:::0;;;;;;50256:10:::1;50241:26:::0;;;;;;;50286:11;;50192:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;50286:22:0;-1:-1:-1;50286:22:0::1;50278:53;;;::::0;;-1:-1:-1;;;50278:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50278:53:0;;;;;;;;;;;;;::::1;;50342:16;50353:4;50342:10;:16::i;:::-;50369:15;50387:70;50441:4;:15;;;50387:49;50431:4;50387:39;50403:4;:22;;;50387:4;:11;;;:15;;:39;;;;:::i;:::-;:43:::0;::::1;:49::i;:::-;:53:::0;::::1;:70::i;:::-;50369:88:::0;-1:-1:-1;50472:11:0;;50468:83:::1;;50500:39;50519:10;50531:7;50500:18;:39::i;:::-;50565:11:::0;;50561:152:::1;;50607:11:::0;;:24:::1;::::0;50623:7;50607:15:::1;:24::i;:::-;50593:38:::0;;50646:12;;:55:::1;::::0;-1:-1:-1;;;;;50646:12:0::1;50680:10;50693:7:::0;50646:25:::1;:55::i;:::-;50757:22;::::0;::::1;::::0;50741:11;;:49:::1;::::0;50785:4:::1;::::0;50741:39:::1;::::0;:15:::1;:39::i;:49::-;50723:15;::::0;::::1;:67:::0;50806:35:::1;::::0;;;;;;;50827:4;;50815:10:::1;::::0;50806:35:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;24221:1:0;25183:22;;-1:-1:-1;;;50088:761:0:o;44234:25::-;;;;:::o;47743:826::-;47795:21;47819:8;47828:4;47819:14;;;;;;;;;;;;;;;;;;47795:38;;47864:4;:20;;;47848:12;:36;47844:75;;47901:7;;;47844:75;47948:12;;:37;;;-1:-1:-1;;;47948:37:0;;47979:4;47948:37;;;;;;47929:16;;-1:-1:-1;;;;;47948:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47948:37:0;;-1:-1:-1;48000:13:0;;;:37;;-1:-1:-1;48017:15:0;;;;:20;48000:37;47996:126;;;-1:-1:-1;48077:12:0;48054:20;;;;:35;48104:7;;47996:126;48132:18;48153:49;48167:4;:20;;;48189:12;48153:13;:49::i;:::-;48132:70;;48213:20;48236:72;48292:15;;48236:51;48271:4;:15;;;48236:30;48251:14;;48236:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:72::-;48319:6;;48331:10;;48213:95;;-1:-1:-1;;;;;;48319:6:0;;;;:11;;48331:10;48343:20;48213:95;48360:2;48343:16;:20::i;:::-;48319:45;;;;;;;;;;;;;-1:-1:-1;;;;;48319:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;48375:6:0;;:40;;;-1:-1:-1;;;48375:40:0;;48395:4;48375:40;;;;;;;;;;;;-1:-1:-1;;;;;48375:6:0;;;;-1:-1:-1;48375:11:0;;-1:-1:-1;48375:40:0;;;;;:6;;:40;;;;;;;;:6;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48451:64;48478:36;48505:8;48478:22;48495:4;48478:12;:16;;:22;;;;:::i;:36::-;48451:22;;;;;:26;:64::i;:::-;48426:22;;;:89;-1:-1:-1;;48549:12:0;48526:20;;;;:35;;;;-1:-1:-1;47743:826:0;;:::o;50920:398::-;24265:1;24871:7;;:19;;24863:63;;;;;-1:-1:-1;;;24863:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24265:1;25004:7;:18;;;;50992:21:::1;51016:8;51025:4;51016:14;;;;;;;;;::::0;;;::::1;::::0;;;51065;;;:8:::1;:14:::0;;;;;;51080:10:::1;51065:26:::0;;;;;;;51119:11;;51141:15;;;-1:-1:-1;51167:15:0;::::1;:19:::0;;;;51016:14:::1;::::0;;::::1;;51197:12:::0;;51016:14;;-1:-1:-1;51065:26:0;;51119:11;51197:54:::1;::::0;-1:-1:-1;;;;;51197:12:0;;;::::1;::::0;51119:11;51197:25:::1;:54::i;:::-;51267:43;::::0;;;;;;;51297:4;;51285:10:::1;::::0;51267:43:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;24221:1:0;25183:22;;-1:-1:-1;;50920:398:0:o;42814:24::-;;;-1:-1:-1;;;;;42814:24:0;;:::o;43428:56::-;43476:8;43428:56;:::o;47487:180::-;47549:8;:15;47532:14;47575:85;47603:6;47597:3;:12;47575:85;;;47633:15;47644:3;47633:10;:15::i;:::-;47611:5;;47575:85;;;;47487:180;:::o;43803:43::-;;;;:::o;21983:148::-;21563:12;:10;:12::i;:::-;21553:6;;-1:-1:-1;;;;;21553:6:0;;;:22;;;21545:67;;;;;-1:-1:-1;;;21545:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21545:67:0;;;;;;;;;;;;;;;22090:1:::1;22074:6:::0;;22053:40:::1;::::0;-1:-1:-1;;;;;22074:6:0;;::::1;::::0;22053:40:::1;::::0;22090:1;;22053:40:::1;22121:1;22104:19:::0;;-1:-1:-1;;;;;;22104:19:0::1;::::0;;21983:148::o;45107:660::-;21563:12;:10;:12::i;:::-;21553:6;;-1:-1:-1;;;;;21553:6:0;;;:22;;;21545:67;;;;;-1:-1:-1;;;21545:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21545:67:0;;;;;;;;;;;;;;;45251:3:::1;45234:13;:20;;;;45226:70;;;;-1:-1:-1::0;;;45226:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45311:11;45307:61;;;45339:17;:15;:17::i;:::-;45378:23;45419:10;;45404:12;:25;:53;;45447:10;;45404:53;;;45432:12;45404:53;45486:15;::::0;45378:79;;-1:-1:-1;45486:32:0::1;::::0;45506:11;45486:19:::1;:32::i;:::-;45468:15;:50:::0;45543:215:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;45543:215:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;45543:215:0;;;;;;::::1;::::0;;::::1;::::0;;;;;;45529:8:::1;:230:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;45529:230:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45529:230:0;;;;;;;;-1:-1:-1;;45529:230:0::1;::::0;;;::::1;::::0;;;::::1;::::0;;45107:660::o;43198:44::-;43241:1;43198:44;:::o;21341:79::-;21379:7;21406:6;-1:-1:-1;;;;;21406:6:0;21341:79;:::o;46418:143::-;46490:7;46517:36;43241:1;46517:14;:3;46525:5;46517:7;:14::i;:36::-;46510:43;;46418:143;;;;;:::o;43302:59::-;43350:11;43302:59;:::o;43970:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51988:1187::-;52059:10;;52044:12;:25;52036:96;;;;-1:-1:-1;;;52036:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43476:8;52151:14;;:38;52143:118;;;;-1:-1:-1;;;52143:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52274:20;52297:66;43609:4;52297:28;52314:10;;52297:12;:16;;:28;;;;:::i;:66::-;52274:89;;52394:24;;52378:12;:40;52374:79;;52435:7;;;52374:79;52491:14;;52537:24;;52516:193;52571:12;52563:5;:20;52516:193;;;52627:70;52693:3;52627:61;:15;52647:40;52627:19;:61::i;:70::-;52609:88;-1:-1:-1;52585:7:0;;52516:193;;;-1:-1:-1;52854:14:0;;52835:15;:33;52831:72;;52885:7;;;;52831:72;52915:17;:15;:17::i;:::-;52943:24;:39;;;53024:14;;;53049:32;;;;53097:70;;;;;;;;;;;;;;53117:10;;53097:70;;;;;;;;51988:1187;;;;:::o;43690:64::-;43751:3;43690:64;:::o;43550:63::-;43609:4;43550:63;:::o;45881:461::-;21563:12;:10;:12::i;:::-;21553:6;;-1:-1:-1;;;;;21553:6:0;;;:22;;;21545:67;;;;;-1:-1:-1;;;21545:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21545:67:0;;;;;;;;;;;;;;;46022:3:::1;46005:13;:20;;;;45997:70;;;;-1:-1:-1::0;;;45997:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46082:11;46078:61;;;46110:17;:15;:17::i;:::-;46167:63;46218:11;46167:46;46187:8;46196:4;46187:14;;;;;;;;;;;;;;;;;;:25;;;46167:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;46149:15;:81;;;;46269:11;46241:8;46250:4;46241:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;46321:13;46291:8;46300:4;46291:14;;;;;;;;;;;;;;;;;;:27;;;:43;;;;;;;;;;;;;;;;;;45881:461:::0;;;;:::o;48707:1329::-;24265:1;24871:7;;:19;;24863:63;;;;;-1:-1:-1;;;24863:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24265:1;25004:7;:18;;;;48786:21:::1;48810:8;48819:4;48810:14;;;;;;;;;::::0;;;::::1;::::0;;;48859;;;:8:::1;:14:::0;;;;;;48874:10:::1;48859:26:::0;;;;;;;48810:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;48896:16:0::1;48868:4:::0;48896:10:::1;:16::i;:::-;48929:11:::0;;:15;48925:241:::1;;48961:15;48979:70;49033:4;:15;;;48979:49;49023:4;48979:39;48995:4;:22;;;48979:4;:11;;;:15;;:39;;;;:::i;:70::-;48961:88:::0;-1:-1:-1;49068:11:0;;49064:91:::1;;49100:39;49119:10;49131:7;49100:18;:39::i;:::-;48925:241;;49180:11:::0;;49176:725:::1;;49208:12:::0;;:74:::1;::::0;-1:-1:-1;;;;;49208:12:0::1;49246:10;49267:4;49274:7:::0;49208:29:::1;:74::i;:::-;49334:6;::::0;49309:12;;-1:-1:-1;;;;;49309:12:0;;::::1;49334:6:::0;::::1;49301:40;49297:235;;;49362:19;49384:23;49403:3;49384:14;:7:::0;49396:1:::1;49384:11;:14::i;:23::-;49362:45:::0;-1:-1:-1;49492:24:0::1;:7:::0;49362:45;49492:11:::1;:24::i;:::-;49482:34;;49297:235;;49550:17;::::0;::::1;::::0;::::1;;:21:::0;49546:344:::1;;49625:17;::::0;::::1;::::0;49592:18:::1;::::0;49613:41:::1;::::0;49648:5:::1;::::0;49613:30:::1;::::0;:7;;49625:17:::1;;49613:11;:30::i;:41::-;49699:10;::::0;49673:12;;49592:62;;-1:-1:-1;49673:49:0::1;::::0;-1:-1:-1;;;;;49673:12:0;;::::1;::::0;49699:10:::1;49592:62:::0;49673:25:::1;:49::i;:::-;49755:11:::0;;:40:::1;::::0;49784:10;;49755:24:::1;::::0;49771:7;49755:15:::1;:24::i;:40::-;49741:54:::0;;-1:-1:-1;49546:344:0::1;;;49850:11:::0;;:24:::1;::::0;49866:7;49850:15:::1;:24::i;:::-;49836:38:::0;;49546:344:::1;49945:22;::::0;::::1;::::0;49929:11;;:49:::1;::::0;49973:4:::1;::::0;49929:39:::1;::::0;:15:::1;:39::i;:49::-;49911:15;::::0;::::1;:67:::0;49994:34:::1;::::0;;;;;;;50014:4;;50002:10:::1;::::0;49994:34:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;;24221:1:0;25183:22;;-1:-1:-1;;48707:1329:0:o;22286:244::-;21563:12;:10;:12::i;:::-;21553:6;;-1:-1:-1;;;;;21553:6:0;;;:22;;;21545:67;;;;;-1:-1:-1;;;21545:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21545:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22375:22:0;::::1;22367:73;;;;-1:-1:-1::0;;;22367:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22477:6;::::0;;22456:38:::1;::::0;-1:-1:-1;;;;;22456:38:0;;::::1;::::0;22477:6;::::1;::::0;22456:38:::1;::::0;::::1;22505:6;:17:::0;;-1:-1:-1;;;;;;22505:17:0::1;-1:-1:-1::0;;;;;22505:17:0;;;::::1;::::0;;;::::1;::::0;;22286:244::o;46627:777::-;46702:7;46722:21;46746:8;46755:4;46746:14;;;;;;;;;;;;;;;;46795;;;:8;:14;;;;;;-1:-1:-1;;;;;46795:21:0;;;;;;;;;;;46746:14;;;;;;;;46855:22;;;;46907:12;;:37;;-1:-1:-1;;;46907:37:0;;46938:4;46907:37;;;;;;46746:14;;-1:-1:-1;46795:21:0;;46855:22;;46746:14;;46907:12;;;:22;;:37;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46907:37:0;46974:20;;;;46907:37;;-1:-1:-1;46959:12:0;:35;:52;;;;-1:-1:-1;46998:13:0;;;46959:52;46955:359;;;47028:18;47049:49;47063:4;:20;;;47085:12;47049:13;:49::i;:::-;47028:70;;47113:20;47136:72;47192:15;;47136:51;47171:4;:15;;;47136:30;47151:14;;47136:10;:14;;:30;;;;:::i;:72::-;47113:95;-1:-1:-1;47243:59:0;47265:36;47292:8;47265:22;47113:95;47282:4;47265:16;:22::i;:36::-;47243:17;;:21;:59::i;:::-;47223:79;;46955:359;;;47331:65;47380:4;:15;;;47331:44;47370:4;47331:34;47347:17;47331:4;:11;;;:15;;:34;;;;:::i;:65::-;47324:72;46627:777;-1:-1:-1;;;;;;;46627:777:0:o;43107:29::-;;;;:::o;2299:471::-;2357:7;2602:6;2598:47;;-1:-1:-1;2632:1:0;2625:8;;2598:47;2669:5;;;2673:1;2669;:5;:1;2693:5;;;;;:10;2685:56;;;;-1:-1:-1;;;2685:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3246:132;3304:7;3331:39;3335:1;3338;3331:39;;;;;;;;;;;;;;;;;:3;:39::i;1409:136::-;1467:7;1494:43;1498:1;1501;1494:43;;;;;;;;;;;;;;;;;:3;:43::i;51436:441::-;51534:6;;:31;;;-1:-1:-1;;;51534:31:0;;51559:4;51534:31;;;;;;51514:17;;-1:-1:-1;;;;;51534:6:0;;:16;;:31;;;;;;;;;;;;;;:6;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51534:31:0;;-1:-1:-1;51576:20:0;51619:19;;;51615:181;;;51673:6;;:31;;;-1:-1:-1;;;51673:31:0;;-1:-1:-1;;;;;51673:31:0;;;;;;;;;;;;;;;:6;;;;;:15;;:31;;;;;;;;;;;;;;:6;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51673:31:0;;-1:-1:-1;51615:181:0;;;51755:6;;:29;;;-1:-1:-1;;;51755:29:0;;-1:-1:-1;;;;;51755:29:0;;;;;;;;;;;;;;;:6;;;;;:15;;:29;;;;;;;;;;;;;;:6;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51755:29:0;;-1:-1:-1;51615:181:0;51814:15;51806:63;;;;-1:-1:-1;;;51806:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51436:441;;;;:::o;16216:177::-;16326:58;;;-1:-1:-1;;;;;16326:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16326:58:0;-1:-1:-1;;;16326:58:0;;;16299:86;;16319:5;;16299:19;:86::i;:::-;16216:177;;;:::o;945:181::-;1003:7;1035:5;;;1059:6;;;;1051:46;;;;;-1:-1:-1;;;1051:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19901:106;19989:10;19901:106;:::o;16401:205::-;16529:68;;;-1:-1:-1;;;;;16529:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16529:68:0;-1:-1:-1;;;16529:68:0;;;16502:96;;16522:5;;16502:19;:96::i;3874:278::-;3960:7;3995:12;3988:5;3980:28;;;;-1:-1:-1;;;3980:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4019:9;4035:1;4031;:5;;;;;;;-1:-1:-1;;3874:278:0;;;;;;:::o;1848:192::-;1934:7;1970:12;1962:6;;;;1954:29;;;;-1:-1:-1;;;1954:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2006:5:0;;;1848:192::o;18521:761::-;18945:23;18971:69;18999:4;18971:69;;;;;;;;;;;;;;;;;18979:5;-1:-1:-1;;;;;18971:27:0;;;:69;;;;;:::i;:::-;19055:17;;18945:95;;-1:-1:-1;19055:21:0;19051:224;;19197:10;19186:30;;;;;;;;;;;;;;;-1:-1:-1;19186:30:0;19178:85;;;;-1:-1:-1;;;19178:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12249:195;12352:12;12384:52;12406:6;12414:4;12420:1;12423:12;12384:21;:52::i;:::-;12377:59;12249:195;-1:-1:-1;;;;12249:195:0:o;13301:530::-;13428:12;13486:5;13461:21;:30;;13453:81;;;;-1:-1:-1;;;13453:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13553:18;13564:6;13553:10;:18::i;:::-;13545:60;;;;;-1:-1:-1;;;13545:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13679:12;13693:23;13720:6;-1:-1:-1;;;;;13720:11:0;13740:5;13748:4;13720:33;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13720:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13678:75;;;;13771:52;13789:7;13798:10;13810:12;13771:17;:52::i;9331:422::-;9698:20;9737:8;;;9331:422::o;14837:742::-;14952:12;14981:7;14977:595;;;-1:-1:-1;15012:10:0;15005:17;;14977:595;15126:17;;:21;15122:439;;15389:10;15383:17;15450:15;15437:10;15433:2;15429:19;15422:44;15337:148;15525:20;;-1:-1:-1;;;15525:20:0;;;;;;;;;;;;;;;;;15532:12;;15525:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://c20a6d39c5a475670c94819bd39e3adcc669712449f651263af000400129e7de
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.