More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 182 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Recover ERC20 | 15101805 | 752 days ago | IN | 0 ETH | 0.00116099 | ||||
Deposit | 15101666 | 752 days ago | IN | 0 ETH | 0.00149086 | ||||
Recover ERC20 | 15101626 | 752 days ago | IN | 0 ETH | 0.00075863 | ||||
Withdraw | 14343028 | 874 days ago | IN | 0 ETH | 0.00462709 | ||||
Deposit | 14343025 | 874 days ago | IN | 0 ETH | 0.00741689 | ||||
Withdraw | 14342971 | 874 days ago | IN | 0 ETH | 0.0056208 | ||||
Deposit | 14342965 | 874 days ago | IN | 0 ETH | 0.00885436 | ||||
Withdraw | 14042024 | 921 days ago | IN | 0 ETH | 0.00693132 | ||||
Withdraw | 14014315 | 925 days ago | IN | 0 ETH | 0.00274447 | ||||
Withdraw | 14014285 | 925 days ago | IN | 0 ETH | 0.01243808 | ||||
Withdraw | 13963325 | 933 days ago | IN | 0 ETH | 0.00779837 | ||||
Deposit | 13919576 | 940 days ago | IN | 0 ETH | 0.0062998 | ||||
Withdraw | 13906139 | 942 days ago | IN | 0 ETH | 0.01028517 | ||||
Deposit | 13905437 | 942 days ago | IN | 0 ETH | 0.01316511 | ||||
Withdraw | 13904737 | 942 days ago | IN | 0 ETH | 0.01113153 | ||||
Withdraw | 13884926 | 945 days ago | IN | 0 ETH | 0.00878979 | ||||
Deposit | 13884915 | 945 days ago | IN | 0 ETH | 0.00839276 | ||||
Deposit | 13879933 | 946 days ago | IN | 0 ETH | 0.00515369 | ||||
Withdraw | 13879789 | 946 days ago | IN | 0 ETH | 0.005859 | ||||
Deposit | 13879784 | 946 days ago | IN | 0 ETH | 0.00596705 | ||||
Withdraw | 13879588 | 946 days ago | IN | 0 ETH | 0.00504249 | ||||
Deposit | 13879583 | 946 days ago | IN | 0 ETH | 0.00680135 | ||||
Deposit | 13873838 | 947 days ago | IN | 0 ETH | 0.00446221 | ||||
Withdraw | 13858982 | 949 days ago | IN | 0 ETH | 0.00729726 | ||||
Withdraw | 13826897 | 954 days ago | IN | 0 ETH | 0.0085021 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MasterChef
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-28 */ pragma solidity ^0.6.0; // SPDX-License-Identifier: MIT /* * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @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); } /** * @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; } } /** * @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 in 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"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } interface IRewardTreasuryV2 { function allocateReward(uint256 _amount) external returns(uint256); } // 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 SUSHI 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 SUSHIs // 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. SUSHIs to distribute per block. uint256 lastRewardBlock; // Last block number that SUSHIs distribution occurs. uint256 accSushiPerShare; // Accumulated SUSHIs per share, times 1e12. See below. uint256 contributionRate; address contributionAddr; } // The SUSHI TOKEN! IERC20 public rewardToken; // SUSHI tokens created per block. uint256 public rewardPerBlock; // The Reward Treasury IRewardTreasuryV2 public rewardTreasury; // 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 SUSHI mining starts. uint256 public startBlock; uint256 public rateBase = 10000; 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, IRewardTreasuryV2 _treasury, uint256 _rewardPerBlock, uint256 _startBlock ) public { rewardToken = _rewardToken; rewardTreasury = _treasury; rewardPerBlock = _rewardPerBlock; startBlock = _startBlock; } function poolLength() external view returns (uint256) { return poolInfo.length; } function setRewardPerBlock(uint256 _rewardPerBlock, bool _withUpdate) external onlyOwner { if (_withUpdate) { massUpdatePools(); } rewardPerBlock = _rewardPerBlock; } // 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, uint256 _cbRate, address _cbAddr, bool _withUpdate ) public onlyOwner { require(_cbRate <= rateBase, "invalid contribute rate"); require(!(_cbRate > 0 && _cbAddr == address(0)), "can't contribute to zero address"); if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > startBlock ? block.number : startBlock; totalAllocPoint = totalAllocPoint.add(_allocPoint); poolInfo.push( PoolInfo({ lpToken: _lpToken, allocPoint: _allocPoint, lastRewardBlock: lastRewardBlock, accSushiPerShare: 0, contributionRate: _cbRate, contributionAddr: _cbAddr }) ); } // Update the given pool's SUSHI allocation point. Can only be called by the owner. function set( uint256 _pid, uint256 _allocPoint, uint256 _cbRate, address _cbAddr, bool _withUpdate ) public onlyOwner { require(_cbRate <= rateBase, "invalid contribute rate"); require(!(_cbRate > 0 && _cbAddr == address(0)), "can't contribute to zero address"); if (_withUpdate) { massUpdatePools(); } totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint; poolInfo[_pid].contributionRate = _cbRate; poolInfo[_pid].contributionAddr = _cbAddr; } function migrate(address[] calldata accounts, uint256[] calldata amounts) external onlyOwner { require(accounts.length == amounts.length); PoolInfo memory pool = poolInfo[0]; for(uint256 i=0; i<accounts.length; i++) { UserInfo storage user = userInfo[0][accounts[i]]; pool.lpToken.safeTransferFrom(address(msg.sender), address(this), amounts[i]); user.amount = user.amount.add(amounts[i]); } } // Return reward multiplier over the given _from to _to block. function getMultiplier(uint256 _from, uint256 _to) public pure returns (uint256) { return _to.sub(_from); } // View function to see pending SUSHIs on frontend. function pendingSushi(uint256 _pid, address _user) external view returns (uint256) { PoolInfo storage pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accSushiPerShare = pool.accSushiPerShare; uint256 lpSupply = pool.lpToken.balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply != 0) { uint256 multiplier = getMultiplier(pool.lastRewardBlock, block.number); uint256 sushiReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint); uint256 remainingReward = rewardToken.balanceOf(address(rewardTreasury)); if (remainingReward < sushiReward) { sushiReward = remainingReward; } accSushiPerShare = accSushiPerShare.add(sushiReward.mul(1e12).div(lpSupply)); } return user.amount.mul(accSushiPerShare).div(1e12).sub(user.rewardDebt); } // 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 sushiReward = multiplier.mul(rewardPerBlock).mul(pool.allocPoint).div(totalAllocPoint); uint256 remainingReward = rewardToken.balanceOf(address(rewardTreasury)); if (remainingReward < sushiReward) { sushiReward = remainingReward; } rewardTreasury.allocateReward(sushiReward); pool.accSushiPerShare = pool.accSushiPerShare.add(sushiReward.mul(1e12).div(lpSupply)); pool.lastRewardBlock = block.number; } // Deposit LP tokens to MasterChef for SUSHI 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.accSushiPerShare).div(1e12).sub(user.rewardDebt); safeSushiTransfer(msg.sender, pending); } if (pool.contributionRate > 0) { uint256 contributeAmount = _amount.mul(pool.contributionRate).div(rateBase); pool.lpToken.safeTransferFrom(address(msg.sender), address(pool.contributionAddr), contributeAmount); _amount = _amount.sub(contributeAmount); } pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); user.rewardDebt = user.amount.mul(pool.accSushiPerShare).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.accSushiPerShare).div(1e12).sub(user.rewardDebt); safeSushiTransfer(msg.sender, pending); user.amount = user.amount.sub(_amount); user.rewardDebt = user.amount.mul(pool.accSushiPerShare).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 sushi transfer function, just in case if rounding error causes pool to not have enough SUSHIs. function safeSushiTransfer(address _to, uint256 _amount) internal { uint256 sushiBal = rewardToken.balanceOf(address(this)); if (_amount > sushiBal) { rewardToken.transfer(_to, sushiBal); } else { rewardToken.transfer(_to, _amount); } } function recoverERC20(address _token, uint256 _amount) external onlyOwner { IERC20(_token).safeTransfer(msg.sender, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"contract IRewardTreasuryV2","name":"_treasury","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":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"uint256","name":"_cbRate","type":"uint256"},{"internalType":"address","name":"_cbAddr","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":[{"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":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"migrate","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":"pendingSushi","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":"accSushiPerShare","type":"uint256"},{"internalType":"uint256","name":"contributionRate","type":"uint256"},{"internalType":"address","name":"contributionAddr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rateBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","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":[],"name":"rewardTreasury","outputs":[{"internalType":"contract IRewardTreasuryV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"uint256","name":"_cbRate","type":"uint256"},{"internalType":"address","name":"_cbAddr","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardPerBlock","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setRewardPerBlock","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
6080604052600060065561271060085534801561001b57600080fd5b50604051611ee5380380611ee58339818101604052608081101561003e57600080fd5b5080516020820151604083015160609093015191929091600061005f6100e7565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039586166001600160a01b03199182161790915560038054949095169316929092179092556002919091556007556100eb565b3390565b611deb806100fa6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80637f43d74f116100c357806393f1a40b1161007c57806393f1a40b146103aa578063c7c934a1146103ef578063de01e151146103f7578063e2bbb158146104b9578063f2fde38b146104dc578063f7c618c11461050257610158565b80637f43d74f146102ca57806381505c051461030a5780638980f11f1461032f5780638ae39cac1461035b5780638da5cb5b146103635780638dbb1e3a1461038757610158565b8063441a3e7011610115578063441a3e701461025557806348cd4cb11461027857806351eb05a6146102805780635312ea8e1461029d578063630b5ba1146102ba578063715018a6146102c257610158565b8063014e95ba1461015d578063081e3eda146101775780631526fe271461017f57806317caf6f1146101dd578063195426ec146101e55780632a2cadfa14610211575b600080fd5b61016561050a565b60408051918252519081900360200190f35b610165610510565b61019c6004803603602081101561019557600080fd5b5035610516565b604080516001600160a01b0397881681526020810196909652858101949094526060850192909252608084015290921660a082015290519081900360c00190f35b610165610566565b610165600480360360408110156101fb57600080fd5b50803590602001356001600160a01b031661056c565b610253600480360360a081101561022757600080fd5b508035906001600160a01b0360208201358116916040810135916060820135169060800135151561076d565b005b6102536004803603604081101561026b57600080fd5b5080359060200135610a0b565b610165610b52565b6102536004803603602081101561029657600080fd5b5035610b58565b610253600480360360208110156102b357600080fd5b5035610d8c565b610253610e27565b610253610e4a565b610253600480360360a08110156102e057600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001351515610eec565b6102536004803603604081101561032057600080fd5b508035906020013515156110df565b6102536004803603604081101561034557600080fd5b506001600160a01b03813516906020013561114b565b6101656111b7565b61036b6111bd565b604080516001600160a01b039092168252519081900360200190f35b6101656004803603604081101561039d57600080fd5b50803590602001356111cc565b6103d6600480360360408110156103c057600080fd5b50803590602001356001600160a01b03166111df565b6040805192835260208301919091528051918290030190f35b61036b611203565b6102536004803603604081101561040d57600080fd5b81019060208101813564010000000081111561042857600080fd5b82018360208201111561043a57600080fd5b8035906020019184602083028401116401000000008311171561045c57600080fd5b91939092909160208101903564010000000081111561047a57600080fd5b82018360208201111561048c57600080fd5b803590602001918460208302840111640100000000831117156104ae57600080fd5b509092509050611212565b610253600480360360408110156104cf57600080fd5b50803590602001356113c1565b610253600480360360208110156104f257600080fd5b50356001600160a01b0316611520565b61036b611618565b60085481565b60045490565b6004818154811061052357fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0394851696509294919390921686565b60065481565b6000806004848154811061057c57fe5b600091825260208083208784526005825260408085206001600160a01b0389811687529084528186206006959095029092016003810154815483516370a0823160e01b815230600482015293519298509596909590949316926370a082319260248082019391829003018186803b1580156105f657600080fd5b505afa15801561060a573d6000803e3d6000fd5b505050506040513d602081101561062057600080fd5b505160028501549091504311801561063757508015155b1561073257600061064c8560020154436111cc565b9050600061067f60065461067988600101546106736002548761162790919063ffffffff16565b90611627565b90611680565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b1580156106d557600080fd5b505afa1580156106e9573d6000803e3d6000fd5b505050506040513d60208110156106ff57600080fd5b505190508181101561070f578091505b61072c610725856106798564e8d4a51000611627565b86906116c2565b94505050505b610760836001015461075a64e8d4a5100061067986886000015461162790919063ffffffff16565b9061171c565b9450505050505b92915050565b61077561175e565b6000546001600160a01b039081169116146107c5576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b600854831115610816576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b60008311801561082d57506001600160a01b038216155b1561087f576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b801561088d5761088d610e27565b600060075443116108a0576007546108a2565b435b6006549091506108b290876116c2565b60069081556040805160c0810182526001600160a01b039788168152602081019889529081019283526000606082018181526080830197885295881660a08301908152600480546001810182559252915192027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180549389166001600160a01b031994851617905597517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c89015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d88015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e87015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8601555090517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a09093018054939092169216919091179055565b600060048381548110610a1a57fe5b600091825260208083208684526005825260408085203386529092529220805460069092029092019250831115610a8d576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b610a9684610b58565b6000610ac4826001015461075a64e8d4a510006106798760030154876000015461162790919063ffffffff16565b9050610ad03382611762565b8154610adc908561171c565b8083556003840154610af99164e8d4a51000916106799190611627565b60018301558254610b14906001600160a01b031633866118f3565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b60075481565b600060048281548110610b6757fe5b9060005260206000209060060201905080600201544311610b885750610d89565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d6020811015610bfc57600080fd5b5051905080610c12575043600290910155610d89565b6000610c228360020154436111cc565b90506000610c4960065461067986600101546106736002548761162790919063ffffffff16565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b158015610c9f57600080fd5b505afa158015610cb3573d6000803e3d6000fd5b505050506040513d6020811015610cc957600080fd5b5051905081811015610cd9578091505b6003546040805163716e5b0b60e11b81526004810185905290516001600160a01b039092169163e2dcb616916024808201926020929091908290030181600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b50610d759050610d6a856106798564e8d4a51000611627565b6003870154906116c2565b600386015550504360029093019290925550505b50565b600060048281548110610d9b57fe5b60009182526020808320858452600582526040808520338087529352909320805460069093029093018054909450610de0926001600160a01b039190911691906118f3565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a360008082556001909101555050565b60045460005b81811015610e4657610e3e81610b58565b600101610e2d565b5050565b610e5261175e565b6000546001600160a01b03908116911614610ea2576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610ef461175e565b6000546001600160a01b03908116911614610f44576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b600854831115610f95576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b600083118015610fac57506001600160a01b038216155b15610ffe576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b801561100c5761100c610e27565b611049846110436004888154811061102057fe5b90600052602060002090600602016001015460065461171c90919063ffffffff16565b906116c2565b600681905550836004868154811061105d57fe5b906000526020600020906006020160010181905550826004868154811061108057fe5b90600052602060002090600602016004018190555081600486815481106110a357fe5b906000526020600020906006020160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050565b6110e761175e565b6000546001600160a01b03908116911614611137576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b801561114557611145610e27565b50600255565b61115361175e565b6000546001600160a01b039081169116146111a3576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b610e466001600160a01b03831633836118f3565b60025481565b6000546001600160a01b031690565b60006111d8828461171c565b9392505050565b60056020908152600092835260408084209091529082529020805460019091015482565b6003546001600160a01b031681565b61121a61175e565b6000546001600160a01b0390811691161461126a576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b82811461127657600080fd5b61127e611cdc565b600460008154811061128c57fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b0390811685526001820154938501939093526002810154918401919091526003810154606084015260048101546080840152600501541660a082015291505b848110156113b957600080805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8188888581811061133057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020905061138f333087878681811061137357fe5b88516001600160a01b0316949392602090910201359050611945565b6113af85858481811061139e57fe5b8454926020909102013590506116c2565b90556001016112f0565b505050505050565b6000600483815481106113d057fe5b6000918252602080832086845260058252604080852033865290925292206006909102909101915061140184610b58565b805415611444576000611436826001015461075a64e8d4a510006106798760030154876000015461162790919063ffffffff16565b90506114423382611762565b505b60048201541561149e57600061146d60085461067985600401548761162790919063ffffffff16565b60058401548454919250611490916001600160a01b039081169133911684611945565b61149a848261171c565b9350505b81546114b5906001600160a01b0316333086611945565b80546114c190846116c2565b80825560038301546114de9164e8d4a51000916106799190611627565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b61152861175e565b6000546001600160a01b03908116911614611578576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b6001600160a01b0381166115bd5760405162461bcd60e51b8152600401808060200182810382526026815260200180611d256026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b60008261163657506000610767565b8282028284828161164357fe5b04146111d85760405162461bcd60e51b8152600401808060200182810382526021815260200180611d4b6021913960400191505060405180910390fd5b60006111d883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119a5565b6000828201838110156111d8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006111d883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a47565b3390565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d60208110156117d757600080fd5b505190508082111561186b576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561183957600080fd5b505af115801561184d573d6000803e3d6000fd5b505050506040513d602081101561186357600080fd5b506118ee9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050506040513d60208110156118eb57600080fd5b50505b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526118ee908490611aa1565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261199f908590611aa1565b50505050565b60008183611a315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f65781810151838201526020016119de565b50505050905090810190601f168015611a235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611a3d57fe5b0495945050505050565b60008184841115611a995760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f65781810151838201526020016119de565b505050900390565b6060611af6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b529092919063ffffffff16565b8051909150156118ee57808060200190516020811015611b1557600080fd5b50516118ee5760405162461bcd60e51b815260040180806020018281038252602a815260200180611d8c602a913960400191505060405180910390fd5b6060611b618484600085611b69565b949350505050565b6060611b7485611cd6565b611bc5576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611c045780518252601f199092019160209182019101611be5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c66576040519150601f19603f3d011682016040523d82523d6000602084013e611c6b565b606091505b50915091508115611c7f579150611b619050565b805115611c8f5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156119f65781810151838201526020016119de565b3b151590565b6040518060c0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212205e86a4109bf3b37298a8fe9e4cb7f1a1f9f655f52c1aa4c39a87d035dec7dc6564736f6c634300060c0033000000000000000000000000a56ed2632e443db5f93e73c89df399a081408cc40000000000000000000000009a555c7f5bb31decd4b7cb038abc468b0c491476000000000000000000000000000000000000000000000000001aa535d3d0c0000000000000000000000000000000000000000000000000000000000000bf16c0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80637f43d74f116100c357806393f1a40b1161007c57806393f1a40b146103aa578063c7c934a1146103ef578063de01e151146103f7578063e2bbb158146104b9578063f2fde38b146104dc578063f7c618c11461050257610158565b80637f43d74f146102ca57806381505c051461030a5780638980f11f1461032f5780638ae39cac1461035b5780638da5cb5b146103635780638dbb1e3a1461038757610158565b8063441a3e7011610115578063441a3e701461025557806348cd4cb11461027857806351eb05a6146102805780635312ea8e1461029d578063630b5ba1146102ba578063715018a6146102c257610158565b8063014e95ba1461015d578063081e3eda146101775780631526fe271461017f57806317caf6f1146101dd578063195426ec146101e55780632a2cadfa14610211575b600080fd5b61016561050a565b60408051918252519081900360200190f35b610165610510565b61019c6004803603602081101561019557600080fd5b5035610516565b604080516001600160a01b0397881681526020810196909652858101949094526060850192909252608084015290921660a082015290519081900360c00190f35b610165610566565b610165600480360360408110156101fb57600080fd5b50803590602001356001600160a01b031661056c565b610253600480360360a081101561022757600080fd5b508035906001600160a01b0360208201358116916040810135916060820135169060800135151561076d565b005b6102536004803603604081101561026b57600080fd5b5080359060200135610a0b565b610165610b52565b6102536004803603602081101561029657600080fd5b5035610b58565b610253600480360360208110156102b357600080fd5b5035610d8c565b610253610e27565b610253610e4a565b610253600480360360a08110156102e057600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001351515610eec565b6102536004803603604081101561032057600080fd5b508035906020013515156110df565b6102536004803603604081101561034557600080fd5b506001600160a01b03813516906020013561114b565b6101656111b7565b61036b6111bd565b604080516001600160a01b039092168252519081900360200190f35b6101656004803603604081101561039d57600080fd5b50803590602001356111cc565b6103d6600480360360408110156103c057600080fd5b50803590602001356001600160a01b03166111df565b6040805192835260208301919091528051918290030190f35b61036b611203565b6102536004803603604081101561040d57600080fd5b81019060208101813564010000000081111561042857600080fd5b82018360208201111561043a57600080fd5b8035906020019184602083028401116401000000008311171561045c57600080fd5b91939092909160208101903564010000000081111561047a57600080fd5b82018360208201111561048c57600080fd5b803590602001918460208302840111640100000000831117156104ae57600080fd5b509092509050611212565b610253600480360360408110156104cf57600080fd5b50803590602001356113c1565b610253600480360360208110156104f257600080fd5b50356001600160a01b0316611520565b61036b611618565b60085481565b60045490565b6004818154811061052357fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0394851696509294919390921686565b60065481565b6000806004848154811061057c57fe5b600091825260208083208784526005825260408085206001600160a01b0389811687529084528186206006959095029092016003810154815483516370a0823160e01b815230600482015293519298509596909590949316926370a082319260248082019391829003018186803b1580156105f657600080fd5b505afa15801561060a573d6000803e3d6000fd5b505050506040513d602081101561062057600080fd5b505160028501549091504311801561063757508015155b1561073257600061064c8560020154436111cc565b9050600061067f60065461067988600101546106736002548761162790919063ffffffff16565b90611627565b90611680565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b1580156106d557600080fd5b505afa1580156106e9573d6000803e3d6000fd5b505050506040513d60208110156106ff57600080fd5b505190508181101561070f578091505b61072c610725856106798564e8d4a51000611627565b86906116c2565b94505050505b610760836001015461075a64e8d4a5100061067986886000015461162790919063ffffffff16565b9061171c565b9450505050505b92915050565b61077561175e565b6000546001600160a01b039081169116146107c5576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b600854831115610816576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b60008311801561082d57506001600160a01b038216155b1561087f576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b801561088d5761088d610e27565b600060075443116108a0576007546108a2565b435b6006549091506108b290876116c2565b60069081556040805160c0810182526001600160a01b039788168152602081019889529081019283526000606082018181526080830197885295881660a08301908152600480546001810182559252915192027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180549389166001600160a01b031994851617905597517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c89015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d88015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e87015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8601555090517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a09093018054939092169216919091179055565b600060048381548110610a1a57fe5b600091825260208083208684526005825260408085203386529092529220805460069092029092019250831115610a8d576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b610a9684610b58565b6000610ac4826001015461075a64e8d4a510006106798760030154876000015461162790919063ffffffff16565b9050610ad03382611762565b8154610adc908561171c565b8083556003840154610af99164e8d4a51000916106799190611627565b60018301558254610b14906001600160a01b031633866118f3565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b60075481565b600060048281548110610b6757fe5b9060005260206000209060060201905080600201544311610b885750610d89565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d6020811015610bfc57600080fd5b5051905080610c12575043600290910155610d89565b6000610c228360020154436111cc565b90506000610c4960065461067986600101546106736002548761162790919063ffffffff16565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b158015610c9f57600080fd5b505afa158015610cb3573d6000803e3d6000fd5b505050506040513d6020811015610cc957600080fd5b5051905081811015610cd9578091505b6003546040805163716e5b0b60e11b81526004810185905290516001600160a01b039092169163e2dcb616916024808201926020929091908290030181600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d6020811015610d5157600080fd5b50610d759050610d6a856106798564e8d4a51000611627565b6003870154906116c2565b600386015550504360029093019290925550505b50565b600060048281548110610d9b57fe5b60009182526020808320858452600582526040808520338087529352909320805460069093029093018054909450610de0926001600160a01b039190911691906118f3565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a360008082556001909101555050565b60045460005b81811015610e4657610e3e81610b58565b600101610e2d565b5050565b610e5261175e565b6000546001600160a01b03908116911614610ea2576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610ef461175e565b6000546001600160a01b03908116911614610f44576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b600854831115610f95576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b600083118015610fac57506001600160a01b038216155b15610ffe576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b801561100c5761100c610e27565b611049846110436004888154811061102057fe5b90600052602060002090600602016001015460065461171c90919063ffffffff16565b906116c2565b600681905550836004868154811061105d57fe5b906000526020600020906006020160010181905550826004868154811061108057fe5b90600052602060002090600602016004018190555081600486815481106110a357fe5b906000526020600020906006020160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050565b6110e761175e565b6000546001600160a01b03908116911614611137576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b801561114557611145610e27565b50600255565b61115361175e565b6000546001600160a01b039081169116146111a3576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b610e466001600160a01b03831633836118f3565b60025481565b6000546001600160a01b031690565b60006111d8828461171c565b9392505050565b60056020908152600092835260408084209091529082529020805460019091015482565b6003546001600160a01b031681565b61121a61175e565b6000546001600160a01b0390811691161461126a576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b82811461127657600080fd5b61127e611cdc565b600460008154811061128c57fe5b600091825260208083206040805160c081018252600690940290910180546001600160a01b0390811685526001820154938501939093526002810154918401919091526003810154606084015260048101546080840152600501541660a082015291505b848110156113b957600080805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8188888581811061133057fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020905061138f333087878681811061137357fe5b88516001600160a01b0316949392602090910201359050611945565b6113af85858481811061139e57fe5b8454926020909102013590506116c2565b90556001016112f0565b505050505050565b6000600483815481106113d057fe5b6000918252602080832086845260058252604080852033865290925292206006909102909101915061140184610b58565b805415611444576000611436826001015461075a64e8d4a510006106798760030154876000015461162790919063ffffffff16565b90506114423382611762565b505b60048201541561149e57600061146d60085461067985600401548761162790919063ffffffff16565b60058401548454919250611490916001600160a01b039081169133911684611945565b61149a848261171c565b9350505b81546114b5906001600160a01b0316333086611945565b80546114c190846116c2565b80825560038301546114de9164e8d4a51000916106799190611627565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a350505050565b61152861175e565b6000546001600160a01b03908116911614611578576040805162461bcd60e51b81526020600482018190526024820152600080516020611d6c833981519152604482015290519081900360640190fd5b6001600160a01b0381166115bd5760405162461bcd60e51b8152600401808060200182810382526026815260200180611d256026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b60008261163657506000610767565b8282028284828161164357fe5b04146111d85760405162461bcd60e51b8152600401808060200182810382526021815260200180611d4b6021913960400191505060405180910390fd5b60006111d883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506119a5565b6000828201838110156111d8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006111d883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a47565b3390565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117ad57600080fd5b505afa1580156117c1573d6000803e3d6000fd5b505050506040513d60208110156117d757600080fd5b505190508082111561186b576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561183957600080fd5b505af115801561184d573d6000803e3d6000fd5b505050506040513d602081101561186357600080fd5b506118ee9050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050506040513d60208110156118eb57600080fd5b50505b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526118ee908490611aa1565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261199f908590611aa1565b50505050565b60008183611a315760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156119f65781810151838201526020016119de565b50505050905090810190601f168015611a235780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581611a3d57fe5b0495945050505050565b60008184841115611a995760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156119f65781810151838201526020016119de565b505050900390565b6060611af6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b529092919063ffffffff16565b8051909150156118ee57808060200190516020811015611b1557600080fd5b50516118ee5760405162461bcd60e51b815260040180806020018281038252602a815260200180611d8c602a913960400191505060405180910390fd5b6060611b618484600085611b69565b949350505050565b6060611b7485611cd6565b611bc5576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b60208310611c045780518252601f199092019160209182019101611be5565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114611c66576040519150601f19603f3d011682016040523d82523d6000602084013e611c6b565b606091505b50915091508115611c7f579150611b619050565b805115611c8f5780518082602001fd5b60405162461bcd60e51b81526020600482018181528651602484015286518793919283926044019190850190808383600083156119f65781810151838201526020016119de565b3b151590565b6040518060c0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b03168152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212205e86a4109bf3b37298a8fe9e4cb7f1a1f9f655f52c1aa4c39a87d035dec7dc6564736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a56ed2632e443db5f93e73c89df399a081408cc40000000000000000000000009a555c7f5bb31decd4b7cb038abc468b0c491476000000000000000000000000000000000000000000000000001aa535d3d0c0000000000000000000000000000000000000000000000000000000000000bf16c0
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0xA56Ed2632E443Db5f93e73C89df399a081408Cc4
Arg [1] : _treasury (address): 0x9A555c7f5BB31DeCD4B7CB038abC468b0C491476
Arg [2] : _rewardPerBlock (uint256): 7500000000000000
Arg [3] : _startBlock (uint256): 12523200
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a56ed2632e443db5f93e73c89df399a081408cc4
Arg [1] : 0000000000000000000000009a555c7f5bb31decd4b7cb038abc468b0c491476
Arg [2] : 000000000000000000000000000000000000000000000000001aa535d3d0c000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000bf16c0
Deployed Bytecode Sourcemap
21264:10489:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23280:31;;;:::i;:::-;;;;;;;;;;;;;;;;23896:95;;;:::i;22915:26::-;;;;;;;;;;;;;;;;-1:-1:-1;22915:26:0;;:::i;:::-;;;;-1:-1:-1;;;;;22915:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23156:34;;;:::i;26771:969::-;;;;;;;;;;;;;;;;-1:-1:-1;26771:969:0;;;;;;-1:-1:-1;;;;;26771:969:0;;:::i;24379:895::-;;;;;;;;;;;;;;;;-1:-1:-1;24379:895:0;;;-1:-1:-1;;;;;24379:895:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30100:655;;;;;;;;;;;;;;;;-1:-1:-1;30100:655:0;;;;;;;:::i;23248:25::-;;;:::i;28079:928::-;;;;;;;;;;;;;;;;-1:-1:-1;28079:928:0;;:::i;30826:356::-;;;;;;;;;;;;;;;;-1:-1:-1;30826:356:0;;:::i;27823:180::-;;;:::i;2611:148::-;;;:::i;25371:657::-;;;;;;;;;;;;;;;;-1:-1:-1;25371:657:0;;;;;;;;;;;;;-1:-1:-1;;;;;25371:657:0;;;;;;;;;;;;:::i;23999:211::-;;;;;;;;;;;;;;;;-1:-1:-1;23999:211:0;;;;;;;;;:::i;31609:141::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31609:141:0;;;;;;;;:::i;22776:29::-;;;:::i;1969:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1969:79:0;;;;;;;;;;;;;;26585:121;;;;;;;;;;;;;;;;-1:-1:-1;26585:121:0;;;;;;;:::i;22997:64::-;;;;;;;;;;;;;;;;-1:-1:-1;22997:64:0;;;;;;-1:-1:-1;;;;;22997:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22840:39;;;:::i;26036:473::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26036:473:0;;-1:-1:-1;26036:473:0;-1:-1:-1;26036:473:0;:::i;29077:971::-;;;;;;;;;;;;;;;;-1:-1:-1;29077:971:0;;;;;;;:::i;2914:244::-;;;;;;;;;;;;;;;;-1:-1:-1;2914:244:0;-1:-1:-1;;;;;2914:244:0;;:::i;22704:25::-;;;:::i;23280:31::-;;;;:::o;23896:95::-;23968:8;:15;23896:95;:::o;22915:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22915:26:0;;;;-1:-1:-1;22915:26:0;;;;;;;;:::o;23156:34::-;;;;:::o;26771:969::-;26845:7;26865:21;26889:8;26898:4;26889:14;;;;;;;;;;;;;;;;26938;;;:8;:14;;;;;;-1:-1:-1;;;;;26938:21:0;;;;;;;;;;;26889:14;;;;;;;;26997:21;;;;27048:12;;:37;;-1:-1:-1;;;27048:37:0;;27079:4;27048:37;;;;;;26889:14;;-1:-1:-1;26938:21:0;;26997;;26889:14;;27048:12;;;:22;;:37;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27048:37:0;27115:20;;;;27048:37;;-1:-1:-1;27100:12:0;:35;:52;;;;-1:-1:-1;27139:13:0;;;27100:52;27096:555;;;27169:18;27190:49;27204:4;:20;;;27226:12;27190:13;:49::i;:::-;27169:70;;27254:19;27276:72;27332:15;;27276:51;27311:4;:15;;;27276:30;27291:14;;27276:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:::-;:55;;:72::i;:::-;27389:11;;27419:14;;27389:46;;;-1:-1:-1;;;27389:46:0;;-1:-1:-1;;;;;27419:14:0;;;27389:46;;;;;;27254:94;;-1:-1:-1;27363:23:0;;27389:11;;;;;:21;;:46;;;;;;;;;;;;;;:11;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27389:46:0;;-1:-1:-1;27454:29:0;;;27450:99;;;27518:15;27504:29;;27450:99;27582:57;27603:35;27629:8;27603:21;:11;27619:4;27603:15;:21::i;:35::-;27582:16;;:20;:57::i;:::-;27563:76;;27096:555;;;;27668:64;27716:4;:15;;;27668:43;27706:4;27668:33;27684:16;27668:4;:11;;;:15;;:33;;;;:::i;:43::-;:47;;:64::i;:::-;27661:71;;;;;;26771:969;;;;;:::o;24379:895::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;24581:8:::1;;24570:7;:19;;24562:55;;;::::0;;-1:-1:-1;;;24562:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24562:55:0;;;;;;;;;;;;;::::1;;24648:1;24638:7;:11;:36;;;;-1:-1:-1::0;;;;;;24653:21:0;::::1;::::0;24638:36:::1;24636:39;24628:84;;;::::0;;-1:-1:-1;;;24628:84:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24729:11;24725:61;;;24757:17;:15;:17::i;:::-;24796:23;24837:10;;24822:12;:25;:53;;24865:10;;24822:53;;;24850:12;24822:53;24904:15;::::0;24796:79;;-1:-1:-1;24904:32:0::1;::::0;24924:11;24904:19:::1;:32::i;:::-;24886:15;:50:::0;;;24975:280:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;24975:280:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;24975:280:0;;;;;;;;;;;;;;::::1;::::0;;;;;;24947:8:::1;:319:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;24947:319:0;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24947:319:0;;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;24379:895::o;30100:655::-;30167:21;30191:8;30200:4;30191:14;;;;;;;;;;;;;;;;30240;;;:8;:14;;;;;;30255:10;30240:26;;;;;;;30285:11;;30191:14;;;;;;;;-1:-1:-1;30285:22:0;-1:-1:-1;30285:22:0;30277:53;;;;;-1:-1:-1;;;30277:53:0;;;;;;;;;;;;-1:-1:-1;;;30277:53:0;;;;;;;;;;;;;;;30341:16;30352:4;30341:10;:16::i;:::-;30368:15;30386:69;30439:4;:15;;;30386:48;30429:4;30386:38;30402:4;:21;;;30386:4;:11;;;:15;;:38;;;;:::i;:69::-;30368:87;;30466:38;30484:10;30496:7;30466:17;:38::i;:::-;30529:11;;:24;;30545:7;30529:15;:24::i;:::-;30515:38;;;30598:21;;;;30582:48;;30625:4;;30582:38;;30515;30582:15;:38::i;:48::-;30564:15;;;:66;30641:12;;:55;;-1:-1:-1;;;;;30641:12:0;30675:10;30688:7;30641:25;:55::i;:::-;30712:35;;;;;;;;30733:4;;30721:10;;30712:35;;;;;;;;;30100:655;;;;;:::o;23248:25::-;;;;:::o;28079:928::-;28131:21;28155:8;28164:4;28155:14;;;;;;;;;;;;;;;;;;28131:38;;28200:4;:20;;;28184:12;:36;28180:75;;28237:7;;;28180:75;28284:12;;:37;;;-1:-1:-1;;;28284:37:0;;28315:4;28284:37;;;;;;28265:16;;-1:-1:-1;;;;;28284:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28284:37:0;;-1:-1:-1;28336:13:0;28332:102;;-1:-1:-1;28389:12:0;28366:20;;;;:35;28416:7;;28332:102;28444:18;28465:49;28479:4;:20;;;28501:12;28465:13;:49::i;:::-;28444:70;;28525:19;28547:72;28603:15;;28547:51;28582:4;:15;;;28547:30;28562:14;;28547:10;:14;;:30;;;;:::i;:72::-;28656:11;;28686:14;;28656:46;;;-1:-1:-1;;;28656:46:0;;-1:-1:-1;;;;;28686:14:0;;;28656:46;;;;;;28525:94;;-1:-1:-1;28630:23:0;;28656:11;;;;;:21;;:46;;;;;;;;;;;;;;:11;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28656:46:0;;-1:-1:-1;28717:29:0;;;28713:91;;;28777:15;28763:29;;28713:91;28814:14;;:42;;;-1:-1:-1;;;28814:42:0;;;;;;;;;;-1:-1:-1;;;;;28814:14:0;;;;:29;;:42;;;;;;;;;;;;;;;:14;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28891:62:0;;-1:-1:-1;28917:35:0;28943:8;28917:21;:11;28933:4;28917:15;:21::i;:35::-;28891:21;;;;;:25;:62::i;:::-;28867:21;;;:86;-1:-1:-1;;28987:12:0;28964:20;;;;:35;;;;-1:-1:-1;;28079:928:0;;:::o;30826:356::-;30885:21;30909:8;30918:4;30909:14;;;;;;;;;;;;;;;;30958;;;:8;:14;;;;;;30973:10;30958:26;;;;;;;;31042:11;;30909:14;;;;;;;30995:12;;30909:14;;-1:-1:-1;30995:59:0;;-1:-1:-1;;;;;30995:12:0;;;;;30973:10;30995:25;:59::i;:::-;31106:11;;31070:48;;;;;;;31100:4;;31088:10;;31070:48;;;;;;;;;31143:1;31129:15;;;31155;;;;:19;-1:-1:-1;;30826:356:0:o;27823:180::-;27885:8;:15;27868:14;27911:85;27939:6;27933:3;:12;27911:85;;;27969:15;27980:3;27969:10;:15::i;:::-;27947:5;;27911:85;;;;27823:180;:::o;2611:148::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;2718:1:::1;2702:6:::0;;2681:40:::1;::::0;-1:-1:-1;;;;;2702:6:0;;::::1;::::0;2681:40:::1;::::0;2718:1;;2681:40:::1;2749:1;2732:19:::0;;-1:-1:-1;;;;;;2732:19:0::1;::::0;;2611:148::o;25371:657::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;25570:8:::1;;25559:7;:19;;25551:55;;;::::0;;-1:-1:-1;;;25551:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25551:55:0;;;;;;;;;;;;;::::1;;25637:1;25627:7;:11;:36;;;;-1:-1:-1::0;;;;;;25642:21:0;::::1;::::0;25627:36:::1;25625:39;25617:84;;;::::0;;-1:-1:-1;;;25617:84:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;25718:11;25714:61;;;25746:17;:15;:17::i;:::-;25803:63;25854:11;25803:46;25823:8;25832:4;25823:14;;;;;;;;;;;;;;;;;;:25;;;25803:15;;:19;;:46;;;;:::i;:::-;:50:::0;::::1;:63::i;:::-;25785:15;:81;;;;25905:11;25877:8;25886:4;25877:14;;;;;;;;;;;;;;;;;;:25;;:39;;;;25961:7;25927:8;25936:4;25927:14;;;;;;;;;;;;;;;;;;:31;;:41;;;;26013:7;25979:8;25988:4;25979:14;;;;;;;;;;;;;;;;;;:31;;;:41;;;;;-1:-1:-1::0;;;;;25979:41:0::1;;;;;-1:-1:-1::0;;;;;25979:41:0::1;;;;;;25371:657:::0;;;;;:::o;23999:211::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;24103:11:::1;24099:61;;;24131:17;:15;:17::i;:::-;-1:-1:-1::0;24170:14:0::1;:32:::0;23999:211::o;31609:141::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;31694:48:::1;-1:-1:-1::0;;;;;31694:27:0;::::1;31722:10;31734:7:::0;31694:27:::1;:48::i;22776:29::-:0;;;;:::o;1969:79::-;2007:7;2034:6;-1:-1:-1;;;;;2034:6:0;1969:79;:::o;26585:121::-;26657:7;26684:14;:3;26692:5;26684:7;:14::i;:::-;26677:21;26585:121;-1:-1:-1;;;26585:121:0:o;22997:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22840:39::-;;;-1:-1:-1;;;;;22840:39:0;;:::o;26036:473::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;26148:33;;::::1;26140:42;;;::::0;::::1;;26193:20;;:::i;:::-;26216:8;26225:1;26216:11;;;;;;;;;::::0;;;::::1;::::0;;;26193:34:::1;::::0;;::::1;::::0;::::1;::::0;;26216:11:::1;::::0;;::::1;::::0;;::::1;26193:34:::0;;-1:-1:-1;;;;;26193:34:0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;::::1;::::0;;;;;-1:-1:-1;26238:264:0::1;26255:17:::0;;::::1;26238:264;;;26294:21;26318:11:::0;;;:8:::1;:11;::::0;;26294:21;26330:8;;26339:1;26330:11;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26330:11:0::1;-1:-1:-1::0;;;;;26318:24:0::1;-1:-1:-1::0;;;;;26318:24:0::1;;;;;;;;;;;;26294:48;;26357:77;26395:10;26416:4;26423:7;;26431:1;26423:10;;;;;;;26357:12:::0;;-1:-1:-1;;;;;26357:29:0::1;::::0;:77;;26423:10:::1;::::0;;::::1;;;::::0;-1:-1:-1;26357:29:0::1;:77::i;:::-;26463:27;26479:7;;26487:1;26479:10;;;;;;;26463:11:::0;;;26479:10:::1;::::0;;::::1;;;::::0;-1:-1:-1;26463:15:0::1;:27::i;:::-;26449:41:::0;;26274:3:::1;;26238:264;;;;2251:1;26036:473:::0;;;;:::o;29077:971::-;29143:21;29167:8;29176:4;29167:14;;;;;;;;;;;;;;;;29216;;;:8;:14;;;;;;29231:10;29216:26;;;;;;;29167:14;;;;;;;;-1:-1:-1;29253:16:0;29225:4;29253:10;:16::i;:::-;29284:11;;:15;29280:188;;29316:15;29334:69;29387:4;:15;;;29334:48;29377:4;29334:38;29350:4;:21;;;29334:4;:11;;;:15;;:38;;;;:::i;:69::-;29316:87;;29418:38;29436:10;29448:7;29418:17;:38::i;:::-;29280:188;;29482:21;;;;:25;29478:302;;29524:24;29551:48;29590:8;;29551:34;29563:4;:21;;;29551:7;:11;;:34;;;;:::i;:48::-;29673:21;;;;29614:12;;29524:75;;-1:-1:-1;29614:100:0;;-1:-1:-1;;;;;29614:12:0;;;;29652:10;;29673:21;29524:75;29614:29;:100::i;:::-;29739:29;:7;29751:16;29739:11;:29::i;:::-;29729:39;;29478:302;;29790:12;;:74;;-1:-1:-1;;;;;29790:12:0;29828:10;29849:4;29856:7;29790:29;:74::i;:::-;29889:11;;:24;;29905:7;29889:15;:24::i;:::-;29875:38;;;29958:21;;;;29942:48;;29985:4;;29942:38;;29875;29942:15;:38::i;:48::-;29924:15;;;:66;30006:34;;;;;;;;30026:4;;30014:10;;30006:34;;;;;;;;;29077:971;;;;:::o;2914:244::-;2191:12;:10;:12::i;:::-;2181:6;;-1:-1:-1;;;;;2181:6:0;;;:22;;;2173:67;;;;;-1:-1:-1;;;2173:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2173:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3003:22:0;::::1;2995:73;;;;-1:-1:-1::0;;;2995:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3105:6;::::0;;3084:38:::1;::::0;-1:-1:-1;;;;;3084:38:0;;::::1;::::0;3105:6;::::1;::::0;3084:38:::1;::::0;::::1;3133:6;:17:::0;;-1:-1:-1;;;;;;3133:17:0::1;-1:-1:-1::0;;;;;3133:17:0;;;::::1;::::0;;;::::1;::::0;;2914:244::o;22704:25::-;;;-1:-1:-1;;;;;22704:25:0;;:::o;8076:471::-;8134:7;8379:6;8375:47;;-1:-1:-1;8409:1:0;8402:8;;8375:47;8446:5;;;8450:1;8446;:5;:1;8470:5;;;;;:10;8462:56;;;;-1:-1:-1;;;8462:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9023:132;9081:7;9108:39;9112:1;9115;9108:39;;;;;;;;;;;;;;;;;:3;:39::i;6722:181::-;6780:7;6812:5;;;6836:6;;;;6828:46;;;;;-1:-1:-1;;;6828:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;7186:136;7244:7;7271:43;7275:1;7278;7271:43;;;;;;;;;;;;;;;;;:3;:43::i;605:106::-;693:10;605:106;:::o;31298:303::-;31394:11;;:36;;;-1:-1:-1;;;31394:36:0;;31424:4;31394:36;;;;;;31375:16;;-1:-1:-1;;;;;31394:11:0;;:21;;:36;;;;;;;;;;;;;;:11;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31394:36:0;;-1:-1:-1;31445:18:0;;;31441:153;;;31480:11;;:35;;;-1:-1:-1;;;31480:35:0;;-1:-1:-1;;;;;31480:35:0;;;;;;;;;;;;;;;:11;;;;;:20;;:35;;;;;;;;;;;;;;:11;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31441:153:0;;-1:-1:-1;31441:153:0;;31548:11;;:34;;;-1:-1:-1;;;31548:34:0;;-1:-1:-1;;;;;31548:34:0;;;;;;;;;;;;;;;:11;;;;;:20;;:34;;;;;;;;;;;;;;:11;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31441:153:0;31298:303;;;:::o;17707:177::-;17817:58;;;-1:-1:-1;;;;;17817:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17817:58:0;-1:-1:-1;;;17817:58:0;;;17790:86;;17810:5;;17790:19;:86::i;17892:205::-;18020:68;;;-1:-1:-1;;;;;18020:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18020:68:0;-1:-1:-1;;;18020:68:0;;;17993:96;;18013:5;;17993:19;:96::i;:::-;17892:205;;;;:::o;9651:278::-;9737:7;9772:12;9765:5;9757:28;;;;-1:-1:-1;;;9757:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9796:9;9812:1;9808;:5;;;;;;;9651:278;-1:-1:-1;;;;;9651:278:0:o;7625:192::-;7711:7;7747:12;7739:6;;;;7731:29;;;;-1:-1:-1;;;7731:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7783:5:0;;;7625:192::o;20012:761::-;20436:23;20462:69;20490:4;20462:69;;;;;;;;;;;;;;;;;20470:5;-1:-1:-1;;;;;20462:27:0;;;:69;;;;;:::i;:::-;20546:17;;20436:95;;-1:-1:-1;20546:21:0;20542:224;;20688:10;20677:30;;;;;;;;;;;;;;;-1:-1:-1;20677:30:0;20669:85;;;;-1:-1:-1;;;20669:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14783:196;14886:12;14918:53;14941:6;14949:4;14955:1;14958:12;14918:22;:53::i;:::-;14911:60;14783:196;-1:-1:-1;;;;14783:196:0:o;16160:979::-;16290:12;16323:18;16334:6;16323:10;:18::i;:::-;16315:60;;;;;-1:-1:-1;;;16315:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16449:12;16463:23;16490:6;-1:-1:-1;;;;;16490:11:0;16510:8;16521:4;16490:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16490:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16448:78;;;;16541:7;16537:595;;;16572:10;-1:-1:-1;16565:17:0;;-1:-1:-1;16565:17:0;16537:595;16686:17;;:21;16682:439;;16949:10;16943:17;17010:15;16997:10;16993:2;16989:19;16982:44;16897:148;17085:20;;-1:-1:-1;;;17085:20:0;;;;;;;;;;;;;;;;;17092:12;;17085:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11865:422;12232:20;12271:8;;;11865:422::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://5e86a4109bf3b37298a8fe9e4cb7f1a1f9f655f52c1aa4c39a87d035dec7dc65
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.