Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Multichain Info
No addresses found
Latest 25 from a total of 494 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16779843 | 775 days ago | IN | 0 ETH | 0.00486835 | ||||
Emergency Withdr... | 16557560 | 806 days ago | IN | 0 ETH | 0.00670515 | ||||
Claim Rewards | 16552715 | 807 days ago | IN | 0 ETH | 0.00672211 | ||||
Claim Rewards | 16538082 | 809 days ago | IN | 0 ETH | 0.01274275 | ||||
Claim Rewards | 16517805 | 811 days ago | IN | 0 ETH | 0.0038561 | ||||
Claim Rewards | 16497267 | 814 days ago | IN | 0 ETH | 0.00387781 | ||||
Claim Rewards | 16476538 | 817 days ago | IN | 0 ETH | 0.00436748 | ||||
Claim Rewards | 16452199 | 821 days ago | IN | 0 ETH | 0.00424056 | ||||
Claim Rewards | 16439005 | 822 days ago | IN | 0 ETH | 0.00479726 | ||||
Claim Rewards | 16424147 | 825 days ago | IN | 0 ETH | 0.0054605 | ||||
Claim Rewards | 16423323 | 825 days ago | IN | 0 ETH | 0.00514263 | ||||
Claim Rewards | 16418856 | 825 days ago | IN | 0 ETH | 0.00372179 | ||||
Claim Rewards | 16418780 | 825 days ago | IN | 0 ETH | 0.00441237 | ||||
Claim Rewards | 16362023 | 833 days ago | IN | 0 ETH | 0.00393629 | ||||
Claim Rewards | 16361203 | 833 days ago | IN | 0 ETH | 0.00429052 | ||||
Claim Rewards | 16357926 | 834 days ago | IN | 0 ETH | 0.0046422 | ||||
Claim Rewards | 16354282 | 834 days ago | IN | 0 ETH | 0.0033886 | ||||
Claim Rewards | 16353936 | 834 days ago | IN | 0 ETH | 0.00415302 | ||||
Claim Rewards | 16350527 | 835 days ago | IN | 0 ETH | 0.00552864 | ||||
Claim Rewards | 16330074 | 838 days ago | IN | 0 ETH | 0.00583765 | ||||
Claim Rewards | 16321284 | 839 days ago | IN | 0 ETH | 0.00454857 | ||||
Claim Rewards | 16288676 | 843 days ago | IN | 0 ETH | 0.00437519 | ||||
Claim Rewards | 16268105 | 846 days ago | IN | 0 ETH | 0.00287116 | ||||
Claim Rewards | 16265579 | 847 days ago | IN | 0 ETH | 0.00339295 | ||||
Claim Rewards | 16262277 | 847 days ago | IN | 0 ETH | 0.00656378 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ERC721Staking
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-03 */ // 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 = 1677873600; 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 = 779872689182000000000; // 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
60c060405263640251c0600255682a46e85ede51bbac0060035534801561002557600080fd5b50604051620014e5380380620014e5833981016040819052610046916100c1565b61004f33610071565b600180556001600160601b0319606092831b811660a052911b16608052610113565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100d457600080fd5b82516100df816100fb565b60208401519092506100f0816100fb565b809150509250929050565b6001600160a01b038116811461011057600080fd5b50565b60805160601c60a05160601c61138a6200015b6000396000818161015b0152818161059a015281816109bd0152610aab01526000818161028901526106b4015261138a6000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80639168ae72116100a2578063a694fc3a11610071578063a694fc3a14610271578063d1af0c7d14610284578063e4a337f3146102ab578063f2fde38b146102b4578063f854a27f146102c757600080fd5b80639168ae72146101d8578063940670451461022257806395ccea671461024b578063a1bb5cd81461025e57600080fd5b8063715018a6116100de578063715018a61461019557806374baefcf1461019d5780638da5cb5b146101b05780638e7271fa146101c157600080fd5b80632e1a7d4d14610110578063372500ab1461012557806363c28db11461012d5780636588103b14610156575b600080fd5b61012361011e36600461117f565b6102da565b005b61012361061b565b61014061013b3660046110f7565b6106e3565b60405161014d91906111b4565b60405180910390f35b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014d565b61012361086d565b6101236101ab36600461117f565b610881565b6000546001600160a01b031661017d565b6101ca60035481565b60405190815260200161014d565b6102076101e63660046110f7565b60046020526000908152604090208054600282015460039092015490919083565b6040805193845260208401929092529082015260600161014d565b61017d61023036600461117f565b6005602052600090815260409020546001600160a01b031681565b610123610259366004611153565b6108cf565b61012361026c36600461117f565b610901565b61012361027f36600461117f565b610947565b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b6101ca60025481565b6101236102c23660046110f7565b610bc7565b6101ca6102d53660046110f7565b610c3d565b6102e2610c75565b60025442101561032b5760405162461bcd60e51b815260206004820152600f60248201526e1391951cc8185c99481b1bd8dad959608a1b60448201526064015b60405180910390fd5b336000908152600460205260409020546103875760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20746f6b656e73207374616b6564000000000000006044820152606401610322565b6000818152600560205260409020546001600160a01b031633146103e95760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b60006103f433610ccf565b3360009081526004602052604081206003018054929350839290919061041b90849061122b565b9091555060009050805b336000908152600460205260409020600101548110156104e05733600090815260046020526040902060010180548591908390811061046657610466611313565b9060005260206000209060020201600101541480156104c157503360009081526004602052604081206001018054839081106104a4576104a4611313565b60009182526020909120600290910201546001600160a01b031614155b156104ce578091506104e0565b806104d8816112e2565b915050610425565b5033600090815260046020526040812060010180548390811061050557610505611313565b6000918252602080832060029290920290910180546001600160a01b0319166001600160a01b03949094169390931790925533815260049091526040812080549161054f836112cb565b90915550506000838152600560205260409081902080546001600160a01b0319169055516323b872dd60e01b8152306004820152336024820152604481018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90606401600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505033600090815260046020526040902042600290910155506106189250610d91915050565b50565b33600081815260046020526040812060030154909161063990610ccf565b610643919061122b565b9050600081116106955760405162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f207265776172647320746f20636c61696d000000006044820152606401610322565b33600081815260046020526040812042600282015560030155610618907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169083610d97565b6001600160a01b03811660009081526004602052604090205460609015610859576001600160a01b03821660009081526004602052604081205467ffffffffffffffff81111561073557610735611329565b60405190808252806020026020018201604052801561075e578160200160208202803683370190505b5090506000805b6001600160a01b038516600090815260046020526040902060010154811015610850576001600160a01b03851660009081526004602052604081206001018054839081106107b5576107b5611313565b60009182526020909120600290910201546001600160a01b03161461083e576001600160a01b038516600090815260046020526040902060010180548290811061080157610801611313565b90600052602060002090600202016001015483838151811061082557610825611313565b60209081029190910101528161083a816112e2565b9250505b80610848816112e2565b915050610765565b50909392505050565b505060408051600081526020810190915290565b610875610dee565b61087f6000610e48565b565b610889610dee565b600380549082905560408051828152602081018490527f2e48a9d59ca3fc8b64b9dd84783ada19b9b4240c23b4e87f3ff21a1ba1f320d391015b60405180910390a15050565b6108d7610dee565b6108fd6108ec6000546001600160a01b031690565b6001600160a01b0384169083610d97565b5050565b610909610dee565b600280549082905560408051828152602081018490527f71ffeabd1c4634f619be28486143538a8255c59b257708a84a258b78d3b8ca4091016108c3565b61094f610c75565b336000908152600460205260409020541561099d57600061096f33610ccf565b3360009081526004602052604081206003018054929350839290919061099690849061122b565b9091555050505b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e9060240160206040518083038186803b1580156109ff57600080fd5b505afa158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a379190611114565b6001600160a01b031614610a895760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050604080518082018252338082526020808301878152600083815260048352948520600180820180548083018255908852938720865160029095020180546001600160a01b0319166001600160a01b0390951694909417845591519290910191909155908352805491945090925090610b84836112e2565b909155505050600081815260056020908152604080832080546001600160a01b031916339081179091558352600490915290204260029091015561061860018055565b610bcf610dee565b6001600160a01b038116610c345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b61061881610e48565b6001600160a01b0381166000908152600460205260408120600301548190610c6484610ccf565b610c6e919061122b565b9392505050565b60026001541415610cc85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610322565b6002600155565b60006002544211610d31576003546001600160a01b03831660009081526004602052604090208054600290910154610e10929190610d0d9042611284565b610d179190611265565b610d219190611265565b610d2b9190611243565b92915050565b600280546001600160a01b03841660009081526004602052604090209091015410610d5e57506000919050565b6003546001600160a01b038316600090815260046020526040902080546002918201549154610e109392610d0d91611284565b60018055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610de9908490610e98565b505050565b6000546001600160a01b0316331461087f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610eed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f6a9092919063ffffffff16565b805190915015610de95780806020019051810190610f0b9190611131565b610de95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610322565b6060610f798484600085610f81565b949350505050565b606082471015610fe25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610322565b600080866001600160a01b03168587604051610ffe9190611198565b60006040518083038185875af1925050503d806000811461103b576040519150601f19603f3d011682016040523d82523d6000602084013e611040565b606091505b50915091506110518783838761105c565b979650505050505050565b606083156110c85782516110c1576001600160a01b0385163b6110c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610322565b5081610f79565b610f7983838151156110dd5781518083602001fd5b8060405162461bcd60e51b815260040161032291906111f8565b60006020828403121561110957600080fd5b8135610c6e8161133f565b60006020828403121561112657600080fd5b8151610c6e8161133f565b60006020828403121561114357600080fd5b81518015158114610c6e57600080fd5b6000806040838503121561116657600080fd5b82356111718161133f565b946020939093013593505050565b60006020828403121561119157600080fd5b5035919050565b600082516111aa81846020870161129b565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156111ec578351835292840192918401916001016111d0565b50909695505050505050565b602081526000825180602084015261121781604085016020870161129b565b601f01601f19169190910160400192915050565b6000821982111561123e5761123e6112fd565b500190565b60008261126057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561127f5761127f6112fd565b500290565b600082821015611296576112966112fd565b500390565b60005b838110156112b657818101518382015260200161129e565b838111156112c5576000848401525b50505050565b6000816112da576112da6112fd565b506000190190565b60006000198214156112f6576112f66112fd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461061857600080fdfea2646970667358221220bdfdcf11aa9aa8959c77b5c7f39d1fcb1f1a78d38cb8a4fbe91817698dd8e48664736f6c634300080700330000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd16
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80639168ae72116100a2578063a694fc3a11610071578063a694fc3a14610271578063d1af0c7d14610284578063e4a337f3146102ab578063f2fde38b146102b4578063f854a27f146102c757600080fd5b80639168ae72146101d8578063940670451461022257806395ccea671461024b578063a1bb5cd81461025e57600080fd5b8063715018a6116100de578063715018a61461019557806374baefcf1461019d5780638da5cb5b146101b05780638e7271fa146101c157600080fd5b80632e1a7d4d14610110578063372500ab1461012557806363c28db11461012d5780636588103b14610156575b600080fd5b61012361011e36600461117f565b6102da565b005b61012361061b565b61014061013b3660046110f7565b6106e3565b60405161014d91906111b4565b60405180910390f35b61017d7f0000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf81565b6040516001600160a01b03909116815260200161014d565b61012361086d565b6101236101ab36600461117f565b610881565b6000546001600160a01b031661017d565b6101ca60035481565b60405190815260200161014d565b6102076101e63660046110f7565b60046020526000908152604090208054600282015460039092015490919083565b6040805193845260208401929092529082015260600161014d565b61017d61023036600461117f565b6005602052600090815260409020546001600160a01b031681565b610123610259366004611153565b6108cf565b61012361026c36600461117f565b610901565b61012361027f36600461117f565b610947565b61017d7f00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd1681565b6101ca60025481565b6101236102c23660046110f7565b610bc7565b6101ca6102d53660046110f7565b610c3d565b6102e2610c75565b60025442101561032b5760405162461bcd60e51b815260206004820152600f60248201526e1391951cc8185c99481b1bd8dad959608a1b60448201526064015b60405180910390fd5b336000908152600460205260409020546103875760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20746f6b656e73207374616b6564000000000000006044820152606401610322565b6000818152600560205260409020546001600160a01b031633146103e95760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b60006103f433610ccf565b3360009081526004602052604081206003018054929350839290919061041b90849061122b565b9091555060009050805b336000908152600460205260409020600101548110156104e05733600090815260046020526040902060010180548591908390811061046657610466611313565b9060005260206000209060020201600101541480156104c157503360009081526004602052604081206001018054839081106104a4576104a4611313565b60009182526020909120600290910201546001600160a01b031614155b156104ce578091506104e0565b806104d8816112e2565b915050610425565b5033600090815260046020526040812060010180548390811061050557610505611313565b6000918252602080832060029290920290910180546001600160a01b0319166001600160a01b03949094169390931790925533815260049091526040812080549161054f836112cb565b90915550506000838152600560205260409081902080546001600160a01b0319169055516323b872dd60e01b8152306004820152336024820152604481018490526001600160a01b037f0000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf16906323b872dd90606401600060405180830381600087803b1580156105de57600080fd5b505af11580156105f2573d6000803e3d6000fd5b505033600090815260046020526040902042600290910155506106189250610d91915050565b50565b33600081815260046020526040812060030154909161063990610ccf565b610643919061122b565b9050600081116106955760405162461bcd60e51b815260206004820152601c60248201527f596f752068617665206e6f207265776172647320746f20636c61696d000000006044820152606401610322565b33600081815260046020526040812042600282015560030155610618907f00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd166001600160a01b03169083610d97565b6001600160a01b03811660009081526004602052604090205460609015610859576001600160a01b03821660009081526004602052604081205467ffffffffffffffff81111561073557610735611329565b60405190808252806020026020018201604052801561075e578160200160208202803683370190505b5090506000805b6001600160a01b038516600090815260046020526040902060010154811015610850576001600160a01b03851660009081526004602052604081206001018054839081106107b5576107b5611313565b60009182526020909120600290910201546001600160a01b03161461083e576001600160a01b038516600090815260046020526040902060010180548290811061080157610801611313565b90600052602060002090600202016001015483838151811061082557610825611313565b60209081029190910101528161083a816112e2565b9250505b80610848816112e2565b915050610765565b50909392505050565b505060408051600081526020810190915290565b610875610dee565b61087f6000610e48565b565b610889610dee565b600380549082905560408051828152602081018490527f2e48a9d59ca3fc8b64b9dd84783ada19b9b4240c23b4e87f3ff21a1ba1f320d391015b60405180910390a15050565b6108d7610dee565b6108fd6108ec6000546001600160a01b031690565b6001600160a01b0384169083610d97565b5050565b610909610dee565b600280549082905560408051828152602081018490527f71ffeabd1c4634f619be28486143538a8255c59b257708a84a258b78d3b8ca4091016108c3565b61094f610c75565b336000908152600460205260409020541561099d57600061096f33610ccf565b3360009081526004602052604081206003018054929350839290919061099690849061122b565b9091555050505b6040516331a9108f60e11b81526004810182905233906001600160a01b037f0000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf1690636352211e9060240160206040518083038186803b1580156109ff57600080fd5b505afa158015610a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a379190611114565b6001600160a01b031614610a895760405162461bcd60e51b8152602060048201526019602482015278596f7520646f6e2774206f776e207468697320746f6b656e2160381b6044820152606401610322565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f0000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf6001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b5050604080518082018252338082526020808301878152600083815260048352948520600180820180548083018255908852938720865160029095020180546001600160a01b0319166001600160a01b0390951694909417845591519290910191909155908352805491945090925090610b84836112e2565b909155505050600081815260056020908152604080832080546001600160a01b031916339081179091558352600490915290204260029091015561061860018055565b610bcf610dee565b6001600160a01b038116610c345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610322565b61061881610e48565b6001600160a01b0381166000908152600460205260408120600301548190610c6484610ccf565b610c6e919061122b565b9392505050565b60026001541415610cc85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610322565b6002600155565b60006002544211610d31576003546001600160a01b03831660009081526004602052604090208054600290910154610e10929190610d0d9042611284565b610d179190611265565b610d219190611265565b610d2b9190611243565b92915050565b600280546001600160a01b03841660009081526004602052604090209091015410610d5e57506000919050565b6003546001600160a01b038316600090815260046020526040902080546002918201549154610e109392610d0d91611284565b60018055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610de9908490610e98565b505050565b6000546001600160a01b0316331461087f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610322565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610eed826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610f6a9092919063ffffffff16565b805190915015610de95780806020019051810190610f0b9190611131565b610de95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610322565b6060610f798484600085610f81565b949350505050565b606082471015610fe25760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610322565b600080866001600160a01b03168587604051610ffe9190611198565b60006040518083038185875af1925050503d806000811461103b576040519150601f19603f3d011682016040523d82523d6000602084013e611040565b606091505b50915091506110518783838761105c565b979650505050505050565b606083156110c85782516110c1576001600160a01b0385163b6110c15760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610322565b5081610f79565b610f7983838151156110dd5781518083602001fd5b8060405162461bcd60e51b815260040161032291906111f8565b60006020828403121561110957600080fd5b8135610c6e8161133f565b60006020828403121561112657600080fd5b8151610c6e8161133f565b60006020828403121561114357600080fd5b81518015158114610c6e57600080fd5b6000806040838503121561116657600080fd5b82356111718161133f565b946020939093013593505050565b60006020828403121561119157600080fd5b5035919050565b600082516111aa81846020870161129b565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156111ec578351835292840192918401916001016111d0565b50909695505050505050565b602081526000825180602084015261121781604085016020870161129b565b601f01601f19169190910160400192915050565b6000821982111561123e5761123e6112fd565b500190565b60008261126057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561127f5761127f6112fd565b500290565b600082821015611296576112966112fd565b500390565b60005b838110156112b657818101518382015260200161129e565b838111156112c5576000848401525b50505050565b6000816112da576112da6112fd565b506000190190565b60006000198214156112f6576112f66112fd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461061857600080fdfea2646970667358221220bdfdcf11aa9aa8959c77b5c7f39d1fcb1f1a78d38cb8a4fbe91817698dd8e48664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf00000000000000000000000057c411e9a358e2d2d0a6b058cedb709175e8fd16
-----Decoded View---------------
Arg [0] : _nftCollection (address): 0x2d4b184E0589A4289F73B6Cc71298193CA413EcF
Arg [1] : _rewardsToken (address): 0x57c411e9a358e2d2d0a6b058cEDb709175e8fd16
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002d4b184e0589a4289f73b6cc71298193ca413ecf
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://bdfdcf11aa9aa8959c77b5c7f39d1fcb1f1a78d38cb8a4fbe91817698dd8e486
Loading...
Loading
Loading...
Loading
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.