Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 2 internal transactions
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0x5fe63663efbe28a43800fc4fc151756d492ab0f8a05050b3bd8d962774aa14c4 | 16571152 | 360 days 7 hrs ago | 0xfca70cf834dc6dd9d5580f116b1b9f1a5e917712 | 0xb444d596273c66ac269c33c30fbb245f4ba8a79d | 1 MATIC | ||
0x59e1b7c937eb2ee147169085525a8fa7ea48217c30634e5008fac3d28ae5e8fc | 16570949 | 360 days 7 hrs ago | 0x82be23aed13f69a753cf503a2a7bde5109edb121 | 0xb444d596273c66ac269c33c30fbb245f4ba8a79d | 1 MATIC |
[ Download CSV Export ]
Contract Name:
MasterChef
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-06-09 */ // Sources flattened with hardhat v2.2.1 https://hardhat.org // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/token/ERC20/[email protected] pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^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); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(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 @openzeppelin/contracts/token/ERC20/utils/[email protected] pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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) { return a + b; } /** * @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 a - b; } /** * @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) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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 a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards 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). * * 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) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/access/[email protected] pragma solidity ^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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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/interfaces/IConsolidatedFund.sol pragma solidity 0.8.4; interface IConsolidatedFund { function balance(address _token) external view returns (uint256); function transferTo( address _token, address _receiver, uint256 _amount ) external; } // File contracts/MasterChef.sol pragma solidity >0.6.12; // MasterChef is the master of Sushi. He can make Sushi 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 STEEL is sufficiently // distributed and the community can show to govern itself. // // Have fun reading it. Hopefully it's bug-free. God bless. contract MasterChef is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; // 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 STEELs // entitled to a user but is pending to be distributed is: // // pending reward = (user.amount * pool.accSushiPerShare) - user.rewardDebt // // Whenever a user deposits or withdraws LP tokens to a pool. Here's what happens: // 1. The pool's `accSushiPerShare` (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 { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. STEELs to distribute per block. uint256 lastRewardBlock; // Last block number that STEELs distribution occurs. uint256 accRewardPerShare; // Accumulated STEELs per share, times 1e12. See below. } // The reward TOKEN! IERC20 public rewardToken; // reward tokens created per block. uint256 public rewardPerBlock; uint256 public BONUS_MULTIPLIER = 1; address public fund; // Info of each pool. PoolInfo[] public poolInfo; // Info of each user that stakes LP tokens. mapping(uint256 => mapping(address => UserInfo)) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block number when reward 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); constructor( IERC20 _rewardToken, address _fund, uint256 _rewardPerBlock, uint256 _startBlock ) { rewardToken = _rewardToken; rewardPerBlock = _rewardPerBlock; startBlock = _startBlock; fund = _fund; } function fundBalance() external view returns (uint256) { return IConsolidatedFund(fund).balance(address(rewardToken)); } 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, IERC20 _lpToken, bool _withUpdate ) public onlyOwner { if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push(PoolInfo({lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accRewardPerShare: 0})); } // Update the given pool's reward allocation point. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, bool _withUpdate ) public onlyOwner { if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; } function setfund(address _fund) external onlyOwner { require(_fund != address(0), "Invalid zero address"); fund = _fund; } // View function to see pending reward tokens on frontend. function pendingReward(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accRewardPerShare = pool.accRewardPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 addedReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint); accRewardPerShare = accRewardPerShare.add(addedReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt); } function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) { return _to.sub(_from).mul(BONUS_MULTIPLIER); } // Update reward vairables 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.lastRewardBlock = block.number; return; } uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 reward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint); pool.accRewardPerShare = pool.accRewardPerShare.add(reward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for reward token allocation. function deposit(uint256 _pid, uint256 _amount) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e12).sub(user.rewardDebt); safeRewardTransfer(msg.sender, pending); } pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12); emit Deposit(msg.sender, _pid, _amount); } // Withdraw LP tokens from MasterChef. function withdraw(uint256 _pid, uint256 _amount) public { 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.accRewardPerShare).div(1e12).sub(user.rewardDebt); safeRewardTransfer(msg.sender, pending); user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12); pool.lpToken.safeTransfer(address(msg.sender), _amount); emit Withdraw(msg.sender, _pid, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(uint256 _pid) public { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][msg.sender]; pool.lpToken.safeTransfer(address(msg.sender), user.amount); emit EmergencyWithdraw(msg.sender, _pid, user.amount); user.amount = 0; user.rewardDebt = 0; } // Safe rewward token transfer function, just in case if rounding error causes pool to not have enough reward tokens. function safeRewardTransfer(address _to, uint256 _amount) internal { IConsolidatedFund(fund).transferTo(address(rewardToken), _to, _amount); } function setRewardPerBlock(uint256 _rewardPerBlock) external onlyOwner { massUpdatePools(); rewardPerBlock = _rewardPerBlock; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_fund","type":"address"},{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"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":"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":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"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":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","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":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"}],"name":"setRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_fund","type":"address"}],"name":"setfund","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":[{"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
60806040526001600355600060075534801561001a57600080fd5b50604051611617380380611617833981016040819052610039916100b4565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039586166001600160a01b03199182161790915560029290925560085560048054929093169116179055610113565b600080600080608085870312156100c9578384fd5b84516100d4816100fb565b60208601519094506100e5816100fb565b6040860151606090960151949790965092505050565b6001600160a01b038116811461011057600080fd5b50565b6114f5806101226000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c357806398969e821161007c57806398969e82146102e0578063b60d4288146102f3578063bb872b4a14610306578063e2bbb15814610319578063f2fde38b1461032c578063f7c618c11461033f57600080fd5b8063715018a6146102475780638aa285501461024f5780638ae39cac146102585780638da5cb5b146102615780638dbb1e3a1461028657806393f1a40b1461029957600080fd5b806348cd4cb11161011557806348cd4cb1146101ea57806351eb05a6146101f35780635312ea8e14610206578063581f416614610219578063630b5ba11461022c57806364482f791461023457600080fd5b8063081e3eda1461015d5780631526fe271461017457806317caf6f1146101b15780631eaaa045146101ba5780633c067945146101cf578063441a3e70146101d7575b600080fd5b6005545b6040519081526020015b60405180910390f35b61018761018236600461125c565b610352565b604080516001600160a01b039095168552602085019390935291830152606082015260800161016b565b61016160075481565b6101cd6101c83660046112bb565b610396565b005b6101616104ec565b6101cd6101e53660046112fc565b610576565b61016160085481565b6101cd61020136600461125c565b6106d8565b6101cd61021436600461125c565b61081c565b6101cd610227366004611224565b6108cc565b6101cd610965565b6101cd61024236600461131d565b610990565b6101cd610a5b565b61016160035481565b61016160025481565b6000546001600160a01b03165b6040516001600160a01b03909116815260200161016b565b6101616102943660046112fc565b610acf565b6102cb6102a736600461128c565b60066020908152600092835260408084209091529082529020805460019091015482565b6040805192835260208301919091520161016b565b6101616102ee36600461128c565b610aea565b60045461026e906001600160a01b031681565b6101cd61031436600461125c565b610c64565b6101cd6103273660046112fc565b610c9b565b6101cd61033a366004611224565b610db4565b60015461026e906001600160a01b031681565b6005818154811061036257600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039092169350919084565b6000546001600160a01b031633146103c95760405162461bcd60e51b81526004016103c090611399565b60405180910390fd5b80156103d7576103d7610965565b600060085443116103ea576008546103ec565b435b6007549091506103fc9085610e9e565b600755604080516080810182526001600160a01b0394851681526020810195865290810191825260006060820181815260058054600181018255925291517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600490920291820180546001600160a01b031916919096161790945593517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1840155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db28301555090517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db390910155565b6004805460015460405163e3d670d760e01b81526001600160a01b039182169381019390935260009291169063e3d670d79060240160206040518083038186803b15801561053957600080fd5b505afa15801561054d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105719190611274565b905090565b60006005838154811061059957634e487b7160e01b600052603260045260246000fd5b6000918252602080832086845260068252604080852033865290925292208054600490920290920192508311156106075760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016103c0565b610610846106d8565b600061064a826001015461064464e8d4a5100061063e87600301548760000154610eaa90919063ffffffff16565b90610eb6565b90610ec2565b90506106563382610ece565b81546106629085610ec2565b808355600384015461067f9164e8d4a510009161063e9190610eaa565b6001830155825461069a906001600160a01b03163386610f44565b604051848152859033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050565b6000600582815481106106fb57634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020190508060020154431161071a575050565b80546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561075d57600080fd5b505afa158015610771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190611274565b9050806107a757504360029091015550565b60006107b7836002015443610acf565b905060006107e460075461063e86600101546107de60025487610eaa90919063ffffffff16565b90610eaa565b90506108076107fc8461063e8464e8d4a51000610eaa565b600386015490610e9e565b60038501555050436002909201919091555050565b60006005828154811061083f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320858452600682526040808520338087529352909320805460049093029093018054909450610884926001600160a01b03919091169190610f44565b8054604051908152839033907fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959060200160405180910390a360008082556001909101555050565b6000546001600160a01b031633146108f65760405162461bcd60e51b81526004016103c090611399565b6001600160a01b0381166109435760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207a65726f206164647265737360601b60448201526064016103c0565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60055460005b8181101561098c5761097c816106d8565b61098581611468565b905061096b565b5050565b6000546001600160a01b031633146109ba5760405162461bcd60e51b81526004016103c090611399565b80156109c8576109c8610965565b610a1982610a13600586815481106109f057634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160010154600754610ec290919063ffffffff16565b90610e9e565b6007819055508160058481548110610a4157634e487b7160e01b600052603260045260246000fd5b906000526020600020906004020160010181905550505050565b6000546001600160a01b03163314610a855760405162461bcd60e51b81526004016103c090611399565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600354600090610ae3906107de8486610ec2565b9392505050565b60008060058481548110610b0e57634e487b7160e01b600052603260045260246000fd5b600091825260208083208784526006825260408085206001600160a01b038981168752935280852060049485029092016003810154815492516370a0823160e01b8152309681019690965290965091949193919216906370a082319060240160206040518083038186803b158015610b8557600080fd5b505afa158015610b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd9190611274565b9050836002015443118015610bd157508015155b15610c31576000610be6856002015443610acf565b90506000610c0d60075461063e88600101546107de60025487610eaa90919063ffffffff16565b9050610c2c610c258461063e8464e8d4a51000610eaa565b8590610e9e565b935050505b610c59836001015461064464e8d4a5100061063e868860000154610eaa90919063ffffffff16565b979650505050505050565b6000546001600160a01b03163314610c8e5760405162461bcd60e51b81526004016103c090611399565b610c96610965565b600255565b600060058381548110610cbe57634e487b7160e01b600052603260045260246000fd5b60009182526020808320868452600682526040808520338652909252922060049091029091019150610cef846106d8565b805415610d32576000610d24826001015461064464e8d4a5100061063e87600301548760000154610eaa90919063ffffffff16565b9050610d303382610ece565b505b8154610d49906001600160a01b0316333086610fac565b8054610d559084610e9e565b8082556003830154610d729164e8d4a510009161063e9190610eaa565b6001820155604051838152849033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a350505050565b6000546001600160a01b03163314610dde5760405162461bcd60e51b81526004016103c090611399565b6001600160a01b038116610e435760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103c0565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ae382846113ce565b6000610ae38284611406565b6000610ae382846113e6565b6000610ae38284611425565b600480546001546040516352f950a960e11b81526001600160a01b0391821693810193909352848116602484015260448301849052169063a5f2a15290606401600060405180830381600087803b158015610f2857600080fd5b505af1158015610f3c573d6000803e3d6000fd5b505050505050565b6040516001600160a01b038316602482015260448101829052610fa790849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610fea565b505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610fe49085906323b872dd60e01b90608401610f70565b50505050565b600061103f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110bc9092919063ffffffff16565b805190915015610fa7578080602001905181019061105d9190611240565b610fa75760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103c0565b60606110cb84846000856110d3565b949350505050565b6060824710156111345760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103c0565b843b6111825760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103c0565b600080866001600160a01b0316858760405161119e919061134a565b60006040518083038185875af1925050503d80600081146111db576040519150601f19603f3d011682016040523d82523d6000602084013e6111e0565b606091505b5091509150610c59828286606083156111fa575081610ae3565b82511561120a5782518084602001fd5b8160405162461bcd60e51b81526004016103c09190611366565b600060208284031215611235578081fd5b8135610ae381611499565b600060208284031215611251578081fd5b8151610ae3816114b1565b60006020828403121561126d578081fd5b5035919050565b600060208284031215611285578081fd5b5051919050565b6000806040838503121561129e578081fd5b8235915060208301356112b081611499565b809150509250929050565b6000806000606084860312156112cf578081fd5b8335925060208401356112e181611499565b915060408401356112f1816114b1565b809150509250925092565b6000806040838503121561130e578182fd5b50508035926020909101359150565b600080600060608486031215611331578283fd5b833592506020840135915060408401356112f1816114b1565b6000825161135c81846020870161143c565b9190910192915050565b602081526000825180602084015261138581604085016020870161143c565b601f01601f19169190910160400192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156113e1576113e1611483565b500190565b60008261140157634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561142057611420611483565b500290565b60008282101561143757611437611483565b500390565b60005b8381101561145757818101518382015260200161143f565b83811115610fe45750506000910152565b600060001982141561147c5761147c611483565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146114ae57600080fd5b50565b80151581146114ae57600080fdfea2646970667358221220750b6eacba4877c7b3eecd801d58f7385ffbb687d60b49c834f2f105048097fc64736f6c63430008040033000000000000000000000000aaa5b9e6c589642f98a1cda99b9d024b8407285a000000000000000000000000e07f9242a58f59dc585eef0620ca88940aa862050000000000000000000000000000000000000000000000001ecddf7e894d14250000000000000000000000000000000000000000000000000000000000e5642e
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aaa5b9e6c589642f98a1cda99b9d024b8407285a000000000000000000000000e07f9242a58f59dc585eef0620ca88940aa862050000000000000000000000000000000000000000000000001ecddf7e894d14250000000000000000000000000000000000000000000000000000000000e5642e
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0xaaa5b9e6c589642f98a1cda99b9d024b8407285a
Arg [1] : _fund (address): 0xe07f9242a58f59dc585eef0620ca88940aa86205
Arg [2] : _rewardPerBlock (uint256): 2219675925925925925
Arg [3] : _startBlock (uint256): 15033390
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000aaa5b9e6c589642f98a1cda99b9d024b8407285a
Arg [1] : 000000000000000000000000e07f9242a58f59dc585eef0620ca88940aa86205
Arg [2] : 0000000000000000000000000000000000000000000000001ecddf7e894d1425
Arg [3] : 0000000000000000000000000000000000000000000000000000000000e5642e
Deployed ByteCode Sourcemap
26398:8302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29017:95;29089:8;:15;29017:95;;;7369:25:1;;;7357:2;7342:18;29017:95:0;;;;;;;;27968:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4022:32:1;;;4004:51;;4086:2;4071:18;;4064:34;;;;4114:18;;;4107:34;4172:2;4157:18;;4150:34;3991:3;3976:19;27968:26:0;3958:232:1;28209:34:0;;;;;;29281:486;;;;;;:::i;:::-;;:::i;:::-;;28875:134;;;:::i;33167:658::-;;;;;;:::i;:::-;;:::i;28302:25::-;;;;;;31693:683;;;;;;:::i;:::-;;:::i;33896:356::-;;;;;;:::i;:::-;;:::i;30211:145::-;;;;;;:::i;:::-;;:::i;31437:180::-;;;:::i;29865:338::-;;;;;;:::i;:::-;;:::i;25099:148::-;;;:::i;27873:35::-;;;;;;27837:29;;;;;;24448:87;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;24448:87;;;-1:-1:-1;;;;;2836:32:1;;;2818:51;;2806:2;2791:18;24448:87:0;2773:102:1;31211:143:0;;;;;;:::i;:::-;;:::i;28050:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7579:25:1;;;7635:2;7620:18;;7613:34;;;;7552:18;28050:64:0;7534:119:1;30428:775:0;;;;;;:::i;:::-;;:::i;27915:19::-;;;;;-1:-1:-1;;;;;27915:19:0;;;34547:150;;;;;;:::i;:::-;;:::i;32453:662::-;;;;;;:::i;:::-;;:::i;25402:244::-;;;;;;:::i;:::-;;:::i;27764:25::-;;;;;-1:-1:-1;;;;;27764:25:0;;;27968:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27968:26:0;;;;-1:-1:-1;27968:26:0;;;:::o;29281:486::-;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;23085:10;24668:23;24660:68;;;;-1:-1:-1;;;24660:68:0;;;;;;;:::i;:::-;;;;;;;;;29416:11:::1;29412:61;;;29444:17;:15;:17::i;:::-;29483:23;29524:10;;29509:12;:25;:53;;29552:10;;29509:53;;;29537:12;29509:53;29591:15;::::0;29483:79;;-1:-1:-1;29591:32:0::1;::::0;29611:11;29591:19:::1;:32::i;:::-;29573:15;:50:::0;29648:110:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;29648:110:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;29648:110:0;;;;;;29634:8:::1;:125:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;29634:125:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;-1:-1:-1;29634:125:0;;;;;;;29281:486::o;28875:134::-;28966:4;;;;28988:11;28948:53;;-1:-1:-1;;;28948:53:0;;-1:-1:-1;;;;;28988:11:0;;;28948:53;;;2818:51:1;;;;28921:7:0;;28966:4;;;28948:31;;2791:18:1;;28948:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28941:60;;28875:134;:::o;33167:658::-;33234:21;33258:8;33267:4;33258:14;;;;;;-1:-1:-1;;;33258:14:0;;;;;;;;;;;;;;;;;33307;;;:8;:14;;;;;;33322:10;33307:26;;;;;;;33352:11;;33258:14;;;;;;;;-1:-1:-1;33352:22:0;-1:-1:-1;33352:22:0;33344:53;;;;-1:-1:-1;;;33344:53:0;;6667:2:1;33344:53:0;;;6649:21:1;6706:2;6686:18;;;6679:30;-1:-1:-1;;;6725:18:1;;;6718:48;6783:18;;33344:53:0;6639:168:1;33344:53:0;33408:16;33419:4;33408:10;:16::i;:::-;33435:15;33453:70;33507:4;:15;;;33453:49;33497:4;33453:39;33469:4;:22;;;33453:4;:11;;;:15;;:39;;;;:::i;:::-;:43;;:49::i;:::-;:53;;:70::i;:::-;33435:88;;33534:39;33553:10;33565:7;33534:18;:39::i;:::-;33598:11;;:24;;33614:7;33598:15;:24::i;:::-;33584:38;;;33667:22;;;;33651:49;;33695:4;;33651:39;;33584:38;33651:15;:39::i;:49::-;33633:15;;;:67;33711:12;;:55;;-1:-1:-1;;;;;33711:12:0;33745:10;33758:7;33711:25;:55::i;:::-;33782:35;;7369:25:1;;;33803:4:0;;33791:10;;33782:35;;7357:2:1;7342:18;33782:35:0;;;;;;;33167:658;;;;;:::o;31693:683::-;31745:21;31769:8;31778:4;31769:14;;;;;;-1:-1:-1;;;31769:14:0;;;;;;;;;;;;;;;;;;;31745:38;;31814:4;:20;;;31798:12;:36;31794:75;;31851:7;31693:683;:::o;31794:75::-;31898:12;;:37;;-1:-1:-1;;;31898:37:0;;31929:4;31898:37;;;2818:51:1;31879:16:0;;-1:-1:-1;;;;;31898:12:0;;:22;;2791:18:1;;31898:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31879:56;-1:-1:-1;31950:13:0;31946:102;;-1:-1:-1;32003:12:0;31980:20;;;;:35;-1:-1:-1;31693:683:0:o;31946:102::-;32058:18;32079:49;32093:4;:20;;;32115:12;32079:13;:49::i;:::-;32058:70;;32139:14;32156:72;32212:15;;32156:51;32191:4;:15;;;32156:30;32171:14;;32156:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:72::-;32139:89;-1:-1:-1;32264:58:0;32291:30;32312:8;32291:16;32139:89;32302:4;32291:10;:16::i;:30::-;32264:22;;;;;:26;:58::i;:::-;32239:22;;;:83;-1:-1:-1;;32356:12:0;32333:20;;;;:35;;;;-1:-1:-1;;31693:683:0:o;33896:356::-;33955:21;33979:8;33988:4;33979:14;;;;;;-1:-1:-1;;;33979:14:0;;;;;;;;;;;;;;;;;34028;;;:8;:14;;;;;;34043:10;34028:26;;;;;;;;34112:11;;33979:14;;;;;;;34065:12;;33979:14;;-1:-1:-1;34065:59:0;;-1:-1:-1;;;;;34065:12:0;;;;;34043:10;34065:25;:59::i;:::-;34176:11;;34140:48;;7369:25:1;;;34170:4:0;;34158:10;;34140:48;;7357:2:1;7342:18;34140:48:0;;;;;;;34213:1;34199:15;;;34225;;;;:19;-1:-1:-1;;33896:356:0:o;30211:145::-;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;23085:10;24668:23;24660:68;;;;-1:-1:-1;;;24660:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30281:19:0;::::1;30273:52;;;::::0;-1:-1:-1;;;30273:52:0;;5192:2:1;30273:52:0::1;::::0;::::1;5174:21:1::0;5231:2;5211:18;;;5204:30;-1:-1:-1;;;5250:18:1;;;5243:50;5310:18;;30273:52:0::1;5164:170:1::0;30273:52:0::1;30336:4;:12:::0;;-1:-1:-1;;;;;;30336:12:0::1;-1:-1:-1::0;;;;;30336:12:0;;;::::1;::::0;;;::::1;::::0;;30211:145::o;31437:180::-;31499:8;:15;31482:14;31525:85;31553:6;31547:3;:12;31525:85;;;31583:15;31594:3;31583:10;:15::i;:::-;31561:5;;;:::i;:::-;;;31525:85;;;;31437:180;:::o;29865:338::-;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;23085:10;24668:23;24660:68;;;;-1:-1:-1;;;24660:68:0;;;;;;;:::i;:::-;29997:11:::1;29993:61;;;30025:17;:15;:17::i;:::-;30082:63;30133:11;30082:46;30102:8;30111:4;30102:14;;;;;;-1:-1:-1::0;;;30102:14:0::1;;;;;;;;;;;;;;;;;;;:25;;;30082:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;30064:15;:81;;;;30184:11;30156:8;30165:4;30156:14;;;;;;-1:-1:-1::0;;;30156:14:0::1;;;;;;;;;;;;;;;;;;;:25;;:39;;;;29865:338:::0;;;:::o;25099:148::-;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;23085:10;24668:23;24660:68;;;;-1:-1:-1;;;24660:68:0;;;;;;;:::i;:::-;25206:1:::1;25190:6:::0;;25169:40:::1;::::0;-1:-1:-1;;;;;25190:6:0;;::::1;::::0;25169:40:::1;::::0;25206:1;;25169:40:::1;25237:1;25220:19:::0;;-1:-1:-1;;;;;;25220:19:0::1;::::0;;25099:148::o;31211:143::-;31329:16;;31283:7;;31310:36;;:14;:3;31318:5;31310:7;:14::i;:36::-;31303:43;31211:143;-1:-1:-1;;;31211:143:0:o;30428:775::-;30503:7;30523:21;30547:8;30556:4;30547:14;;;;;;-1:-1:-1;;;30547:14:0;;;;;;;;;;;;;;;;;30596;;;:8;:14;;;;;;-1:-1:-1;;;;;30596:21:0;;;;;;;;;;30547:14;;;;;;;30656:22;;;;30708:12;;:37;;-1:-1:-1;;;30708:37:0;;30739:4;30708:37;;;2818:51:1;;;;30547:14:0;;-1:-1:-1;30596:21:0;;30656:22;;30547:14;;30708:12;;:22;;2791:18:1;;30708:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30689:56;;30775:4;:20;;;30760:12;:35;:52;;;;-1:-1:-1;30799:13:0;;;30760:52;30756:357;;;30829:18;30850:49;30864:4;:20;;;30886:12;30850:13;:49::i;:::-;30829:70;;30914:19;30936:72;30992:15;;30936:51;30971:4;:15;;;30936:30;30951:14;;30936:10;:14;;:30;;;;:::i;:72::-;30914:94;-1:-1:-1;31043:58:0;31065:35;31091:8;31065:21;30914:94;31081:4;31065:15;:21::i;:35::-;31043:17;;:21;:58::i;:::-;31023:78;;30756:357;;;31130:65;31179:4;:15;;;31130:44;31169:4;31130:34;31146:17;31130:4;:11;;;:15;;:34;;;;:::i;:65::-;31123:72;30428:775;-1:-1:-1;;;;;;;30428:775:0:o;34547:150::-;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;23085:10;24668:23;24660:68;;;;-1:-1:-1;;;24660:68:0;;;;;;;:::i;:::-;34629:17:::1;:15;:17::i;:::-;34657:14;:32:::0;34547:150::o;32453:662::-;32519:21;32543:8;32552:4;32543:14;;;;;;-1:-1:-1;;;32543:14:0;;;;;;;;;;;;;;;;;32592;;;:8;:14;;;;;;32607:10;32592:26;;;;;;;32543:14;;;;;;;;-1:-1:-1;32629:16:0;32601:4;32629:10;:16::i;:::-;32660:11;;:15;32656:190;;32692:15;32710:70;32764:4;:15;;;32710:49;32754:4;32710:39;32726:4;:22;;;32710:4;:11;;;:15;;:39;;;;:::i;:70::-;32692:88;;32795:39;32814:10;32826:7;32795:18;:39::i;:::-;32656:190;;32856:12;;:74;;-1:-1:-1;;;;;32856:12:0;32894:10;32915:4;32922:7;32856:29;:74::i;:::-;32955:11;;:24;;32971:7;32955:15;:24::i;:::-;32941:38;;;33024:22;;;;33008:49;;33052:4;;33008:39;;32941:38;33008:15;:39::i;:49::-;32990:15;;;:67;33073:34;;7369:25:1;;;33093:4:0;;33081:10;;33073:34;;7357:2:1;7342:18;33073:34:0;;;;;;;32453:662;;;;:::o;25402:244::-;24494:7;24521:6;-1:-1:-1;;;;;24521:6:0;23085:10;24668:23;24660:68;;;;-1:-1:-1;;;24660:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25491:22:0;::::1;25483:73;;;::::0;-1:-1:-1;;;25483:73:0;;4785:2:1;25483:73:0::1;::::0;::::1;4767:21:1::0;4824:2;4804:18;;;4797:30;4863:34;4843:18;;;4836:62;-1:-1:-1;;;4914:18:1;;;4907:36;4960:19;;25483:73:0::1;4757:228:1::0;25483:73:0::1;25593:6;::::0;;25572:38:::1;::::0;-1:-1:-1;;;;;25572:38:0;;::::1;::::0;25593:6;::::1;::::0;25572:38:::1;::::0;::::1;25621:6;:17:::0;;-1:-1:-1;;;;;;25621:17:0::1;-1:-1:-1::0;;;;;25621:17:0;;;::::1;::::0;;;::::1;::::0;;25402:244::o;17987:98::-;18045:7;18072:5;18076:1;18072;:5;:::i;18725:98::-;18783:7;18810:5;18814:1;18810;:5;:::i;19124:98::-;19182:7;19209:5;19213:1;19209;:5;:::i;18368:98::-;18426:7;18453:5;18457:1;18453;:5;:::i;34383:156::-;34479:4;;;;34504:11;34461:70;;-1:-1:-1;;;34461:70:0;;-1:-1:-1;;;;;34504:11:0;;;34461:70;;;3120:34:1;;;;3190:15;;;3170:18;;;3163:43;3222:18;;;3215:34;;;34479:4:0;;34461:34;;3055:18:1;;34461:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34383:156;;:::o;11822:211::-;11966:58;;-1:-1:-1;;;;;3452:32:1;;11966:58:0;;;3434:51:1;3501:18;;;3494:34;;;11939:86:0;;11959:5;;-1:-1:-1;;;11989:23:0;3407:18:1;;11966:58:0;;;;-1:-1:-1;;11966:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;11966:58:0;-1:-1:-1;;;;;;11966:58:0;;;;;;;;;;11939:19;:86::i;:::-;11822:211;;;:::o;12041:248::-;12212:68;;-1:-1:-1;;;;;3138:15:1;;;12212:68:0;;;3120:34:1;3190:15;;3170:18;;;3163:43;3222:18;;;3215:34;;;12185:96:0;;12205:5;;-1:-1:-1;;;12235:27:0;3055:18:1;;12212:68:0;3037:218:1;12185:96:0;12041:248;;;;:::o;14412:774::-;14836:23;14862:69;14890:4;14862:69;;;;;;;;;;;;;;;;;14870:5;-1:-1:-1;;;;;14862:27:0;;;:69;;;;;:::i;:::-;14946:17;;14836:95;;-1:-1:-1;14946:21:0;14942:237;;15101:10;15090:30;;;;;;;;;;;;:::i;:::-;15082:85;;;;-1:-1:-1;;;15082:85:0;;7014:2:1;15082:85:0;;;6996:21:1;7053:2;7033:18;;;7026:30;7092:34;7072:18;;;7065:62;-1:-1:-1;;;7143:18:1;;;7136:40;7193:19;;15082:85:0;6986:232:1;6642:229:0;6779:12;6811:52;6833:6;6841:4;6847:1;6850:12;6811:21;:52::i;:::-;6804:59;6642:229;-1:-1:-1;;;;6642:229:0:o;7762:571::-;7932:12;7990:5;7965:21;:30;;7957:81;;;;-1:-1:-1;;;7957:81:0;;5541:2:1;7957:81:0;;;5523:21:1;5580:2;5560:18;;;5553:30;5619:34;5599:18;;;5592:62;-1:-1:-1;;;5670:18:1;;;5663:36;5716:19;;7957:81:0;5513:228:1;7957:81:0;4082:20;;8049:60;;;;-1:-1:-1;;;8049:60:0;;6309:2:1;8049:60:0;;;6291:21:1;6348:2;6328:18;;;6321:30;6387:31;6367:18;;;6360:59;6436:18;;8049:60:0;6281:179:1;8049:60:0;8183:12;8197:23;8224:6;-1:-1:-1;;;;;8224:11:0;8243:5;8250:4;8224:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8182:73;;;;8273:52;8291:7;8300:10;8312:12;10561;10590:7;10586:595;;;-1:-1:-1;10621:10:0;10614:17;;10586:595;10735:17;;:21;10731:439;;10998:10;10992:17;11059:15;11046:10;11042:2;11038:19;11031:44;10946:148;11141:12;11134:20;;-1:-1:-1;;;11134:20:0;;;;;;;;:::i;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:255::-;343:6;396:2;384:9;375:7;371:23;367:32;364:2;;;417:6;409;402:22;364:2;454:9;448:16;473:28;495:5;473:28;:::i;536:190::-;595:6;648:2;636:9;627:7;623:23;619:32;616:2;;;669:6;661;654:22;616:2;-1:-1:-1;697:23:1;;606:120;-1:-1:-1;606:120:1:o;731:194::-;801:6;854:2;842:9;833:7;829:23;825:32;822:2;;;875:6;867;860:22;822:2;-1:-1:-1;903:16:1;;812:113;-1:-1:-1;812:113:1:o;930:325::-;998:6;1006;1059:2;1047:9;1038:7;1034:23;1030:32;1027:2;;;1080:6;1072;1065:22;1027:2;1121:9;1108:23;1098:33;;1181:2;1170:9;1166:18;1153:32;1194:31;1219:5;1194:31;:::i;:::-;1244:5;1234:15;;;1017:238;;;;;:::o;1260:473::-;1347:6;1355;1363;1416:2;1404:9;1395:7;1391:23;1387:32;1384:2;;;1437:6;1429;1422:22;1384:2;1478:9;1465:23;1455:33;;1538:2;1527:9;1523:18;1510:32;1551:31;1576:5;1551:31;:::i;:::-;1601:5;-1:-1:-1;1658:2:1;1643:18;;1630:32;1671:30;1630:32;1671:30;:::i;:::-;1720:7;1710:17;;;1374:359;;;;;:::o;1738:258::-;1806:6;1814;1867:2;1855:9;1846:7;1842:23;1838:32;1835:2;;;1888:6;1880;1873:22;1835:2;-1:-1:-1;;1916:23:1;;;1986:2;1971:18;;;1958:32;;-1:-1:-1;1825:171:1:o;2001:387::-;2075:6;2083;2091;2144:2;2132:9;2123:7;2119:23;2115:32;2112:2;;;2165:6;2157;2150:22;2112:2;2206:9;2193:23;2183:33;;2263:2;2252:9;2248:18;2235:32;2225:42;;2317:2;2306:9;2302:18;2289:32;2330:28;2352:5;2330:28;:::i;2393:274::-;2522:3;2560:6;2554:13;2576:53;2622:6;2617:3;2610:4;2602:6;2598:17;2576:53;:::i;:::-;2645:16;;;;;2530:137;-1:-1:-1;;2530:137:1:o;4195:383::-;4344:2;4333:9;4326:21;4307:4;4376:6;4370:13;4419:6;4414:2;4403:9;4399:18;4392:34;4435:66;4494:6;4489:2;4478:9;4474:18;4469:2;4461:6;4457:15;4435:66;:::i;:::-;4562:2;4541:15;-1:-1:-1;;4537:29:1;4522:45;;;;4569:2;4518:54;;4316:262;-1:-1:-1;;4316:262:1:o;5746:356::-;5948:2;5930:21;;;5967:18;;;5960:30;6026:34;6021:2;6006:18;;5999:62;6093:2;6078:18;;5920:182::o;7658:128::-;7698:3;7729:1;7725:6;7722:1;7719:13;7716:2;;;7735:18;;:::i;:::-;-1:-1:-1;7771:9:1;;7706:80::o;7791:217::-;7831:1;7857;7847:2;;-1:-1:-1;;;7882:31:1;;7936:4;7933:1;7926:15;7964:4;7889:1;7954:15;7847:2;-1:-1:-1;7993:9:1;;7837:171::o;8013:168::-;8053:7;8119:1;8115;8111:6;8107:14;8104:1;8101:21;8096:1;8089:9;8082:17;8078:45;8075:2;;;8126:18;;:::i;:::-;-1:-1:-1;8166:9:1;;8065:116::o;8186:125::-;8226:4;8254:1;8251;8248:8;8245:2;;;8259:18;;:::i;:::-;-1:-1:-1;8296:9:1;;8235:76::o;8316:258::-;8388:1;8398:113;8412:6;8409:1;8406:13;8398:113;;;8488:11;;;8482:18;8469:11;;;8462:39;8434:2;8427:10;8398:113;;;8529:6;8526:1;8523:13;8520:2;;;-1:-1:-1;;8564:1:1;8546:16;;8539:27;8369:205::o;8579:135::-;8618:3;-1:-1:-1;;8639:17:1;;8636:2;;;8659:18;;:::i;:::-;-1:-1:-1;8706:1:1;8695:13;;8626:88::o;8719:127::-;8780:10;8775:3;8771:20;8768:1;8761:31;8811:4;8808:1;8801:15;8835:4;8832:1;8825:15;8851:131;-1:-1:-1;;;;;8926:31:1;;8916:42;;8906:2;;8972:1;8969;8962:12;8906:2;8896:86;:::o;8987:118::-;9073:5;9066:13;9059:21;9052:5;9049:32;9039:2;;9095:1;9092;9085:12
Swarm Source
ipfs://750b6eacba4877c7b3eecd801d58f7385ffbb687d60b49c834f2f105048097fc
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.