Contract
0xc963ef7d977ecb0ab71d835c4cb1bf737f28d010
13
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
MasterChef
Compiler Version
v0.7.6+commit.7338295f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import "../interfaces/IMultiFeeDistribution.sol"; import "../interfaces/IOnwardIncentivesController.sol"; import "../dependencies/openzeppelin/contracts/IERC20.sol"; import "../dependencies/openzeppelin/contracts/SafeERC20.sol"; import "../dependencies/openzeppelin/contracts/SafeMath.sol"; import "../dependencies/openzeppelin/contracts/Ownable.sol"; // based on the Sushi MasterChef // https://github.com/sushiswap/sushiswap/blob/master/contracts/MasterChef.sol contract MasterChef 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 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; // user => base claimable balance mapping(address => uint256) public userBaseClaimable; // 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 Deposit( address indexed token, address indexed user, uint256 amount ); event Withdraw( address indexed token, address indexed user, uint256 amount ); event EmergencyWithdraw( address indexed token, address indexed user, uint256 amount ); 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 onlyOwner { require(poolInfo[_token].lastRewardTime == 0); _updateEmissions(); totalAllocPoint = totalAllocPoint.add(_allocPoint); registeredTokens.push(_token); poolInfo[_token] = PoolInfo({ 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 = IERC20(token).balanceOf(address(this)); 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 = IERC20(_token).balanceOf(address(this)); 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); } } // Deposit LP tokens into the contract. Also triggers a claim. function deposit(address _token, uint256 _amount) external { PoolInfo storage pool = poolInfo[_token]; require(pool.lastRewardTime > 0); _updateEmissions(); _updatePool(_token, totalAllocPoint); UserInfo storage user = userInfo[_token][msg.sender]; uint256 userAmount = user.amount; uint256 accRewardPerShare = pool.accRewardPerShare; if (userAmount > 0) { uint256 pending = userAmount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt); if (pending > 0) { userBaseClaimable[msg.sender] = userBaseClaimable[msg.sender].add(pending); } } IERC20(_token).safeTransferFrom( address(msg.sender), address(this), _amount ); userAmount = userAmount.add(_amount); user.amount = userAmount; user.rewardDebt = userAmount.mul(accRewardPerShare).div(1e12); if (pool.onwardIncentives != IOnwardIncentivesController(0)) { uint256 lpSupply = IERC20(_token).balanceOf(address(this)); pool.onwardIncentives.handleAction(_token, msg.sender, userAmount, lpSupply); } emit Deposit(_token, msg.sender, _amount); } // Withdraw LP tokens. Also triggers a claim. function withdraw(address _token, uint256 _amount) external { PoolInfo storage pool = poolInfo[_token]; require(pool.lastRewardTime > 0); UserInfo storage user = userInfo[_token][msg.sender]; uint256 userAmount = user.amount; require(userAmount >= _amount, "withdraw: not good"); _updateEmissions(); _updatePool(_token, totalAllocPoint); uint256 accRewardPerShare = pool.accRewardPerShare; uint256 pending = userAmount.mul(accRewardPerShare).div(1e12).sub(user.rewardDebt); if (pending > 0) { userBaseClaimable[msg.sender] = userBaseClaimable[msg.sender].add(pending); } userAmount = userAmount.sub(_amount); user.amount = userAmount; user.rewardDebt = userAmount.mul(accRewardPerShare).div(1e12); IERC20(_token).safeTransfer(address(msg.sender), _amount); if (pool.onwardIncentives != IOnwardIncentivesController(0)) { uint256 lpSupply = IERC20(_token).balanceOf(address(this)); pool.onwardIncentives.handleAction(_token, msg.sender, userAmount, lpSupply); } emit Withdraw(_token, msg.sender, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw(address _token) external { PoolInfo storage pool = poolInfo[_token]; UserInfo storage user = userInfo[_token][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; IERC20(_token).safeTransfer(address(msg.sender), amount); emit EmergencyWithdraw(_token, msg.sender, amount); if (pool.onwardIncentives != IOnwardIncentivesController(0)) { uint256 lpSupply = IERC20(_token).balanceOf(address(this)); try pool.onwardIncentives.handleAction(_token, msg.sender, 0, lpSupply) {} catch {} } } // 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 = userBaseClaimable[_user]; userBaseClaimable[_user] = 0; 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]; uint256 rewardDebt = user.amount.mul(pool.accRewardPerShare).div(1e12); pending = pending.add(rewardDebt.sub(user.rewardDebt)); user.rewardDebt = rewardDebt; } _mint(_user, pending); } }
pragma solidity 0.7.6; interface IMultiFeeDistribution { function addReward(address rewardsToken) external; function mint(address user, uint256 amount, bool withPenalty) external; function exit(bool claimRewards, address onBehalfOf) external; function stake(uint256 amount, bool lock, address onBehalfOf) external; }
pragma solidity 0.7.6; interface IOnwardIncentivesController { function handleAction( address _token, address _user, uint256 _balance, uint256 _totalSupply ) external; }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import {IERC20} from './IERC20.sol'; import {SafeMath} from './SafeMath.sol'; import {Address} from './Address.sol'; /** * @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'); } } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @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; } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; import './Context.sol'; /** * @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; } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.7.6; /** * @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'); } }
// SPDX-License-Identifier: MIT pragma solidity 0.7.6; /* * @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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"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":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"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":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","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":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","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":[],"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":"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"}],"name":"userBaseClaimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526000600a553480156200001657600080fd5b506040516200231138038062002311833981810160405260a08110156200003c57600080fd5b81019080805160405193929190846401000000008211156200005d57600080fd5b9083019060208201858111156200007357600080fd5b82518660208202830111640100000000821117156200009157600080fd5b82525081516020918201928201910280838360005b83811015620000c0578181015183820152602001620000a6565b5050505090500160405260200180516040519392919084640100000000821115620000ea57600080fd5b9083019060208201858111156200010057600080fd5b82518660208202830111640100000000821117156200011e57600080fd5b82525081516020918201928201910280838360005b838110156200014d57818101518382015260200162000133565b50505050919091016040908152602083015190830151606090930151909450919250600090506200017d620002b8565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b038086166001600160a01b0319928316179092556002805492851692909116919091179055845160001981015b6001810115620002a857600760405180604001604052808984815181106200022357fe5b60200260200101516001600160801b031681526020018884815181106200024657fe5b6020908102919091018101516001600160801b03908116909252835460018101855560009485529381902083519401805493909101518216600160801b029382166001600160801b0319909316929092171691909117905560001901620001ff565b505060805250620002bc92505050565b3390565b608051612030620002e1600039806106ef5280611b6e5280611ba252506120306000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80638da5cb5b116100f9578063cd1a4d8611610097578063e5b5349811610071578063e5b5349814610595578063eacdaabc14610663578063f2fde38b1461066b578063f3fef3a314610691576101a9565b8063cd1a4d8614610539578063de7e410c14610567578063e20c5a8a1461056f576101a9565b80639a7b5f11116100d35780639a7b5f11146104ae5780639b8e556314610503578063be9a65551461050b578063bfccff4514610513576101a9565b80638da5cb5b146103ef5780638e2eba09146104135780639a0ba2ea14610491576101a9565b8063334d0bbd116101665780636ff1c9bc116101405780636ff1c9bc146103b1578063715018a6146103d757806378e97925146103df5780638d75fe05146103e7576101a9565b8063334d0bbd1461027b57806334c54230146102c757806347e7ef2414610385576101a9565b8063081e3eda146101ae5780630f208beb146101c857806317caf6f11461020f5780631a848e011461021757806332a9caba1461021f578063332875641461024d575b600080fd5b6101b66106bd565b60408051918252519081900360200190f35b6101f6600480360360408110156101de57600080fd5b506001600160a01b03813581169160200135166106c3565b6040805192835260208301919091528051918290030190f35b6101b66106e7565b6101b66106ed565b61024b6004803603604081101561023557600080fd5b506001600160a01b038135169060200135610711565b005b61024b6004803603604081101561026357600080fd5b506001600160a01b038135811691602001351661084a565b6102986004803603602081101561029157600080fd5b50356108b0565b60405180836001600160801b03168152602001826001600160801b031681526020019250505060405180910390f35b61024b600480360360408110156102dd57600080fd5b810190602081018135600160201b8111156102f757600080fd5b82018360208201111561030957600080fd5b803590602001918460208302840111600160201b8311171561032a57600080fd5b919390929091602081019035600160201b81111561034757600080fd5b82018360208201111561035957600080fd5b803590602001918460208302840111600160201b8311171561037a57600080fd5b5090925090506108e5565b61024b6004803603604081101561039b57600080fd5b506001600160a01b038135169060200135610a13565b61024b600480360360208110156103c757600080fd5b50356001600160a01b0316610c6f565b61024b610e05565b6101b6610ea7565b6101b6610ead565b6103f7610eb3565b604080516001600160a01b039092168252519081900360200190f35b61024b6004803603604081101561042957600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561045357600080fd5b82018360208201111561046557600080fd5b803590602001918460208302840111600160201b8311171561048657600080fd5b509092509050610ec2565b6103f7600480360360208110156104a757600080fd5b5035611016565b6104d4600480360360208110156104c457600080fd5b50356001600160a01b0316611040565b604080519485526020850193909352838301919091526001600160a01b03166060830152519081900360800190f35b6103f7611070565b61024b61107f565b6101b66004803603602081101561052957600080fd5b50356001600160a01b03166110ea565b61024b6004803603604081101561054f57600080fd5b506001600160a01b03813581169160200135166110fc565b6103f76111aa565b6103f76004803603602081101561058557600080fd5b50356001600160a01b03166111b9565b610613600480360360408110156105ab57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156105d557600080fd5b8201836020820111156105e757600080fd5b803590602001918460208302840111600160201b8311171561060857600080fd5b5090925090506111d4565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561064f578181015183820152602001610637565b505050509050019250505060405180910390f35b6101b66113b7565b61024b6004803603602081101561068157600080fd5b50356001600160a01b03166113bd565b61024b600480360360408110156106a757600080fd5b506001600160a01b0381351690602001356114b5565b60055490565b60086020908152600092835260408084209091529082529020805460019091015482565b600a5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610719611747565b6000546001600160a01b03908116911614610769576040805162461bcd60e51b81526020600482018190526024820152600080516020611fb1833981519152604482015290519081900360640190fd5b6001600160a01b0382166000908152600660205260409020600101541561078f57600080fd5b61079761174b565b600a546107a49082611805565b600a556005805460018181019092557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b039485166001600160a01b0319918216811790925560408051608081018252948552426020868101918252600087840181815260608901828152968252600690925292909220955186555193850193909355915160028401555160039092018054929093169116179055565b336001600160a01b03831614806108795750610864610eb3565b6001600160a01b0316336001600160a01b0316145b61088257600080fd5b6001600160a01b039182166000908152600c6020526040902080546001600160a01b03191691909216179055565b600781815481106108c057600080fd5b6000918252602090912001546001600160801b038082169250600160801b9091041682565b6108ed611747565b6000546001600160a01b0390811691161461093d576040805162461bcd60e51b81526020600482018190526024820152600080516020611fb1833981519152604482015290519081900360640190fd5b82811461094957600080fd5b610951611868565b600a5460005b84811015610a095760006006600088888581811061097157fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b03168152602001908152602001600020905060008160010154116109b457600080fd5b6109e78585848181106109c357fe5b905060200201356109e18360000154866118b190919063ffffffff16565b90611805565b92508484838181106109f557fe5b602002919091013590915550600101610957565b50600a5550505050565b6001600160a01b03821660009081526006602052604090206001810154610a3957600080fd5b610a4161174b565b610a4d83600a546118f3565b6001600160a01b03831660009081526008602090815260408083203384529091529020805460028301548115610add576001830154600090610aa890610aa264e8d4a51000610a9c8787611a22565b90611a7b565b906118b1565b90508015610adb5733600090815260096020526040902054610aca9082611805565b336000908152600960205260409020555b505b610af26001600160a01b038716333088611abd565b610afc8286611805565b8084559150610b1464e8d4a51000610a9c8484611a22565b600184015560038401546001600160a01b031615610c27576000866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b7b57600080fd5b505afa158015610b8f573d6000803e3d6000fd5b505050506040513d6020811015610ba557600080fd5b505160038601546040805163ae0b537160e01b81526001600160a01b038b811660048301523360248301526044820188905260648201859052915193945091169163ae0b53719160848082019260009290919082900301818387803b158015610c0d57600080fd5b505af1158015610c21573d6000803e3d6000fd5b50505050505b60408051868152905133916001600160a01b038916917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629181900360200190a3505050505050565b6001600160a01b038116600081815260066020908152604080832060088352818420338086529352908320805484825560018201949094559093909291610cb7919083611b17565b60408051828152905133916001600160a01b038716917ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f38833285049181900360200190a360038301546001600160a01b031615610dff576000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610d5957600080fd5b505afa158015610d6d573d6000803e3d6000fd5b505050506040513d6020811015610d8357600080fd5b505160038501546040805163ae0b537160e01b81526001600160a01b0389811660048301523360248301526000604483018190526064830186905292519495509092169263ae0b537192608480820193929182900301818387803b158015610dea57600080fd5b505af1925050508015610dfb575060015b505b505b50505050565b610e0d611747565b6000546001600160a01b03908116911614610e5d576040805162461bcd60e51b81526020600482018190526024820152600080516020611fb1833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600b5481565b60045481565b6000546001600160a01b031690565b610eca61174b565b6001600160a01b0383166000908152600960205260408120805490829055600a5490915b8381101561100b57600060066000878785818110610f0857fe5b905060200201356001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002090506000816001015411610f4b57600080fd5b610f70868684818110610f5a57fe5b905060200201356001600160a01b0316846118f3565b600060086000888886818110610f8257fe5b6001600160a01b036020918202939093013583168452838101949094525060409182016000908120918c1681529252812060028401548154919350610fd29164e8d4a5100091610a9c9190611a22565b9050610ff5610fee8360010154836118b190919063ffffffff16565b8790611805565b6001928301919091559450919091019050610eee565b50610dfd8583611b69565b6005818154811061102657600080fd5b6000918252602090912001546001600160a01b0316905081565b6006602052600090815260409020805460018201546002830154600390930154919290916001600160a01b031684565b6002546001600160a01b031681565b611087611747565b6000546001600160a01b039081169116146110d7576040805162461bcd60e51b81526020600482018190526024820152600080516020611fb1833981519152604482015290519081900360640190fd5b600b54156110e457600080fd5b42600b55565b60096020526000908152604090205481565b611104611747565b6000546001600160a01b03908116911614611154576040805162461bcd60e51b81526020600482018190526024820152600080516020611fb1833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526006602052604090206001015461117957600080fd5b6001600160a01b03918216600090815260066020526040902060030180546001600160a01b03191691909216179055565b6001546001600160a01b031681565b600c602052600090815260409020546001600160a01b031681565b606060008267ffffffffffffffff811180156111ef57600080fd5b50604051908082528060200260200182016040528015611219578160200160208202803683370190505b50905060005b838110156113ae57600085858381811061123557fe5b6001600160a01b03602091820293909301358316600081815260068352604080822060088552818320968e168352958452808220600287015482516370a0823160e01b8152306004820152925194985090955093919287926370a082319260248082019391829003018186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d60208110156112d857600080fd5b50516001850154909150421180156112ef57508015155b1561135e57600061130d8560010154426118b190919063ffffffff16565b9050600061133a600a54610a9c886000015461133460035487611a2290919063ffffffff16565b90611a22565b905061135961135284610a9c8464e8d4a51000611a22565b8590611805565b935050505b6113868360010154610aa264e8d4a51000610a9c868860000154611a2290919063ffffffff16565b87878151811061139257fe5b602090810291909101015250506001909301925061121f915050565b50949350505050565b60035481565b6113c5611747565b6000546001600160a01b03908116911614611415576040805162461bcd60e51b81526020600482018190526024820152600080516020611fb1833981519152604482015290519081900360640190fd5b6001600160a01b03811661145a5760405162461bcd60e51b8152600401808060200182810382526026815260200180611f6a6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216600090815260066020526040902060018101546114db57600080fd5b6001600160a01b0383166000908152600860209081526040808320338452909152902080548381101561154a576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b61155261174b565b61155e85600a546118f3565b6002830154600183015460009061158290610aa264e8d4a51000610a9c8787611a22565b905080156115b557336000908152600960205260409020546115a49082611805565b336000908152600960205260409020555b6115bf83876118b1565b80855592506115d764e8d4a51000610a9c8585611a22565b60018501556115f06001600160a01b0388163388611b17565b60038501546001600160a01b0316156116fe576000876001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561165257600080fd5b505afa158015611666573d6000803e3d6000fd5b505050506040513d602081101561167c57600080fd5b505160038701546040805163ae0b537160e01b81526001600160a01b038c811660048301523360248301526044820189905260648201859052915193945091169163ae0b53719160848082019260009290919082900301818387803b1580156116e457600080fd5b505af11580156116f8573d6000803e3d6000fd5b50505050505b60408051878152905133916001600160a01b038a16917f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb9181900360200190a350505050505050565b3390565b600754600b541580159061175f5750600081115b156118025760006007600183038154811061177657fe5b6000918252602091829020604080518082019091529101546001600160801b03808216808452600160801b9092041692820192909252600b549092506117bd9042906118b1565b1115611800576117cb611868565b60208101516001600160801b031660035560078054806117e757fe5b6000828152602081208201600019908101919091550190555b505b50565b60008282018381101561185f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600a5460055460005b818110156118ac576118a46005828154811061188957fe5b6000918252602090912001546001600160a01b0316846118f3565b600101611871565b505050565b600061185f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611c7a565b6001600160a01b03821660009081526006602052604090206001810154421161191c5750611800565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561196b57600080fd5b505afa15801561197f573d6000803e3d6000fd5b505050506040513d602081101561199557600080fd5b50519050806119ab575042600190910155611800565b60006119c48360010154426118b190919063ffffffff16565b905060006119e985610a9c866000015461133460035487611a2290919063ffffffff16565b9050611a0c611a0184610a9c8464e8d4a51000611a22565b600286015490611805565b6002850155505042600190920191909155505050565b600082611a3157506000611862565b82820282848281611a3e57fe5b041461185f5760405162461bcd60e51b8152600401808060200182810382526021815260200180611f906021913960400191505060405180910390fd5b600061185f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611d11565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610dff908590611d76565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526118ac908490611d76565b6004547f0000000000000000000000000000000000000000000000000000000000000000611b978284611805565b1115611bca57611bc77f0000000000000000000000000000000000000000000000000000000000000000826118b1565b91505b81156118ac57611bda8183611805565b6004556001600160a01b038084166000908152600c60205260409020541680611c005750825b600254604080516334686fad60e21b81526001600160a01b03848116600483015260248201879052600160448301529151919092169163d1a1beb491606480830192600092919082900301818387803b158015611c5c57600080fd5b505af1158015611c70573d6000803e3d6000fd5b5050505050505050565b60008184841115611d095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611cce578181015183820152602001611cb6565b50505050905090810190601f168015611cfb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183611d605760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611cce578181015183820152602001611cb6565b506000838581611d6c57fe5b0495945050505050565b611d88826001600160a01b0316611f2d565b611dd9576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b600080836001600160a01b0316836040518082805190602001908083835b60208310611e165780518252601f199092019160209182019101611df7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611e78576040519150601f19603f3d011682016040523d82523d6000602084013e611e7d565b606091505b509150915081611ed4576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610dff57808060200190516020811015611ef057600080fd5b5051610dff5760405162461bcd60e51b815260040180806020018281038252602a815260200180611fd1602a913960400191505060405180910390fd5b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590611f6157508115155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122054cc26da029ca5b4a9862b6287ab5a3cd2b606ad83c771d8a4041627fcc4ae3764736f6c6343000706003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000007130b521c0e361626eceb353455bcddcbebdb121000000000000000000000000c2054a8c33bfce28de8af4af548c48915c455c13000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000000000000000000000000000000000000002828d000000000000000000000000000000000000000000000000000000000005043900000000000000000000000000000000000000000000000000000000000785e500000000000000000000000000000000000000000000000000000000000a079100000000000000000000000000000000000000000000000000000000000c893d00000000000000000000000000000000000000000000000000000000000f0ae90000000000000000000000000000000000000000000000000000000000118c950000000000000000000000000000000000000000000000000000000000140e410000000000000000000000000000000000000000000000000000000000168fed000000000000000000000000000000000000000000000000000000000019119900000000000000000000000000000000000000000000000000000000001b934500000000000000000000000000000000000000000000000000000000001e14f1000000000000000000000000000000000000000000000000000000000020969d000000000000000000000000000000000000000000000000000000000023184900000000000000000000000000000000000000000000000000000000002599f50000000000000000000000000000000000000000000000000000000000281ba100000000000000000000000000000000000000000000000000000000002a9d4d00000000000000000000000000000000000000000000000000000000002d1ef900000000000000000000000000000000000000000000000000000000002fa0a50000000000000000000000000000000000000000000000000000000000322251000000000000000000000000000000000000000000000000000000000034a3fd00000000000000000000000000000000000000000000000000000000003725a9000000000000000000000000000000000000000000000000000000000039a7550000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b6e4f08eac6d8000000000000000000000000000000000000000000000000004792b6e0d1b7000000000000000000000000000000000000000000000000000043e9a101fb6cb800000000000000000000000000000000000000000000000000407078213eb0a8000000000000000000000000000000000000000000000000003d24c8c8bf1498000000000000000000000000000000000000000000000000003a043f8643a94e0c000000000000000000000000000000000000000000000000370ca776af901800000000000000000000000000000000000000000000000000343be87458b0980000000000000000000000000000000000000000000000000031900616ea9ce0000000000000000000000000000000000000000000000000002f071d849b6ba8000000000000000000000000000000000000000000000000002c9f64fdc165c8000000000000000000000000000000000000000000000000002a5729dc98ce4800000000000000000000000000000000000000000000000000282ccfdb002b2000000000000000000000000000000000000000000000000000261ecfe3ca3b7000000000000000000000000000000000000000000000000000242bb6b57effe800000000000000000000000000000000000000000000000000225223f98715b8000000000000000000000000000000000000000000000000002090c9a1307638000000000000000000000000000000000000000000000000001ee66a886f7f50000000000000000000000000000000000000000000000000001d51d9d2e3b31ed40000000000000000000000000000000000000000000000001bd1f9ebba9c08000000000000000000000000000000000000000000000000001a65bc11457a2000000000000000000000000000000000000000000000000000190c1f0f02c2880000000000000000000000000000000000000000000000000017c42f0f0d31980000000000000000000000000000000000000000000000000016135c2348636000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000003e00000000000000000000000007130b521c0e361626eceb353455bcddcbebdb121000000000000000000000000c2054a8c33bfce28de8af4af548c48915c455c13000000000000000000000000000000000000000000a56fa5b99019a5c8000000000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1000000000000000000000000000000000000000000000000000000000002828d000000000000000000000000000000000000000000000000000000000005043900000000000000000000000000000000000000000000000000000000000785e500000000000000000000000000000000000000000000000000000000000a079100000000000000000000000000000000000000000000000000000000000c893d00000000000000000000000000000000000000000000000000000000000f0ae90000000000000000000000000000000000000000000000000000000000118c950000000000000000000000000000000000000000000000000000000000140e410000000000000000000000000000000000000000000000000000000000168fed000000000000000000000000000000000000000000000000000000000019119900000000000000000000000000000000000000000000000000000000001b934500000000000000000000000000000000000000000000000000000000001e14f1000000000000000000000000000000000000000000000000000000000020969d000000000000000000000000000000000000000000000000000000000023184900000000000000000000000000000000000000000000000000000000002599f50000000000000000000000000000000000000000000000000000000000281ba100000000000000000000000000000000000000000000000000000000002a9d4d00000000000000000000000000000000000000000000000000000000002d1ef900000000000000000000000000000000000000000000000000000000002fa0a50000000000000000000000000000000000000000000000000000000000322251000000000000000000000000000000000000000000000000000000000034a3fd00000000000000000000000000000000000000000000000000000000003725a9000000000000000000000000000000000000000000000000000000000039a7550000000000000000000000000000000000000000000000000000000000000001900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004b6e4f08eac6d8000000000000000000000000000000000000000000000000004792b6e0d1b7000000000000000000000000000000000000000000000000000043e9a101fb6cb800000000000000000000000000000000000000000000000000407078213eb0a8000000000000000000000000000000000000000000000000003d24c8c8bf1498000000000000000000000000000000000000000000000000003a043f8643a94e0c000000000000000000000000000000000000000000000000370ca776af901800000000000000000000000000000000000000000000000000343be87458b0980000000000000000000000000000000000000000000000000031900616ea9ce0000000000000000000000000000000000000000000000000002f071d849b6ba8000000000000000000000000000000000000000000000000002c9f64fdc165c8000000000000000000000000000000000000000000000000002a5729dc98ce4800000000000000000000000000000000000000000000000000282ccfdb002b2000000000000000000000000000000000000000000000000000261ecfe3ca3b7000000000000000000000000000000000000000000000000000242bb6b57effe800000000000000000000000000000000000000000000000000225223f98715b8000000000000000000000000000000000000000000000000002090c9a1307638000000000000000000000000000000000000000000000000001ee66a886f7f50000000000000000000000000000000000000000000000000001d51d9d2e3b31ed40000000000000000000000000000000000000000000000001bd1f9ebba9c08000000000000000000000000000000000000000000000000001a65bc11457a2000000000000000000000000000000000000000000000000000190c1f0f02c2880000000000000000000000000000000000000000000000000017c42f0f0d31980000000000000000000000000000000000000000000000000016135c2348636000
-----Decoded View---------------
Arg [0] : _startTimeOffset (uint128[]): 0,3600,2631888,5260176,7888464,10516752,13145040,15773328,18401616,21029904,23658192,26286480,28914768,31543056,34171344,36799632,39427920,42056208,44684496,47312784,49941072,52569360,55197648,57825936,60454224
Arg [1] : _rewardsPerSecond (uint128[]): 0,5435368700000000000,5157385600000000000,4893619500000000000,4643343300000000000,4405867100000000000,4180536199999999500,3966729500000000000,3763857500000000000,3571361200000000000,3388709700000000000,3215399700000000000,3050953300000000000,2894917200000000000,2746861400000000000,2606377700000000000,2473078700000000000,2346597100000000000,2226584200000000000,2112709199999999700,2004658100000000000,1902133200000000000,1804851700000000000,1712545500000000000,1590716400000000000
Arg [2] : _poolConfigurator (address): 0x7130B521c0E361626eceB353455BcdDcBebDB121
Arg [3] : _rewardMinter (address): 0xc2054A8C33bfce28De8aF4aF548C48915c455c13
Arg [4] : _maxMintable (uint256): 200000000000000000000000000
-----Encoded View---------------
57 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e0
Arg [2] : 0000000000000000000000007130b521c0e361626eceb353455bcddcbebdb121
Arg [3] : 000000000000000000000000c2054a8c33bfce28de8af4af548c48915c455c13
Arg [4] : 000000000000000000000000000000000000000000a56fa5b99019a5c8000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000e10
Arg [8] : 00000000000000000000000000000000000000000000000000000000002828d0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000504390
Arg [10] : 0000000000000000000000000000000000000000000000000000000000785e50
Arg [11] : 0000000000000000000000000000000000000000000000000000000000a07910
Arg [12] : 0000000000000000000000000000000000000000000000000000000000c893d0
Arg [13] : 0000000000000000000000000000000000000000000000000000000000f0ae90
Arg [14] : 000000000000000000000000000000000000000000000000000000000118c950
Arg [15] : 000000000000000000000000000000000000000000000000000000000140e410
Arg [16] : 000000000000000000000000000000000000000000000000000000000168fed0
Arg [17] : 0000000000000000000000000000000000000000000000000000000001911990
Arg [18] : 0000000000000000000000000000000000000000000000000000000001b93450
Arg [19] : 0000000000000000000000000000000000000000000000000000000001e14f10
Arg [20] : 00000000000000000000000000000000000000000000000000000000020969d0
Arg [21] : 0000000000000000000000000000000000000000000000000000000002318490
Arg [22] : 0000000000000000000000000000000000000000000000000000000002599f50
Arg [23] : 000000000000000000000000000000000000000000000000000000000281ba10
Arg [24] : 0000000000000000000000000000000000000000000000000000000002a9d4d0
Arg [25] : 0000000000000000000000000000000000000000000000000000000002d1ef90
Arg [26] : 0000000000000000000000000000000000000000000000000000000002fa0a50
Arg [27] : 0000000000000000000000000000000000000000000000000000000003222510
Arg [28] : 00000000000000000000000000000000000000000000000000000000034a3fd0
Arg [29] : 0000000000000000000000000000000000000000000000000000000003725a90
Arg [30] : 00000000000000000000000000000000000000000000000000000000039a7550
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [33] : 0000000000000000000000000000000000000000000000004b6e4f08eac6d800
Arg [34] : 0000000000000000000000000000000000000000000000004792b6e0d1b70000
Arg [35] : 00000000000000000000000000000000000000000000000043e9a101fb6cb800
Arg [36] : 000000000000000000000000000000000000000000000000407078213eb0a800
Arg [37] : 0000000000000000000000000000000000000000000000003d24c8c8bf149800
Arg [38] : 0000000000000000000000000000000000000000000000003a043f8643a94e0c
Arg [39] : 000000000000000000000000000000000000000000000000370ca776af901800
Arg [40] : 000000000000000000000000000000000000000000000000343be87458b09800
Arg [41] : 00000000000000000000000000000000000000000000000031900616ea9ce000
Arg [42] : 0000000000000000000000000000000000000000000000002f071d849b6ba800
Arg [43] : 0000000000000000000000000000000000000000000000002c9f64fdc165c800
Arg [44] : 0000000000000000000000000000000000000000000000002a5729dc98ce4800
Arg [45] : 000000000000000000000000000000000000000000000000282ccfdb002b2000
Arg [46] : 000000000000000000000000000000000000000000000000261ecfe3ca3b7000
Arg [47] : 000000000000000000000000000000000000000000000000242bb6b57effe800
Arg [48] : 000000000000000000000000000000000000000000000000225223f98715b800
Arg [49] : 0000000000000000000000000000000000000000000000002090c9a130763800
Arg [50] : 0000000000000000000000000000000000000000000000001ee66a886f7f5000
Arg [51] : 0000000000000000000000000000000000000000000000001d51d9d2e3b31ed4
Arg [52] : 0000000000000000000000000000000000000000000000001bd1f9ebba9c0800
Arg [53] : 0000000000000000000000000000000000000000000000001a65bc11457a2000
Arg [54] : 000000000000000000000000000000000000000000000000190c1f0f02c28800
Arg [55] : 00000000000000000000000000000000000000000000000017c42f0f0d319800
Arg [56] : 00000000000000000000000000000000000000000000000016135c2348636000
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.