More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,779 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 20251847 | 170 days ago | IN | 0 ETH | 0.00108649 | ||||
Withdraw | 20251783 | 170 days ago | IN | 0 ETH | 0.00076844 | ||||
Withdraw | 20251775 | 170 days ago | IN | 0 ETH | 0.00019131 | ||||
Withdraw | 18671220 | 391 days ago | IN | 0 ETH | 0.00601076 | ||||
Withdraw | 18636119 | 396 days ago | IN | 0 ETH | 0.00185087 | ||||
Withdraw | 17967521 | 490 days ago | IN | 0 ETH | 0.00327426 | ||||
Claim | 17574136 | 545 days ago | IN | 0 ETH | 0.00178689 | ||||
Deposit | 17301866 | 583 days ago | IN | 0 ETH | 0.00839698 | ||||
Claim | 17301849 | 583 days ago | IN | 0 ETH | 0.00426374 | ||||
Withdraw | 16976275 | 629 days ago | IN | 0 ETH | 0.01388521 | ||||
Claim | 16857896 | 646 days ago | IN | 0 ETH | 0.00116113 | ||||
Claim | 16806615 | 653 days ago | IN | 0 ETH | 0.00461315 | ||||
Claim | 16778534 | 657 days ago | IN | 0 ETH | 0.00504305 | ||||
Withdraw | 16747683 | 661 days ago | IN | 0 ETH | 0.00254002 | ||||
Withdraw | 16725171 | 664 days ago | IN | 0 ETH | 0.00274881 | ||||
Withdraw | 16668113 | 672 days ago | IN | 0 ETH | 0.00340522 | ||||
Withdraw | 16557604 | 688 days ago | IN | 0 ETH | 0.00636656 | ||||
Deposit | 16478262 | 699 days ago | IN | 0 ETH | 0.00839084 | ||||
Withdraw | 16375080 | 713 days ago | IN | 0 ETH | 0.00172767 | ||||
Withdraw | 16375076 | 713 days ago | IN | 0 ETH | 0.00237158 | ||||
Claim | 16375073 | 713 days ago | IN | 0 ETH | 0.00151464 | ||||
Withdraw | 16360881 | 715 days ago | IN | 0 ETH | 0.00230124 | ||||
Withdraw | 16309662 | 722 days ago | IN | 0 ETH | 0.002313 | ||||
Withdraw | 16309659 | 722 days ago | IN | 0 ETH | 0.00282824 | ||||
Claim | 16309651 | 722 days ago | IN | 0 ETH | 0.00266314 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CelestialVaultV2
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 512 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.11; import {Pausable} from "@openzeppelin/contracts/security/Pausable.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title Celestial Vault contract CelestialVaultV2 is Ownable, Pausable { using EnumerableSet for EnumerableSet.UintSet; /* -------------------------------------------------------------------------- */ /* Farming State */ /* -------------------------------------------------------------------------- */ /// @notice Rewards emitted per day staked. uint256 public rate; /// @notice Rewards of token 2 emitted per day staked. uint256 public rate2; /// @notice Endtime of token rewards. uint256 public endTime; /// @notice Endtime of token 2 rewards. uint256 public endTime2; /// @notice Staking token contract address. ICKEY public stakingToken; /// @notice Rewards token contract address. IFBX public rewardToken; /// @notice WRLD token contract address. IWRLD public rewardToken2; /// @notice Set of staked token ids by address. mapping(address => EnumerableSet.UintSet) internal _depositedIds; /// @notice Mapping of timestamps from each staked token id. // mapping(address => mapping(uint256 => uint256)) internal _depositedBlocks; mapping(address => mapping(uint256 => uint256)) public _depositedBlocks; /// @notice Mapping of tokenIds to their rate modifier mapping(uint256 => uint256) public _rateModifiers; bool public emergencyWithdrawEnabled; constructor( address newStakingToken, address newRewardToken, address newRewardToken2, uint256 newRate, uint256 newRate2 ) { stakingToken = ICKEY(newStakingToken); rewardToken = IFBX(newRewardToken); rewardToken2 = IWRLD(newRewardToken2); rate = newRate; rate2 = newRate2; _pause(); } /* -------------------------------------------------------------------------- */ /* Farming Logic */ /* -------------------------------------------------------------------------- */ /// @notice Deposit tokens into the vault. /// @param tokenIds Array of token tokenIds to be deposited. function deposit(uint256[] memory tokenIds) external whenNotPaused { for (uint256 i = 0; i < tokenIds.length; i++) { // Add the new deposit to the mapping _depositedIds[msg.sender].add(tokenIds[i]); _depositedBlocks[msg.sender][tokenIds[i]] = block.timestamp; // Transfer the deposited token to this contract stakingToken.transferFrom(msg.sender, address(this), tokenIds[i]); } } /// @notice Withdraw tokens and claim their pending rewards. /// @param tokenIds Array of staked token ids. function withdraw(uint256[] memory tokenIds) external whenNotPaused { uint256 totalRewards; uint256 totalRewards2; for (uint256 i = 0; i < tokenIds.length; i++) { require(_depositedIds[msg.sender].contains(tokenIds[i]), "Query for a token you don't own"); totalRewards += _earned(_depositedBlocks[msg.sender][tokenIds[i]]); totalRewards2 += _earned2(_depositedBlocks[msg.sender][tokenIds[i]], tokenIds[i]); _depositedIds[msg.sender].remove(tokenIds[i]); delete _depositedBlocks[msg.sender][tokenIds[i]]; stakingToken.safeTransferFrom(address(this), msg.sender, tokenIds[i]); } rewardToken.mint(msg.sender, totalRewards); rewardToken2.transfer(msg.sender, totalRewards2); } /// @notice Claim pending token rewards. function claim() external whenNotPaused { uint256 totalRewards; uint256 totalRewards2; for (uint256 i = 0; i < _depositedIds[msg.sender].length(); i++) { // Mint the new tokens and update last checkpoint uint256 tokenId = _depositedIds[msg.sender].at(i); totalRewards += _earned(_depositedBlocks[msg.sender][tokenId]); totalRewards2 += _earned2(_depositedBlocks[msg.sender][tokenId], tokenId); _depositedBlocks[msg.sender][tokenId] = block.timestamp; } rewardToken.mint(msg.sender, totalRewards); rewardToken2.transfer(msg.sender, totalRewards2); } /// @notice Calculate total rewards for given account. /// @param account Holder address. function earned(address account) external view returns (uint256[] memory) { uint256 length = _depositedIds[account].length(); uint256[] memory rewards = new uint256[](length); for (uint256 i = 0; i < length; i++) { uint256 tokenId = _depositedIds[account].at(i); rewards[i] = _earned(_depositedBlocks[account][tokenId]); } return rewards; } /// @notice Calculate total WRLD token rewards for given account. /// @param account Holder address. function earned2(address account) external view returns (uint256[] memory) { uint256 length = _depositedIds[account].length(); uint256[] memory rewards = new uint256[](length); for (uint256 i = 0; i < length; i++) { uint256 tokenId = _depositedIds[account].at(i); rewards[i] = _earned2(_depositedBlocks[account][tokenId], tokenId); } return rewards; } /// @notice Internally calculates rewards for given token. /// @param timestamp Deposit timestamp. function _earned(uint256 timestamp) internal view returns (uint256) { if (timestamp == 0) return 0; uint256 end; if (endTime == 0){ // endtime not set end = block.timestamp; }else{ end = Math.min(block.timestamp, endTime); } if(timestamp > end){ return 0; } return ((end - timestamp) * rate) / 1 days; } /// @notice Internally calculates WRLD rewards for given token. /// @param timestamp Deposit timestamp. function _earned2(uint256 timestamp, uint256 tokenId) internal view returns (uint256) { if (timestamp == 0) return 0; uint256 rateForTokenId = rate2 + _rateModifiers[tokenId]; uint256 end; if (endTime2 == 0){ // endtime not set end = block.timestamp; }else{ end = Math.min(block.timestamp, endTime2); } if(timestamp > end){ return 0; } return ((end - timestamp) * rateForTokenId) / 1 days; } /// @notice Retrieve token ids deposited by account. /// @param account Token owner address. function depositsOf(address account) external view returns (uint256[] memory) { uint256 length = _depositedIds[account].length(); uint256[] memory ids = new uint256[](length); for (uint256 i = 0; i < length; i++) ids[i] = _depositedIds[account].at(i); return ids; } function emergencyWithdraw(uint256[] memory tokenIds) external whenNotPaused{ require(emergencyWithdrawEnabled, "Emergency withdraw not enabled"); for(uint256 i = 0; i < tokenIds.length; i++){ require(_depositedIds[msg.sender].contains(tokenIds[i]), "Query for a token you don't own"); _depositedIds[msg.sender].remove(tokenIds[i]); delete _depositedBlocks[msg.sender][tokenIds[i]]; stakingToken.safeTransferFrom(address(this), msg.sender, tokenIds[i]); } } /* -------------------------------------------------------------------------- */ /* Owner Logic */ /* -------------------------------------------------------------------------- */ /// @notice Set the new token rewards rate. /// @param newRate Emission rate in wei. function setRate(uint256 newRate) external onlyOwner { rate = newRate; } /// @notice Set the new token rewards rate. /// @param newRate2 Emission rate in wei. function setRate2(uint256 newRate2) external onlyOwner { rate2 = newRate2; } /// @notice Set the new token rewards end time. /// @param newEndTime End time of token 1 yield function setEndTime(uint256 newEndTime) external onlyOwner { endTime = newEndTime; } /// @notice Set the new token rewards end time. /// @param newEndTime2 End time of token 2 yield function setEndTime2(uint256 newEndTime2) external onlyOwner { endTime2 = newEndTime2; } /// @notice set rate modifier for given token Ids. /// @param tokenIds token Ids to set rate modifier for. /// @param rateModifier value of rate modifier function setRateModifier(uint256[] memory tokenIds, uint256 rateModifier) external onlyOwner { for (uint256 i = 0; i < tokenIds.length; i++) { _rateModifiers[tokenIds[i]] = rateModifier; } } /// @notice Set the new staking token contract address. /// @param newStakingToken Staking token address. function setStakingToken(address newStakingToken) external onlyOwner { stakingToken = ICKEY(newStakingToken); } /// @notice Set the new reward token contract address. /// @param newRewardToken Rewards token address. function setRewardToken(address newRewardToken) external onlyOwner { rewardToken = IFBX(newRewardToken); } /// @notice Set the new reward token contract address. /// @param newRewardToken2 Rewards token address. function setRewardToken2(address newRewardToken2) external onlyOwner { rewardToken2 = IWRLD(newRewardToken2); } /// @notice Pause the contract. function pause() external onlyOwner { _pause(); } /// @notice Unpause the contract. function unpause() external onlyOwner { _unpause(); } /// @notice Withdraw `amount` of `token` to the sender. function withdrawERC20(IERC20 token, uint256 amount) external onlyOwner { token.transfer(msg.sender, amount); } /// @notice enable emergency withdraw function setEmergencyWithdrawEnabled(bool newEmergencyWithdrawEnabled) external onlyOwner{ emergencyWithdrawEnabled = newEmergencyWithdrawEnabled; } } interface ICKEY { function transferFrom( address from, address to, uint256 id ) external; function safeTransferFrom( address from, address to, uint256 id ) external; } interface IFBX { function mint(address to, uint256 amount) external; function burn(address from, uint256 amount) external; } interface IWRLD { function transfer(address to, uint256 amount) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/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. */ abstract 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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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 // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": true, "runs": 512 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"newStakingToken","type":"address"},{"internalType":"address","name":"newRewardToken","type":"address"},{"internalType":"address","name":"newRewardToken2","type":"address"},{"internalType":"uint256","name":"newRate","type":"uint256"},{"internalType":"uint256","name":"newRate2","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"_depositedBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_rateModifiers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"depositsOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned2","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyWithdrawEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime2","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IFBX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken2","outputs":[{"internalType":"contract IWRLD","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newEmergencyWithdrawEnabled","type":"bool"}],"name":"setEmergencyWithdrawEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newEndTime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newEndTime2","type":"uint256"}],"name":"setEndTime2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"setRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate2","type":"uint256"}],"name":"setRate2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"rateModifier","type":"uint256"}],"name":"setRateModifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardToken2","type":"address"}],"name":"setRewardToken2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newStakingToken","type":"address"}],"name":"setStakingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract ICKEY","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200203c3803806200203c8339810160408190526200003491620001c7565b6200003f33620000a8565b6000805460ff60a01b19169055600580546001600160a01b038088166001600160a01b031992831617909255600680548784169083161790556007805492861692909116919091179055600182905560028190556200009d620000f8565b505050505062000224565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200010c600054600160a01b900460ff1690565b15620001515760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200018d3390565b6040516001600160a01b03909116815260200160405180910390a1565b80516001600160a01b0381168114620001c257600080fd5b919050565b600080600080600060a08688031215620001e057600080fd5b620001eb86620001aa565b9450620001fb60208701620001aa565b93506200020b60408701620001aa565b6060870151608090970151959894975095949392505050565b611e0880620002346000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c806372f702f31161011a578063ccb98ffc116100ad578063f1442e391161007c578063f1442e391461041b578063f2fde38b14610446578063f555b81514610459578063f7c618c114610462578063ff42cd5e1461047557600080fd5b8063ccb98ffc146103cf578063d1941b06146103e2578063d61a47f1146103f5578063e3a9db1a1461040857600080fd5b80638da5cb5b116100e95780638da5cb5b14610385578063983d95ce14610396578063a1db9782146103a9578063c74ad493146103bc57600080fd5b806372f702f31461032c57806379e32a62146103575780638456cb591461036a5780638aee81271461037257600080fd5b8063493c0793116101925780635c975abb116101615780635c975abb146102f65780636389817014610308578063691c71bd1461031b578063715018a61461032457600080fd5b8063493c0793146102ab5780634e71d92d146102be5780635747e69f146102c6578063598b8e71146102e357600080fd5b80633197cbb6116101ce5780633197cbb61461027457806334fcf4371461027d5780633f4ba83a14610290578063456f911a1461029857600080fd5b80628cc262146101ff5780631b4a8115146102285780631e9b12ef146102565780632c4e722e1461026b575b600080fd5b61021261020d366004611ac4565b610488565b60405161021f9190611ae1565b60405180910390f35b610248610236366004611b25565b600a6020526000908152604090205481565b60405190815260200161021f565b610269610264366004611ac4565b61058b565b005b61024860015481565b61024860035481565b61026961028b366004611b25565b6105fa565b610269610647565b6102696102a6366004611b25565b610699565b6102696102b9366004611ac4565b6106e6565b610269610750565b600b546102d39060ff1681565b604051901515815260200161021f565b6102696102f1366004611bef565b61093e565b600054600160a01b900460ff166102d3565b610269610316366004611c2c565b610ad0565b61024860045481565b610269610b6d565b60055461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b610269610365366004611b25565b610bbf565b610269610c0c565b610269610380366004611ac4565b610c5c565b6000546001600160a01b031661033f565b6102696103a4366004611bef565b610cc6565b6102696103b7366004611c71565b611065565b6102696103ca366004611cab565b61111e565b6102696103dd366004611b25565b611179565b6102696103f0366004611bef565b6111c6565b60075461033f906001600160a01b031681565b610212610416366004611ac4565b6113e5565b610248610429366004611c71565b600960209081526000928352604080842090915290825290205481565b610269610454366004611ac4565b6114af565b61024860025481565b60065461033f906001600160a01b031681565b610212610483366004611ac4565b611568565b6001600160a01b0381166000908152600860205260408120606091906104ad90611664565b905060008167ffffffffffffffff8111156104ca576104ca611b3e565b6040519080825280602002602001820160405280156104f3578160200160208202803683370190505b50905060005b82811015610583576001600160a01b03851660009081526008602052604081206105239083611674565b6001600160a01b038716600090815260096020908152604080832084845290915290205490915061055390611687565b83838151811061056557610565611cc8565b6020908102919091010152508061057b81611cf4565b9150506104f9565b509392505050565b6000546001600160a01b031633146105d85760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064015b60405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106425760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600155565b6000546001600160a01b0316331461068f5760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b6106976116f0565b565b6000546001600160a01b031633146106e15760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600455565b6000546001600160a01b0316331461072e5760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff161561079d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b60008060005b3360009081526008602052604090206107bb90611664565b811015610871573360009081526008602052604081206107db9083611674565b33600090815260096020908152604080832084845290915290205490915061080290611687565b61080c9085611d0f565b3360009081526009602090815260408083208584529091529020549094506108349082611796565b61083e9084611d0f565b3360009081526009602090815260408083209483529390529190912042905591508061086981611cf4565b9150506107a3565b506006546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb9150604401600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050505050565b600054600160a01b900460ff161561098b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b60005b8151811015610acc576109ce8282815181106109ac576109ac611cc8565b6020908102919091018101513360009081526008909252604090912090611825565b5033600090815260096020526040812083514292908590859081106109f5576109f5611cc8565b6020026020010151815260200190815260200160002081905550600560009054906101000a90046001600160a01b03166001600160a01b03166323b872dd3330858581518110610a4757610a47611cc8565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610aa157600080fd5b505af1158015610ab5573d6000803e3d6000fd5b505050508080610ac490611cf4565b91505061098e565b5050565b6000546001600160a01b03163314610b185760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b60005b8251811015610b685781600a6000858481518110610b3b57610b3b611cc8565b60200260200101518152602001908152602001600020819055508080610b6090611cf4565b915050610b1b565b505050565b6000546001600160a01b03163314610bb55760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b6106976000611831565b6000546001600160a01b03163314610c075760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600255565b6000546001600160a01b03163314610c545760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b610697611881565b6000546001600160a01b03163314610ca45760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff1615610d135760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b60008060005b8351811015610f9757610d59848281518110610d3757610d37611cc8565b6020908102919091018101513360009081526008909252604090912090611909565b610da55760405162461bcd60e51b815260206004820152601f60248201527f517565727920666f72206120746f6b656e20796f7520646f6e2774206f776e0060448201526064016105cf565b3360009081526009602052604081208551610de99290879085908110610dcd57610dcd611cc8565b6020026020010151815260200190815260200160002054611687565b610df39084611d0f565b3360009081526009602052604081208651929550610e5692909190879085908110610e2057610e20611cc8565b6020026020010151815260200190815260200160002054858381518110610e4957610e49611cc8565b6020026020010151611796565b610e609083611d0f565b9150610e99848281518110610e7757610e77611cc8565b6020908102919091018101513360009081526008909252604090912090611921565b503360009081526009602052604081208551909190869084908110610ec057610ec0611cc8565b6020026020010151815260200190815260200160002060009055600560009054906101000a90046001600160a01b03166001600160a01b03166342842e0e3033878581518110610f1257610f12611cc8565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610f6c57600080fd5b505af1158015610f80573d6000803e3d6000fd5b505050508080610f8f90611cf4565b915050610d19565b506006546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb9150604401600060405180830381600087803b15801561104857600080fd5b505af115801561105c573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146110ad5760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190611d27565b6000546001600160a01b031633146111665760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600b805460ff1916911515919091179055565b6000546001600160a01b031633146111c15760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600355565b600054600160a01b900460ff16156112135760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b600b5460ff166112655760405162461bcd60e51b815260206004820152601e60248201527f456d657267656e6379207769746864726177206e6f7420656e61626c6564000060448201526064016105cf565b60005b8151811015610acc57611286828281518110610d3757610d37611cc8565b6112d25760405162461bcd60e51b815260206004820152601f60248201527f517565727920666f72206120746f6b656e20796f7520646f6e2774206f776e0060448201526064016105cf565b6112e7828281518110610e7757610e77611cc8565b50336000908152600960205260408120835190919084908490811061130e5761130e611cc8565b6020026020010151815260200190815260200160002060009055600560009054906101000a90046001600160a01b03166001600160a01b03166342842e0e303385858151811061136057611360611cc8565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505080806113dd90611cf4565b915050611268565b6001600160a01b03811660009081526008602052604081206060919061140a90611664565b905060008167ffffffffffffffff81111561142757611427611b3e565b604051908082528060200260200182016040528015611450578160200160208202803683370190505b50905060005b82811015610583576001600160a01b03851660009081526008602052604090206114809082611674565b82828151811061149257611492611cc8565b6020908102919091010152806114a781611cf4565b915050611456565b6000546001600160a01b031633146114f75760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b6001600160a01b03811661155c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105cf565b61156581611831565b50565b6001600160a01b03811660009081526008602052604081206060919061158d90611664565b905060008167ffffffffffffffff8111156115aa576115aa611b3e565b6040519080825280602002602001820160405280156115d3578160200160208202803683370190505b50905060005b82811015610583576001600160a01b03851660009081526008602052604081206116039083611674565b6001600160a01b03871660009081526009602090815260408083208484529091529020549091506116349082611796565b83838151811061164657611646611cc8565b6020908102919091010152508061165c81611cf4565b9150506115d9565b600061166e825490565b92915050565b6000611680838361192d565b9392505050565b60008161169657506000919050565b6000600354600014156116aa5750426116b9565b6116b642600354611957565b90505b808311156116ca5750600092915050565b60015462015180906116dc8584611d44565b6116e69190611d5b565b6116809190611d7a565b600054600160a01b900460ff166117495760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105cf565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000826117a55750600061166e565b6000828152600a60205260408120546002546117c19190611d0f565b90506000600454600014156117d75750426117e6565b6117e342600454611957565b90505b808511156117f95760009250505061166e565b62015180826118088784611d44565b6118129190611d5b565b61181c9190611d7a565b95945050505050565b6000611680838361196d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156118ce5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117793390565b60008181526001830160205260408120541515611680565b600061168083836119bc565b600082600001828154811061194457611944611cc8565b9060005260206000200154905092915050565b60008183106119665781611680565b5090919050565b60008181526001830160205260408120546119b45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561166e565b50600061166e565b60008181526001830160205260408120548015611aa55760006119e0600183611d44565b85549091506000906119f490600190611d44565b9050818114611a59576000866000018281548110611a1457611a14611cc8565b9060005260206000200154905080876000018481548110611a3757611a37611cc8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611a6a57611a6a611d9c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061166e565b600091505061166e565b6001600160a01b038116811461156557600080fd5b600060208284031215611ad657600080fd5b813561168081611aaf565b6020808252825182820181905260009190848201906040850190845b81811015611b1957835183529284019291840191600101611afd565b50909695505050505050565b600060208284031215611b3757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611b6557600080fd5b8135602067ffffffffffffffff80831115611b8257611b82611b3e565b8260051b604051601f19603f83011681018181108482111715611ba757611ba7611b3e565b604052938452858101830193838101925087851115611bc557600080fd5b83870191505b84821015611be457813583529183019190830190611bcb565b979650505050505050565b600060208284031215611c0157600080fd5b813567ffffffffffffffff811115611c1857600080fd5b611c2484828501611b54565b949350505050565b60008060408385031215611c3f57600080fd5b823567ffffffffffffffff811115611c5657600080fd5b611c6285828601611b54565b95602094909401359450505050565b60008060408385031215611c8457600080fd5b8235611c8f81611aaf565b946020939093013593505050565b801515811461156557600080fd5b600060208284031215611cbd57600080fd5b813561168081611c9d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d0857611d08611cde565b5060010190565b60008219821115611d2257611d22611cde565b500190565b600060208284031215611d3957600080fd5b815161168081611c9d565b600082821015611d5657611d56611cde565b500390565b6000816000190483118215151615611d7557611d75611cde565b500290565b600082611d9757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212202942292d6460907ff398cb1da6ac0ef25f053422e1c95783effe4ff8f044435a64736f6c634300080b00330000000000000000000000008328f8d228450a9662bfedd526c25278dfbf5e9d00000000000000000000000006e91888dac29234d6de8507087ed7ef046335f5000000000000000000000000d5d86fc8d5c0ea1ac1ac5dfab6e529c9967a45e90000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000002501e734690aaaaa
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c806372f702f31161011a578063ccb98ffc116100ad578063f1442e391161007c578063f1442e391461041b578063f2fde38b14610446578063f555b81514610459578063f7c618c114610462578063ff42cd5e1461047557600080fd5b8063ccb98ffc146103cf578063d1941b06146103e2578063d61a47f1146103f5578063e3a9db1a1461040857600080fd5b80638da5cb5b116100e95780638da5cb5b14610385578063983d95ce14610396578063a1db9782146103a9578063c74ad493146103bc57600080fd5b806372f702f31461032c57806379e32a62146103575780638456cb591461036a5780638aee81271461037257600080fd5b8063493c0793116101925780635c975abb116101615780635c975abb146102f65780636389817014610308578063691c71bd1461031b578063715018a61461032457600080fd5b8063493c0793146102ab5780634e71d92d146102be5780635747e69f146102c6578063598b8e71146102e357600080fd5b80633197cbb6116101ce5780633197cbb61461027457806334fcf4371461027d5780633f4ba83a14610290578063456f911a1461029857600080fd5b80628cc262146101ff5780631b4a8115146102285780631e9b12ef146102565780632c4e722e1461026b575b600080fd5b61021261020d366004611ac4565b610488565b60405161021f9190611ae1565b60405180910390f35b610248610236366004611b25565b600a6020526000908152604090205481565b60405190815260200161021f565b610269610264366004611ac4565b61058b565b005b61024860015481565b61024860035481565b61026961028b366004611b25565b6105fa565b610269610647565b6102696102a6366004611b25565b610699565b6102696102b9366004611ac4565b6106e6565b610269610750565b600b546102d39060ff1681565b604051901515815260200161021f565b6102696102f1366004611bef565b61093e565b600054600160a01b900460ff166102d3565b610269610316366004611c2c565b610ad0565b61024860045481565b610269610b6d565b60055461033f906001600160a01b031681565b6040516001600160a01b03909116815260200161021f565b610269610365366004611b25565b610bbf565b610269610c0c565b610269610380366004611ac4565b610c5c565b6000546001600160a01b031661033f565b6102696103a4366004611bef565b610cc6565b6102696103b7366004611c71565b611065565b6102696103ca366004611cab565b61111e565b6102696103dd366004611b25565b611179565b6102696103f0366004611bef565b6111c6565b60075461033f906001600160a01b031681565b610212610416366004611ac4565b6113e5565b610248610429366004611c71565b600960209081526000928352604080842090915290825290205481565b610269610454366004611ac4565b6114af565b61024860025481565b60065461033f906001600160a01b031681565b610212610483366004611ac4565b611568565b6001600160a01b0381166000908152600860205260408120606091906104ad90611664565b905060008167ffffffffffffffff8111156104ca576104ca611b3e565b6040519080825280602002602001820160405280156104f3578160200160208202803683370190505b50905060005b82811015610583576001600160a01b03851660009081526008602052604081206105239083611674565b6001600160a01b038716600090815260096020908152604080832084845290915290205490915061055390611687565b83838151811061056557610565611cc8565b6020908102919091010152508061057b81611cf4565b9150506104f9565b509392505050565b6000546001600160a01b031633146105d85760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064015b60405180910390fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146106425760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600155565b6000546001600160a01b0316331461068f5760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b6106976116f0565b565b6000546001600160a01b031633146106e15760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600455565b6000546001600160a01b0316331461072e5760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff161561079d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b60008060005b3360009081526008602052604090206107bb90611664565b811015610871573360009081526008602052604081206107db9083611674565b33600090815260096020908152604080832084845290915290205490915061080290611687565b61080c9085611d0f565b3360009081526009602090815260408083208584529091529020549094506108349082611796565b61083e9084611d0f565b3360009081526009602090815260408083209483529390529190912042905591508061086981611cf4565b9150506107a3565b506006546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb9150604401600060405180830381600087803b15801561092257600080fd5b505af1158015610936573d6000803e3d6000fd5b505050505050565b600054600160a01b900460ff161561098b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b60005b8151811015610acc576109ce8282815181106109ac576109ac611cc8565b6020908102919091018101513360009081526008909252604090912090611825565b5033600090815260096020526040812083514292908590859081106109f5576109f5611cc8565b6020026020010151815260200190815260200160002081905550600560009054906101000a90046001600160a01b03166001600160a01b03166323b872dd3330858581518110610a4757610a47611cc8565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610aa157600080fd5b505af1158015610ab5573d6000803e3d6000fd5b505050508080610ac490611cf4565b91505061098e565b5050565b6000546001600160a01b03163314610b185760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b60005b8251811015610b685781600a6000858481518110610b3b57610b3b611cc8565b60200260200101518152602001908152602001600020819055508080610b6090611cf4565b915050610b1b565b505050565b6000546001600160a01b03163314610bb55760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b6106976000611831565b6000546001600160a01b03163314610c075760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600255565b6000546001600160a01b03163314610c545760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b610697611881565b6000546001600160a01b03163314610ca45760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b600054600160a01b900460ff1615610d135760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b60008060005b8351811015610f9757610d59848281518110610d3757610d37611cc8565b6020908102919091018101513360009081526008909252604090912090611909565b610da55760405162461bcd60e51b815260206004820152601f60248201527f517565727920666f72206120746f6b656e20796f7520646f6e2774206f776e0060448201526064016105cf565b3360009081526009602052604081208551610de99290879085908110610dcd57610dcd611cc8565b6020026020010151815260200190815260200160002054611687565b610df39084611d0f565b3360009081526009602052604081208651929550610e5692909190879085908110610e2057610e20611cc8565b6020026020010151815260200190815260200160002054858381518110610e4957610e49611cc8565b6020026020010151611796565b610e609083611d0f565b9150610e99848281518110610e7757610e77611cc8565b6020908102919091018101513360009081526008909252604090912090611921565b503360009081526009602052604081208551909190869084908110610ec057610ec0611cc8565b6020026020010151815260200190815260200160002060009055600560009054906101000a90046001600160a01b03166001600160a01b03166342842e0e3033878581518110610f1257610f12611cc8565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b158015610f6c57600080fd5b505af1158015610f80573d6000803e3d6000fd5b505050508080610f8f90611cf4565b915050610d19565b506006546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610fe457600080fd5b505af1158015610ff8573d6000803e3d6000fd5b505060075460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb9150604401600060405180830381600087803b15801561104857600080fd5b505af115801561105c573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146110ad5760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156110fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b689190611d27565b6000546001600160a01b031633146111665760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600b805460ff1916911515919091179055565b6000546001600160a01b031633146111c15760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b600355565b600054600160a01b900460ff16156112135760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b600b5460ff166112655760405162461bcd60e51b815260206004820152601e60248201527f456d657267656e6379207769746864726177206e6f7420656e61626c6564000060448201526064016105cf565b60005b8151811015610acc57611286828281518110610d3757610d37611cc8565b6112d25760405162461bcd60e51b815260206004820152601f60248201527f517565727920666f72206120746f6b656e20796f7520646f6e2774206f776e0060448201526064016105cf565b6112e7828281518110610e7757610e77611cc8565b50336000908152600960205260408120835190919084908490811061130e5761130e611cc8565b6020026020010151815260200190815260200160002060009055600560009054906101000a90046001600160a01b03166001600160a01b03166342842e0e303385858151811061136057611360611cc8565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156113ba57600080fd5b505af11580156113ce573d6000803e3d6000fd5b5050505080806113dd90611cf4565b915050611268565b6001600160a01b03811660009081526008602052604081206060919061140a90611664565b905060008167ffffffffffffffff81111561142757611427611b3e565b604051908082528060200260200182016040528015611450578160200160208202803683370190505b50905060005b82811015610583576001600160a01b03851660009081526008602052604090206114809082611674565b82828151811061149257611492611cc8565b6020908102919091010152806114a781611cf4565b915050611456565b6000546001600160a01b031633146114f75760405162461bcd60e51b81526020600482018190526024820152600080516020611db383398151915260448201526064016105cf565b6001600160a01b03811661155c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105cf565b61156581611831565b50565b6001600160a01b03811660009081526008602052604081206060919061158d90611664565b905060008167ffffffffffffffff8111156115aa576115aa611b3e565b6040519080825280602002602001820160405280156115d3578160200160208202803683370190505b50905060005b82811015610583576001600160a01b03851660009081526008602052604081206116039083611674565b6001600160a01b03871660009081526009602090815260408083208484529091529020549091506116349082611796565b83838151811061164657611646611cc8565b6020908102919091010152508061165c81611cf4565b9150506115d9565b600061166e825490565b92915050565b6000611680838361192d565b9392505050565b60008161169657506000919050565b6000600354600014156116aa5750426116b9565b6116b642600354611957565b90505b808311156116ca5750600092915050565b60015462015180906116dc8584611d44565b6116e69190611d5b565b6116809190611d7a565b600054600160a01b900460ff166117495760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016105cf565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000826117a55750600061166e565b6000828152600a60205260408120546002546117c19190611d0f565b90506000600454600014156117d75750426117e6565b6117e342600454611957565b90505b808511156117f95760009250505061166e565b62015180826118088784611d44565b6118129190611d5b565b61181c9190611d7a565b95945050505050565b6000611680838361196d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156118ce5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016105cf565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117793390565b60008181526001830160205260408120541515611680565b600061168083836119bc565b600082600001828154811061194457611944611cc8565b9060005260206000200154905092915050565b60008183106119665781611680565b5090919050565b60008181526001830160205260408120546119b45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561166e565b50600061166e565b60008181526001830160205260408120548015611aa55760006119e0600183611d44565b85549091506000906119f490600190611d44565b9050818114611a59576000866000018281548110611a1457611a14611cc8565b9060005260206000200154905080876000018481548110611a3757611a37611cc8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611a6a57611a6a611d9c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061166e565b600091505061166e565b6001600160a01b038116811461156557600080fd5b600060208284031215611ad657600080fd5b813561168081611aaf565b6020808252825182820181905260009190848201906040850190845b81811015611b1957835183529284019291840191600101611afd565b50909695505050505050565b600060208284031215611b3757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112611b6557600080fd5b8135602067ffffffffffffffff80831115611b8257611b82611b3e565b8260051b604051601f19603f83011681018181108482111715611ba757611ba7611b3e565b604052938452858101830193838101925087851115611bc557600080fd5b83870191505b84821015611be457813583529183019190830190611bcb565b979650505050505050565b600060208284031215611c0157600080fd5b813567ffffffffffffffff811115611c1857600080fd5b611c2484828501611b54565b949350505050565b60008060408385031215611c3f57600080fd5b823567ffffffffffffffff811115611c5657600080fd5b611c6285828601611b54565b95602094909401359450505050565b60008060408385031215611c8457600080fd5b8235611c8f81611aaf565b946020939093013593505050565b801515811461156557600080fd5b600060208284031215611cbd57600080fd5b813561168081611c9d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d0857611d08611cde565b5060010190565b60008219821115611d2257611d22611cde565b500190565b600060208284031215611d3957600080fd5b815161168081611c9d565b600082821015611d5657611d56611cde565b500390565b6000816000190483118215151615611d7557611d75611cde565b500290565b600082611d9757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603160045260246000fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212202942292d6460907ff398cb1da6ac0ef25f053422e1c95783effe4ff8f044435a64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008328f8d228450a9662bfedd526c25278dfbf5e9d00000000000000000000000006e91888dac29234d6de8507087ed7ef046335f5000000000000000000000000d5d86fc8d5c0ea1ac1ac5dfab6e529c9967a45e90000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000000000000000000000000000002501e734690aaaaa
-----Decoded View---------------
Arg [0] : newStakingToken (address): 0x8328F8d228450A9662BfEdd526c25278DfBF5e9d
Arg [1] : newRewardToken (address): 0x06e91888dAc29234d6DE8507087eD7eF046335F5
Arg [2] : newRewardToken2 (address): 0xD5d86FC8d5C0Ea1aC1Ac5Dfab6E529c9967a45E9
Arg [3] : newRate (uint256): 40000000000000000000
Arg [4] : newRate2 (uint256): 2666666666666666666
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000008328f8d228450a9662bfedd526c25278dfbf5e9d
Arg [1] : 00000000000000000000000006e91888dac29234d6de8507087ed7ef046335f5
Arg [2] : 000000000000000000000000d5d86fc8d5c0ea1ac1ac5dfab6e529c9967a45e9
Arg [3] : 0000000000000000000000000000000000000000000000022b1c8c1227a00000
Arg [4] : 0000000000000000000000000000000000000000000000002501e734690aaaaa
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.