More Info
Private Name Tags
ContractCreator:
Latest 25 from a total of 1,847 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Emergency Withdr... | 74963800 | 57 days ago | IN | 0 FTM | 0.00258103 | ||||
Withdraw | 66179608 | 251 days ago | IN | 0 FTM | 0.00217368 | ||||
Withdraw | 66179580 | 251 days ago | IN | 0 FTM | 0.0025428 | ||||
Withdraw | 66139275 | 252 days ago | IN | 0 FTM | 0.00219942 | ||||
Withdraw | 66139142 | 252 days ago | IN | 0 FTM | 0.00218026 | ||||
Withdraw | 59653039 | 352 days ago | IN | 0 FTM | 0.00591595 | ||||
Withdraw | 57129101 | 387 days ago | IN | 0 FTM | 0.00478669 | ||||
Withdraw | 57129096 | 387 days ago | IN | 0 FTM | 0.00478669 | ||||
Withdraw | 57049244 | 389 days ago | IN | 0 FTM | 0.00121265 | ||||
Withdraw | 56994181 | 390 days ago | IN | 0 FTM | 0.00199838 | ||||
Withdraw | 56649900 | 395 days ago | IN | 0 FTM | 0.00106752 | ||||
Withdraw | 56502507 | 397 days ago | IN | 0 FTM | 0.00223394 | ||||
Withdraw | 56353050 | 400 days ago | IN | 0 FTM | 0.00100775 | ||||
Withdraw | 56352664 | 400 days ago | IN | 0 FTM | 0.00100933 | ||||
Withdraw | 56344689 | 400 days ago | IN | 0 FTM | 0.00107671 | ||||
Withdraw | 56288118 | 401 days ago | IN | 0 FTM | 0.0102685 | ||||
Withdraw | 56284988 | 401 days ago | IN | 0 FTM | 0.00239213 | ||||
Withdraw | 56282259 | 401 days ago | IN | 0 FTM | 0.00187147 | ||||
Withdraw | 56281359 | 401 days ago | IN | 0 FTM | 0.00181844 | ||||
Withdraw | 56278448 | 401 days ago | IN | 0 FTM | 0.00239814 | ||||
Withdraw | 56277561 | 401 days ago | IN | 0 FTM | 0.00256098 | ||||
Withdraw | 56276800 | 401 days ago | IN | 0 FTM | 0.00284127 | ||||
Withdraw | 56176659 | 402 days ago | IN | 0 FTM | 0.00108779 | ||||
Withdraw | 56168103 | 402 days ago | IN | 0 FTM | 0.00111534 | ||||
Withdraw | 56124702 | 403 days ago | IN | 0 FTM | 0.00120212 |
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
35902178 | 716 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Contract Name:
NeoPool
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-04-12 */ // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.4.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, 'SafeMath: addition overflow'); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, 'SafeMath: subtraction overflow'); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, 'SafeMath: multiplication overflow'); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, 'SafeMath: division by zero'); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, 'SafeMath: modulo by zero'); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } } pragma solidity >=0.4.0; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the erc token owner. */ function getOwner() external view returns (address); /** * @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); } pragma solidity ^0.6.2; /** * @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'); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'Address: low-level call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, 'Address: low-level call with value failed'); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, 'Address: insufficient balance for call'); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), 'Address: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.6.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require( (value == 0) || (token.allowance(address(this), spender) == 0), 'SafeERC20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeERC20: decreased allowance below zero' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, 'SafeERC20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeERC20: ERC20 operation did not succeed'); } } } pragma solidity >=0.4.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with 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. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } pragma solidity >=0.4.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public 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 onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File contracts/SousChef.sol pragma solidity 0.6.12; // Neo is the One. Knows a lot about the Matrix, and he is a fair guy as well as Morpheus. contract NeoPool is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; address public oracle; // Info of each user. struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. // 3.4 // uint256 initTimestamp; } uint public period = 691200; IERC20 public pills; // = 0xB66b5D38E183De42F21e92aBcAF3c712dd5d6286; IERC20 public wftm; // = 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83; // uint256 allocPoint; // How many allocation points assigned to this pool. MORPHs to distribute per second. uint256 lastUpdateTimestamp; uint256 lastRewardTimestamp; // Last block number that MORPHs distribution occurs. uint256 accMorphPerShare; // Accumulated MORPHs per share, times 1e12. See below. mapping (address => UserInfo) public userInfo; // 3.4 // address[] userAddresses; // dynamic accMorphPerShare uint256[] public rewardUpdateTimestamps; // block.timestamp => rewardPerSec during that reward segement mapping(uint256 => uint256) public rewardSegments; event Deposit(address indexed user, uint256 amount); event Withdraw(address indexed user, uint256 amount); event EmergencyWithdraw(address indexed user, uint256 amount); constructor( IERC20 _stakingToken, IERC20 _rewardToken ) public { // for testing pills = _stakingToken; wftm = _rewardToken; lastRewardTimestamp = block.timestamp; accMorphPerShare = 0; // to be set later oracle = msg.sender; } function setOracle(address _oracle) public onlyOwner { oracle = _oracle; } function getRewardRate() public view returns (uint rewards) { for (uint j = 0; j < rewardUpdateTimestamps.length; j++) { uint256 multiplier = 0; // if we are at the end of the rewardUpdateTimestamps if (j == rewardUpdateTimestamps.length - 2) { // if we have reached the end of the rewards // i.e oracle didnt trigger update in time, because continuity is expected if(rewardUpdateTimestamps[j + 1] <= block.timestamp) multiplier = rewardUpdateTimestamps[j + 1] - lastRewardTimestamp; // if the last reward timestamp was before a new segment started // the time since the start of this segment else if(lastRewardTimestamp <= rewardUpdateTimestamps[j]) multiplier = block.timestamp - rewardUpdateTimestamps[j]; // if the last reward timestamp was in the current segment // the time since last reward timestamp else multiplier = block.timestamp - lastRewardTimestamp; // we are at the end rewards = rewards.add(multiplier.mul(rewardSegments[rewardUpdateTimestamps[j]])); break; } // if the last reward timestamp was after this segment // it means we've already added this segment else if (rewardUpdateTimestamps[j + 1] <= lastRewardTimestamp) continue; // if we haven't added this segment fully // add in remaining blocks // 3.5 else if (rewardUpdateTimestamps[j + 1] <= block.timestamp) multiplier = rewardUpdateTimestamps[j + 1] - lastRewardTimestamp; rewards = rewards.add(multiplier.mul(rewardSegments[rewardUpdateTimestamps[j]])); } } // View function to see pending Reward on frontend. // constant neo function pendingReward(address _user) external view returns (uint256) { UserInfo storage user = userInfo[_user]; uint256 pillsSupply = pills.balanceOf(address(this)); uint _accMorphPerShare = accMorphPerShare; if (block.timestamp > lastRewardTimestamp && pillsSupply != 0) { uint rewardPerSec = getRewardRate(); _accMorphPerShare = _accMorphPerShare.add(rewardPerSec.mul(1e12).div(pillsSupply)); } return user.amount.mul(_accMorphPerShare).div(1e12).sub(user.rewardDebt); } function updatePeriod(uint _period) public onlyOwner { period = _period; } // 3.4 // returns the total amount of outstanding rewards from the current segment function outstandingRewards() public view returns (uint256 outstanding) { // pC2 if(rewardUpdateTimestamps.length == 0) return 0; uint segment0Timestamp = rewardUpdateTimestamps[rewardUpdateTimestamps.length - 2]; uint segment1Timestamp = rewardUpdateTimestamps[rewardUpdateTimestamps.length - 1]; if(segment1Timestamp >= block.timestamp) { outstanding = 0; } else { uint timeRemaining = segment1Timestamp - block.timestamp; uint rewardPerSec = rewardSegments[segment0Timestamp]; outstanding = timeRemaining * rewardPerSec; } } // constant neo function updateRewardPerSec(uint256 newAmount) public { require(msg.sender == oracle || msg.sender == owner(), "Only the oracle or Neo himself can get through..."); require(block.timestamp > lastUpdateTimestamp); lastUpdateTimestamp = block.timestamp; // uint256 pillsSupply = pills.balanceOf(address(this)); // if (pillsSupply == 0) return; uint256 balance = wftm.balanceOf(address(this)); if (balance == 0) return; uint rewardSupply = newAmount.add(outstandingRewards()); // amount of seconds in a week + 1/3 day padding in case of network congestion // don't want to run out of that good good uint256 rewardPerSec = rewardSupply.div(period); // if it's not the first segment // update this segment // replace previous n.length - 1 index with current timestamp if( // not the first segment rewardUpdateTimestamps.length != 0 // within bounds of current segment && block.timestamp < rewardUpdateTimestamps[rewardUpdateTimestamps.length - 1]) rewardUpdateTimestamps[rewardUpdateTimestamps.length - 1] = block.timestamp; // this should never happen, but in case there is oracle lag/downtime // this prevents extra rewards, so there would be a segment with a 0 rewardPerSec value else rewardUpdateTimestamps.push(block.timestamp); rewardUpdateTimestamps.push(block.timestamp + period); rewardSegments[block.timestamp] = rewardPerSec; // in case rewardPerSec doesnt update in time rewardSegments[block.timestamp + period] = 0; updatePool(); } // constant neo // Update reward variables of the given pool to be up-to-date. function updatePool() public { if (block.timestamp <= lastRewardTimestamp) return; if (rewardUpdateTimestamps[rewardUpdateTimestamps.length - 1] <= lastRewardTimestamp) return; // no more to give since last reward uint256 pillsSupply = pills.balanceOf(address(this)); if (pillsSupply == 0) { lastRewardTimestamp = block.timestamp; return; } uint rewardPerSec = getRewardRate(); accMorphPerShare = accMorphPerShare.add(rewardPerSec.mul(1e12).div(pillsSupply)); lastRewardTimestamp = block.timestamp; } // Stake SYRUP tokens to SmartChef function deposit(uint256 _amount) public { UserInfo storage user = userInfo[msg.sender]; // 3.4 // if(user.initTimestamp == 0) { // user.initTimestamp = block.timestamp; // userAddresses[msg.sender]; // } updatePool(); if (user.amount > 0) { uint256 pending = user.amount.mul(accMorphPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { wftm.safeTransfer(address(msg.sender), pending); } } if(_amount > 0) { pills.safeTransferFrom(address(msg.sender), address(this), _amount); user.amount = user.amount.add(_amount); } user.rewardDebt = user.amount.mul(accMorphPerShare).div(1e12); emit Deposit(msg.sender, _amount); } // Withdraw SYRUP tokens from STAKING. function withdraw(uint256 _amount) public { UserInfo storage user = userInfo[msg.sender]; require(user.amount >= _amount, "withdraw: not good"); updatePool(); uint256 pending = user.amount.mul(accMorphPerShare).div(1e12).sub(user.rewardDebt); if(pending > 0) { wftm.safeTransfer(address(msg.sender), pending); } if(_amount > 0) { user.amount = user.amount.sub(_amount); pills.safeTransfer(address(msg.sender), _amount); } user.rewardDebt = user.amount.mul(accMorphPerShare).div(1e12); emit Withdraw(msg.sender, _amount); } // Withdraw without caring about rewards. EMERGENCY ONLY. function emergencyWithdraw() public { UserInfo storage user = userInfo[msg.sender]; pills.safeTransfer(address(msg.sender), user.amount); user.amount = 0; user.rewardDebt = 0; emit EmergencyWithdraw(msg.sender, user.amount); } // Withdraw reward. EMERGENCY ONLY. function emergencyRewardWithdraw(uint256 _amount) public onlyOwner { require(_amount < wftm.balanceOf(address(this)), 'not enough token'); wftm.safeTransfer(address(msg.sender), _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_stakingToken","type":"address"},{"internalType":"contract IERC20","name":"_rewardToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"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":"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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyRewardWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardRate","outputs":[{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"outstandingRewards","outputs":[{"internalType":"uint256","name":"outstanding","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pills","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardSegments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardUpdateTimestamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"updatePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateRewardPerSec","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"wftm","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052620a8c0060025534801561001757600080fd5b506040516117803803806117808339818101604052604081101561003a57600080fd5b508051602090910151600061004d6100e1565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169181169190911790915542600655600060075560018054909116331790556100e5565b3390565b61168c806100f46000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80637e1a3786116100b8578063e270d1df1161007c578063e270d1df146102b7578063e3161ddd146102d4578063ef78d4fd146102dc578063f2fde38b146102e4578063f40f0f521461030a578063f4f45b461461033057610137565b80637e1a3786146102655780638d3aa8bc1461026d5780638da5cb5b1461028a578063b6b55f2514610292578063db2e21bc146102af57610137565b80633279beab116100ff5780633279beab146101f557806349f3afd914610212578063715018a61461022f5780637adbf973146102375780637dc0d1d01461025d57610137565b8063040c30da1461013c57806315a1e8bf146101605780631959a0021461017a578063249de047146101b95780632e1a7d4d146101d6575b600080fd5b610144610338565b604080516001600160a01b039092168252519081900360200190f35b610168610347565b60408051918252519081900360200190f35b6101a06004803603602081101561019057600080fd5b50356001600160a01b03166103c9565b6040805192835260208301919091528051918290030190f35b610168600480360360208110156101cf57600080fd5b50356103e2565b6101f3600480360360208110156101ec57600080fd5b5035610400565b005b6101f36004803603602081101561020b57600080fd5b503561053d565b6101686004803603602081101561022857600080fd5b503561066d565b6101f361067f565b6101f36004803603602081101561024d57600080fd5b50356001600160a01b0316610721565b61014461079b565b6101686107aa565b6101f36004803603602081101561028357600080fd5b503561093a565b610144610b5a565b6101f3600480360360208110156102a857600080fd5b5035610b69565b6101f3610c59565b6101f3600480360360208110156102cd57600080fd5b5035610cc6565b6101f3610d23565b610168610e1a565b6101f3600480360360208110156102fa57600080fd5b50356001600160a01b0316610e20565b6101686004803603602081101561032057600080fd5b50356001600160a01b0316610e81565b610144610f86565b6003546001600160a01b031681565b600954600090610359575060006103c6565b6009805460009190600119810190811061036f57fe5b60009182526020822001546009805491935090600019810190811061039057fe5b906000526020600020015490504281106103ad57600092506103c3565b6000828152600a60205260409020544282030292505b50505b90565b6008602052600090815260409020805460019091015482565b600981815481106103ef57fe5b600091825260209091200154905081565b336000908152600860205260409020805482111561045a576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b610462610d23565b600061049a826001015461049464e8d4a5100061048e6007548760000154610f9590919063ffffffff16565b90610ff7565b90611039565b905080156104b9576004546104b9906001600160a01b0316338361107b565b82156104e45781546104cb9084611039565b82556003546104e4906001600160a01b0316338561107b565b60075482546104fd9164e8d4a510009161048e91610f95565b600183015560408051848152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505050565b6105456110d2565b6000546001600160a01b03908116911614610595576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b1580156105e157600080fd5b505afa1580156105f5573d6000803e3d6000fd5b505050506040513d602081101561060b57600080fd5b50518110610653576040805162461bcd60e51b815260206004820152601060248201526f3737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b60045461066a906001600160a01b0316338361107b565b50565b600a6020526000908152604090205481565b6106876110d2565b6000546001600160a01b039081169116146106d7576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107296110d2565b6000546001600160a01b03908116911614610779576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6000805b60095481101561093657600954600090600119018214156108a75742600983600101815481106107da57fe5b90600052602060002001541161081057600654600983600101815481106107fd57fe5b9060005260206000200154039050610858565b6009828154811061081d57fe5b906000526020600020015460065411610851576009828154811061083d57fe5b906000526020600020015442039050610858565b5060065442035b61089f610898600a60006009868154811061086f57fe5b906000526020600020015481526020019081526020016000205483610f9590919063ffffffff16565b84906110d6565b925050610936565b600654600983600101815481106108ba57fe5b9060005260206000200154116108d0575061092e565b42600983600101815481106108e157fe5b906000526020600020015411610913576006546009836001018154811061090457fe5b90600052602060002001540390505b61092a610898600a60006009868154811061086f57fe5b9250505b6001016107ae565b5090565b6001546001600160a01b031633148061096b5750610956610b5a565b6001600160a01b0316336001600160a01b0316145b6109a65760405162461bcd60e51b81526004018080602001828103825260318152602001806115bb6031913960400191505060405180910390fd5b60055442116109b457600080fd5b4260055560048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015610a0757600080fd5b505afa158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b5051905080610a40575061066a565b6000610a4d610898610347565b90506000610a6660025483610ff790919063ffffffff16565b60095490915015801590610a955750600980546000198101908110610a8757fe5b906000526020600020015442105b15610ac057600980544291906000198101908110610aaf57fe5b600091825260209091200155610af7565b60098054600181018255600091909152427f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909101555b600280546009805460018101909155429182017f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909101556000818152600a60205260408082208590559254909101815290812055610b54610d23565b50505050565b6000546001600160a01b031690565b336000908152600860205260409020610b80610d23565b805415610bd4576000610bb3826001015461049464e8d4a5100061048e6007548760000154610f9590919063ffffffff16565b90508015610bd257600454610bd2906001600160a01b0316338361107b565b505b8115610c0157600354610bf2906001600160a01b0316333085611130565b8054610bfe90836110d6565b81555b6007548154610c1a9164e8d4a510009161048e91610f95565b600182015560408051838152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25050565b33600081815260086020526040902080546003549192610c82926001600160a01b03169161107b565b600080825560018201819055604080519182525133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a250565b610cce6110d2565b6000546001600160a01b03908116911614610d1e576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b600255565b6006544211610d3157610e18565b600654600980546000198101908110610d4657fe5b906000526020600020015411610d5b57610e18565b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610da657600080fd5b505afa158015610dba573d6000803e3d6000fd5b505050506040513d6020811015610dd057600080fd5b5051905080610de3575042600655610e18565b6000610ded6107aa565b9050610e0e610e058361048e8464e8d4a51000610f95565b600754906110d6565b6007555050426006555b565b60025481565b610e286110d2565b6000546001600160a01b03908116911614610e78576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b61066a8161118a565b6001600160a01b03808216600090815260086020908152604080832060035482516370a0823160e01b8152306004820152925194959194869491909216926370a082319260248083019392829003018186803b158015610ee057600080fd5b505afa158015610ef4573d6000803e3d6000fd5b505050506040513d6020811015610f0a57600080fd5b50516007546006549192509042118015610f2357508115155b15610f55576000610f326107aa565b9050610f51610f4a8461048e8464e8d4a51000610f95565b83906110d6565b9150505b610f7d836001015461049464e8d4a5100061048e858860000154610f9590919063ffffffff16565b95945050505050565b6004546001600160a01b031681565b600082610fa457506000610ff1565b82820282848281610fb157fe5b0414610fee5760405162461bcd60e51b81526004018080602001828103825260218152602001806115ec6021913960400191505060405180910390fd5b90505b92915050565b6000610fee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061122a565b6000610fee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112cc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110cd908490611326565b505050565b3390565b600082820183811015610fee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610b54908590611326565b6001600160a01b0381166111cf5760405162461bcd60e51b81526004018080602001828103825260268152602001806115956026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836112b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561127b578181015183820152602001611263565b50505050905090810190601f1680156112a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816112c257fe5b0495945050505050565b6000818484111561131e5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561127b578181015183820152602001611263565b505050900390565b606061137b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113d79092919063ffffffff16565b8051909150156110cd5780806020019051602081101561139a57600080fd5b50516110cd5760405162461bcd60e51b815260040180806020018281038252602a81526020018061162d602a913960400191505060405180910390fd5b60606113e684846000856113ee565b949350505050565b60606113f98561155b565b61144a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106114895780518252601f19909201916020918201910161146a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114eb576040519150601f19603f3d011682016040523d82523d6000602084013e6114f0565b606091505b509150915081156115045791506113e69050565b8051156115145780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561127b578181015183820152602001611263565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906113e657505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c7920746865206f7261636c65206f72204e656f2068696d73656c662063616e20676574207468726f7567682e2e2e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206f74637e4db556030888e6248e8610e5748d00aea0177587eaebc513dde3ed5f64736f6c634300060c0033000000000000000000000000b66b5d38e183de42f21e92abcaf3c712dd5d628600000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80637e1a3786116100b8578063e270d1df1161007c578063e270d1df146102b7578063e3161ddd146102d4578063ef78d4fd146102dc578063f2fde38b146102e4578063f40f0f521461030a578063f4f45b461461033057610137565b80637e1a3786146102655780638d3aa8bc1461026d5780638da5cb5b1461028a578063b6b55f2514610292578063db2e21bc146102af57610137565b80633279beab116100ff5780633279beab146101f557806349f3afd914610212578063715018a61461022f5780637adbf973146102375780637dc0d1d01461025d57610137565b8063040c30da1461013c57806315a1e8bf146101605780631959a0021461017a578063249de047146101b95780632e1a7d4d146101d6575b600080fd5b610144610338565b604080516001600160a01b039092168252519081900360200190f35b610168610347565b60408051918252519081900360200190f35b6101a06004803603602081101561019057600080fd5b50356001600160a01b03166103c9565b6040805192835260208301919091528051918290030190f35b610168600480360360208110156101cf57600080fd5b50356103e2565b6101f3600480360360208110156101ec57600080fd5b5035610400565b005b6101f36004803603602081101561020b57600080fd5b503561053d565b6101686004803603602081101561022857600080fd5b503561066d565b6101f361067f565b6101f36004803603602081101561024d57600080fd5b50356001600160a01b0316610721565b61014461079b565b6101686107aa565b6101f36004803603602081101561028357600080fd5b503561093a565b610144610b5a565b6101f3600480360360208110156102a857600080fd5b5035610b69565b6101f3610c59565b6101f3600480360360208110156102cd57600080fd5b5035610cc6565b6101f3610d23565b610168610e1a565b6101f3600480360360208110156102fa57600080fd5b50356001600160a01b0316610e20565b6101686004803603602081101561032057600080fd5b50356001600160a01b0316610e81565b610144610f86565b6003546001600160a01b031681565b600954600090610359575060006103c6565b6009805460009190600119810190811061036f57fe5b60009182526020822001546009805491935090600019810190811061039057fe5b906000526020600020015490504281106103ad57600092506103c3565b6000828152600a60205260409020544282030292505b50505b90565b6008602052600090815260409020805460019091015482565b600981815481106103ef57fe5b600091825260209091200154905081565b336000908152600860205260409020805482111561045a576040805162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b604482015290519081900360640190fd5b610462610d23565b600061049a826001015461049464e8d4a5100061048e6007548760000154610f9590919063ffffffff16565b90610ff7565b90611039565b905080156104b9576004546104b9906001600160a01b0316338361107b565b82156104e45781546104cb9084611039565b82556003546104e4906001600160a01b0316338561107b565b60075482546104fd9164e8d4a510009161048e91610f95565b600183015560408051848152905133917f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364919081900360200190a2505050565b6105456110d2565b6000546001600160a01b03908116911614610595576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b60048054604080516370a0823160e01b81523093810193909352516001600160a01b03909116916370a08231916024808301926020929190829003018186803b1580156105e157600080fd5b505afa1580156105f5573d6000803e3d6000fd5b505050506040513d602081101561060b57600080fd5b50518110610653576040805162461bcd60e51b815260206004820152601060248201526f3737ba1032b737bab3b4103a37b5b2b760811b604482015290519081900360640190fd5b60045461066a906001600160a01b0316338361107b565b50565b600a6020526000908152604090205481565b6106876110d2565b6000546001600160a01b039081169116146106d7576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6107296110d2565b6000546001600160a01b03908116911614610779576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b031681565b6000805b60095481101561093657600954600090600119018214156108a75742600983600101815481106107da57fe5b90600052602060002001541161081057600654600983600101815481106107fd57fe5b9060005260206000200154039050610858565b6009828154811061081d57fe5b906000526020600020015460065411610851576009828154811061083d57fe5b906000526020600020015442039050610858565b5060065442035b61089f610898600a60006009868154811061086f57fe5b906000526020600020015481526020019081526020016000205483610f9590919063ffffffff16565b84906110d6565b925050610936565b600654600983600101815481106108ba57fe5b9060005260206000200154116108d0575061092e565b42600983600101815481106108e157fe5b906000526020600020015411610913576006546009836001018154811061090457fe5b90600052602060002001540390505b61092a610898600a60006009868154811061086f57fe5b9250505b6001016107ae565b5090565b6001546001600160a01b031633148061096b5750610956610b5a565b6001600160a01b0316336001600160a01b0316145b6109a65760405162461bcd60e51b81526004018080602001828103825260318152602001806115bb6031913960400191505060405180910390fd5b60055442116109b457600080fd5b4260055560048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b158015610a0757600080fd5b505afa158015610a1b573d6000803e3d6000fd5b505050506040513d6020811015610a3157600080fd5b5051905080610a40575061066a565b6000610a4d610898610347565b90506000610a6660025483610ff790919063ffffffff16565b60095490915015801590610a955750600980546000198101908110610a8757fe5b906000526020600020015442105b15610ac057600980544291906000198101908110610aaf57fe5b600091825260209091200155610af7565b60098054600181018255600091909152427f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909101555b600280546009805460018101909155429182017f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af909101556000818152600a60205260408082208590559254909101815290812055610b54610d23565b50505050565b6000546001600160a01b031690565b336000908152600860205260409020610b80610d23565b805415610bd4576000610bb3826001015461049464e8d4a5100061048e6007548760000154610f9590919063ffffffff16565b90508015610bd257600454610bd2906001600160a01b0316338361107b565b505b8115610c0157600354610bf2906001600160a01b0316333085611130565b8054610bfe90836110d6565b81555b6007548154610c1a9164e8d4a510009161048e91610f95565b600182015560408051838152905133917fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c919081900360200190a25050565b33600081815260086020526040902080546003549192610c82926001600160a01b03169161107b565b600080825560018201819055604080519182525133917f5fafa99d0643513820be26656b45130b01e1c03062e1266bf36f88cbd3bd9695919081900360200190a250565b610cce6110d2565b6000546001600160a01b03908116911614610d1e576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b600255565b6006544211610d3157610e18565b600654600980546000198101908110610d4657fe5b906000526020600020015411610d5b57610e18565b600354604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015610da657600080fd5b505afa158015610dba573d6000803e3d6000fd5b505050506040513d6020811015610dd057600080fd5b5051905080610de3575042600655610e18565b6000610ded6107aa565b9050610e0e610e058361048e8464e8d4a51000610f95565b600754906110d6565b6007555050426006555b565b60025481565b610e286110d2565b6000546001600160a01b03908116911614610e78576040805162461bcd60e51b8152602060048201819052602482015260008051602061160d833981519152604482015290519081900360640190fd5b61066a8161118a565b6001600160a01b03808216600090815260086020908152604080832060035482516370a0823160e01b8152306004820152925194959194869491909216926370a082319260248083019392829003018186803b158015610ee057600080fd5b505afa158015610ef4573d6000803e3d6000fd5b505050506040513d6020811015610f0a57600080fd5b50516007546006549192509042118015610f2357508115155b15610f55576000610f326107aa565b9050610f51610f4a8461048e8464e8d4a51000610f95565b83906110d6565b9150505b610f7d836001015461049464e8d4a5100061048e858860000154610f9590919063ffffffff16565b95945050505050565b6004546001600160a01b031681565b600082610fa457506000610ff1565b82820282848281610fb157fe5b0414610fee5760405162461bcd60e51b81526004018080602001828103825260218152602001806115ec6021913960400191505060405180910390fd5b90505b92915050565b6000610fee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061122a565b6000610fee83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506112cc565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526110cd908490611326565b505050565b3390565b600082820183811015610fee576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610b54908590611326565b6001600160a01b0381166111cf5760405162461bcd60e51b81526004018080602001828103825260268152602001806115956026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836112b65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561127b578181015183820152602001611263565b50505050905090810190601f1680156112a85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816112c257fe5b0495945050505050565b6000818484111561131e5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561127b578181015183820152602001611263565b505050900390565b606061137b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166113d79092919063ffffffff16565b8051909150156110cd5780806020019051602081101561139a57600080fd5b50516110cd5760405162461bcd60e51b815260040180806020018281038252602a81526020018061162d602a913960400191505060405180910390fd5b60606113e684846000856113ee565b949350505050565b60606113f98561155b565b61144a576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106114895780518252601f19909201916020918201910161146a565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114eb576040519150601f19603f3d011682016040523d82523d6000602084013e6114f0565b606091505b509150915081156115045791506113e69050565b8051156115145780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561127b578181015183820152602001611263565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906113e657505015159291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c7920746865206f7261636c65206f72204e656f2068696d73656c662063616e20676574207468726f7567682e2e2e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212206f74637e4db556030888e6248e8610e5748d00aea0177587eaebc513dde3ed5f64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000b66b5d38e183de42f21e92abcaf3c712dd5d628600000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
-----Decoded View---------------
Arg [0] : _stakingToken (address): 0xB66b5D38E183De42F21e92aBcAF3c712dd5d6286
Arg [1] : _rewardToken (address): 0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000b66b5d38e183de42f21e92abcaf3c712dd5d6286
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83
Deployed Bytecode Sourcemap
23136:9926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23557:19;;;:::i;:::-;;;;-1:-1:-1;;;;;23557:19:0;;;;;;;;;;;;;;27721:649;;;:::i;:::-;;;;;;;;;;;;;;;;24044:45;;;;;;;;;;;;;;;;-1:-1:-1;24044:45:0;-1:-1:-1;;;;;24044:45:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24180:39;;;;;;;;;;;;;;;;-1:-1:-1;24180:39:0;;:::i;31789:660::-;;;;;;;;;;;;;;;;-1:-1:-1;31789:660:0;;:::i;:::-;;32845:212;;;;;;;;;;;;;;;;-1:-1:-1;32845:212:0;;:::i;24294:49::-;;;;;;;;;;;;;;;;-1:-1:-1;24294:49:0;;:::i;22231:140::-;;;:::i;24871:88::-;;;;;;;;;;;;;;;;-1:-1:-1;24871:88:0;-1:-1:-1;;;;;24871:88:0;;:::i;23239:21::-;;;:::i;24967:1911::-;;;:::i;28399:1745::-;;;;;;;;;;;;;;;;-1:-1:-1;28399:1745:0;;:::i;21589:79::-;;;:::i;30894:843::-;;;;;;;;;;;;;;;;-1:-1:-1;30894:843:0;;:::i;32520:276::-;;;:::i;27532:88::-;;;;;;;;;;;;;;;;-1:-1:-1;27532:88:0;;:::i;30241:605::-;;;:::i;23523:27::-;;;:::i;22526:109::-;;;;;;;;;;;;;;;;-1:-1:-1;22526:109:0;-1:-1:-1;;;;;22526:109:0;;:::i;26964:560::-;;;;;;;;;;;;;;;;-1:-1:-1;26964:560:0;-1:-1:-1;;;;;26964:560:0;;:::i;23636:18::-;;;:::i;23557:19::-;;;-1:-1:-1;;;;;23557:19:0;;:::o;27721:649::-;27823:22;:29;27772:19;;27820:47;;-1:-1:-1;27866:1:0;27859:8;;27820:47;27905:22;27928:29;;27880:22;;27905;-1:-1:-1;;27928:33:0;;;27905:57;;;;;;;;;;;;;;;27998:22;28021:29;;27905:57;;-1:-1:-1;27998:22:0;-1:-1:-1;;28021:33:0;;;27998:57;;;;;;;;;;;;;;27973:82;;28090:15;28069:17;:36;28066:297;;28136:1;28122:15;;28066:297;;;28170:18;28261:33;;;:14;:33;;;;;;28211:15;28191:35;;28323:28;;-1:-1:-1;28066:297:0;27721:649;;;;:::o;24044:45::-;;;;;;;;;;;;;;;;;;;:::o;24180:39::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24180:39:0;:::o;31789:660::-;31875:10;31842:21;31866:20;;;:8;:20;;;;;31905:11;;:22;-1:-1:-1;31905:22:0;31897:53;;;;;-1:-1:-1;;;31897:53:0;;;;;;;;;;;;-1:-1:-1;;;31897:53:0;;;;;;;;;;;;;;;31963:12;:10;:12::i;:::-;31986:15;32004:64;32052:4;:15;;;32004:43;32042:4;32004:33;32020:16;;32004:4;:11;;;:15;;:33;;;;:::i;:::-;:37;;:43::i;:::-;:47;;:64::i;:::-;31986:82;-1:-1:-1;32082:11:0;;32079:90;;32110:4;;:47;;-1:-1:-1;;;;;32110:4:0;32136:10;32149:7;32110:17;:47::i;:::-;32182:11;;32179:144;;32224:11;;:24;;32240:7;32224:15;:24::i;:::-;32210:38;;32263:5;;:48;;-1:-1:-1;;;;;32263:5:0;32290:10;32303:7;32263:18;:48::i;:::-;32367:16;;32351:11;;:43;;32389:4;;32351:33;;:15;:33::i;:43::-;32333:15;;;:61;32412:29;;;;;;;;32421:10;;32412:29;;;;;;;;;;31789:660;;;:::o;32845:212::-;21811:12;:10;:12::i;:::-;21801:6;;-1:-1:-1;;;;;21801:6:0;;;:22;;;21793:67;;;;;-1:-1:-1;;;21793:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21793:67:0;;;;;;;;;;;;;;;32941:4:::1;::::0;;:29:::1;::::0;;-1:-1:-1;;;32941:29:0;;32964:4:::1;32941:29:::0;;::::1;::::0;;;;;-1:-1:-1;;;;;32941:4:0;;::::1;::::0;:14:::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:4;:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;32941:29:0;32931:39;::::1;32923:68;;;::::0;;-1:-1:-1;;;32923:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32923:68:0;;;;;;;;;;;;;::::1;;33002:4;::::0;:47:::1;::::0;-1:-1:-1;;;;;33002:4:0::1;33028:10;33041:7:::0;33002:17:::1;:47::i;:::-;32845:212:::0;:::o;24294:49::-;;;;;;;;;;;;;:::o;22231:140::-;21811:12;:10;:12::i;:::-;21801:6;;-1:-1:-1;;;;;21801:6:0;;;:22;;;21793:67;;;;;-1:-1:-1;;;21793:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21793:67:0;;;;;;;;;;;;;;;22330:1:::1;22314:6:::0;;22293:40:::1;::::0;-1:-1:-1;;;;;22314:6:0;;::::1;::::0;22293:40:::1;::::0;22330:1;;22293:40:::1;22361:1;22344:19:::0;;-1:-1:-1;;;;;;22344:19:0::1;::::0;;22231:140::o;24871:88::-;21811:12;:10;:12::i;:::-;21801:6;;-1:-1:-1;;;;;21801:6:0;;;:22;;;21793:67;;;;;-1:-1:-1;;;21793:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21793:67:0;;;;;;;;;;;;;;;24935:6:::1;:16:::0;;-1:-1:-1;;;;;;24935:16:0::1;-1:-1:-1::0;;;;;24935:16:0;;;::::1;::::0;;;::::1;::::0;;24871:88::o;23239:21::-;;;-1:-1:-1;;;;;23239:21:0;;:::o;24967:1911::-;25013:12;;25038:1833;25059:22;:29;25055:33;;25038:1833;;;25223:22;:29;25110:18;;-1:-1:-1;;25223:33:0;25218:38;;25214:1548;;;25467:15;25434:22;25457:1;25461;25457:5;25434:29;;;;;;;;;;;;;;;;:48;25431:667;;25550:19;;25518:22;25541:1;25545;25541:5;25518:29;;;;;;;;;;;;;;;;:51;25505:64;;25431:667;;;25764:22;25787:1;25764:25;;;;;;;;;;;;;;;;25741:19;;:48;25738:360;;25843:22;25866:1;25843:25;;;;;;;;;;;;;;;;25825:15;:43;25812:56;;25738:360;;;-1:-1:-1;26079:19:0;;26061:15;:37;25738:360;26167:70;26179:57;26194:14;:41;26209:22;26232:1;26209:25;;;;;;;;;;;;;;;;26194:41;;;;;;;;;;;;26179:10;:14;;:57;;;;:::i;:::-;26167:7;;:11;:70::i;:::-;26157:80;;26256:5;;;25214:1548;26461:19;;26428:22;26451:1;26455;26451:5;26428:29;;;;;;;;;;;;;;;;:52;26424:338;;26482:8;;;26424:338;26664:15;26631:22;26654:1;26658;26654:5;26631:29;;;;;;;;;;;;;;;;:48;26627:135;;26743:19;;26711:22;26734:1;26738;26734:5;26711:29;;;;;;;;;;;;;;;;:51;26698:64;;26627:135;26789:70;26801:57;26816:14;:41;26831:22;26854:1;26831:25;;;;;;;26789:70;26779:80;;25038:1833;;25090:3;;25038:1833;;;;24967:1911;:::o;28399:1745::-;28486:6;;-1:-1:-1;;;;;28486:6:0;28472:10;:20;;:45;;;28510:7;:5;:7::i;:::-;-1:-1:-1;;;;;28496:21:0;:10;-1:-1:-1;;;;;28496:21:0;;28472:45;28464:107;;;;-1:-1:-1;;;28464:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28608:19;;28590:15;:37;28582:46;;;;;;28661:15;28639:19;:37;28815:4;;;:29;;;-1:-1:-1;;;28815:29:0;;28838:4;28815:29;;;;;;;;28797:15;;-1:-1:-1;;;;;28815:4:0;;;;:14;;:29;;;;;;;;;;;;;;:4;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28815:29:0;;-1:-1:-1;28859:12:0;28855:25;;28873:7;;;28855:25;28892:17;28912:35;28926:20;:18;:20::i;28912:35::-;28892:55;;29100:20;29123:24;29140:6;;29123:12;:16;;:24;;;;:::i;:::-;29360:22;:29;29100:47;;-1:-1:-1;29360:34:0;;;;:176;;-1:-1:-1;29479:22:0;29502:29;;-1:-1:-1;;29502:33:0;;;29479:57;;;;;;;;;;;;;;29461:15;:75;29360:176;29305:571;;;29552:22;29575:29;;29612:15;;29552:22;-1:-1:-1;;29575:33:0;;;29552:57;;;;;;;;;;;;;;;:75;29305:571;;;29832:22;:44;;;;;;;-1:-1:-1;29832:44:0;;;;29860:15;29832:44;;;;;29305:571;29935:6;;;29889:22;:53;;;;;;;;29917:15;:24;;;29889:53;;;;;-1:-1:-1;29953:31:0;;;:14;29889:53;29953:31;;;;;:46;;;30100:6;;30082:24;;;30067:40;;;;;:44;30124:12;:10;:12::i;:::-;28399:1745;;;;:::o;21589:79::-;21627:7;21654:6;-1:-1:-1;;;;;21654:6:0;21589:79;:::o;30894:843::-;30979:10;30946:21;30970:20;;;:8;:20;;;;;31174:12;:10;:12::i;:::-;31201:11;;:15;31197:242;;31233:15;31251:64;31299:4;:15;;;31251:43;31289:4;31251:33;31267:16;;31251:4;:11;;;:15;;:33;;;;:::i;:64::-;31233:82;-1:-1:-1;31333:11:0;;31330:98;;31365:4;;:47;;-1:-1:-1;;;;;31365:4:0;31391:10;31404:7;31365:17;:47::i;:::-;31197:242;;31452:11;;31449:163;;31480:5;;:67;;-1:-1:-1;;;;;31480:5:0;31511:10;31532:4;31539:7;31480:22;:67::i;:::-;31576:11;;:24;;31592:7;31576:15;:24::i;:::-;31562:38;;31449:163;31656:16;;31640:11;;:43;;31678:4;;31640:33;;:15;:33::i;:43::-;31622:15;;;:61;31701:28;;;;;;;;31709:10;;31701:28;;;;;;;;;;30894:843;;:::o;32520:276::-;32600:10;32567:21;32591:20;;;:8;:20;;;;;32662:11;;32622:5;;32591:20;;32622:52;;-1:-1:-1;;;;;32622:5:0;;:18;:52::i;:::-;32699:1;32685:15;;;32711;;;:19;;;32746:42;;;;;;;32764:10;;32746:42;;;;;;;;;;32520:276;:::o;27532:88::-;21811:12;:10;:12::i;:::-;21801:6;;-1:-1:-1;;;;;21801:6:0;;;:22;;;21793:67;;;;;-1:-1:-1;;;21793:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21793:67:0;;;;;;;;;;;;;;;27596:6:::1;:16:::0;27532:88::o;30241:605::-;30304:19;;30285:15;:38;30281:51;;30325:7;;30281:51;30407:19;;30346:22;30369:29;;-1:-1:-1;;30369:33:0;;;30346:57;;;;;;;;;;;;;;:80;30342:93;;30428:7;;30342:93;30504:5;;:30;;;-1:-1:-1;;;30504:30:0;;30528:4;30504:30;;;;;;30482:19;;-1:-1:-1;;;;;30504:5:0;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30504:30:0;;-1:-1:-1;30549:16:0;30545:107;;-1:-1:-1;30604:15:0;30582:19;:37;30634:7;;30545:107;30664:17;30684:15;:13;:15::i;:::-;30664:35;-1:-1:-1;30729:61:0;30750:39;30777:11;30750:22;30664:35;30767:4;30750:16;:22::i;:39::-;30729:16;;;:20;:61::i;:::-;30710:16;:80;-1:-1:-1;;30823:15:0;30801:19;:37;30241:605;:::o;23523:27::-;;;;:::o;22526:109::-;21811:12;:10;:12::i;:::-;21801:6;;-1:-1:-1;;;;;21801:6:0;;;:22;;;21793:67;;;;;-1:-1:-1;;;21793:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21793:67:0;;;;;;;;;;;;;;;22599:28:::1;22618:8;22599:18;:28::i;26964:560::-:0;-1:-1:-1;;;;;27069:15:0;;;27025:7;27069:15;;;:8;:15;;;;;;;;27117:5;;:30;;-1:-1:-1;;;27117:30:0;;27141:4;27117:30;;;;;;27025:7;;27069:15;;27025:7;;27117:5;;;;;:15;;:30;;;;;27069:15;27117:30;;;;;:5;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27117:30:0;27183:16;;27232:19;;27117:30;;-1:-1:-1;27183:16:0;27214:15;:37;:57;;;;-1:-1:-1;27255:16:0;;;27214:57;27210:224;;;27288:17;27308:15;:13;:15::i;:::-;27288:35;-1:-1:-1;27360:62:0;27382:39;27409:11;27382:22;27288:35;27399:4;27382:16;:22::i;:39::-;27360:17;;:21;:62::i;:::-;27340:82;;27210:224;;27451:65;27500:4;:15;;;27451:44;27490:4;27451:34;27467:17;27451:4;:11;;;:15;;:34;;;;:::i;:65::-;27444:72;26964:560;-1:-1:-1;;;;;26964:560:0:o;23636:18::-;;;-1:-1:-1;;;;;23636:18:0;;:::o;2295:471::-;2353:7;2598:6;2594:47;;-1:-1:-1;2628:1:0;2621:8;;2594:47;2665:5;;;2669:1;2665;:5;:1;2689:5;;;;;:10;2681:56;;;;-1:-1:-1;;;2681:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2757:1;-1:-1:-1;2295:471:0;;;;;:::o;3242:132::-;3300:7;3327:39;3331:1;3334;3327:39;;;;;;;;;;;;;;;;;:3;:39::i;1371:136::-;1429:7;1456:43;1460:1;1463;1456:43;;;;;;;;;;;;;;;;;:3;:43::i;16145:211::-;16289:58;;;-1:-1:-1;;;;;16289:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16289:58:0;-1:-1:-1;;;16289:58:0;;;16262:86;;16282:5;;16262:19;:86::i;:::-;16145:211;;;:::o;20214:98::-;20294:10;20214:98;:::o;907:181::-;965:7;997:5;;;1021:6;;;;1013:46;;;;;-1:-1:-1;;;1013:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;16364:248;16535:68;;;-1:-1:-1;;;;;16535:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16535:68:0;-1:-1:-1;;;16535:68:0;;;16508:96;;16528:5;;16508:19;:96::i;22741:229::-;-1:-1:-1;;;;;22815:22:0;;22807:73;;;;-1:-1:-1;;;22807:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22917:6;;;22896:38;;-1:-1:-1;;;;;22896:38:0;;;;22917:6;;;22896:38;;;22945:6;:17;;-1:-1:-1;;;;;;22945:17:0;-1:-1:-1;;;;;22945:17:0;;;;;;;;;;22741:229::o;3870:312::-;3990:7;4025:12;4018:5;4010:28;;;;-1:-1:-1;;;4010:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4049:9;4065:1;4061;:5;;;;;;;3870:312;-1:-1:-1;;;;;3870:312:0:o;1810:226::-;1930:7;1966:12;1958:6;;;;1950:29;;;;-1:-1:-1;;;1950:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2002:5:0;;;1810:226::o;18680:774::-;19104:23;19130:69;19158:4;19130:69;;;;;;;;;;;;;;;;;19138:5;-1:-1:-1;;;;;19130:27:0;;;:69;;;;;:::i;:::-;19214:17;;19104:95;;-1:-1:-1;19214:21:0;19210:237;;19369:10;19358:30;;;;;;;;;;;;;;;-1:-1:-1;19358:30:0;19350:85;;;;-1:-1:-1;;;19350:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13038:230;13175:12;13207:53;13230:6;13238:4;13244:1;13247:12;13207:22;:53::i;:::-;13200:60;13038:230;-1:-1:-1;;;;13038:230:0:o;14526:1020::-;14699:12;14732:18;14743:6;14732:10;:18::i;:::-;14724:60;;;;;-1:-1:-1;;;14724:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14858:12;14872:23;14899:6;-1:-1:-1;;;;;14899:11:0;14918:8;14928:4;14899:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14899:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14857:76;;;;14948:7;14944:595;;;14979:10;-1:-1:-1;14972:17:0;;-1:-1:-1;14972:17:0;14944:595;15093:17;;:21;15089:439;;15356:10;15350:17;15417:15;15404:10;15400:2;15396:19;15389:44;15304:148;15492:20;;-1:-1:-1;;;15492:20:0;;;;;;;;;;;;;;;;;15499:12;;15492:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9901:641;9961:4;10442:20;;10272:66;10491:23;;;;;;:42;;-1:-1:-1;;10518:15:0;;;10483:51;-1:-1:-1;;9901:641:0:o
Swarm Source
ipfs://6f74637e4db556030888e6248e8610e5748d00aea0177587eaebc513dde3ed5f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 24 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
FTM | 100.00% | $0.984864 | 6,397.7312 | $6,300.9 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.