Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 181 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Deposit | 12523136 | 1318 days ago | IN | 0 ETH | 0.00172252 | ||||
Recover ERC20 | 12523098 | 1318 days ago | IN | 0 ETH | 0.00168269 | ||||
Set Reward Per B... | 12522428 | 1318 days ago | IN | 0 ETH | 0.00288451 | ||||
Deposit | 12522380 | 1318 days ago | IN | 0 ETH | 0.00194339 | ||||
Deposit | 12522281 | 1318 days ago | IN | 0 ETH | 0.00233577 | ||||
Deposit | 12522161 | 1318 days ago | IN | 0 ETH | 0.00420069 | ||||
Deposit | 12522124 | 1318 days ago | IN | 0 ETH | 0.00406221 | ||||
Deposit | 12522079 | 1318 days ago | IN | 0 ETH | 0.00378524 | ||||
Deposit | 12521855 | 1318 days ago | IN | 0 ETH | 0.0020311 | ||||
Deposit | 12521592 | 1318 days ago | IN | 0 ETH | 0.00212342 | ||||
Deposit | 12521519 | 1318 days ago | IN | 0 ETH | 0.00200307 | ||||
Deposit | 12521494 | 1318 days ago | IN | 0 ETH | 0.004498 | ||||
Deposit | 12521386 | 1318 days ago | IN | 0 ETH | 0.00293586 | ||||
Deposit | 12520912 | 1318 days ago | IN | 0 ETH | 0.00212342 | ||||
Deposit | 12520521 | 1318 days ago | IN | 0 ETH | 0.00350827 | ||||
Withdraw | 12520137 | 1318 days ago | IN | 0 ETH | 0.00330085 | ||||
Deposit | 12519974 | 1318 days ago | IN | 0 ETH | 0.00230807 | ||||
Deposit | 12519326 | 1319 days ago | IN | 0 ETH | 0.00295433 | ||||
Deposit | 12518698 | 1319 days ago | IN | 0 ETH | 0.00301619 | ||||
Deposit | 12517866 | 1319 days ago | IN | 0 ETH | 0.00301619 | ||||
Deposit | 12517127 | 1319 days ago | IN | 0 ETH | 0.00332362 | ||||
Deposit | 12516645 | 1319 days ago | IN | 0 ETH | 0.00461615 | ||||
Deposit | 12516077 | 1319 days ago | IN | 0 ETH | 0.00301434 | ||||
Deposit | 12515670 | 1319 days ago | IN | 0 ETH | 0.00240039 | ||||
Deposit | 12515368 | 1319 days ago | IN | 0 ETH | 0.00286201 |
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-04-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; } // 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 (_amount > 0) { 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":[],"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
6080604052600060065561271060085534801561001b57600080fd5b50604051611c22380380611c228339818101604052608081101561003e57600080fd5b5080516020820151604083015160609093015191929091600061005f6100e7565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039586166001600160a01b03199182161790915560038054949095169316929092179092556002919091556007556100eb565b3390565b611b28806100fa6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c35780638dbb1e3a1161007c5780638dbb1e3a1461037c57806393f1a40b1461039f578063c7c934a1146103e4578063e2bbb158146103ec578063f2fde38b1461040f578063f7c618c1146104355761014d565b8063715018a6146102b75780637f43d74f146102bf57806381505c05146102ff5780638980f11f146103245780638ae39cac146103505780638da5cb5b146103585761014d565b80632a2cadfa116101155780632a2cadfa14610206578063441a3e701461024a57806348cd4cb11461026d57806351eb05a6146102755780635312ea8e14610292578063630b5ba1146102af5761014d565b8063014e95ba14610152578063081e3eda1461016c5780631526fe271461017457806317caf6f1146101d2578063195426ec146101da575b600080fd5b61015a61043d565b60408051918252519081900360200190f35b61015a610443565b6101916004803603602081101561018a57600080fd5b5035610449565b604080516001600160a01b0397881681526020810196909652858101949094526060850192909252608084015290921660a082015290519081900360c00190f35b61015a610499565b61015a600480360360408110156101f057600080fd5b50803590602001356001600160a01b031661049f565b610248600480360360a081101561021c57600080fd5b508035906001600160a01b036020820135811691604081013591606082013516906080013515156106a0565b005b6102486004803603604081101561026057600080fd5b508035906020013561093e565b61015a610a85565b6102486004803603602081101561028b57600080fd5b5035610a8b565b610248600480360360208110156102a857600080fd5b5035610cbf565b610248610d5a565b610248610d7d565b610248600480360360a08110156102d557600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001351515610e1f565b6102486004803603604081101561031557600080fd5b50803590602001351515611012565b6102486004803603604081101561033a57600080fd5b506001600160a01b03813516906020013561107e565b61015a6110ea565b6103606110f0565b604080516001600160a01b039092168252519081900360200190f35b61015a6004803603604081101561039257600080fd5b50803590602001356110ff565b6103cb600480360360408110156103b557600080fd5b50803590602001356001600160a01b0316611112565b6040805192835260208301919091528051918290030190f35b610360611136565b6102486004803603604081101561040257600080fd5b5080359060200135611145565b6102486004803603602081101561042557600080fd5b50356001600160a01b03166112ab565b6103606113a3565b60085481565b60045490565b6004818154811061045657fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0394851696509294919390921686565b60065481565b600080600484815481106104af57fe5b600091825260208083208784526005825260408085206001600160a01b0389811687529084528186206006959095029092016003810154815483516370a0823160e01b815230600482015293519298509596909590949316926370a082319260248082019391829003018186803b15801561052957600080fd5b505afa15801561053d573d6000803e3d6000fd5b505050506040513d602081101561055357600080fd5b505160028501549091504311801561056a57508015155b1561066557600061057f8560020154436110ff565b905060006105b26006546105ac88600101546105a6600254876113b290919063ffffffff16565b906113b2565b9061140b565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b5051905081811015610642578091505b61065f610658856105ac8564e8d4a510006113b2565b869061144d565b94505050505b610693836001015461068d64e8d4a510006105ac8688600001546113b290919063ffffffff16565b906114a7565b9450505050505b92915050565b6106a86114e9565b6000546001600160a01b039081169116146106f8576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b600854831115610749576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b60008311801561076057506001600160a01b038216155b156107b2576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b80156107c0576107c0610d5a565b600060075443116107d3576007546107d5565b435b6006549091506107e5908761144d565b60069081556040805160c0810182526001600160a01b039788168152602081019889529081019283526000606082018181526080830197885295881660a08301908152600480546001810182559252915192027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180549389166001600160a01b031994851617905597517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c89015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d88015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e87015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8601555090517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a09093018054939092169216919091179055565b60006004838154811061094d57fe5b6000918252602080832086845260058252604080852033865290925292208054600690920290920192508311156109c0576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6109c984610a8b565b60006109f7826001015461068d64e8d4a510006105ac876003015487600001546113b290919063ffffffff16565b9050610a0333826114ed565b8154610a0f90856114a7565b8083556003840154610a2c9164e8d4a51000916105ac91906113b2565b60018301558254610a47906001600160a01b0316338661167e565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b60075481565b600060048281548110610a9a57fe5b9060005260206000209060060201905080600201544311610abb5750610cbc565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610b0557600080fd5b505afa158015610b19573d6000803e3d6000fd5b505050506040513d6020811015610b2f57600080fd5b5051905080610b45575043600290910155610cbc565b6000610b558360020154436110ff565b90506000610b7c6006546105ac86600101546105a6600254876113b290919063ffffffff16565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d6020811015610bfc57600080fd5b5051905081811015610c0c578091505b6003546040805163716e5b0b60e11b81526004810185905290516001600160a01b039092169163e2dcb616916024808201926020929091908290030181600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b505050506040513d6020811015610c8457600080fd5b50610ca89050610c9d856105ac8564e8d4a510006113b2565b60038701549061144d565b600386015550504360029093019290925550505b50565b600060048281548110610cce57fe5b60009182526020808320858452600582526040808520338087529352909320805460069093029093018054909450610d13926001600160a01b0391909116919061167e565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a360008082556001909101555050565b60045460005b81811015610d7957610d7181610a8b565b600101610d60565b5050565b610d856114e9565b6000546001600160a01b03908116911614610dd5576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610e276114e9565b6000546001600160a01b03908116911614610e77576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b600854831115610ec8576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b600083118015610edf57506001600160a01b038216155b15610f31576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b8015610f3f57610f3f610d5a565b610f7c84610f7660048881548110610f5357fe5b9060005260206000209060060201600101546006546114a790919063ffffffff16565b9061144d565b6006819055508360048681548110610f9057fe5b9060005260206000209060060201600101819055508260048681548110610fb357fe5b9060005260206000209060060201600401819055508160048681548110610fd657fe5b906000526020600020906006020160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050565b61101a6114e9565b6000546001600160a01b0390811691161461106a576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b801561107857611078610d5a565b50600255565b6110866114e9565b6000546001600160a01b039081169116146110d6576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b610d796001600160a01b038316338361167e565b60025481565b6000546001600160a01b031690565b600061110b82846114a7565b9392505050565b60056020908152600092835260408084209091529082529020805460019091015482565b6003546001600160a01b031681565b60006004838154811061115457fe5b6000918252602080832086845260058252604080852033865290925292206006909102909101915061118584610a8b565b8054156111c85760006111ba826001015461068d64e8d4a510006105ac876003015487600001546113b290919063ffffffff16565b90506111c633826114ed565b505b82156112a5576004820154156112285760006111f76008546105ac8560040154876113b290919063ffffffff16565b6005840154845491925061121a916001600160a01b0390811691339116846116d0565b61122484826114a7565b9350505b815461123f906001600160a01b03163330866116d0565b805461124b908461144d565b80825560038301546112689164e8d4a51000916105ac91906113b2565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35b50505050565b6112b36114e9565b6000546001600160a01b03908116911614611303576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b6001600160a01b0381166113485760405162461bcd60e51b8152600401808060200182810382526026815260200180611a626026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6000826113c15750600061069a565b828202828482816113ce57fe5b041461110b5760405162461bcd60e51b8152600401808060200182810382526021815260200180611a886021913960400191505060405180910390fd5b600061110b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061172a565b60008282018381101561110b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061110b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117cc565b3390565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b50519050808211156115f6576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b506116799050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b505050506040513d602081101561167657600080fd5b50505b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611679908490611826565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526112a5908590611826565b600081836117b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561177b578181015183820152602001611763565b50505050905090810190601f1680156117a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816117c257fe5b0495945050505050565b6000818484111561181e5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561177b578181015183820152602001611763565b505050900390565b606061187b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118d79092919063ffffffff16565b8051909150156116795780806020019051602081101561189a57600080fd5b50516116795760405162461bcd60e51b815260040180806020018281038252602a815260200180611ac9602a913960400191505060405180910390fd5b60606118e684846000856118ee565b949350505050565b60606118f985611a5b565b61194a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106119895780518252601f19909201916020918201910161196a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146119eb576040519150601f19603f3d011682016040523d82523d6000602084013e6119f0565b606091505b50915091508115611a045791506118e69050565b805115611a145780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561177b578181015183820152602001611763565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ca4dd98ba8ae79786fe6d85b4ac08425570fe8e3ab9a8d1d5cdc9e023e76291464736f6c634300060c0033000000000000000000000000a56ed2632e443db5f93e73c89df399a081408cc40000000000000000000000009a555c7f5bb31decd4b7cb038abc468b0c491476000000000000000000000000000000000000000000000000001aa535d3d0c0000000000000000000000000000000000000000000000000000000000000bc1fb8
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c35780638dbb1e3a1161007c5780638dbb1e3a1461037c57806393f1a40b1461039f578063c7c934a1146103e4578063e2bbb158146103ec578063f2fde38b1461040f578063f7c618c1146104355761014d565b8063715018a6146102b75780637f43d74f146102bf57806381505c05146102ff5780638980f11f146103245780638ae39cac146103505780638da5cb5b146103585761014d565b80632a2cadfa116101155780632a2cadfa14610206578063441a3e701461024a57806348cd4cb11461026d57806351eb05a6146102755780635312ea8e14610292578063630b5ba1146102af5761014d565b8063014e95ba14610152578063081e3eda1461016c5780631526fe271461017457806317caf6f1146101d2578063195426ec146101da575b600080fd5b61015a61043d565b60408051918252519081900360200190f35b61015a610443565b6101916004803603602081101561018a57600080fd5b5035610449565b604080516001600160a01b0397881681526020810196909652858101949094526060850192909252608084015290921660a082015290519081900360c00190f35b61015a610499565b61015a600480360360408110156101f057600080fd5b50803590602001356001600160a01b031661049f565b610248600480360360a081101561021c57600080fd5b508035906001600160a01b036020820135811691604081013591606082013516906080013515156106a0565b005b6102486004803603604081101561026057600080fd5b508035906020013561093e565b61015a610a85565b6102486004803603602081101561028b57600080fd5b5035610a8b565b610248600480360360208110156102a857600080fd5b5035610cbf565b610248610d5a565b610248610d7d565b610248600480360360a08110156102d557600080fd5b508035906020810135906040810135906001600160a01b0360608201351690608001351515610e1f565b6102486004803603604081101561031557600080fd5b50803590602001351515611012565b6102486004803603604081101561033a57600080fd5b506001600160a01b03813516906020013561107e565b61015a6110ea565b6103606110f0565b604080516001600160a01b039092168252519081900360200190f35b61015a6004803603604081101561039257600080fd5b50803590602001356110ff565b6103cb600480360360408110156103b557600080fd5b50803590602001356001600160a01b0316611112565b6040805192835260208301919091528051918290030190f35b610360611136565b6102486004803603604081101561040257600080fd5b5080359060200135611145565b6102486004803603602081101561042557600080fd5b50356001600160a01b03166112ab565b6103606113a3565b60085481565b60045490565b6004818154811061045657fe5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0394851696509294919390921686565b60065481565b600080600484815481106104af57fe5b600091825260208083208784526005825260408085206001600160a01b0389811687529084528186206006959095029092016003810154815483516370a0823160e01b815230600482015293519298509596909590949316926370a082319260248082019391829003018186803b15801561052957600080fd5b505afa15801561053d573d6000803e3d6000fd5b505050506040513d602081101561055357600080fd5b505160028501549091504311801561056a57508015155b1561066557600061057f8560020154436110ff565b905060006105b26006546105ac88600101546105a6600254876113b290919063ffffffff16565b906113b2565b9061140b565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b15801561060857600080fd5b505afa15801561061c573d6000803e3d6000fd5b505050506040513d602081101561063257600080fd5b5051905081811015610642578091505b61065f610658856105ac8564e8d4a510006113b2565b869061144d565b94505050505b610693836001015461068d64e8d4a510006105ac8688600001546113b290919063ffffffff16565b906114a7565b9450505050505b92915050565b6106a86114e9565b6000546001600160a01b039081169116146106f8576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b600854831115610749576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b60008311801561076057506001600160a01b038216155b156107b2576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b80156107c0576107c0610d5a565b600060075443116107d3576007546107d5565b435b6006549091506107e5908761144d565b60069081556040805160c0810182526001600160a01b039788168152602081019889529081019283526000606082018181526080830197885295881660a08301908152600480546001810182559252915192027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180549389166001600160a01b031994851617905597517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c89015591517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d88015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e87015592517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19f8601555090517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd1a09093018054939092169216919091179055565b60006004838154811061094d57fe5b6000918252602080832086845260058252604080852033865290925292208054600690920290920192508311156109c0576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b6109c984610a8b565b60006109f7826001015461068d64e8d4a510006105ac876003015487600001546113b290919063ffffffff16565b9050610a0333826114ed565b8154610a0f90856114a7565b8083556003840154610a2c9164e8d4a51000916105ac91906113b2565b60018301558254610a47906001600160a01b0316338661167e565b604080518581529051869133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689181900360200190a35050505050565b60075481565b600060048281548110610a9a57fe5b9060005260206000209060060201905080600201544311610abb5750610cbc565b8054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610b0557600080fd5b505afa158015610b19573d6000803e3d6000fd5b505050506040513d6020811015610b2f57600080fd5b5051905080610b45575043600290910155610cbc565b6000610b558360020154436110ff565b90506000610b7c6006546105ac86600101546105a6600254876113b290919063ffffffff16565b600154600354604080516370a0823160e01b81526001600160a01b039283166004820152905193945060009391909216916370a08231916024808301926020929190829003018186803b158015610bd257600080fd5b505afa158015610be6573d6000803e3d6000fd5b505050506040513d6020811015610bfc57600080fd5b5051905081811015610c0c578091505b6003546040805163716e5b0b60e11b81526004810185905290516001600160a01b039092169163e2dcb616916024808201926020929091908290030181600087803b158015610c5a57600080fd5b505af1158015610c6e573d6000803e3d6000fd5b505050506040513d6020811015610c8457600080fd5b50610ca89050610c9d856105ac8564e8d4a510006113b2565b60038701549061144d565b600386015550504360029093019290925550505b50565b600060048281548110610cce57fe5b60009182526020808320858452600582526040808520338087529352909320805460069093029093018054909450610d13926001600160a01b0391909116919061167e565b80546040805191825251849133917fbb757047c2b5f3974fe26b7c10f732e7bce710b0952a71082702781e62ae05959181900360200190a360008082556001909101555050565b60045460005b81811015610d7957610d7181610a8b565b600101610d60565b5050565b610d856114e9565b6000546001600160a01b03908116911614610dd5576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610e276114e9565b6000546001600160a01b03908116911614610e77576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b600854831115610ec8576040805162461bcd60e51b8152602060048201526017602482015276696e76616c696420636f6e74726962757465207261746560481b604482015290519081900360640190fd5b600083118015610edf57506001600160a01b038216155b15610f31576040805162461bcd60e51b815260206004820181905260248201527f63616e277420636f6e7472696275746520746f207a65726f2061646472657373604482015290519081900360640190fd5b8015610f3f57610f3f610d5a565b610f7c84610f7660048881548110610f5357fe5b9060005260206000209060060201600101546006546114a790919063ffffffff16565b9061144d565b6006819055508360048681548110610f9057fe5b9060005260206000209060060201600101819055508260048681548110610fb357fe5b9060005260206000209060060201600401819055508160048681548110610fd657fe5b906000526020600020906006020160050160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050505050565b61101a6114e9565b6000546001600160a01b0390811691161461106a576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b801561107857611078610d5a565b50600255565b6110866114e9565b6000546001600160a01b039081169116146110d6576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b610d796001600160a01b038316338361167e565b60025481565b6000546001600160a01b031690565b600061110b82846114a7565b9392505050565b60056020908152600092835260408084209091529082529020805460019091015482565b6003546001600160a01b031681565b60006004838154811061115457fe5b6000918252602080832086845260058252604080852033865290925292206006909102909101915061118584610a8b565b8054156111c85760006111ba826001015461068d64e8d4a510006105ac876003015487600001546113b290919063ffffffff16565b90506111c633826114ed565b505b82156112a5576004820154156112285760006111f76008546105ac8560040154876113b290919063ffffffff16565b6005840154845491925061121a916001600160a01b0390811691339116846116d0565b61122484826114a7565b9350505b815461123f906001600160a01b03163330866116d0565b805461124b908461144d565b80825560038301546112689164e8d4a51000916105ac91906113b2565b6001820155604080518481529051859133917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159181900360200190a35b50505050565b6112b36114e9565b6000546001600160a01b03908116911614611303576040805162461bcd60e51b81526020600482018190526024820152600080516020611aa9833981519152604482015290519081900360640190fd5b6001600160a01b0381166113485760405162461bcd60e51b8152600401808060200182810382526026815260200180611a626026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6000826113c15750600061069a565b828202828482816113ce57fe5b041461110b5760405162461bcd60e51b8152600401808060200182810382526021815260200180611a886021913960400191505060405180910390fd5b600061110b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061172a565b60008282018381101561110b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061110b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117cc565b3390565b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561153857600080fd5b505afa15801561154c573d6000803e3d6000fd5b505050506040513d602081101561156257600080fd5b50519050808211156115f6576001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b506116799050565b6001546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561164c57600080fd5b505af1158015611660573d6000803e3d6000fd5b505050506040513d602081101561167657600080fd5b50505b505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611679908490611826565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526112a5908590611826565b600081836117b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561177b578181015183820152602001611763565b50505050905090810190601f1680156117a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816117c257fe5b0495945050505050565b6000818484111561181e5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561177b578181015183820152602001611763565b505050900390565b606061187b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166118d79092919063ffffffff16565b8051909150156116795780806020019051602081101561189a57600080fd5b50516116795760405162461bcd60e51b815260040180806020018281038252602a815260200180611ac9602a913960400191505060405180910390fd5b60606118e684846000856118ee565b949350505050565b60606118f985611a5b565b61194a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106119895780518252601f19909201916020918201910161196a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146119eb576040519150601f19603f3d011682016040523d82523d6000602084013e6119f0565b606091505b50915091508115611a045791506118e69050565b805115611a145780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561177b578181015183820152602001611763565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220ca4dd98ba8ae79786fe6d85b4ac08425570fe8e3ab9a8d1d5cdc9e023e76291464736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a56ed2632e443db5f93e73c89df399a081408cc40000000000000000000000009a555c7f5bb31decd4b7cb038abc468b0c491476000000000000000000000000000000000000000000000000001aa535d3d0c0000000000000000000000000000000000000000000000000000000000000bc1fb8
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0xA56Ed2632E443Db5f93e73C89df399a081408Cc4
Arg [1] : _treasury (address): 0x9A555c7f5BB31DeCD4B7CB038abC468b0C491476
Arg [2] : _rewardPerBlock (uint256): 7500000000000000
Arg [3] : _startBlock (uint256): 12328888
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000a56ed2632e443db5f93e73c89df399a081408cc4
Arg [1] : 0000000000000000000000009a555c7f5bb31decd4b7cb038abc468b0c491476
Arg [2] : 000000000000000000000000000000000000000000000000001aa535d3d0c000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000bc1fb8
Deployed Bytecode Sourcemap
21264:10083: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;26290:969::-;;;;;;;;;;;;;;;;-1:-1:-1;26290:969:0;;;;;;-1:-1:-1;;;;;26290:969:0;;:::i;24379:895::-;;;;;;;;;;;;;;;;-1:-1:-1;24379:895:0;;;-1:-1:-1;;;;;24379:895:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29694:655;;;;;;;;;;;;;;;;-1:-1:-1;29694:655:0;;;;;;;:::i;23248:25::-;;;:::i;27598:928::-;;;;;;;;;;;;;;;;-1:-1:-1;27598:928:0;;:::i;30420:356::-;;;;;;;;;;;;;;;;-1:-1:-1;30420:356:0;;:::i;27342: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;31203:141::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31203:141:0;;;;;;;;:::i;22776:29::-;;;:::i;1969:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;1969:79:0;;;;;;;;;;;;;;26104:121;;;;;;;;;;;;;;;;-1:-1:-1;26104:121:0;;;;;;;:::i;22997:64::-;;;;;;;;;;;;;;;;-1:-1:-1;22997:64:0;;;;;;-1:-1:-1;;;;;22997:64:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22840:39;;;:::i;28596:1046::-;;;;;;;;;;;;;;;;-1:-1:-1;28596:1046: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;26290:969::-;26364:7;26384:21;26408:8;26417:4;26408:14;;;;;;;;;;;;;;;;26457;;;:8;:14;;;;;;-1:-1:-1;;;;;26457:21:0;;;;;;;;;;;26408:14;;;;;;;;26516:21;;;;26567:12;;:37;;-1:-1:-1;;;26567:37:0;;26598:4;26567:37;;;;;;26408:14;;-1:-1:-1;26457:21:0;;26516;;26408:14;;26567:12;;;:22;;:37;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26567:37:0;26634:20;;;;26567:37;;-1:-1:-1;26619:12:0;:35;:52;;;;-1:-1:-1;26658:13:0;;;26619:52;26615:555;;;26688:18;26709:49;26723:4;:20;;;26745:12;26709:13;:49::i;:::-;26688:70;;26773:19;26795:72;26851:15;;26795:51;26830:4;:15;;;26795:30;26810:14;;26795:10;:14;;:30;;;;:::i;:::-;:34;;:51::i;:::-;:55;;:72::i;:::-;26908:11;;26938:14;;26908:46;;;-1:-1:-1;;;26908:46:0;;-1:-1:-1;;;;;26938:14:0;;;26908:46;;;;;;26773:94;;-1:-1:-1;26882:23:0;;26908:11;;;;;:21;;:46;;;;;;;;;;;;;;:11;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26908:46:0;;-1:-1:-1;26973:29:0;;;26969:99;;;27037:15;27023:29;;26969:99;27101:57;27122:35;27148:8;27122:21;:11;27138:4;27122:15;:21::i;:35::-;27101:16;;:20;:57::i;:::-;27082:76;;26615:555;;;;27187:64;27235:4;:15;;;27187:43;27225:4;27187:33;27203:16;27187:4;:11;;;:15;;:33;;;;:::i;:43::-;:47;;:64::i;:::-;27180:71;;;;;;26290: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;29694:655::-;29761:21;29785:8;29794:4;29785:14;;;;;;;;;;;;;;;;29834;;;:8;:14;;;;;;29849:10;29834:26;;;;;;;29879:11;;29785:14;;;;;;;;-1:-1:-1;29879:22:0;-1:-1:-1;29879:22:0;29871:53;;;;;-1:-1:-1;;;29871:53:0;;;;;;;;;;;;-1:-1:-1;;;29871:53:0;;;;;;;;;;;;;;;29935:16;29946:4;29935:10;:16::i;:::-;29962:15;29980:69;30033:4;:15;;;29980:48;30023:4;29980:38;29996:4;:21;;;29980:4;:11;;;:15;;:38;;;;:::i;:69::-;29962:87;;30060:38;30078:10;30090:7;30060:17;:38::i;:::-;30123:11;;:24;;30139:7;30123:15;:24::i;:::-;30109:38;;;30192:21;;;;30176:48;;30219:4;;30176:38;;30109;30176:15;:38::i;:48::-;30158:15;;;:66;30235:12;;:55;;-1:-1:-1;;;;;30235:12:0;30269:10;30282:7;30235:25;:55::i;:::-;30306:35;;;;;;;;30327:4;;30315:10;;30306:35;;;;;;;;;29694:655;;;;;:::o;23248:25::-;;;;:::o;27598:928::-;27650:21;27674:8;27683:4;27674:14;;;;;;;;;;;;;;;;;;27650:38;;27719:4;:20;;;27703:12;:36;27699:75;;27756:7;;;27699:75;27803:12;;:37;;;-1:-1:-1;;;27803:37:0;;27834:4;27803:37;;;;;;27784:16;;-1:-1:-1;;;;;27803:12:0;;:22;;:37;;;;;;;;;;;;;;:12;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27803:37:0;;-1:-1:-1;27855:13:0;27851:102;;-1:-1:-1;27908:12:0;27885:20;;;;:35;27935:7;;27851:102;27963:18;27984:49;27998:4;:20;;;28020:12;27984:13;:49::i;:::-;27963:70;;28044:19;28066:72;28122:15;;28066:51;28101:4;:15;;;28066:30;28081:14;;28066:10;:14;;:30;;;;:::i;:72::-;28175:11;;28205:14;;28175:46;;;-1:-1:-1;;;28175:46:0;;-1:-1:-1;;;;;28205:14:0;;;28175:46;;;;;;28044:94;;-1:-1:-1;28149:23:0;;28175:11;;;;;:21;;:46;;;;;;;;;;;;;;:11;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28175:46:0;;-1:-1:-1;28236:29:0;;;28232:91;;;28296:15;28282:29;;28232:91;28333:14;;:42;;;-1:-1:-1;;;28333:42:0;;;;;;;;;;-1:-1:-1;;;;;28333:14:0;;;;:29;;:42;;;;;;;;;;;;;;;:14;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28410:62:0;;-1:-1:-1;28436:35:0;28462:8;28436:21;:11;28452:4;28436:15;:21::i;:35::-;28410:21;;;;;:25;:62::i;:::-;28386:21;;;:86;-1:-1:-1;;28506:12:0;28483:20;;;;:35;;;;-1:-1:-1;;27598:928:0;;:::o;30420:356::-;30479:21;30503:8;30512:4;30503:14;;;;;;;;;;;;;;;;30552;;;:8;:14;;;;;;30567:10;30552:26;;;;;;;;30636:11;;30503:14;;;;;;;30589:12;;30503:14;;-1:-1:-1;30589:59:0;;-1:-1:-1;;;;;30589:12:0;;;;;30567:10;30589:25;:59::i;:::-;30700:11;;30664:48;;;;;;;30694:4;;30682:10;;30664:48;;;;;;;;;30737:1;30723:15;;;30749;;;;:19;-1:-1:-1;;30420:356:0:o;27342:180::-;27404:8;:15;27387:14;27430:85;27458:6;27452:3;:12;27430:85;;;27488:15;27499:3;27488:10;:15::i;:::-;27466:5;;27430:85;;;;27342: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;31203: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;;;;;;;;;;;;;;;31288:48:::1;-1:-1:-1::0;;;;;31288:27:0;::::1;31316:10;31328:7:::0;31288:27:::1;:48::i;22776:29::-:0;;;;:::o;1969:79::-;2007:7;2034:6;-1:-1:-1;;;;;2034:6:0;1969:79;:::o;26104:121::-;26176:7;26203:14;:3;26211:5;26203:7;:14::i;:::-;26196:21;26104:121;-1:-1:-1;;;26104:121:0:o;22997:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22840:39::-;;;-1:-1:-1;;;;;22840:39:0;;:::o;28596:1046::-;28662:21;28686:8;28695:4;28686:14;;;;;;;;;;;;;;;;28735;;;:8;:14;;;;;;28750:10;28735:26;;;;;;;28686:14;;;;;;;;-1:-1:-1;28772:16:0;28744:4;28772:10;:16::i;:::-;28803:11;;:15;28799:188;;28835:15;28853:69;28906:4;:15;;;28853:48;28896:4;28853:38;28869:4;:21;;;28853:4;:11;;;:15;;:38;;;;:::i;:69::-;28835:87;;28937:38;28955:10;28967:7;28937:17;:38::i;:::-;28799:188;;29001:11;;28997:638;;29033:21;;;;:25;29029:318;;29079:24;29106:48;29145:8;;29106:34;29118:4;:21;;;29106:7;:11;;:34;;;;:::i;:48::-;29232:21;;;;29173:12;;29079:75;;-1:-1:-1;29173:100:0;;-1:-1:-1;;;;;29173:12:0;;;;29211:10;;29232:21;29079:75;29173:29;:100::i;:::-;29302:29;:7;29314:16;29302:11;:29::i;:::-;29292:39;;29029:318;;29361:12;;:74;;-1:-1:-1;;;;;29361:12:0;29399:10;29420:4;29427:7;29361:29;:74::i;:::-;29464:11;;:24;;29480:7;29464:15;:24::i;:::-;29450:38;;;29537:21;;;;29521:48;;29564:4;;29521:38;;29450;29521:15;:38::i;:48::-;29503:15;;;:66;29589:34;;;;;;;;29609:4;;29597:10;;29589:34;;;;;;;;;28997:638;28596:1046;;;;:::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;30892:303::-;30988:11;;:36;;;-1:-1:-1;;;30988:36:0;;31018:4;30988:36;;;;;;30969:16;;-1:-1:-1;;;;;30988:11:0;;:21;;:36;;;;;;;;;;;;;;:11;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30988:36:0;;-1:-1:-1;31039:18:0;;;31035:153;;;31074:11;;:35;;;-1:-1:-1;;;31074:35:0;;-1:-1:-1;;;;;31074:35:0;;;;;;;;;;;;;;;:11;;;;;:20;;:35;;;;;;;;;;;;;;:11;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31035:153:0;;-1:-1:-1;31035:153:0;;31142:11;;:34;;;-1:-1:-1;;;31142:34:0;;-1:-1:-1;;;;;31142:34:0;;;;;;;;;;;;;;;:11;;;;;:20;;:34;;;;;;;;;;;;;;:11;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31035:153:0;30892: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;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
Swarm Source
ipfs://ca4dd98ba8ae79786fe6d85b4ac08425570fe8e3ab9a8d1d5cdc9e023e762914
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.