Source Code
Latest 25 from a total of 466 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 17194841 | 935 days ago | IN | 0 ETH | 0.02246287 | ||||
| Emergency Withdr... | 16557547 | 1025 days ago | IN | 0 ETH | 0.00704601 | ||||
| Emergency Withdr... | 16557528 | 1025 days ago | IN | 0 ETH | 0.01635583 | ||||
| Claim Rewards | 16552712 | 1026 days ago | IN | 0 ETH | 0.00649353 | ||||
| Claim Rewards | 16524272 | 1030 days ago | IN | 0 ETH | 0.00453607 | ||||
| Claim Rewards | 16517814 | 1031 days ago | IN | 0 ETH | 0.00438618 | ||||
| Claim Rewards | 16483667 | 1035 days ago | IN | 0 ETH | 0.00521547 | ||||
| Claim Rewards | 16452197 | 1040 days ago | IN | 0 ETH | 0.00399194 | ||||
| Claim Rewards | 16439019 | 1042 days ago | IN | 0 ETH | 0.00463441 | ||||
| Claim Rewards | 16420644 | 1044 days ago | IN | 0 ETH | 0.00695997 | ||||
| Claim Rewards | 16420624 | 1044 days ago | IN | 0 ETH | 0.00654365 | ||||
| Claim Rewards | 16418787 | 1044 days ago | IN | 0 ETH | 0.00445942 | ||||
| Claim Rewards | 16350527 | 1054 days ago | IN | 0 ETH | 0.00552864 | ||||
| Claim Rewards | 16276365 | 1064 days ago | IN | 0 ETH | 0.0082352 | ||||
| Claim Rewards | 16267035 | 1066 days ago | IN | 0 ETH | 0.00413538 | ||||
| Claim Rewards | 16265579 | 1066 days ago | IN | 0 ETH | 0.00339295 | ||||
| Stake | 16237012 | 1070 days ago | IN | 0 ETH | 0.00311818 | ||||
| Claim Rewards | 16192284 | 1076 days ago | IN | 0 ETH | 0.00707844 | ||||
| Claim Rewards | 16187591 | 1077 days ago | IN | 0 ETH | 0.00396971 | ||||
| Claim Rewards | 16181126 | 1078 days ago | IN | 0 ETH | 0.00433744 | ||||
| Claim Rewards | 16159881 | 1081 days ago | IN | 0 ETH | 0.00440082 | ||||
| Claim Rewards | 16150861 | 1082 days ago | IN | 0 ETH | 0.00340516 | ||||
| Claim Rewards | 16145058 | 1083 days ago | IN | 0 ETH | 0.00416033 | ||||
| Claim Rewards | 16145046 | 1083 days ago | IN | 0 ETH | 0.00430425 | ||||
| Claim Rewards | 16130991 | 1085 days ago | IN | 0 ETH | 0.00800273 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ERC721Staking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-08-24
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return payable(msg.sender);
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
abstract contract ReentrancyGuard {
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// 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;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
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);
}
library Address {
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
library SafeERC20 {
using Address for address;
function safeTransfer(
IERC20 token,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) {
// Return data is optional
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool _approved) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
contract ERC721Staking is Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
// Interfaces for ERC20 and ERC721
IERC20 public immutable rewardsToken;
IERC721 public immutable nftCollection;
uint256 public bonusEndTimestamp = 1677268800;
event BonusEndTimestampUpdated(uint256 oldBonusEndTimestamp, uint256 newBonusEndTimestamp);
event RewardsPerHourUpdated(uint256 oldRewardsPerHour, uint256 newRewardsPerHour);
// Constructor function to set the rewards token and the NFT collection addresses
constructor(IERC721 _nftCollection, IERC20 _rewardsToken) {
nftCollection = _nftCollection;
rewardsToken = _rewardsToken;
}
struct StakedToken {
address staker;
uint256 tokenId;
}
// Staker info
struct Staker {
// Amount of tokens staked by the staker
uint256 amountStaked;
// Staked token ids
StakedToken[] stakedTokens;
// Last time of the rewards were calculated for this user
uint256 timeOfLastUpdate;
// Calculated, but unclaimed rewards for the User. The rewards are
// calculated each time the user writes to the Smart Contract
uint256 unclaimedRewards;
}
// Rewards per hour per token deposited in wei.
uint256 public rewardsPerHour = 613181151618000000000;
// Mapping of User Address to Staker info
mapping(address => Staker) public stakers;
// Mapping of Token Id to staker. Made for the SC to remeber
// who to send back the ERC721 Token to.
mapping(uint256 => address) public stakerAddress;
// If address already has ERC721 Token/s staked, calculate the rewards.
// Increment the amountStaked and map msg.sender to the Token Id of the staked
// Token to later send back on withdrawal. Finally give timeOfLastUpdate the
// value of now.
function stake(uint256 _tokenId) external nonReentrant {
// If wallet has tokens staked, calculate the rewards before adding the new token
if (stakers[msg.sender].amountStaked > 0) {
uint256 rewards = calculateRewards(msg.sender);
stakers[msg.sender].unclaimedRewards += rewards;
}
// Wallet must own the token they are trying to stake
require(
nftCollection.ownerOf(_tokenId) == msg.sender,
"You don't own this token!"
);
// Transfer the token from the wallet to the Smart contract
nftCollection.transferFrom(msg.sender, address(this), _tokenId);
// Create StakedToken
StakedToken memory stakedToken = StakedToken(msg.sender, _tokenId);
// Add the token to the stakedTokens array
stakers[msg.sender].stakedTokens.push(stakedToken);
// Increment the amount staked for this wallet
stakers[msg.sender].amountStaked++;
// Update the mapping of the tokenId to the staker's address
stakerAddress[_tokenId] = msg.sender;
// Update the timeOfLastUpdate for the staker
stakers[msg.sender].timeOfLastUpdate = block.timestamp;
}
// Check if user has any ERC721 Tokens Staked and if they tried to withdraw,
// calculate the rewards and store them in the unclaimedRewards
// decrement the amountStaked of the user and transfer the ERC721 token back to them
function withdraw(uint256 _tokenId) external nonReentrant {
require(block.timestamp >= bonusEndTimestamp, "NFTs are locked");
// Make sure the user has at least one token staked before withdrawing
require(
stakers[msg.sender].amountStaked > 0,
"You have no tokens staked"
);
// Wallet must own the token they are trying to withdraw
require(stakerAddress[_tokenId] == msg.sender, "You don't own this token!");
// Update the rewards for this user, as the amount of rewards decreases with less tokens.
uint256 rewards = calculateRewards(msg.sender);
stakers[msg.sender].unclaimedRewards += rewards;
// Find the index of this token id in the stakedTokens array
uint256 index = 0;
for (uint256 i = 0; i < stakers[msg.sender].stakedTokens.length; i++) {
if (
stakers[msg.sender].stakedTokens[i].tokenId == _tokenId
&&
stakers[msg.sender].stakedTokens[i].staker != address(0)
) {
index = i;
break;
}
}
// Set this token's .staker to be address 0 to mark it as no longer staked
stakers[msg.sender].stakedTokens[index].staker = address(0);
// Decrement the amount staked for this wallet
stakers[msg.sender].amountStaked--;
// Update the mapping of the tokenId to the be address(0) to indicate that the token is no longer staked
stakerAddress[_tokenId] = address(0);
// Transfer the token back to the withdrawer
nftCollection.transferFrom(address(this), msg.sender, _tokenId);
// Update the timeOfLastUpdate for the withdrawer
stakers[msg.sender].timeOfLastUpdate = block.timestamp;
}
// Calculate rewards for the msg.sender, check if there are any rewards
// claim, set unclaimedRewards to 0 and transfer the ERC20 Reward token
// to the user.
function claimRewards() external {
uint256 rewards = calculateRewards(msg.sender) +
stakers[msg.sender].unclaimedRewards;
require(rewards > 0, "You have no rewards to claim");
stakers[msg.sender].timeOfLastUpdate = block.timestamp;
stakers[msg.sender].unclaimedRewards = 0;
rewardsToken.safeTransfer(msg.sender, rewards);
}
//////////
// View //
//////////
function availableRewards(address _staker) public view returns (uint256) {
uint256 rewards = calculateRewards(_staker) +
stakers[_staker].unclaimedRewards;
return rewards;
}
function getStakedTokens(address _user) public view returns (uint256[] memory) {
// Check if we know this user
if (stakers[_user].amountStaked > 0) {
// Return all the tokens in the stakedToken Array for this user that are not -1
uint256[] memory _stakedTokens = new uint256[](stakers[_user].amountStaked);
uint256 _index = 0;
for (uint256 j = 0; j < stakers[_user].stakedTokens.length; j++) {
if (stakers[_user].stakedTokens[j].staker != (address(0))) {
_stakedTokens[_index] = stakers[_user].stakedTokens[j].tokenId;
_index++;
}
}
return _stakedTokens;
}
// Otherwise, return empty array
else {
return new uint256[](0);
}
}
function updateBonusEndTimestamp(uint256 timestamp) external onlyOwner {
uint256 oldBonusEndTimestamp = bonusEndTimestamp;
bonusEndTimestamp = timestamp;
emit BonusEndTimestampUpdated(oldBonusEndTimestamp, timestamp);
}
function emergencyWithdraw(IERC20 token, uint256 amount) external onlyOwner {
token.safeTransfer(owner(), amount);
}
function updateRewardPerHour(uint256 newRewardsPerHour) external onlyOwner {
uint256 oldRewardsPerHour = rewardsPerHour;
rewardsPerHour = newRewardsPerHour;
emit RewardsPerHourUpdated(oldRewardsPerHour, newRewardsPerHour);
}
/////////////
// Internal//
/////////////
// Calculate rewards for param _staker by calculating the time passed
// since last update in hours and mulitplying it to ERC721 Tokens Staked
// and rewardsPerHour.
function calculateRewards(address _staker)
internal
view
returns (uint256 _rewards)
{
if (block.timestamp <= bonusEndTimestamp)
return (((
((block.timestamp - stakers[_staker].timeOfLastUpdate) *
stakers[_staker].amountStaked)
) * rewardsPerHour) / 3600);
else if(stakers[_staker].timeOfLastUpdate >= bonusEndTimestamp) {
return 0;
}
return (((
((bonusEndTimestamp - stakers[_staker].timeOfLastUpdate) *
stakers[_staker].amountStaked)
) * rewardsPerHour) / 3600);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC721","name":"_nftCollection","type":"address"},{"internalType":"contract IERC20","name":"_rewardsToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldBonusEndTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBonusEndTimestamp","type":"uint256"}],"name":"BonusEndTimestampUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldRewardsPerHour","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRewardsPerHour","type":"uint256"}],"name":"RewardsPerHourUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"availableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bonusEndTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftCollection","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPerHour","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint256","name":"amountStaked","type":"uint256"},{"internalType":"uint256","name":"timeOfLastUpdate","type":"uint256"},{"internalType":"uint256","name":"unclaimedRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"updateBonusEndTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardsPerHour","type":"uint256"}],"name":"updateRewardPerHour","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c06040526363f9174060025568213d99109fa3d4940060035534801561002557600080fd5b50604051620014e5380380620014e5833981016040819052610046916100c1565b61004f33610071565b600180556001600160601b0319606092831b811660a052911b16608052610113565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100d457600080fd5b82516100df816100fb565b60208401519092506100f0816100fb565b809150509250929050565b6001600160a01b038116811461011057600080fd5b50565b60805160601c60a05160601c61138a6200015b6000396000818161015b0152818161059a015281816109bd0152610aab01526000818161028901526106b4015261138a6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80639168ae72116100a2578063a694fc3a11610071578063a694fc3a14610271578063d1af0c7d14610284578063e4a337f3146102ab578063f2fde38b146102b4578063f854a27f146102c757600080fd5b80639168ae72146101d8578063940670451461022257806395ccea671461024b578063a1bb5cd81461025e57600080fd5b8063715018a6116100de578063715018a61461019557806374baefcf1461019d5780638da5cb5b146101b05780638e7271fa146101c157600080fd5b80632e1a7d4d14610110578063372500ab1461012557806363c28db11461012d5780636588103b14610156575b600080fd5b61012361011e36600461117f565b6102da565b005b61012361061b565b61014061013b3660046110f7565b6106e3565b60405161014d91906111b4565b60405180910390f35b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014d565b61012361086d565b6101236101ab36600461117f565b610881565b6000546001600160a01b031661017d565b6101ca60035481565b60405190815260200161014d565b6102076101e63660046110f7565b60046020526000908152604090208054600282015460039092015490919083565b6040805193845260208401929092529082015260600161014d565b61017d61023036600461117f565b6005602052600090815260409020546001600160a01b031681565b610123610259366004611153565b6108cf565b61012361026c36600461117f565b610901565b61012361027f36600461117f565b610947565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101ca60025481565b6101236102c23660046110f7565b610bc7565b6101ca6102d53660046110f7565b610c3d565b6102e2610c75565b60025442101561032b5760405162461bcd60e51b815260206004820152600f60248201526e1391951cc8185c99481b1bd8dad959608a1b60448201526064015b60405180910390fd5b336000908152600460205260409020546103875760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20746f6b656e73207374616b6564000000000000006044820152606401610322565b6000818152600560205260409020546001600160a01b031633146103e95760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b60006103f433610ccf565b3360009081526004602052604081206003018054929350839290919061041b90849061122b565b9091555060009050805b336000908152600460205260409020600101548110156104e05733600090815260046020526040902060010180548591908390811061046657610466611313565b9060005260206000209060020201600101541480156104c157503360009081526004602052604081206001018054839081106104a4576104a4611313565b60009182526020909120600290910201546001600160a01b031614155b156104ce578091506104e0565b806104d8816112e2565b915050610425565b5033600090815260046020526040812060010180548390811061050557610505611313565b6000918252602080832060029290920290910180546001600160a01b0319166001600160a01b03949094169390931790925533815260049091526040812080549161054f836112cb565b90915550506000838152600560205260409081902080546001600160a01b0319169055516323b872dd60e01b8152306004820152336024820152604481018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505033600090815260046020526040902042600290910155506106189250610d91915050565b50565b33600081815260046020526040812060030154909161063990610ccf565b610643919061122b565b9050600081116106955760405162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f207265776172647320746f20636c61696d000000006044820152606401610322565b33600081815260046020526040812042600282015560030155610618907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083610d97565b6001600160a01b03811660009081526004602052604090205460609015610859576001600160a01b03821660009081526004602052604081205467ffffffffffffffff81111561073557610735611329565b60405190808252806020026020018201604052801561075e578160200160208202803683370190505b5090506000805b6001600160a01b038516600090815260046020526040902060010154811015610850576001600160a01b03851660009081526004602052604081206001018054839081106107b5576107b5611313565b60009182526020909120600290910201546001600160a01b03161461083e576001600160a01b038516600090815260046020526040902060010180548290811061080157610801611313565b90600052602060002090600202016001015483838151811061082557610825611313565b60209081029190910101528161083a816112e2565b9250505b80610848816112e2565b915050610765565b50909392505050565b505060408051600081526020810190915290565b610875610dee565b61087f6000610e48565b565b610889610dee565b600380549082905560408051828152602081018490527f2e48a9d59ca3fc8b64b9dd84783ada19b9b4240c23b4e87f3ff21a1ba1f320d391015b60405180910390a15050565b6108d7610dee565b6108fd6108ec6000546001600160a01b031690565b6001600160a01b0384169083610d97565b5050565b610909610dee565b600280549082905560408051828152602081018490527f71ffeabd1c4634f619be28486143538a8255c59b257708a84a258b78d3b8ca4091016108c3565b61094f610c75565b336000908152600460205260409020541561099d57600061096f33610ccf565b3360009081526004602052604081206003018054929350839290919061099690849061122b565b9091555050505b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e9060240160206040518083038186803b1580156109ff57600080fd5b505afa158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a379190611114565b6001600160a01b031614610a895760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050604080518082018252338082526020808301878152600083815260048352948520600180820180548083018255908852938720865160029095020180546001600160a01b0319166001600160a01b0390951694909417845591519290910191909155908352805491945090925090610b84836112e2565b909155505050600081815260056020908152604080832080546001600160a01b031916339081179091558352600490915290204260029091015561061860018055565b610bcf610dee565b6001600160a01b038116610c345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b61061881610e48565b6001600160a01b0381166000908152600460205260408120600301548190610c6484610ccf565b610c6e919061122b565b9392505050565b60026001541415610cc85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610322565b6002600155565b60006002544211610d31576003546001600160a01b03831660009081526004602052604090208054600290910154610e10929190610d0d9042611284565b610d179190611265565b610d219190611265565b610d2b9190611243565b92915050565b600280546001600160a01b03841660009081526004602052604090209091015410610d5e57506000919050565b6003546001600160a01b038316600090815260046020526040902080546002918201549154610e109392610d0d91611284565b60018055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610de9908490610e98565b505050565b6000546001600160a01b0316331461087f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610eed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f6a9092919063ffffffff16565b805190915015610de95780806020019051810190610f0b9190611131565b610de95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610322565b6060610f798484600085610f81565b949350505050565b606082471015610fe25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610322565b600080866001600160a01b03168587604051610ffe9190611198565b60006040518083038185875af1925050503d806000811461103b576040519150601f19603f3d011682016040523d82523d6000602084013e611040565b606091505b50915091506110518783838761105c565b979650505050505050565b606083156110c85782516110c1576001600160a01b0385163b6110c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610322565b5081610f79565b610f7983838151156110dd5781518083602001fd5b8060405162461bcd60e51b815260040161032291906111f8565b60006020828403121561110957600080fd5b8135610c6e8161133f565b60006020828403121561112657600080fd5b8151610c6e8161133f565b60006020828403121561114357600080fd5b81518015158114610c6e57600080fd5b6000806040838503121561116657600080fd5b82356111718161133f565b946020939093013593505050565b60006020828403121561119157600080fd5b5035919050565b600082516111aa81846020870161129b565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156111ec578351835292840192918401916001016111d0565b50909695505050505050565b602081526000825180602084015261121781604085016020870161129b565b601f01601f19169190910160400192915050565b6000821982111561123e5761123e6112fd565b500190565b60008261126057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561127f5761127f6112fd565b500290565b600082821015611296576112966112fd565b500390565b60005b838110156112b657818101518382015260200161129e565b838111156112c5576000848401525b50505050565b6000816112da576112da6112fd565b506000190190565b60006000198214156112f6576112f66112fd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461061857600080fdfea264697066735822122060371a3a62463447bb8c64431c4e278422d71fd1e3083f1cc29c22e3be050dd364736f6c634300080700330000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd16
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80639168ae72116100a2578063a694fc3a11610071578063a694fc3a14610271578063d1af0c7d14610284578063e4a337f3146102ab578063f2fde38b146102b4578063f854a27f146102c757600080fd5b80639168ae72146101d8578063940670451461022257806395ccea671461024b578063a1bb5cd81461025e57600080fd5b8063715018a6116100de578063715018a61461019557806374baefcf1461019d5780638da5cb5b146101b05780638e7271fa146101c157600080fd5b80632e1a7d4d14610110578063372500ab1461012557806363c28db11461012d5780636588103b14610156575b600080fd5b61012361011e36600461117f565b6102da565b005b61012361061b565b61014061013b3660046110f7565b6106e3565b60405161014d91906111b4565b60405180910390f35b61017d7f0000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b81565b6040516001600160a01b03909116815260200161014d565b61012361086d565b6101236101ab36600461117f565b610881565b6000546001600160a01b031661017d565b6101ca60035481565b60405190815260200161014d565b6102076101e63660046110f7565b60046020526000908152604090208054600282015460039092015490919083565b6040805193845260208401929092529082015260600161014d565b61017d61023036600461117f565b6005602052600090815260409020546001600160a01b031681565b610123610259366004611153565b6108cf565b61012361026c36600461117f565b610901565b61012361027f36600461117f565b610947565b61017d7f00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd1681565b6101ca60025481565b6101236102c23660046110f7565b610bc7565b6101ca6102d53660046110f7565b610c3d565b6102e2610c75565b60025442101561032b5760405162461bcd60e51b815260206004820152600f60248201526e1391951cc8185c99481b1bd8dad959608a1b60448201526064015b60405180910390fd5b336000908152600460205260409020546103875760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20746f6b656e73207374616b6564000000000000006044820152606401610322565b6000818152600560205260409020546001600160a01b031633146103e95760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b60006103f433610ccf565b3360009081526004602052604081206003018054929350839290919061041b90849061122b565b9091555060009050805b336000908152600460205260409020600101548110156104e05733600090815260046020526040902060010180548591908390811061046657610466611313565b9060005260206000209060020201600101541480156104c157503360009081526004602052604081206001018054839081106104a4576104a4611313565b60009182526020909120600290910201546001600160a01b031614155b156104ce578091506104e0565b806104d8816112e2565b915050610425565b5033600090815260046020526040812060010180548390811061050557610505611313565b6000918252602080832060029290920290910180546001600160a01b0319166001600160a01b03949094169390931790925533815260049091526040812080549161054f836112cb565b90915550506000838152600560205260409081902080546001600160a01b0319169055516323b872dd60e01b8152306004820152336024820152604481018490526001600160a01b037f0000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b16906323b872dd90606401600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505033600090815260046020526040902042600290910155506106189250610d91915050565b50565b33600081815260046020526040812060030154909161063990610ccf565b610643919061122b565b9050600081116106955760405162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f207265776172647320746f20636c61696d000000006044820152606401610322565b33600081815260046020526040812042600282015560030155610618907f00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd166001600160a01b03169083610d97565b6001600160a01b03811660009081526004602052604090205460609015610859576001600160a01b03821660009081526004602052604081205467ffffffffffffffff81111561073557610735611329565b60405190808252806020026020018201604052801561075e578160200160208202803683370190505b5090506000805b6001600160a01b038516600090815260046020526040902060010154811015610850576001600160a01b03851660009081526004602052604081206001018054839081106107b5576107b5611313565b60009182526020909120600290910201546001600160a01b03161461083e576001600160a01b038516600090815260046020526040902060010180548290811061080157610801611313565b90600052602060002090600202016001015483838151811061082557610825611313565b60209081029190910101528161083a816112e2565b9250505b80610848816112e2565b915050610765565b50909392505050565b505060408051600081526020810190915290565b610875610dee565b61087f6000610e48565b565b610889610dee565b600380549082905560408051828152602081018490527f2e48a9d59ca3fc8b64b9dd84783ada19b9b4240c23b4e87f3ff21a1ba1f320d391015b60405180910390a15050565b6108d7610dee565b6108fd6108ec6000546001600160a01b031690565b6001600160a01b0384169083610d97565b5050565b610909610dee565b600280549082905560408051828152602081018490527f71ffeabd1c4634f619be28486143538a8255c59b257708a84a258b78d3b8ca4091016108c3565b61094f610c75565b336000908152600460205260409020541561099d57600061096f33610ccf565b3360009081526004602052604081206003018054929350839290919061099690849061122b565b9091555050505b6040516331a9108f60e11b81526004810182905233906001600160a01b037f0000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b1690636352211e9060240160206040518083038186803b1580156109ff57600080fd5b505afa158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a379190611114565b6001600160a01b031614610a895760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f0000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b6001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050604080518082018252338082526020808301878152600083815260048352948520600180820180548083018255908852938720865160029095020180546001600160a01b0319166001600160a01b0390951694909417845591519290910191909155908352805491945090925090610b84836112e2565b909155505050600081815260056020908152604080832080546001600160a01b031916339081179091558352600490915290204260029091015561061860018055565b610bcf610dee565b6001600160a01b038116610c345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b61061881610e48565b6001600160a01b0381166000908152600460205260408120600301548190610c6484610ccf565b610c6e919061122b565b9392505050565b60026001541415610cc85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610322565b6002600155565b60006002544211610d31576003546001600160a01b03831660009081526004602052604090208054600290910154610e10929190610d0d9042611284565b610d179190611265565b610d219190611265565b610d2b9190611243565b92915050565b600280546001600160a01b03841660009081526004602052604090209091015410610d5e57506000919050565b6003546001600160a01b038316600090815260046020526040902080546002918201549154610e109392610d0d91611284565b60018055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610de9908490610e98565b505050565b6000546001600160a01b0316331461087f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610eed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f6a9092919063ffffffff16565b805190915015610de95780806020019051810190610f0b9190611131565b610de95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610322565b6060610f798484600085610f81565b949350505050565b606082471015610fe25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610322565b600080866001600160a01b03168587604051610ffe9190611198565b60006040518083038185875af1925050503d806000811461103b576040519150601f19603f3d011682016040523d82523d6000602084013e611040565b606091505b50915091506110518783838761105c565b979650505050505050565b606083156110c85782516110c1576001600160a01b0385163b6110c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610322565b5081610f79565b610f7983838151156110dd5781518083602001fd5b8060405162461bcd60e51b815260040161032291906111f8565b60006020828403121561110957600080fd5b8135610c6e8161133f565b60006020828403121561112657600080fd5b8151610c6e8161133f565b60006020828403121561114357600080fd5b81518015158114610c6e57600080fd5b6000806040838503121561116657600080fd5b82356111718161133f565b946020939093013593505050565b60006020828403121561119157600080fd5b5035919050565b600082516111aa81846020870161129b565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156111ec578351835292840192918401916001016111d0565b50909695505050505050565b602081526000825180602084015261121781604085016020870161129b565b601f01601f19169190910160400192915050565b6000821982111561123e5761123e6112fd565b500190565b60008261126057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561127f5761127f6112fd565b500290565b600082821015611296576112966112fd565b500390565b60005b838110156112b657818101518382015260200161129e565b838111156112c5576000848401525b50505050565b6000816112da576112da6112fd565b506000190190565b60006000198214156112f6576112f66112fd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461061857600080fdfea264697066735822122060371a3a62463447bb8c64431c4e278422d71fd1e3083f1cc29c22e3be050dd364736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd16
-----Decoded View---------------
Arg [0] : _nftCollection (address): 0x5C2644775F0EF7a23D682D03028f739f6AdbCC0B
Arg [1] : _rewardsToken (address): 0x57c411e9a358e2d2d0a6b058cEDb709175e8fd16
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c2644775f0ef7a23d682d03028f739f6adbcc0b
Arg [1] : 00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd16
Deployed Bytecode Sourcemap
12832:8591:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16267:1865;;;;;;:::i;:::-;;:::i;:::-;;18315:386;;;:::i;18978:865::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13008:38;;;;;;;;-1:-1:-1;;;;;1766:32:1;;;1748:51;;1736:2;1721:18;13008:38:0;1602:203:1;1006:103:0;;;:::i;20250:258::-;;;;;;:::i;:::-;;:::i;771:87::-;817:7;844:6;-1:-1:-1;;;;;844:6:0;771:87;;14167:53;;;;;;;;;7798:25:1;;;7786:2;7771:18;14167:53:0;7652:177:1;14276:41:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8289:25:1;;;8345:2;8330:18;;8323:34;;;;8373:18;;;8366:34;8277:2;8262:18;14276:41:0;8087:319:1;14438:48:0;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14438:48:0;;;20112:130;;;;;;:::i;:::-;;:::i;19851:253::-;;;;;;:::i;:::-;;:::i;14760:1254::-;;;;;;:::i;:::-;;:::i;12965:36::-;;;;;13055:45;;;;;;1117:201;;;;;;:::i;:::-;;:::i;18761:209::-;;;;;;:::i;:::-;;:::i;16267:1865::-;1791:21;:19;:21::i;:::-;16363:17:::1;;16344:15;:36;;16336:64;;;::::0;-1:-1:-1;;;16336:64:0;;6381:2:1;16336:64:0::1;::::0;::::1;6363:21:1::0;6420:2;6400:18;;;6393:30;-1:-1:-1;;;6439:18:1;;;6432:45;6494:18;;16336:64:0::1;;;;;;;;;16521:10;16548:1;16513:19:::0;;;:7:::1;:19;::::0;;;;:32;16491:111:::1;;;::::0;-1:-1:-1;;;16491:111:0;;4902:2:1;16491:111:0::1;::::0;::::1;4884:21:1::0;4941:2;4921:18;;;4914:30;4980:27;4960:18;;;4953:55;5025:18;;16491:111:0::1;4700:349:1::0;16491:111:0::1;16697:23;::::0;;;:13:::1;:23;::::0;;;;;-1:-1:-1;;;;;16697:23:0::1;16724:10;16697:37;16689:75;;;::::0;-1:-1:-1;;;16689:75:0;;4141:2:1;16689:75:0::1;::::0;::::1;4123:21:1::0;4180:2;4160:18;;;4153:30;-1:-1:-1;;;4199:18:1;;;4192:55;4264:18;;16689:75:0::1;3939:349:1::0;16689:75:0::1;16876:15;16894:28;16911:10;16894:16;:28::i;:::-;16941:10;16933:19;::::0;;;:7:::1;:19;::::0;;;;:36:::1;;:47:::0;;16876:46;;-1:-1:-1;16876:46:0;;16933:36;;:19;:47:::1;::::0;16876:46;;16933:47:::1;:::i;:::-;::::0;;;-1:-1:-1;17063:13:0::1;::::0;-1:-1:-1;17063:13:0;17091:353:::1;17123:10;17115:19;::::0;;;:7:::1;:19;::::0;;;;:32:::1;;:39:::0;17111:43;::::1;17091:353;;;17206:10;17198:19;::::0;;;:7:::1;:19;::::0;;;;:32:::1;;:35:::0;;17245:8;;17198:32;17231:1;;17198:35;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;;:55;:151;;;;-1:-1:-1::0;17301:10:0::1;17347:1;17293:19:::0;;;:7:::1;:19;::::0;;;;:32:::1;;:35:::0;;17326:1;;17293:35;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:42:::0;-1:-1:-1;;;;;17293:42:0::1;:56;;17198:151;17176:257;;;17392:1;17384:9;;17412:5;;17176:257;17156:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17091:353;;;-1:-1:-1::0;17548:10:0::1;17597:1;17540:19:::0;;;:7:::1;:19;::::0;;;;:32:::1;;:39:::0;;17573:5;;17540:39;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;:59:::0;;-1:-1:-1;;;;;;17540:59:0::1;-1:-1:-1::0;;;;;17540:59:0;;;::::1;::::0;;;::::1;::::0;;;17676:10:::1;17668:19:::0;;:7:::1;:19:::0;;;;;;:34;;;::::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;17863:1:0::1;17829:23:::0;;;:13:::1;:23;::::0;;;;;;:36;;-1:-1:-1;;;;;;17829:36:0::1;::::0;;17932:63;-1:-1:-1;;;17932:63:0;;17967:4:::1;17932:63;::::0;::::1;2050:34:1::0;17974:10:0::1;2100:18:1::0;;;2093:43;2152:18;;;2145:34;;;-1:-1:-1;;;;;17932:13:0::1;:26;::::0;::::1;::::0;1985:18:1;;17932:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18078:10:0::1;18070:19;::::0;;;:7:::1;:19;::::0;;;;18109:15:::1;18070:36;::::0;;::::1;:54:::0;-1:-1:-1;1835:20:0;;-1:-1:-1;1835:18:0;;-1:-1:-1;;1835:20:0:i;:::-;16267:1865;:::o;18315:386::-;18429:10;18359:15;18421:19;;;:7;:19;;;;;:36;;;18359:15;;18377:28;;:16;:28::i;:::-;:80;;;;:::i;:::-;18359:98;;18486:1;18476:7;:11;18468:52;;;;-1:-1:-1;;;18468:52:0;;6024:2:1;18468:52:0;;;6006:21:1;6063:2;6043:18;;;6036:30;6102;6082:18;;;6075:58;6150:18;;18468:52:0;5822:352:1;18468:52:0;18539:10;18531:19;;;;:7;:19;;;;;18570:15;18531:36;;;:54;18596:36;;:40;18647:46;;:12;-1:-1:-1;;;;;18647:25:0;;18685:7;18647:25;:46::i;18978:865::-;-1:-1:-1;;;;;19111:14:0;;19141:1;19111:14;;;:7;:14;;;;;:27;19039:16;;19111:31;19107:729;;-1:-1:-1;;;;;19299:14:0;;19252:30;19299:14;;;:7;:14;;;;;:27;19285:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19285:42:0;;19252:75;;19342:14;19382:9;19377:294;-1:-1:-1;;;;;19401:14:0;;;;;;:7;:14;;;;;:27;;:34;19397:38;;19377:294;;;-1:-1:-1;;;;;19465:14:0;;19515:1;19465:14;;;:7;:14;;;;;:27;;:30;;19493:1;;19465:30;;;;;;:::i;:::-;;;;;;;;;;;;;;:37;-1:-1:-1;;;;;19465:37:0;:53;19461:195;;-1:-1:-1;;;;;19567:14:0;;;;;;:7;:14;;;;;:27;;:30;;19595:1;;19567:30;;;;;;:::i;:::-;;;;;;;;;;;:38;;;19543:13;19557:6;19543:21;;;;;;;;:::i;:::-;;;;;;;;;;:62;19628:8;;;;:::i;:::-;;;;19461:195;19437:3;;;;:::i;:::-;;;;19377:294;;;-1:-1:-1;19694:13:0;;18978:865;-1:-1:-1;;;18978:865:0:o;19107:729::-;-1:-1:-1;;19808:16:0;;;19822:1;19808:16;;;;;;;;;18978:865::o;1006:103::-;730:13;:11;:13::i;:::-;1071:30:::1;1098:1;1071:18;:30::i;:::-;1006:103::o:0;20250:258::-;730:13;:11;:13::i;:::-;20364:14:::1;::::0;;20389:34;;;;20441:59:::1;::::0;;8008:25:1;;;8064:2;8049:18;;8042:34;;;20441:59:0::1;::::0;7981:18:1;20441:59:0::1;;;;;;;;20325:183;20250:258:::0;:::o;20112:130::-;730:13;:11;:13::i;:::-;20199:35:::1;20218:7;817::::0;844:6;-1:-1:-1;;;;;844:6:0;;771:87;20218:7:::1;-1:-1:-1::0;;;;;20199:18:0;::::1;::::0;20227:6;20199:18:::1;:35::i;:::-;20112:130:::0;;:::o;19851:253::-;730:13;:11;:13::i;:::-;19964:17:::1;::::0;;19992:29;;;;20039:57:::1;::::0;;8008:25:1;;;8064:2;8049:18;;8042:34;;;20039:57:0::1;::::0;7981:18:1;20039:57:0::1;7834:248:1::0;14760:1254:0;1791:21;:19;:21::i;:::-;14929:10:::1;14956:1;14921:19:::0;;;:7:::1;:19;::::0;;;;:32;:36;14917:177:::1;;14974:15;14992:28;15009:10;14992:16;:28::i;:::-;15043:10;15035:19;::::0;;;:7:::1;:19;::::0;;;;:36:::1;;:47:::0;;14974:46;;-1:-1:-1;14974:46:0;;15035:36;;:19;:47:::1;::::0;14974:46;;15035:47:::1;:::i;:::-;::::0;;;-1:-1:-1;;;14917:177:0::1;15191:31;::::0;-1:-1:-1;;;15191:31:0;;::::1;::::0;::::1;7798:25:1::0;;;15226:10:0::1;::::0;-1:-1:-1;;;;;15191:13:0::1;:21;::::0;::::1;::::0;7771:18:1;;15191:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15191:45:0::1;;15169:120;;;::::0;-1:-1:-1;;;15169:120:0;;4141:2:1;15169:120:0::1;::::0;::::1;4123:21:1::0;4180:2;4160:18;;;4153:30;-1:-1:-1;;;4199:18:1;;;4192:55;4264:18;;15169:120:0::1;3939:349:1::0;15169:120:0::1;15371:63;::::0;-1:-1:-1;;;15371:63:0;;15398:10:::1;15371:63;::::0;::::1;2050:34:1::0;15418:4:0::1;2100:18:1::0;;;2093:43;2152:18;;;2145:34;;;15371:13:0::1;-1:-1:-1::0;;;;;15371:26:0::1;::::0;::::1;::::0;1985:18:1;;15371:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15511:33:0::1;::::0;;;;::::1;::::0;;15523:10:::1;15511:33:::0;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;15609:19:0;;;:7:::1;:19:::0;;;;;:32:::1;::::0;;::::1;:50:::0;;;;::::1;::::0;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;15609:50:0::1;-1:-1:-1::0;;;;;15609:50:0;;::::1;::::0;;;::::1;::::0;;;;;;;::::1;::::0;;;;15728:19;;;:34;;15511:33;;-1:-1:-1;15728:34:0;;-1:-1:-1;15609:19:0;15728:34:::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;15845:23:0::1;::::0;;;:13:::1;:23;::::0;;;;;;;:36;;-1:-1:-1;;;;;;15845:36:0::1;15871:10;15845:36:::0;;::::1;::::0;;;15952:19;;:7:::1;:19:::0;;;;;15991:15:::1;15952:36;::::0;;::::1;:54:::0;1835:20;1607:1;2351:22;;2168:213;1117:201;730:13;:11;:13::i;:::-;-1:-1:-1;;;;;1206:22:0;::::1;1198:73;;;::::0;-1:-1:-1;;;1198:73:0;;4495:2:1;1198:73:0::1;::::0;::::1;4477:21:1::0;4534:2;4514:18;;;4507:30;4573:34;4553:18;;;4546:62;-1:-1:-1;;;4624:18:1;;;4617:36;4670:19;;1198:73:0::1;4293:402:1::0;1198:73:0::1;1282:28;1301:8;1282:18;:28::i;18761:209::-:0;-1:-1:-1;;;;;18904:16:0;;18825:7;18904:16;;;:7;:16;;;;;:33;;;18825:7;;18863:25;18912:7;18863:16;:25::i;:::-;:74;;;;:::i;:::-;18845:92;18761:209;-1:-1:-1;;;18761:209:0:o;1871:289::-;1651:1;2001:7;;:19;;1993:63;;;;-1:-1:-1;;;1993:63:0;;7494:2:1;1993:63:0;;;7476:21:1;7533:2;7513:18;;;7506:30;7572:33;7552:18;;;7545:61;7623:18;;1993:63:0;7292:355:1;1993:63:0;1651:1;2134:7;:18;1871:289::o;20756:664::-;20849:16;20906:17;;20887:15;:36;20883:352;;21092:14;;-1:-1:-1;;;;;21044:16:0;;;;;;:7;:16;;;;;:29;;20986:33;;;;;21110:4;;21092:14;21044:29;20968:51;;:15;:51;:::i;:::-;20967:106;;;;:::i;:::-;20947:159;;;;:::i;:::-;20946:168;;;;:::i;:::-;20938:177;20756:664;-1:-1:-1;;20756:664:0:o;20883:352::-;21181:17;;;-1:-1:-1;;;;;21144:16:0;;;;;;:7;:16;;;;;:33;;;;:54;21141:94;;-1:-1:-1;21222:1:0;;20756:664;-1:-1:-1;20756:664:0:o;21141:94::-;21389:14;;-1:-1:-1;;;;;21345:16:0;;;;;;:7;:16;;;;;:29;;21291:33;;;;;21271:17;;21407:4;;21389:14;21271:53;;;:::i;2168:213::-;1607:1;2351:22;;2168:213::o;8509:211::-;8653:58;;;-1:-1:-1;;;;;2382:32:1;;8653:58:0;;;2364:51:1;2431:18;;;;2424:34;;;8653:58:0;;;;;;;;;;2337:18:1;;;;8653:58:0;;;;;;;;-1:-1:-1;;;;;8653:58:0;-1:-1:-1;;;8653:58:0;;;8626:86;;8646:5;;8626:19;:86::i;:::-;8509:211;;;:::o;866:132::-;817:7;844:6;-1:-1:-1;;;;;844:6:0;191:10;930:23;922:68;;;;-1:-1:-1;;;922:68:0;;5663:2:1;922:68:0;;;5645:21:1;;;5682:18;;;5675:30;5741:34;5721:18;;;5714:62;5793:18;;922:68:0;5461:356:1;1326:191:0;1400:16;1419:6;;-1:-1:-1;;;;;1436:17:0;;;-1:-1:-1;;;;;;1436:17:0;;;;;;1469:40;;1419:6;;;;;;;1469:40;;1400:16;1469:40;1389:128;1326:191;:::o;10932:716::-;11356:23;11382:69;11410:4;11382:69;;;;;;;;;;;;;;;;;11390:5;-1:-1:-1;;;;;11382:27:0;;;:69;;;;;:::i;:::-;11466:17;;11356:95;;-1:-1:-1;11466:21:0;11462:179;;11563:10;11552:30;;;;;;;;;;;;:::i;:::-;11544:85;;;;-1:-1:-1;;;11544:85:0;;7083:2:1;11544:85:0;;;7065:21:1;7122:2;7102:18;;;7095:30;7161:34;7141:18;;;7134:62;-1:-1:-1;;;7212:18:1;;;7205:40;7262:19;;11544:85:0;6881:406:1;4860:229:0;4997:12;5029:52;5051:6;5059:4;5065:1;5068:12;5029:21;:52::i;:::-;5022:59;4860:229;-1:-1:-1;;;;4860:229:0:o;5365:455::-;5535:12;5593:5;5568:21;:30;;5560:81;;;;-1:-1:-1;;;5560:81:0;;5256:2:1;5560:81:0;;;5238:21:1;5295:2;5275:18;;;5268:30;5334:34;5314:18;;;5307:62;-1:-1:-1;;;5385:18:1;;;5378:36;5431:19;;5560:81:0;5054:402:1;5560:81:0;5653:12;5667:23;5694:6;-1:-1:-1;;;;;5694:11:0;5713:5;5720:4;5694:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5652:73;;;;5743:69;5770:6;5778:7;5787:10;5799:12;5743:26;:69::i;:::-;5736:76;5365:455;-1:-1:-1;;;;;;;5365:455:0:o;6924:644::-;7109:12;7138:7;7134:427;;;7166:17;;7162:290;;-1:-1:-1;;;;;4301:19:0;;;7376:60;;;;-1:-1:-1;;;7376:60:0;;6725:2:1;7376:60:0;;;6707:21:1;6764:2;6744:18;;;6737:30;6803:31;6783:18;;;6776:59;6852:18;;7376:60:0;6523:353:1;7376:60:0;-1:-1:-1;7473:10:0;7466:17;;7134:427;7516:33;7524:10;7536:12;8050:17;;:21;8046:388;;8282:10;8276:17;8339:15;8326:10;8322:2;8318:19;8311:44;8046:388;8409:12;8402:20;;-1:-1:-1;;;8402:20:0;;;;;;;;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:277::-;589:6;642:2;630:9;621:7;617:23;613:32;610:52;;;658:1;655;648:12;610:52;690:9;684:16;743:5;736:13;729:21;722:5;719:32;709:60;;765:1;762;755:12;804:329;886:6;894;947:2;935:9;926:7;922:23;918:32;915:52;;;963:1;960;953:12;915:52;1002:9;989:23;1021:31;1046:5;1021:31;:::i;:::-;1071:5;1123:2;1108:18;;;;1095:32;;-1:-1:-1;;;804:329:1:o;1138:180::-;1197:6;1250:2;1238:9;1229:7;1225:23;1221:32;1218:52;;;1266:1;1263;1256:12;1218:52;-1:-1:-1;1289:23:1;;1138:180;-1:-1:-1;1138:180:1:o;1323:274::-;1452:3;1490:6;1484:13;1506:53;1552:6;1547:3;1540:4;1532:6;1528:17;1506:53;:::i;:::-;1575:16;;;;;1323:274;-1:-1:-1;;1323:274:1:o;2469:632::-;2640:2;2692:21;;;2762:13;;2665:18;;;2784:22;;;2611:4;;2640:2;2863:15;;;;2837:2;2822:18;;;2611:4;2906:169;2920:6;2917:1;2914:13;2906:169;;;2981:13;;2969:26;;3050:15;;;;3015:12;;;;2942:1;2935:9;2906:169;;;-1:-1:-1;3092:3:1;;2469:632;-1:-1:-1;;;;;;2469:632:1:o;3551:383::-;3700:2;3689:9;3682:21;3663:4;3732:6;3726:13;3775:6;3770:2;3759:9;3755:18;3748:34;3791:66;3850:6;3845:2;3834:9;3830:18;3825:2;3817:6;3813:15;3791:66;:::i;:::-;3918:2;3897:15;-1:-1:-1;;3893:29:1;3878:45;;;;3925:2;3874:54;;3551:383;-1:-1:-1;;3551:383:1:o;8411:128::-;8451:3;8482:1;8478:6;8475:1;8472:13;8469:39;;;8488:18;;:::i;:::-;-1:-1:-1;8524:9:1;;8411:128::o;8544:217::-;8584:1;8610;8600:132;;8654:10;8649:3;8645:20;8642:1;8635:31;8689:4;8686:1;8679:15;8717:4;8714:1;8707:15;8600:132;-1:-1:-1;8746:9:1;;8544:217::o;8766:168::-;8806:7;8872:1;8868;8864:6;8860:14;8857:1;8854:21;8849:1;8842:9;8835:17;8831:45;8828:71;;;8879:18;;:::i;:::-;-1:-1:-1;8919:9:1;;8766:168::o;8939:125::-;8979:4;9007:1;9004;9001:8;8998:34;;;9012:18;;:::i;:::-;-1:-1:-1;9049:9:1;;8939:125::o;9069:258::-;9141:1;9151:113;9165:6;9162:1;9159:13;9151:113;;;9241:11;;;9235:18;9222:11;;;9215:39;9187:2;9180:10;9151:113;;;9282:6;9279:1;9276:13;9273:48;;;9317:1;9308:6;9303:3;9299:16;9292:27;9273:48;;9069:258;;;:::o;9332:136::-;9371:3;9399:5;9389:39;;9408:18;;:::i;:::-;-1:-1:-1;;;9444:18:1;;9332:136::o;9473:135::-;9512:3;-1:-1:-1;;9533:17:1;;9530:43;;;9553:18;;:::i;:::-;-1:-1:-1;9600:1:1;9589:13;;9473:135::o;9613:127::-;9674:10;9669:3;9665:20;9662:1;9655:31;9705:4;9702:1;9695:15;9729:4;9726:1;9719:15;9745:127;9806:10;9801:3;9797:20;9794:1;9787:31;9837:4;9834:1;9827:15;9861:4;9858:1;9851:15;9877:127;9938:10;9933:3;9929:20;9926:1;9919:31;9969:4;9966:1;9959:15;9993:4;9990:1;9983:15;10009:131;-1:-1:-1;;;;;10084:31:1;;10074:42;;10064:70;;10130:1;10127;10120:12
Swarm Source
ipfs://60371a3a62463447bb8c64431c4e278422d71fd1e3083f1cc29c22e3be050dd3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 33 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.