Contract
0x297fddc5c33ef988dd03bd13e162ae084ea1fe57
3
Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | |||
---|---|---|---|---|---|---|---|
0xbda745d3ffef5a1073c0cbd5f57ed949a57f5f59dc8c89e482cdf71b4f278c46 | 18400628 | 541 days 8 hrs ago | Geist Finance: Deployer 1 | Contract Creation | 0 FTM |
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x59353C21c7543b72D2e27E8Fdc88299589034430
Contract Name:
ChefIncentivesController
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2021-10-02 */ // SPDX-License-Identifier: MIT pragma solidity 0.7.6; // Part: Address /** * @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) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @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'); } } // Part: Context /* * @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; } } // Part: IERC20 /** * @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); } // Part: IMultiFeeDistribution interface IMultiFeeDistribution { function addReward(address rewardsToken) external; function mint(address user, uint256 amount, bool withPenalty) external; } // Part: IOnwardIncentivesController interface IOnwardIncentivesController { function handleAction( address _token, address _user, uint256 _balance, uint256 _totalSupply ) external; } // Part: SafeMath /** * @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) { // Solidity only automatically asserts when dividing by 0 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; } } // Part: Ownable /** * @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() { 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; } } // Part: SafeERC20 /** * @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)); } function safeApprove( IERC20 token, address spender, uint256 value ) internal { 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 callOptionalReturn(IERC20 token, bytes memory data) private { require(address(token).isContract(), 'SafeERC20: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, 'SafeERC20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed'); } } } // File: ChefIncentivesController.sol // based on the Sushi MasterChef // https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol contract ChefIncentivesController is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; // Info of each user. struct UserInfo { uint256 amount; uint256 rewardDebt; } // Info of each pool. struct PoolInfo { uint256 totalSupply; uint256 allocPoint; // How many allocation points assigned to this pool. uint256 lastRewardTime; // Last second that reward distribution occurs. uint256 accRewardPerShare; // Accumulated rewards per share, times 1e12. See below. IOnwardIncentivesController onwardIncentives; } // Info about token emissions for a given time period. struct EmissionPoint { uint128 startTimeOffset; uint128 rewardsPerSecond; } address public poolConfigurator; IMultiFeeDistribution public rewardMinter; uint256 public rewardsPerSecond; uint256 public immutable maxMintableTokens; uint256 public mintedTokens; // Info of each pool. address[] public registeredTokens; mapping(address => PoolInfo) public poolInfo; // Data about the future reward rates. emissionSchedule stored in reverse chronological order, // whenever the number of blocks since the start block exceeds the next block offset a new // reward rate is applied. EmissionPoint[] public emissionSchedule; // token => user => Info of each user that stakes LP tokens. mapping(address => mapping(address => UserInfo)) public userInfo; // Total allocation poitns. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint = 0; // The block number when reward mining starts. uint256 public startTime; // account earning rewards => receiver of rewards for this account // if receiver is set to address(0), rewards are paid to the earner // this is used to aid 3rd party contract integrations mapping (address => address) public claimReceiver; event BalanceUpdated( address indexed token, address indexed user, uint256 balance, uint256 totalSupply ); constructor( uint128[] memory _startTimeOffset, uint128[] memory _rewardsPerSecond, address _poolConfigurator, IMultiFeeDistribution _rewardMinter, uint256 _maxMintable ) Ownable() { poolConfigurator = _poolConfigurator; rewardMinter = _rewardMinter; uint256 length = _startTimeOffset.length; for (uint256 i = length - 1; i + 1 != 0; i--) { emissionSchedule.push( EmissionPoint({ startTimeOffset: _startTimeOffset[i], rewardsPerSecond: _rewardsPerSecond[i] }) ); } maxMintableTokens = _maxMintable; } // Start the party function start() public onlyOwner { require(startTime == 0); startTime = block.timestamp; } // Add a new lp to the pool. Can only be called by the poolConfigurator. function addPool(address _token, uint256 _allocPoint) external { require(msg.sender == poolConfigurator); require(poolInfo[_token].lastRewardTime == 0); _updateEmissions(); totalAllocPoint = totalAllocPoint.add(_allocPoint); registeredTokens.push(_token); poolInfo[_token] = PoolInfo({ totalSupply: 0, allocPoint: _allocPoint, lastRewardTime: block.timestamp, accRewardPerShare: 0, onwardIncentives: IOnwardIncentivesController(0) }); } // Update the given pool's allocation point. Can only be called by the owner. function batchUpdateAllocPoint( address[] calldata _tokens, uint256[] calldata _allocPoints ) public onlyOwner { require(_tokens.length == _allocPoints.length); _massUpdatePools(); uint256 _totalAllocPoint = totalAllocPoint; for (uint256 i = 0; i < _tokens.length; i++) { PoolInfo storage pool = poolInfo[_tokens[i]]; require(pool.lastRewardTime > 0); _totalAllocPoint = _totalAllocPoint.sub(pool.allocPoint).add(_allocPoints[i]); pool.allocPoint = _allocPoints[i]; } totalAllocPoint = _totalAllocPoint; } function setOnwardIncentives( address _token, IOnwardIncentivesController _incentives ) external onlyOwner { require(poolInfo[_token].lastRewardTime != 0); poolInfo[_token].onwardIncentives = _incentives; } function setClaimReceiver(address _user, address _receiver) external { require(msg.sender == _user || msg.sender == owner()); claimReceiver[_user] = _receiver; } function poolLength() external view returns (uint256) { return registeredTokens.length; } function claimableReward(address _user, address[] calldata _tokens) external view returns (uint256[] memory) { uint256[] memory claimable = new uint256[](_tokens.length); for (uint256 i = 0; i < _tokens.length; i++) { address token = _tokens[i]; PoolInfo storage pool = poolInfo[token]; UserInfo storage user = userInfo[token][_user]; uint256 accRewardPerShare = pool.accRewardPerShare; uint256 lpSupply = pool.totalSupply; if (block.timestamp > pool.lastRewardTime && lpSupply != 0) { uint256 duration = block.timestamp.sub(pool.lastRewardTime); uint256 reward = duration.mul(rewardsPerSecond).mul(pool.allocPoint).div(totalAllocPoint); accRewardPerShare = accRewardPerShare.add(reward.mul(1e12).div(lpSupply)); } claimable[i] = user.amount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt); } return claimable; } function _updateEmissions() internal { uint256 length = emissionSchedule.length; if (startTime > 0 && length > 0) { EmissionPoint memory e = emissionSchedule[length-1]; if (block.timestamp.sub(startTime) > e.startTimeOffset) { _massUpdatePools(); rewardsPerSecond = uint256(e.rewardsPerSecond); emissionSchedule.pop(); } } } // Update reward variables for all pools function _massUpdatePools() internal { uint256 totalAP = totalAllocPoint; uint256 length = registeredTokens.length; for (uint256 i = 0; i < length; ++i) { _updatePool(registeredTokens[i], totalAP); } } // Update reward variables of the given pool to be up-to-date. function _updatePool(address _token, uint256 _totalAllocPoint) internal { PoolInfo storage pool = poolInfo[_token]; if (block.timestamp <= pool.lastRewardTime) { return; } uint256 lpSupply = pool.totalSupply; if (lpSupply == 0) { pool.lastRewardTime = block.timestamp; return; } uint256 duration = block.timestamp.sub(pool.lastRewardTime); uint256 reward = duration.mul(rewardsPerSecond).mul(pool.allocPoint).div(_totalAllocPoint); pool.accRewardPerShare = pool.accRewardPerShare.add(reward.mul(1e12).div(lpSupply)); pool.lastRewardTime = block.timestamp; } function _mint(address _user, uint256 _amount) internal { uint256 minted = mintedTokens; if (minted.add(_amount) > maxMintableTokens) { _amount = maxMintableTokens.sub(minted); } if (_amount > 0) { mintedTokens = minted.add(_amount); address receiver = claimReceiver[_user]; if (receiver == address(0)) receiver = _user; rewardMinter.mint(receiver, _amount, true); } } function handleAction(address _user, uint256 _balance, uint256 _totalSupply) external { PoolInfo storage pool = poolInfo[msg.sender]; require(pool.lastRewardTime > 0); _updateEmissions(); _updatePool(msg.sender, totalAllocPoint); UserInfo storage user = userInfo[msg.sender][_user]; if (user.amount > 0) { uint256 pending = user.amount.mul(pool.accRewardPerShare).div(1e12).sub( user.rewardDebt ); _mint(_user, pending); } user.amount = _balance; user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12); pool.totalSupply = _totalSupply; if (pool.onwardIncentives != IOnwardIncentivesController(0)) { pool.onwardIncentives.handleAction(msg.sender, _user, _balance, _totalSupply); } emit BalanceUpdated(msg.sender, _user, _balance, _totalSupply); } // Claim pending rewards for one or more pools. // Rewards are not received directly, they are minted by the rewardMinter. function claim(address _user, address[] calldata _tokens) external { _updateEmissions(); uint256 pending; uint256 _totalAllocPoint = totalAllocPoint; for (uint i = 0; i < _tokens.length; i++) { PoolInfo storage pool = poolInfo[_tokens[i]]; require(pool.lastRewardTime > 0); _updatePool(_tokens[i], _totalAllocPoint); UserInfo storage user = userInfo[_tokens[i]][_user]; pending = pending.add(user.amount.mul(pool.accRewardPerShare).div(1e12).sub(user.rewardDebt)); user.rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12); } _mint(_user, pending); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint128[]","name":"_startTimeOffset","type":"uint128[]"},{"internalType":"uint128[]","name":"_rewardsPerSecond","type":"uint128[]"},{"internalType":"address","name":"_poolConfigurator","type":"address"},{"internalType":"contract IMultiFeeDistribution","name":"_rewardMinter","type":"address"},{"internalType":"uint256","name":"_maxMintable","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BalanceUpdated","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"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"uint256[]","name":"_allocPoints","type":"uint256[]"}],"name":"batchUpdateAllocPoint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"claimableReward","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"emissionSchedule","outputs":[{"internalType":"uint128","name":"startTimeOffset","type":"uint128"},{"internalType":"uint128","name":"rewardsPerSecond","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_balance","type":"uint256"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"name":"handleAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxMintableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolConfigurator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accRewardPerShare","type":"uint256"},{"internalType":"contract IOnwardIncentivesController","name":"onwardIncentives","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"registeredTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardMinter","outputs":[{"internalType":"contract IMultiFeeDistribution","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"setClaimReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"contract IOnwardIncentivesController","name":"_incentives","type":"address"}],"name":"setOnwardIncentives","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","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":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405260006009553480156200001657600080fd5b50604051620019b5380380620019b5833981810160405260a08110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b9083019060208201858111156200007357600080fd5b82518660208202830111640100000000821117156200009157600080fd5b82525081516020918201928201910280838360005b83811015620000c0578181015183820152602001620000a6565b5050505090500160405260200180516040519392919084640100000000821115620000ea57600080fd5b9083019060208201858111156200010057600080fd5b82518660208202830111640100000000821117156200011e57600080fd5b82525081516020918201928201910280838360005b838110156200014d57818101518382015260200162000133565b50505050919091016040908152602083015190830151606090930151909450919250600090506200017d620002b8565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b038086166001600160a01b0319928316179092556002805492851692909116919091179055845160001981015b6001810115620002a857600760405180604001604052808984815181106200022357fe5b60200260200101516001600160801b031681526020018884815181106200024657fe5b6020908102919091018101516001600160801b03908116909252835460018101855560009485529381902083519401805493909101518216600160801b029382166001600160801b0319909316929092171691909117905560001901620001ff565b505060805250620002bc92505050565b3390565b6080516116d4620002e160003980610631528061138c52806113c052506116d46000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063cd1a4d861161007c578063cd1a4d86146104a7578063de7e410c146104d5578063e20c5a8a146104dd578063e5b5349814610503578063eacdaabc146105d1578063f2fde38b146105d957610158565b80638da5cb5b1461037e5780638e2eba09146103a25780639a0ba2ea146104205780639a7b5f111461043d5780639b8e556314610497578063be9a65551461049f57610158565b80633328756411610115578063332875641461022e578063334d0bbd1461025c57806334c54230146102a8578063715018a61461036657806378e979251461036e5780638d75fe051461037657610158565b8063081e3eda1461015d5780630f208beb1461017757806317caf6f1146101be5780631a848e01146101c657806331873e2e146101ce57806332a9caba14610202575b600080fd5b6101656105ff565b60408051918252519081900360200190f35b6101a56004803603604081101561018d57600080fd5b506001600160a01b0381358116916020013516610605565b6040805192835260208301919091528051918290030190f35b610165610629565b61016561062f565b610200600480360360608110156101e457600080fd5b506001600160a01b038135169060208101359060400135610653565b005b6102006004803603604081101561021857600080fd5b506001600160a01b0381351690602001356107fc565b6102006004803603604081101561024457600080fd5b506001600160a01b0381358116916020013516610903565b6102796004803603602081101561027257600080fd5b5035610969565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b610200600480360360408110156102be57600080fd5b810190602081018135600160201b8111156102d857600080fd5b8201836020820111156102ea57600080fd5b803590602001918460208302840111600160201b8311171561030b57600080fd5b919390929091602081019035600160201b81111561032857600080fd5b82018360208201111561033a57600080fd5b803590602001918460208302840111600160201b8311171561035b57600080fd5b50909250905061099e565b610200610acd565b610165610b6f565b610165610b75565b610386610b7b565b604080516001600160a01b039092168252519081900360200190f35b610200600480360360408110156103b857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103e257600080fd5b8201836020820111156103f457600080fd5b803590602001918460208302840111600160201b8311171561041557600080fd5b509092509050610b8a565b6103866004803603602081101561043657600080fd5b5035610d02565b6104636004803603602081101561045357600080fd5b50356001600160a01b0316610d2c565b6040805195865260208601949094528484019290925260608401526001600160a01b03166080830152519081900360a00190f35b610386610d64565b610200610d73565b610200600480360360408110156104bd57600080fd5b506001600160a01b0381358116916020013516610dde565b610386610e8c565b610386600480360360208110156104f357600080fd5b50356001600160a01b0316610e9b565b6105816004803603604081101561051957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561054357600080fd5b82018360208201111561055557600080fd5b803590602001918460208302840111600160201b8311171561057657600080fd5b509092509050610eb6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105bd5781810151838201526020016105a5565b505050509050019250505060405180910390f35b610165611035565b610200600480360360208110156105ef57600080fd5b50356001600160a01b031661103b565b60055490565b60086020908152600092835260408084209091529082529020805460019091015482565b60095481565b7f000000000000000000000000000000000000000000000000000000000000000081565b336000908152600660205260409020600281015461067057600080fd5b610678611133565b610684336009546111ed565b3360009081526008602090815260408083206001600160a01b038816845290915290208054156106f65760006106e882600101546106e264e8d4a510006106dc876003015487600001546112a190919063ffffffff16565b90611303565b90611345565b90506106f48682611387565b505b83815560038201546107149064e8d4a51000906106dc9087906112a1565b600182015582825560048201546001600160a01b0316156107ad576004808301546040805163ae0b537160e01b815233938101939093526001600160a01b0388811660248501526044840188905260648401879052905191169163ae0b537191608480830192600092919082900301818387803b15801561079457600080fd5b505af11580156107a8573d6000803e3d6000fd5b505050505b604080518581526020810185905281516001600160a01b0388169233927f526824944047da5b81071fb6349412005c5da81380b336103fbe5dd34556c776929081900390910190a35050505050565b6001546001600160a01b0316331461081357600080fd5b6001600160a01b0382166000908152600660205260409020600201541561083957600080fd5b610841611133565b60095461084e9082611499565b6009556005805460018181019092557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b039485166001600160a01b031991821681179092556040805160a081018252600080825260208281019788524283850190815260608401838152608085018481529784526006909252939091209151825595519481019490945551600284015592516003830155516004919091018054919093169116179055565b336001600160a01b0383161480610932575061091d610b7b565b6001600160a01b0316336001600160a01b0316145b61093b57600080fd5b6001600160a01b039182166000908152600b6020526040902080546001600160a01b03191691909216179055565b6007818154811061097957600080fd5b6000918252602090912001546001600160801b038082169250600160801b9091041682565b6109a66114f3565b6000546001600160a01b039081169116146109f6576040805162461bcd60e51b8152602060048201819052602482015260008051602061167f833981519152604482015290519081900360640190fd5b828114610a0257600080fd5b610a0a6114f7565b60095460005b84811015610ac357600060066000888885818110610a2a57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002090506000816002015411610a6d57600080fd5b610aa0858584818110610a7c57fe5b90506020020135610a9a83600101548661134590919063ffffffff16565b90611499565b9250848483818110610aae57fe5b60200291909101356001928301555001610a10565b5060095550505050565b610ad56114f3565b6000546001600160a01b03908116911614610b25576040805162461bcd60e51b8152602060048201819052602482015260008051602061167f833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600a5481565b60045481565b6000546001600160a01b031690565b610b92611133565b600954600090815b83811015610cf057600060066000878785818110610bb457fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002090506000816002015411610bf757600080fd5b610c1c868684818110610c0657fe5b905060200201356001600160a01b0316846111ed565b600060086000888886818110610c2e57fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b031681526020019081526020016000206000896001600160a01b03166001600160a01b031681526020019081526020016000209050610cb9610cb282600101546106e264e8d4a510006106dc876003015487600001546112a190919063ffffffff16565b8690611499565b9450610cdf64e8d4a510006106dc846003015484600001546112a190919063ffffffff16565b600191820155919091019050610b9a565b50610cfb8583611387565b5050505050565b60058181548110610d1257600080fd5b6000918252602090912001546001600160a01b0316905081565b60066020526000908152604090208054600182015460028301546003840154600490940154929391929091906001600160a01b031685565b6002546001600160a01b031681565b610d7b6114f3565b6000546001600160a01b03908116911614610dcb576040805162461bcd60e51b8152602060048201819052602482015260008051602061167f833981519152604482015290519081900360640190fd5b600a5415610dd857600080fd5b42600a55565b610de66114f3565b6000546001600160a01b03908116911614610e36576040805162461bcd60e51b8152602060048201819052602482015260008051602061167f833981519152604482015290519081900360640190fd5b6001600160a01b038216600090815260066020526040902060020154610e5b57600080fd5b6001600160a01b03918216600090815260066020526040902060040180546001600160a01b03191691909216179055565b6001546001600160a01b031681565b600b602052600090815260409020546001600160a01b031681565b606060008267ffffffffffffffff81118015610ed157600080fd5b50604051908082528060200260200182016040528015610efb578160200160208202803683370190505b50905060005b8381101561102c576000858583818110610f1757fe5b6001600160a01b03602091820293909301358316600081815260068352604080822060088552818320968e16835295909352919091206003840154845460028601549396509193509142118015610f6d57508015155b15610fdc576000610f8b85600201544261134590919063ffffffff16565b90506000610fb86009546106dc8860010154610fb2600354876112a190919063ffffffff16565b906112a1565b9050610fd7610fd0846106dc8464e8d4a510006112a1565b8590611499565b935050505b61100483600101546106e264e8d4a510006106dc8688600001546112a190919063ffffffff16565b87878151811061101057fe5b6020908102919091010152505060019093019250610f01915050565b50949350505050565b60035481565b6110436114f3565b6000546001600160a01b03908116911614611093576040805162461bcd60e51b8152602060048201819052602482015260008051602061167f833981519152604482015290519081900360640190fd5b6001600160a01b0381166110d85760405162461bcd60e51b81526004018080602001828103825260268152602001806116386026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600754600a54158015906111475750600081115b156111ea5760006007600183038154811061115e57fe5b6000918252602091829020604080518082019091529101546001600160801b03808216808452600160801b9092041692820192909252600a549092506111a5904290611345565b11156111e8576111b36114f7565b60208101516001600160801b031660035560078054806111cf57fe5b6000828152602081208201600019908101919091550190555b505b50565b6001600160a01b03821660009081526006602052604090206002810154421161121657506111e8565b80548061122a5750426002909101556111e8565b600061124383600201544261134590919063ffffffff16565b90506000611268856106dc8660010154610fb2600354876112a190919063ffffffff16565b905061128b611280846106dc8464e8d4a510006112a1565b600386015490611499565b6003850155505042600290920191909155505050565b6000826112b0575060006112fd565b828202828482816112bd57fe5b04146112fa5760405162461bcd60e51b815260040180806020018281038252602181526020018061165e6021913960400191505060405180910390fd5b90505b92915050565b60006112fa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061153b565b60006112fa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115dd565b6004547f00000000000000000000000000000000000000000000000000000000000000006113b58284611499565b11156113e8576113e57f000000000000000000000000000000000000000000000000000000000000000082611345565b91505b8115611494576113f88183611499565b6004556001600160a01b038084166000908152600b6020526040902054168061141e5750825b600254604080516334686fad60e21b81526001600160a01b03848116600483015260248201879052600160448301529151919092169163d1a1beb491606480830192600092919082900301818387803b15801561147a57600080fd5b505af115801561148e573d6000803e3d6000fd5b50505050505b505050565b6000828201838110156112fa576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b60095460055460005b81811015611494576115336005828154811061151857fe5b6000918252602090912001546001600160a01b0316846111ed565b600101611500565b600081836115c75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561158c578181015183820152602001611574565b50505050905090810190601f1680156115b95780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816115d357fe5b0495945050505050565b6000818484111561162f5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561158c578181015183820152602001611574565b50505090039056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220f5e0bdfacb289222962c8c065a4469947fdda80c97d2e6e875a7b3629ecfeb9e64736f6c6343000706003300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000088000000000000000000000000055d4e207dd0a53cf587da0afe726dcb6f652a0d7000000000000000000000000fd59d4725bf972a7bfdf125caaa191fe8ff99c1b0000000000000000000000000000000000000000014adf4b7320334b90000000000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000279b1000000000000000000000000000000000000000000000000000000000004f2810000000000000000000000000000000000000000000000000000000000076b51000000000000000000000000000000000000000000000000000000000009e42100000000000000000000000000000000000000000000000000000000000c5cf100000000000000000000000000000000000000000000000000000000000ed5c10000000000000000000000000000000000000000000000000000000000114e91000000000000000000000000000000000000000000000000000000000013c7610000000000000000000000000000000000000000000000000000000000164031000000000000000000000000000000000000000000000000000000000018b90100000000000000000000000000000000000000000000000000000000001b31d100000000000000000000000000000000000000000000000000000000001daaa100000000000000000000000000000000000000000000000000000000002023710000000000000000000000000000000000000000000000000000000000229c4100000000000000000000000000000000000000000000000000000000002515110000000000000000000000000000000000000000000000000000000000278de100000000000000000000000000000000000000000000000000000000002a06b100000000000000000000000000000000000000000000000000000000002c7f8100000000000000000000000000000000000000000000000000000000002ef8510000000000000000000000000000000000000000000000000000000000317121000000000000000000000000000000000000000000000000000000000033e9f100000000000000000000000000000000000000000000000000000000003662c1000000000000000000000000000000000000000000000000000000000038db9100000000000000000000000000000000000000000000000000000000003b546100000000000000000000000000000000000000000000000000000000003dcd310000000000000000000000000000000000000000000000000000000000404601000000000000000000000000000000000000000000000000000000000042bed100000000000000000000000000000000000000000000000000000000004537a1000000000000000000000000000000000000000000000000000000000047b07100000000000000000000000000000000000000000000000000000000004a294100000000000000000000000000000000000000000000000000000000004ca21100000000000000000000000000000000000000000000000000000000004f1ae100000000000000000000000000000000000000000000000000000000005193b10000000000000000000000000000000000000000000000000000000000540c810000000000000000000000000000000000000000000000000000000000568551000000000000000000000000000000000000000000000000000000000058fe2100000000000000000000000000000000000000000000000000000000005b76f100000000000000000000000000000000000000000000000000000000005defc10000000000000000000000000000000000000000000000000000000000606891000000000000000000000000000000000000000000000000000000000062e1610000000000000000000000000000000000000000000000000000000000655a31000000000000000000000000000000000000000000000000000000000067d30100000000000000000000000000000000000000000000000000000000006a4bd100000000000000000000000000000000000000000000000000000000006cc4a100000000000000000000000000000000000000000000000000000000006f3d71000000000000000000000000000000000000000000000000000000000071b6410000000000000000000000000000000000000000000000000000000000742f11000000000000000000000000000000000000000000000000000000000076a7e100000000000000000000000000000000000000000000000000000000007920b100000000000000000000000000000000000000000000000000000000007b998100000000000000000000000000000000000000000000000000000000007e12510000000000000000000000000000000000000000000000000000000000808b2100000000000000000000000000000000000000000000000000000000008303f10000000000000000000000000000000000000000000000000000000000857cc1000000000000000000000000000000000000000000000000000000000087f59100000000000000000000000000000000000000000000000000000000008a6e6100000000000000000000000000000000000000000000000000000000008ce73100000000000000000000000000000000000000000000000000000000008f6001000000000000000000000000000000000000000000000000000000000091d8d100000000000000000000000000000000000000000000000000000000009451a10000000000000000000000000000000000000000000000000000000000000003e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b278309a7665b825000000000000000000000000000000000000000000000000a3ac64dc9b6a54fc000000000000000000000000000000000000000000000000961aa0739a763a6b00000000000000000000000000000000000000000000000089a8da4e7a3b86e90000000000000000000000000000000000000000000000007e3f32b4dcc9114800000000000000000000000000000000000000000000000073c7c334bfb8693c0000000000000000000000000000000000000000000000006a2e77afba74bf810000000000000000000000000000000000000000000000006160e54d46cad3a7000000000000000000000000000000000000000000000000594e2817be3c500000000000000000000000000000000000000000000000000051e6c30e20a89f030000000000000000000000000000000000000000000000004b1c814355d13de000000000000000000000000000000000000000000000000044e25be7018901ed0000000000000000000000000000000000000000000000003f2c604e57e35e1200000000000000000000000000000000000000000000000039ef997f35949edd0000000000000000000000000000000000000000000000003521fac8b32da3b400000000000000000000000000000000000000000000000030ba4d8428ea0fa70000000000000000000000000000000000000000000000002cb01dc8b7a2fd0900000000000000000000000000000000000000000000000028fbab54bd2fa5c70000000000000000000000000000000000000000000000002595da7748c60bc000000000000000000000000000000000000000000000000022782660ddd59d610000000000000000000000000000000000000000000000001f9c94db855bd6780000000000000000000000000000000000000000000000001cfda9a90b9a61f90000000000000000000000000000000000000000000000001a965e17293b308b0000000000000000000000000000000000000000000000001862151168439865000000000000000000000000000000000000000000000000165c94766f50e7290000000000000000000000000000000000000000000000001481fb44dc427c2500000000000000000000000000000000000000000000000012cebaf08f765a2c000000000000000000000000000000000000000000000000113f905e23673a520000000000000000000000000000000000000000000000000fd17d3837e91dc70000000000000000000000000000000000000000000000000e81c3b986bb59160000000000000000000000000000000000000000000000000d4ddfa85b26a6e90000000000000000000000000000000000000000000000000c338220a68f334f0000000000000000000000000000000000000000000000000b308db7e8a526060000000000000000000000000000000000000000000000000a4310dff57cb187000000000000000000000000000000000000000000000000096944d97ab295d300000000000000000000000000000000000000000000000008a187094aa8b24500000000000000000000000000000000000000000000000007ea5844b5490774000000000000000000000000000000000000000000000000074259a917733fa700000000000000000000000000000000000000000000000006a84865ef8eba12000000000000000000000000000000000000000000000000061afd09364d8cbd000000000000000000000000000000000000000000000000059968b0c1b88c000000000000000000000000000000000000000000000000000522923ba83b520600000000000000000000000000000000000000000000000004b595f06d05bfc00000000000000000000000000000000000000000000000000451a30836b6837400000000000000000000000000000000000000000000000003f5f93a06059f4f00000000000000000000000000000000000000000000000003a1e8bab5c469610000000000000000000000000000000000000000000000000354d07bd8c51058000000000000000000000000000000000000000000000000030e1cc46b609f3500000000000000000000000000000000000000000000000002cd456fb15e82060000000000000000000000000000000000000000000000000291cded35f485e0000000000000000000000000000000000000000000000000025b44e6f82859d300000000000000000000000000000000000000000000000002294172cddb966b00000000000000000000000000000000000000000000000001fb631263cbbdad00000000000000000000000000000000000000000000000001d15266e4cf393c00000000000000000000000000000000000000000000000001aabe625ce161d300000000000000000000000000000000000000000000000001875d5533fdfc7e0000000000000000000000000000000000000000000000000166eb2d0c08bf4200000000000000000000000000000000000000000000000001492974c0cd5122000000000000000000000000000000000000000000000000012ddf5467ff4a1f0000000000000000000000000000000000000000000000000114d883d65eb60600000000000000000000000000000000000000000000000000fde4f0cc199561
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.