Source Code
Latest 25 from a total of 201 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Stake | 18141393 | 885 days ago | IN | 0 ETH | 0.00026268 | ||||
| Claim | 15214171 | 1302 days ago | IN | 0 ETH | 0.00159265 | ||||
| Unstake | 15120387 | 1316 days ago | IN | 0 ETH | 0.00407475 | ||||
| Unstake | 15088748 | 1321 days ago | IN | 0 ETH | 0.00247877 | ||||
| Claim | 15088705 | 1321 days ago | IN | 0 ETH | 0.00134975 | ||||
| Stake | 15067988 | 1325 days ago | IN | 0 ETH | 0.00190341 | ||||
| Stake | 15067984 | 1325 days ago | IN | 0 ETH | 0.00134908 | ||||
| Stake | 15067954 | 1325 days ago | IN | 0 ETH | 0.00160257 | ||||
| Stake | 15067912 | 1325 days ago | IN | 0 ETH | 0.00297103 | ||||
| Claim | 15062434 | 1325 days ago | IN | 0 ETH | 0.00125113 | ||||
| Unstake | 15055475 | 1326 days ago | IN | 0 ETH | 0.00550459 | ||||
| Claim | 15052075 | 1327 days ago | IN | 0 ETH | 0.00518206 | ||||
| Claim | 15052072 | 1327 days ago | IN | 0 ETH | 0.00456055 | ||||
| Claim | 15050326 | 1327 days ago | IN | 0 ETH | 0.00366786 | ||||
| Claim | 15038606 | 1330 days ago | IN | 0 ETH | 0.0017325 | ||||
| Unstake | 15025156 | 1332 days ago | IN | 0 ETH | 0.00417331 | ||||
| Claim | 15025155 | 1332 days ago | IN | 0 ETH | 0.00246463 | ||||
| Stake | 15023689 | 1332 days ago | IN | 0 ETH | 0.00574303 | ||||
| Stake | 15023633 | 1332 days ago | IN | 0 ETH | 0.00077819 | ||||
| Stake | 15010920 | 1335 days ago | IN | 0 ETH | 0.00961683 | ||||
| Unstake | 15007035 | 1335 days ago | IN | 0 ETH | 0.00230789 | ||||
| Stake | 15005014 | 1336 days ago | IN | 0 ETH | 0.00051072 | ||||
| Claim | 15005013 | 1336 days ago | IN | 0 ETH | 0.00102046 | ||||
| Unstake | 15004713 | 1336 days ago | IN | 0 ETH | 0.00561385 | ||||
| Unstake | 15004629 | 1336 days ago | IN | 0 ETH | 0.00491694 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
StakingContract
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
contract StakingContract is Ownable, ReentrancyGuard {
using Strings for uint256;
address public rtoken;
address public nftAddress;
struct UserInfo {
uint256 tokenId;
uint256 rarity;
uint256 startTime;
}
mapping(address => UserInfo[]) public userInfo;
mapping(address => uint256) public stakingAmount;
event Stake(address indexed user, uint256 amount);
event UnStake(address indexed user, uint256 amount);
bytes32[5] public rarityMerkleRoot;
uint256[5] public rewardTokenPerDay;
constructor(address _rTokenAddress, address _nftTokenAddress, bytes32[] memory _rarityMerkleRoot, uint256[] memory _rewardTokenPerDay) {
rtoken = _rTokenAddress;
nftAddress = _nftTokenAddress;
for(uint256 i = 0; i < _rarityMerkleRoot.length; i++) {
rarityMerkleRoot[i] = _rarityMerkleRoot[i];
}
for(uint256 i = 0; i < _rewardTokenPerDay.length; i++) {
rewardTokenPerDay[i] = _rewardTokenPerDay[i] * 1 ether;
}
}
function updateRarityMerkleRoots(bytes32[] memory _rarityMerkleRoot) public onlyOwner() {
for(uint256 i = 0; i < _rarityMerkleRoot.length; i++) {
rarityMerkleRoot[i] = _rarityMerkleRoot[i];
}
}
function changeRewardTokenAddress(address _rewardTokenAddress) public onlyOwner {
rtoken = _rewardTokenAddress;
}
function changeNftTokenAddress(address _nftTokenAddress) public onlyOwner {
nftAddress = _nftTokenAddress;
}
function changeRewardTokenPerDay(uint256[] memory _rewardTokenPerDay) public onlyOwner {
for(uint256 i = 0; i < 5; i++)
rewardTokenPerDay[i] = _rewardTokenPerDay[i];
}
function approve(address tokenAddress, address spender, uint256 amount) public onlyOwner returns (bool) {
IERC20(tokenAddress).approve(spender, amount);
return true;
}
function pendingReward(address _user, uint256 _tokenId, uint256 _rarity) public view returns (uint256) {
(bool _isStaked, uint256 _startTime) = getStakingItemInfo(_user, _tokenId);
if(!_isStaked) return 0;
uint256 currentTime = block.timestamp;
uint256 rewardAmount = rewardTokenPerDay[_rarity] * (currentTime - _startTime) / 1 days;
return rewardAmount;
}
function pendingTotalReward(address _user) public view returns(uint256) {
uint256 pending = 0;
for (uint256 i = 0; i < userInfo[_user].length; i++) {
uint256 temp = pendingReward(_user, userInfo[_user][i].tokenId, userInfo[_user][i].rarity);
pending = pending + temp;
}
return pending;
}
function getRarity(bytes32[] calldata _merkleProof, uint256 _tokenId) public view returns(uint256) {
bytes32 leaf = keccak256(abi.encodePacked(_tokenId.toString()));
for(uint256 i = 0; i < 5; i++) {
if(MerkleProof.verify(_merkleProof, rarityMerkleRoot[i], leaf)) {
return i;
}
}
return 5;
}
function stake(uint256[] memory tokenIds, bytes32[][] calldata _merkleProofs) public {
for(uint256 i = 0; i < tokenIds.length; i++) {
(bool _isStaked,) = getStakingItemInfo(msg.sender, tokenIds[i]);
if(_isStaked) continue;
require(IERC721(nftAddress).ownerOf(tokenIds[i]) == msg.sender, "Not your NFT");
IERC721(nftAddress).transferFrom(address(msg.sender), address(this), tokenIds[i]);
uint256 _rarity = getRarity(_merkleProofs[i], tokenIds[i]);
require(_rarity < 5, "Invalid in merkleproof");
UserInfo memory info;
info.tokenId = tokenIds[i];
info.rarity = _rarity;
info.startTime = block.timestamp;
userInfo[msg.sender].push(info);
stakingAmount[msg.sender] = stakingAmount[msg.sender] + 1;
emit Stake(msg.sender, 1);
}
}
function unstake(uint256[] memory tokenIds) public nonReentrant {
require(tokenIds.length > 0, "Token number to unstake is zero.");
uint256 pending = pendingTotalReward(msg.sender);
if(pending > 0) {
IERC20(rtoken).transfer(msg.sender, pending);
}
for(uint256 i = 0; i < tokenIds.length; i++) {
(bool _isStaked,) = getStakingItemInfo(msg.sender, tokenIds[i]);
if(!_isStaked) continue;
if(IERC721(nftAddress).ownerOf(tokenIds[i]) != address(this)) continue;
removeFromUserInfo(tokenIds[i]);
if(stakingAmount[msg.sender] > 0)
stakingAmount[msg.sender] = stakingAmount[msg.sender] - 1;
IERC721(nftAddress).transferFrom(address(this), msg.sender, tokenIds[i]);
emit UnStake(msg.sender, 1);
}
}
function getStakingItemInfo(address _user, uint256 _tokenId) public view returns(bool _isStaked, uint256 _startTime) {
for(uint256 i = 0; i < userInfo[_user].length; i++) {
if(userInfo[_user][i].tokenId == _tokenId) {
_isStaked = true;
_startTime = userInfo[_user][i].startTime;
break;
}
}
}
function removeFromUserInfo(uint256 tokenId) private {
for (uint256 i = 0; i < userInfo[msg.sender].length; i++) {
if (userInfo[msg.sender][i].tokenId == tokenId) {
userInfo[msg.sender][i] = userInfo[msg.sender][userInfo[msg.sender].length - 1];
userInfo[msg.sender].pop();
break;
}
}
}
function claim() public {
uint256 reward = pendingTotalReward(msg.sender);
for (uint256 i = 0; i < userInfo[msg.sender].length; i++)
userInfo[msg.sender][i].startTime = block.timestamp;
IERC20(rtoken).transfer(msg.sender, reward);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev 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);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}// 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.6.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Trees proofs.
*
* The proofs can be generated using the JavaScript library
* https://github.com/miguelmota/merkletreejs[merkletreejs].
* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
*
* See `test/utils/cryptography/MerkleProof.test.js` for some examples.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the merkle tree could be reinterpreted as a leaf value.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
* from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
* hash matches the root of the tree. When processing the proof, the pairs
* of leafs & pre-images are assumed to be sorted.
*
* _Available since v4.4._
*/
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = _efficientHash(computedHash, proofElement);
} else {
// Hash(current element of the proof + current computed hash)
computedHash = _efficientHash(proofElement, computedHash);
}
}
return computedHash;
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// 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": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_rTokenAddress","type":"address"},{"internalType":"address","name":"_nftTokenAddress","type":"address"},{"internalType":"bytes32[]","name":"_rarityMerkleRoot","type":"bytes32[]"},{"internalType":"uint256[]","name":"_rewardTokenPerDay","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UnStake","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_nftTokenAddress","type":"address"}],"name":"changeNftTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardTokenAddress","type":"address"}],"name":"changeRewardTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_rewardTokenPerDay","type":"uint256[]"}],"name":"changeRewardTokenPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getRarity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getStakingItemInfo","outputs":[{"internalType":"bool","name":"_isStaked","type":"bool"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_rarity","type":"uint256"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingTotalReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarityMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokenPerDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rtoken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"bytes32[][]","name":"_merkleProofs","type":"bytes32[][]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_rarityMerkleRoot","type":"bytes32[]"}],"name":"updateRarityMerkleRoots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"rarity","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162001e2c38038062001e2c833981016040819052620000349162000229565b6200003f3362000142565b60018055600280546001600160a01b038087166001600160a01b031992831617909255600380549286169290911691909117905560005b8251811015620000ca57828181518110620000955762000095620003cc565b602002602001015160068260058110620000b357620000b3620003cc565b015580620000c18162000398565b91505062000076565b5060005b81518110156200013757818181518110620000ed57620000ed620003cc565b6020026020010151670de0b6b3a76400006200010a919062000376565b600b8260058110620001205762000120620003cc565b0155806200012e8162000398565b915050620000ce565b5050505050620003f8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001aa57600080fd5b919050565b600082601f830112620001c157600080fd5b81516020620001da620001d48362000350565b6200031d565b80838252828201915082860187848660051b8901011115620001fb57600080fd5b60005b858110156200021c57815184529284019290840190600101620001fe565b5090979650505050505050565b600080600080608085870312156200024057600080fd5b6200024b8562000192565b935060206200025c81870162000192565b60408701519094506001600160401b03808211156200027a57600080fd5b818801915088601f8301126200028f57600080fd5b8151620002a0620001d48262000350565b8082825285820191508585018c878560051b8801011115620002c157600080fd5b600095505b83861015620002e6578051835260019590950194918601918601620002c6565b5060608b015190975094505050808311156200030157600080fd5b50506200031187828801620001af565b91505092959194509250565b604051601f8201601f191681016001600160401b0381118282101715620003485762000348620003e2565b604052919050565b60006001600160401b038211156200036c576200036c620003e2565b5060051b60200190565b6000816000190483118215151615620003935762000393620003b6565b500290565b6000600019821415620003af57620003af620003b6565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b611a2480620004086000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806369d12df3116100b8578063971ae3da1161007c578063971ae3da146102a0578063e009f21d146102b3578063e1f21c67146102c6578063e449f341146102e9578063e8f7b1ee146102fc578063f2fde38b1461031c57600080fd5b806369d12df31461024e578063715018a6146102615780637cf94c1714610269578063859daf911461027c5780638da5cb5b1461028f57600080fd5b806340b03ddf116100ff57806340b03ddf146101e25780634865f176146101f55780634e71d92d146102085780635bf8633a146102105780636845478f1461023b57600080fd5b8063039857381461013c5780630fb0afea1461016257806313aa16611461018c57806315eefccf146101a157806321ce919d146101b4575b600080fd5b61014f61014a3660046115d9565b61032f565b6040519081526020015b60405180910390f35b6101756101703660046115ad565b61039a565b604080519215158352602083019190915201610159565b61019f61019a36600461165a565b610466565b005b61014f6101af3660046117b2565b6104ea565b6101c76101c23660046115ad565b610501565b60408051938452602084019290925290820152606001610159565b61019f6101f0366004611727565b610543565b61019f610203366004611532565b6108a3565b61019f6108ef565b600354610223906001600160a01b031681565b6040516001600160a01b039091168152602001610159565b600254610223906001600160a01b031681565b61014f61025c3660046117b2565b6109e5565b61019f6109f5565b61019f6102773660046116f2565b610a2b565b61014f61028a366004611532565b610aa2565b6000546001600160a01b0316610223565b61019f6102ae366004611532565b610b72565b61014f6102c136600461160e565b610bbe565b6102d96102d436600461156c565b610c7d565b6040519015158152602001610159565b61019f6102f73660046116f2565b610d35565b61014f61030a366004611532565b60056020526000908152604090205481565b61019f61032a366004611532565b6110af565b600080600061033e868661039a565b915091508161035257600092505050610393565b426000620151806103638484611925565b600b8860058110610376576103766119ad565b01546103829190611906565b61038c91906118f2565b9450505050505b9392505050565b60008060005b6001600160a01b03851660009081526004602052604090205481101561045e576001600160a01b03851660009081526004602052604090208054859190839081106103ed576103ed6119ad565b906000526020600020906003020160000154141561044c576001600160a01b038516600090815260046020526040902080546001945082908110610433576104336119ad565b906000526020600020906003020160020154915061045e565b806104568161193c565b9150506103a0565b509250929050565b6000546001600160a01b031633146104995760405162461bcd60e51b815260040161049090611806565b60405180910390fd5b60005b81518110156104e6578181815181106104b7576104b76119ad565b6020026020010151600682600581106104d2576104d26119ad565b0155806104de8161193c565b91505061049c565b5050565b600b81600581106104fa57600080fd5b0154905081565b6004602052816000526040600020818154811061051d57600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b60005b835181101561089d57600061057433868481518110610567576105676119ad565b602002602001015161039a565b5090508015610583575061088b565b600354855133916001600160a01b031690636352211e908890869081106105ac576105ac6119ad565b60200260200101516040518263ffffffff1660e01b81526004016105d291815260200190565b60206040518083038186803b1580156105ea57600080fd5b505afa1580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610622919061154f565b6001600160a01b0316146106675760405162461bcd60e51b815260206004820152600c60248201526b139bdd081e5bdd5c8813919560a21b6044820152606401610490565b60035485516001600160a01b03909116906323b872dd9033903090899087908110610694576106946119ad565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156106ee57600080fd5b505af1158015610702573d6000803e3d6000fd5b50505050600061074e85858581811061071d5761071d6119ad565b905060200281019061072f919061183b565b888681518110610741576107416119ad565b6020026020010151610bbe565b9050600581106107995760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21034b71036b2b935b632b83937b7b360511b6044820152606401610490565b6107bd60405180606001604052806000815260200160008152602001600081525090565b8684815181106107cf576107cf6119ad565b602090810291909101810151825281810183815242604080850191825233600081815260048652828120805460018181018355918352878320895160039092020190815595518682015593516002909501949094558352600590935291902054610838916118da565b33600081815260056020526040908190209290925590517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9061087f906001815260200190565b60405180910390a25050505b806108958161193c565b915050610546565b50505050565b6000546001600160a01b031633146108cd5760405162461bcd60e51b815260040161049090611806565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fa33610aa2565b905060005b336000908152600460205260409020548110156109605733600090815260046020526040902080544291908390811061093a5761093a6119ad565b6000918252602090912060026003909202010155806109588161193c565b9150506108ff565b5060025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e69190611790565b600681600581106104fa57600080fd5b6000546001600160a01b03163314610a1f5760405162461bcd60e51b815260040161049090611806565b610a29600061114a565b565b6000546001600160a01b03163314610a555760405162461bcd60e51b815260040161049090611806565b60005b60058110156104e657818181518110610a7357610a736119ad565b6020026020010151600b8260058110610a8e57610a8e6119ad565b015580610a9a8161193c565b915050610a58565b600080805b6001600160a01b038416600090815260046020526040902054811015610b6b576001600160a01b03841660009081526004602052604081208054610b4991879185908110610af757610af76119ad565b600091825260208083206003909202909101546001600160a01b038a16835260049091526040909120805486908110610b3257610b326119ad565b90600052602060002090600302016001015461032f565b9050610b5581846118da565b9250508080610b639061193c565b915050610aa7565b5092915050565b6000546001600160a01b03163314610b9c5760405162461bcd60e51b815260040161049090611806565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080610bca8361119a565b604051602001610bda91906117cb565b60405160208183030381529060405280519060200120905060005b6005811015610c7157610c51868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250600692508591505060058110610c4957610c496119ad565b0154846112a0565b15610c5f5791506103939050565b80610c698161193c565b915050610bf5565b50600595945050505050565b600080546001600160a01b03163314610ca85760405162461bcd60e51b815260040161049090611806565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285169063095ea7b390604401602060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190611790565b506001949350505050565b60026001541415610d885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610490565b60026001558051610ddb5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e206e756d62657220746f20756e7374616b65206973207a65726f2e6044820152606401610490565b6000610de633610aa2565b90508015610e745760025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190611790565b505b60005b82518110156110a6576000610e9833858481518110610567576105676119ad565b50905080610ea65750611094565b600354845130916001600160a01b031690636352211e90879086908110610ecf57610ecf6119ad565b60200260200101516040518263ffffffff1660e01b8152600401610ef591815260200190565b60206040518083038186803b158015610f0d57600080fd5b505afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f45919061154f565b6001600160a01b031614610f595750611094565b610f7b848381518110610f6e57610f6e6119ad565b60200260200101516112b6565b3360009081526005602052604090205415610fbd5733600090815260056020526040902054610fac90600190611925565b336000908152600560205260409020555b60035484516001600160a01b03909116906323b872dd9030903390889087908110610fea57610fea6119ad565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b5050604051600181523392507fb24546d975e2628748efc9aced80665e0fad66272033e5c0ea25fd3afac99795915060200160405180910390a2505b8061109e8161193c565b915050610e77565b50506001805550565b6000546001600160a01b031633146110d95760405162461bcd60e51b815260040161049090611806565b6001600160a01b03811661113e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610490565b6111478161114a565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060816111be5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156111e857806111d28161193c565b91506111e19050600a836118f2565b91506111c2565b60008167ffffffffffffffff811115611203576112036119c3565b6040519080825280601f01601f19166020018201604052801561122d576020820181803683370190505b5090505b841561129857611242600183611925565b915061124f600a86611957565b61125a9060306118da565b60f81b81838151811061126f5761126f6119ad565b60200101906001600160f81b031916908160001a905350611291600a866118f2565b9450611231565b949350505050565b6000826112ad8584611400565b14949350505050565b60005b336000908152600460205260409020548110156104e6573360009081526004602052604090208054839190839081106112f4576112f46119ad565b90600052602060002090600302016000015414156113ee57336000908152600460205260409020805461132990600190611925565b81548110611339576113396119ad565b906000526020600020906003020160046000336001600160a01b03166001600160a01b03168152602001908152602001600020828154811061137d5761137d6119ad565b6000918252602080832084546003909302019182556001808501549083015560029384015493909101929092553381526004909152604090208054806113c5576113c5611997565b600082815260208120600360001990930192830201818155600181018290556002015590555050565b806113f88161193c565b9150506112b9565b600081815b845181101561146c576000858281518110611422576114226119ad565b602002602001015190508083116114485760008381526020829052604090209250611459565b600081815260208490526040902092505b50806114648161193c565b915050611405565b509392505050565b60008083601f84011261148657600080fd5b50813567ffffffffffffffff81111561149e57600080fd5b6020830191508360208260051b85010111156114b957600080fd5b9250929050565b600082601f8301126114d157600080fd5b813560206114e66114e1836118b6565b611885565b80838252828201915082860187848660051b890101111561150657600080fd5b60005b8581101561152557813584529284019290840190600101611509565b5090979650505050505050565b60006020828403121561154457600080fd5b8135610393816119d9565b60006020828403121561156157600080fd5b8151610393816119d9565b60008060006060848603121561158157600080fd5b833561158c816119d9565b9250602084013561159c816119d9565b929592945050506040919091013590565b600080604083850312156115c057600080fd5b82356115cb816119d9565b946020939093013593505050565b6000806000606084860312156115ee57600080fd5b83356115f9816119d9565b95602085013595506040909401359392505050565b60008060006040848603121561162357600080fd5b833567ffffffffffffffff81111561163a57600080fd5b61164686828701611474565b909790965060209590950135949350505050565b6000602080838503121561166d57600080fd5b823567ffffffffffffffff81111561168457600080fd5b8301601f8101851361169557600080fd5b80356116a36114e1826118b6565b80828252848201915084840188868560051b87010111156116c357600080fd5b600094505b838510156116e65780358352600194909401939185019185016116c8565b50979650505050505050565b60006020828403121561170457600080fd5b813567ffffffffffffffff81111561171b57600080fd5b611298848285016114c0565b60008060006040848603121561173c57600080fd5b833567ffffffffffffffff8082111561175457600080fd5b611760878388016114c0565b9450602086013591508082111561177657600080fd5b5061178386828701611474565b9497909650939450505050565b6000602082840312156117a257600080fd5b8151801515811461039357600080fd5b6000602082840312156117c457600080fd5b5035919050565b6000825160005b818110156117ec57602081860181015185830152016117d2565b818111156117fb576000828501525b509190910192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000808335601e1984360301811261185257600080fd5b83018035915067ffffffffffffffff82111561186d57600080fd5b6020019150600581901b36038213156114b957600080fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156118ae576118ae6119c3565b604052919050565b600067ffffffffffffffff8211156118d0576118d06119c3565b5060051b60200190565b600082198211156118ed576118ed61196b565b500190565b60008261190157611901611981565b500490565b60008160001904831182151516156119205761192061196b565b500290565b6000828210156119375761193761196b565b500390565b60006000198214156119505761195061196b565b5060010190565b60008261196657611966611981565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461114757600080fdfea26469706673582212207f61f4500b75872dd8832ef3139545b3c132205ce2e10187ca5833921408887464736f6c634300080700330000000000000000000000000679acf10581cd6e5521c912d3c0ab0ffb3007f000000000000000000000000016356944741a719b02f63e8f001f7ed7ec79c969000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000005dff0a9ca5948583be2c3a7d632e80bc06a78b87fb8f27247526850a82cfa4a52609f99bde189c2716e9efa5c1d6defefcb1da323357cc81555bec1fda5c38953087c5f1e792b0b7375d1a986e9105d7a99ffac997a414720ef6d94bead09922709d2bcb4dff79565b573c4417098b074ca55a9aedd4dc6f3b670855eafdef064af580df1cb4398b1f92bd3724afed0d2d4d03f9210a8757461e82d0eb39dc9e20000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000014
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c806369d12df3116100b8578063971ae3da1161007c578063971ae3da146102a0578063e009f21d146102b3578063e1f21c67146102c6578063e449f341146102e9578063e8f7b1ee146102fc578063f2fde38b1461031c57600080fd5b806369d12df31461024e578063715018a6146102615780637cf94c1714610269578063859daf911461027c5780638da5cb5b1461028f57600080fd5b806340b03ddf116100ff57806340b03ddf146101e25780634865f176146101f55780634e71d92d146102085780635bf8633a146102105780636845478f1461023b57600080fd5b8063039857381461013c5780630fb0afea1461016257806313aa16611461018c57806315eefccf146101a157806321ce919d146101b4575b600080fd5b61014f61014a3660046115d9565b61032f565b6040519081526020015b60405180910390f35b6101756101703660046115ad565b61039a565b604080519215158352602083019190915201610159565b61019f61019a36600461165a565b610466565b005b61014f6101af3660046117b2565b6104ea565b6101c76101c23660046115ad565b610501565b60408051938452602084019290925290820152606001610159565b61019f6101f0366004611727565b610543565b61019f610203366004611532565b6108a3565b61019f6108ef565b600354610223906001600160a01b031681565b6040516001600160a01b039091168152602001610159565b600254610223906001600160a01b031681565b61014f61025c3660046117b2565b6109e5565b61019f6109f5565b61019f6102773660046116f2565b610a2b565b61014f61028a366004611532565b610aa2565b6000546001600160a01b0316610223565b61019f6102ae366004611532565b610b72565b61014f6102c136600461160e565b610bbe565b6102d96102d436600461156c565b610c7d565b6040519015158152602001610159565b61019f6102f73660046116f2565b610d35565b61014f61030a366004611532565b60056020526000908152604090205481565b61019f61032a366004611532565b6110af565b600080600061033e868661039a565b915091508161035257600092505050610393565b426000620151806103638484611925565b600b8860058110610376576103766119ad565b01546103829190611906565b61038c91906118f2565b9450505050505b9392505050565b60008060005b6001600160a01b03851660009081526004602052604090205481101561045e576001600160a01b03851660009081526004602052604090208054859190839081106103ed576103ed6119ad565b906000526020600020906003020160000154141561044c576001600160a01b038516600090815260046020526040902080546001945082908110610433576104336119ad565b906000526020600020906003020160020154915061045e565b806104568161193c565b9150506103a0565b509250929050565b6000546001600160a01b031633146104995760405162461bcd60e51b815260040161049090611806565b60405180910390fd5b60005b81518110156104e6578181815181106104b7576104b76119ad565b6020026020010151600682600581106104d2576104d26119ad565b0155806104de8161193c565b91505061049c565b5050565b600b81600581106104fa57600080fd5b0154905081565b6004602052816000526040600020818154811061051d57600080fd5b600091825260209091206003909102018054600182015460029092015490935090915083565b60005b835181101561089d57600061057433868481518110610567576105676119ad565b602002602001015161039a565b5090508015610583575061088b565b600354855133916001600160a01b031690636352211e908890869081106105ac576105ac6119ad565b60200260200101516040518263ffffffff1660e01b81526004016105d291815260200190565b60206040518083038186803b1580156105ea57600080fd5b505afa1580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610622919061154f565b6001600160a01b0316146106675760405162461bcd60e51b815260206004820152600c60248201526b139bdd081e5bdd5c8813919560a21b6044820152606401610490565b60035485516001600160a01b03909116906323b872dd9033903090899087908110610694576106946119ad565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b1580156106ee57600080fd5b505af1158015610702573d6000803e3d6000fd5b50505050600061074e85858581811061071d5761071d6119ad565b905060200281019061072f919061183b565b888681518110610741576107416119ad565b6020026020010151610bbe565b9050600581106107995760405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21034b71036b2b935b632b83937b7b360511b6044820152606401610490565b6107bd60405180606001604052806000815260200160008152602001600081525090565b8684815181106107cf576107cf6119ad565b602090810291909101810151825281810183815242604080850191825233600081815260048652828120805460018181018355918352878320895160039092020190815595518682015593516002909501949094558352600590935291902054610838916118da565b33600081815260056020526040908190209290925590517febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a9061087f906001815260200190565b60405180910390a25050505b806108958161193c565b915050610546565b50505050565b6000546001600160a01b031633146108cd5760405162461bcd60e51b815260040161049090611806565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b60006108fa33610aa2565b905060005b336000908152600460205260409020548110156109605733600090815260046020526040902080544291908390811061093a5761093a6119ad565b6000918252602090912060026003909202010155806109588161193c565b9150506108ff565b5060025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156109ad57600080fd5b505af11580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e69190611790565b600681600581106104fa57600080fd5b6000546001600160a01b03163314610a1f5760405162461bcd60e51b815260040161049090611806565b610a29600061114a565b565b6000546001600160a01b03163314610a555760405162461bcd60e51b815260040161049090611806565b60005b60058110156104e657818181518110610a7357610a736119ad565b6020026020010151600b8260058110610a8e57610a8e6119ad565b015580610a9a8161193c565b915050610a58565b600080805b6001600160a01b038416600090815260046020526040902054811015610b6b576001600160a01b03841660009081526004602052604081208054610b4991879185908110610af757610af76119ad565b600091825260208083206003909202909101546001600160a01b038a16835260049091526040909120805486908110610b3257610b326119ad565b90600052602060002090600302016001015461032f565b9050610b5581846118da565b9250508080610b639061193c565b915050610aa7565b5092915050565b6000546001600160a01b03163314610b9c5760405162461bcd60e51b815260040161049090611806565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080610bca8361119a565b604051602001610bda91906117cb565b60405160208183030381529060405280519060200120905060005b6005811015610c7157610c51868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250600692508591505060058110610c4957610c496119ad565b0154846112a0565b15610c5f5791506103939050565b80610c698161193c565b915050610bf5565b50600595945050505050565b600080546001600160a01b03163314610ca85760405162461bcd60e51b815260040161049090611806565b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285169063095ea7b390604401602060405180830381600087803b158015610cf257600080fd5b505af1158015610d06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d2a9190611790565b506001949350505050565b60026001541415610d885760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610490565b60026001558051610ddb5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e206e756d62657220746f20756e7374616b65206973207a65726f2e6044820152606401610490565b6000610de633610aa2565b90508015610e745760025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190611790565b505b60005b82518110156110a6576000610e9833858481518110610567576105676119ad565b50905080610ea65750611094565b600354845130916001600160a01b031690636352211e90879086908110610ecf57610ecf6119ad565b60200260200101516040518263ffffffff1660e01b8152600401610ef591815260200190565b60206040518083038186803b158015610f0d57600080fd5b505afa158015610f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f45919061154f565b6001600160a01b031614610f595750611094565b610f7b848381518110610f6e57610f6e6119ad565b60200260200101516112b6565b3360009081526005602052604090205415610fbd5733600090815260056020526040902054610fac90600190611925565b336000908152600560205260409020555b60035484516001600160a01b03909116906323b872dd9030903390889087908110610fea57610fea6119ad565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401600060405180830381600087803b15801561104457600080fd5b505af1158015611058573d6000803e3d6000fd5b5050604051600181523392507fb24546d975e2628748efc9aced80665e0fad66272033e5c0ea25fd3afac99795915060200160405180910390a2505b8061109e8161193c565b915050610e77565b50506001805550565b6000546001600160a01b031633146110d95760405162461bcd60e51b815260040161049090611806565b6001600160a01b03811661113e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610490565b6111478161114a565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060816111be5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156111e857806111d28161193c565b91506111e19050600a836118f2565b91506111c2565b60008167ffffffffffffffff811115611203576112036119c3565b6040519080825280601f01601f19166020018201604052801561122d576020820181803683370190505b5090505b841561129857611242600183611925565b915061124f600a86611957565b61125a9060306118da565b60f81b81838151811061126f5761126f6119ad565b60200101906001600160f81b031916908160001a905350611291600a866118f2565b9450611231565b949350505050565b6000826112ad8584611400565b14949350505050565b60005b336000908152600460205260409020548110156104e6573360009081526004602052604090208054839190839081106112f4576112f46119ad565b90600052602060002090600302016000015414156113ee57336000908152600460205260409020805461132990600190611925565b81548110611339576113396119ad565b906000526020600020906003020160046000336001600160a01b03166001600160a01b03168152602001908152602001600020828154811061137d5761137d6119ad565b6000918252602080832084546003909302019182556001808501549083015560029384015493909101929092553381526004909152604090208054806113c5576113c5611997565b600082815260208120600360001990930192830201818155600181018290556002015590555050565b806113f88161193c565b9150506112b9565b600081815b845181101561146c576000858281518110611422576114226119ad565b602002602001015190508083116114485760008381526020829052604090209250611459565b600081815260208490526040902092505b50806114648161193c565b915050611405565b509392505050565b60008083601f84011261148657600080fd5b50813567ffffffffffffffff81111561149e57600080fd5b6020830191508360208260051b85010111156114b957600080fd5b9250929050565b600082601f8301126114d157600080fd5b813560206114e66114e1836118b6565b611885565b80838252828201915082860187848660051b890101111561150657600080fd5b60005b8581101561152557813584529284019290840190600101611509565b5090979650505050505050565b60006020828403121561154457600080fd5b8135610393816119d9565b60006020828403121561156157600080fd5b8151610393816119d9565b60008060006060848603121561158157600080fd5b833561158c816119d9565b9250602084013561159c816119d9565b929592945050506040919091013590565b600080604083850312156115c057600080fd5b82356115cb816119d9565b946020939093013593505050565b6000806000606084860312156115ee57600080fd5b83356115f9816119d9565b95602085013595506040909401359392505050565b60008060006040848603121561162357600080fd5b833567ffffffffffffffff81111561163a57600080fd5b61164686828701611474565b909790965060209590950135949350505050565b6000602080838503121561166d57600080fd5b823567ffffffffffffffff81111561168457600080fd5b8301601f8101851361169557600080fd5b80356116a36114e1826118b6565b80828252848201915084840188868560051b87010111156116c357600080fd5b600094505b838510156116e65780358352600194909401939185019185016116c8565b50979650505050505050565b60006020828403121561170457600080fd5b813567ffffffffffffffff81111561171b57600080fd5b611298848285016114c0565b60008060006040848603121561173c57600080fd5b833567ffffffffffffffff8082111561175457600080fd5b611760878388016114c0565b9450602086013591508082111561177657600080fd5b5061178386828701611474565b9497909650939450505050565b6000602082840312156117a257600080fd5b8151801515811461039357600080fd5b6000602082840312156117c457600080fd5b5035919050565b6000825160005b818110156117ec57602081860181015185830152016117d2565b818111156117fb576000828501525b509190910192915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000808335601e1984360301811261185257600080fd5b83018035915067ffffffffffffffff82111561186d57600080fd5b6020019150600581901b36038213156114b957600080fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156118ae576118ae6119c3565b604052919050565b600067ffffffffffffffff8211156118d0576118d06119c3565b5060051b60200190565b600082198211156118ed576118ed61196b565b500190565b60008261190157611901611981565b500490565b60008160001904831182151516156119205761192061196b565b500290565b6000828210156119375761193761196b565b500390565b60006000198214156119505761195061196b565b5060010190565b60008261196657611966611981565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461114757600080fdfea26469706673582212207f61f4500b75872dd8832ef3139545b3c132205ce2e10187ca5833921408887464736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000679acf10581cd6e5521c912d3c0ab0ffb3007f000000000000000000000000016356944741a719b02f63e8f001f7ed7ec79c969000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000005dff0a9ca5948583be2c3a7d632e80bc06a78b87fb8f27247526850a82cfa4a52609f99bde189c2716e9efa5c1d6defefcb1da323357cc81555bec1fda5c38953087c5f1e792b0b7375d1a986e9105d7a99ffac997a414720ef6d94bead09922709d2bcb4dff79565b573c4417098b074ca55a9aedd4dc6f3b670855eafdef064af580df1cb4398b1f92bd3724afed0d2d4d03f9210a8757461e82d0eb39dc9e20000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000009600000000000000000000000000000000000000000000000000000000000000460000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000014
-----Decoded View---------------
Arg [0] : _rTokenAddress (address): 0x0679aCF10581CD6e5521C912d3C0Ab0fFB3007F0
Arg [1] : _nftTokenAddress (address): 0x16356944741A719b02F63e8f001f7ED7ec79c969
Arg [2] : _rarityMerkleRoot (bytes32[]): System.Byte[],System.Byte[],System.Byte[],System.Byte[],System.Byte[]
Arg [3] : _rewardTokenPerDay (uint256[]): 150,70,40,30,20
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 0000000000000000000000000679acf10581cd6e5521c912d3c0ab0ffb3007f0
Arg [1] : 00000000000000000000000016356944741a719b02f63e8f001f7ed7ec79c969
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : dff0a9ca5948583be2c3a7d632e80bc06a78b87fb8f27247526850a82cfa4a52
Arg [6] : 609f99bde189c2716e9efa5c1d6defefcb1da323357cc81555bec1fda5c38953
Arg [7] : 087c5f1e792b0b7375d1a986e9105d7a99ffac997a414720ef6d94bead099227
Arg [8] : 09d2bcb4dff79565b573c4417098b074ca55a9aedd4dc6f3b670855eafdef064
Arg [9] : af580df1cb4398b1f92bd3724afed0d2d4d03f9210a8757461e82d0eb39dc9e2
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000096
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000046
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000028
Arg [14] : 000000000000000000000000000000000000000000000000000000000000001e
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000014
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.