More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 903 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake Beasts | 21803756 | 72 days ago | IN | 0 ETH | 0.00015848 | ||||
Unstake Beasts | 21733136 | 82 days ago | IN | 0 ETH | 0.00044741 | ||||
Stake Beasts | 21508612 | 114 days ago | IN | 0 ETH | 0.00111403 | ||||
Unstake Beasts | 21505420 | 114 days ago | IN | 0 ETH | 0.00033822 | ||||
Stake Beasts | 21496893 | 115 days ago | IN | 0 ETH | 0.00077006 | ||||
Unstake Beasts | 21468352 | 119 days ago | IN | 0 ETH | 0.00117263 | ||||
Unstake Beasts | 21446904 | 122 days ago | IN | 0 ETH | 0.00113937 | ||||
Stake Beasts | 21439721 | 123 days ago | IN | 0 ETH | 0.0024398 | ||||
Stake Beasts | 21434099 | 124 days ago | IN | 0 ETH | 0.00169527 | ||||
Stake Beasts | 21382657 | 131 days ago | IN | 0 ETH | 0.0024493 | ||||
Unstake Beasts | 21078316 | 174 days ago | IN | 0 ETH | 0.00096042 | ||||
Unstake Beasts | 20966249 | 189 days ago | IN | 0 ETH | 0.00204114 | ||||
Unstake Beasts | 20713224 | 225 days ago | IN | 0 ETH | 0.00057614 | ||||
Stake Beasts | 20650714 | 233 days ago | IN | 0 ETH | 0.00010781 | ||||
Stake Beasts | 20482937 | 257 days ago | IN | 0 ETH | 0.0012058 | ||||
Unstake Beasts | 20478282 | 258 days ago | IN | 0 ETH | 0.00098318 | ||||
Stake Beasts | 20471547 | 258 days ago | IN | 0 ETH | 0.00065384 | ||||
Stake Beasts | 20423382 | 265 days ago | IN | 0 ETH | 0.00053846 | ||||
Unstake Beasts | 20423367 | 265 days ago | IN | 0 ETH | 0.00038226 | ||||
Stake Beasts | 20312202 | 281 days ago | IN | 0 ETH | 0.00100949 | ||||
Stake Beasts | 20202761 | 296 days ago | IN | 0 ETH | 0.00028947 | ||||
Unstake Beasts | 20200653 | 296 days ago | IN | 0 ETH | 0.00017604 | ||||
Unstake Beasts | 20181417 | 299 days ago | IN | 0 ETH | 0.00052426 | ||||
Unstake Beasts | 20163781 | 301 days ago | IN | 0 ETH | 0.00075324 | ||||
Unstake Beasts | 20161945 | 302 days ago | IN | 0 ETH | 0.00068901 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
StakeBEASTS
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-28 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: contracts/IStakedBeasts.sol pragma solidity ^0.8.4; interface IStakedBEAST is IERC721 { function mint(address to, uint256 tokenId) external; function batchMint(address[] memory to, uint256[] memory tokenIds) external; function burn(uint256 tokenId) external; function batchBurn(uint256[] memory tokenIds) external; } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: contracts/IHowl.sol pragma solidity ^0.8.4; interface IHowl is IERC20 { function mint(address to, uint256 amount) external; function burn(uint256 amount) external; function burnFrom(address operator, uint256 amount) external; } // File: contracts/IERC721A.sol // ERC721A Contracts v4.1.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set through `_extraData`. uint24 extraData; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // 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); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); // ============================== // IERC2309 // ============================== /** * @dev Emitted when tokens in `fromTokenId` to `toTokenId` (inclusive) is transferred from `from` to `to`, * as defined in the ERC2309 standard. See `_mintERC2309` for more details. */ event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/StakeBeasts.sol pragma solidity ^0.8.4; contract StakeBEASTS is ERC721Holder, ReentrancyGuard, Ownable { using Counters for Counters.Counter; // Contracts IERC721A public BEASTS; IHowl public Howl; IStakedBEAST public StakedBeasts; // Yield uint256 public yieldStartTime = 0; uint256 public yieldEndTime = 0; uint256 public yieldRate = 100 ether; // Events event Staked(address indexed owner, uint256 indexed tokenId); event Unstaked(address indexed owner, uint256 indexed tokenId); // State bool isPaused = false; Counters.Counter public totalSupply; mapping(uint256 => address) public stakedTokenOwner; mapping(uint256 => uint256) public stakingTime; // Modifiers modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } // Public/External Functions function stakeBeasts(uint256[] calldata tokenIds_) external callerIsUser() nonReentrant() { require(!isPaused, "Contract is paused!"); for (uint256 i = 0; i < tokenIds_.length; i++) { uint id = tokenIds_[i]; require(msg.sender == BEASTS.ownerOf(id), "You do not own this token!"); BEASTS.transferFrom(msg.sender, address(this), id); StakedBeasts.mint(msg.sender, id); stakedTokenOwner[id] = msg.sender; stakingTime[id] = block.timestamp; emit Staked(msg.sender, id); } } function unstakeBeasts(uint256[] calldata tokenIds_) external callerIsUser() nonReentrant() { require(!isPaused, "Contract is paused!"); uint256 claimableTokens = 0; for (uint256 i = 0; i < tokenIds_.length; i++) { uint id = tokenIds_[i]; require(msg.sender == stakedTokenOwner[id], "You do not own this token!"); StakedBeasts.burn(id); BEASTS.transferFrom(address(this), msg.sender, id); stakedTokenOwner[id] = address(0); claimableTokens += _getClaimableTokens(id); stakingTime[id] = 0; emit Unstaked(msg.sender, id); } _claim(claimableTokens); } function claim(uint256[] calldata tokenIds_) external callerIsUser() nonReentrant() { uint256 claimableTokens; for (uint256 i = 0; i < tokenIds_.length; i++) { uint id = tokenIds_[i]; require(msg.sender == stakedTokenOwner[id], "You do not own this token!"); claimableTokens += _getClaimableTokens(tokenIds_[i]); stakingTime[id] = block.timestamp; } _claim(claimableTokens); } // Internal Functions function _claim(uint256 claimableTokens) internal { Howl.mint(msg.sender, claimableTokens); } function _getClaimableTokens(uint256 tokenId_) internal view returns (uint256) { uint256 _timestamp = stakingTime[tokenId_]; if (_timestamp == 0 || _timestamp > yieldEndTime || _timestamp < yieldStartTime) return 0; uint256 _timeCurrentOrEnded = yieldEndTime > block.timestamp ? block.timestamp : yieldEndTime; uint256 _timeElapsed = _timeCurrentOrEnded - _timestamp; return (_timeElapsed * yieldRate) / 1 days; } function _getClaimableTokensBatch(uint256[] memory tokenIds_) internal view returns (uint256) { uint256 _pendingTokens; for (uint256 i = 0; i < tokenIds_.length; i++) { _pendingTokens += _getClaimableTokens(tokenIds_[i]); } return _pendingTokens; } // Views function ownerOf(uint256 tokenId_) public view returns (address) { return stakedTokenOwner[tokenId_]; } function balanceOf(address address_) public view returns (uint256) { uint256 _balance; uint256 total = totalSupply.current(); for (uint256 i = 1; i <= total + 1; i++) { if (stakedTokenOwner[i] == address_) { _balance++; } } return _balance; } function getClaimableTokens(uint256 tokenId_) public view returns (uint256) { return _getClaimableTokens(tokenId_); } function getClaimableTokensBatch(uint256[] calldata tokenIds_) public view returns (uint256) { return _getClaimableTokensBatch(tokenIds_); } function getClaimableTokensOfAddress(address address_) public view returns (uint256) { uint256[] memory _tokensOfAddress = walletOfOwner(address_); return _getClaimableTokensBatch(_tokensOfAddress); } function walletOfOwner(address address_) public virtual view returns (uint256[] memory) { uint256 balance = StakedBeasts.balanceOf(address_); uint256[] memory _tokens = new uint256[](balance); uint256 _index; for (uint256 i = 1; i < BEASTS.totalSupply(); i++) { if (stakedTokenOwner[i] == address_) { _tokens[_index] = i; _index++; } } return _tokens; } //ADMIN function setBeastsContract(IERC721A address_) external onlyOwner { BEASTS = address_; } function setTokenContract(IHowl address_) external onlyOwner { Howl = address_; } function setStakedBeastsContract(IStakedBEAST address_) external onlyOwner { StakedBeasts = address_; } function setYieldTime(uint256 startTime, uint256 endTime) external onlyOwner { yieldStartTime = startTime; yieldEndTime = endTime; } function setYieldRate(uint256 rate) external onlyOwner { yieldRate = rate; } function setPaused(bool paused) external onlyOwner{ isPaused = paused; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"BEASTS","outputs":[{"internalType":"contract IERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Howl","outputs":[{"internalType":"contract IHowl","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakedBeasts","outputs":[{"internalType":"contract IStakedBEAST","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"getClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"getClaimableTokensBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"getClaimableTokensOfAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721A","name":"address_","type":"address"}],"name":"setBeastsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IStakedBEAST","name":"address_","type":"address"}],"name":"setStakedBeastsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IHowl","name":"address_","type":"address"}],"name":"setTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setYieldRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"setYieldTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"stakeBeasts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakedTokenOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"unstakeBeasts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"yieldStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526000600581905560065568056bc75e2d631000006007556008805460ff1916905534801561003157600080fd5b50600160005561004033610045565b610097565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b611411806100a66000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f95780638da5cb5b11610097578063bbcd5bbe11610071578063bbcd5bbe146103f4578063cb90b28b14610407578063d947ff691461041a578063f2fde38b1461042d57600080fd5b80638da5cb5b146103bd5780639b428e84146103ce5780639e4c4dd8146103e157600080fd5b80637c073ede116100d35780637c073ede146103655780637effd7951461036e5780637f3b09ca1461039757806389be7331146103aa57600080fd5b806370a0823114610337578063715018a61461034a5780637385204b1461035257600080fd5b8063438b63001161016657806367c20a7a1161014057806367c20a7a146102f557806367e69f00146103085780636999ac931461031b5780636ba4c1381461032457600080fd5b8063438b6300146102745780634e795b1c146102945780636352211e146102b457600080fd5b806318160ddd116101a257806318160ddd1461022d578063198df8da14610245578063257a0c3914610258578063314ca0391461026b57600080fd5b80631411dab0146101c9578063150b7a02146101de57806316c38b3c1461021a575b600080fd5b6101dc6101d73660046111bc565b610440565b005b6101fc6101ec366004611045565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b6101dc61022836600461119a565b61044d565b6009546102379081565b604051908152602001610211565b6101dc61025336600461100b565b610468565b6102376102663660046111bc565b610492565b61023760065481565b61028761028236600461100b565b6104a3565b6040516102119190611210565b6102376102a23660046111bc565b600b6020526000908152604090205481565b6102dd6102c23660046111bc565b6000908152600a60205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610211565b6003546102dd906001600160a01b031681565b610237610316366004611125565b61066c565b61023760075481565b6101dc610332366004611125565b6106b1565b61023761034536600461100b565b6107cb565b6101dc61083a565b6101dc6103603660046111ee565b61084e565b61023760055481565b6102dd61037c3660046111bc565b600a602052600090815260409020546001600160a01b031681565b6101dc6103a5366004611125565b610861565b6101dc6103b8366004611125565b610a9b565b6001546001600160a01b03166102dd565b6102376103dc36600461100b565b610d3d565b6101dc6103ef36600461100b565b610d54565b6101dc61040236600461100b565b610d7e565b6004546102dd906001600160a01b031681565b6002546102dd906001600160a01b031681565b6101dc61043b36600461100b565b610da8565b610448610e21565b600755565b610455610e21565b6008805460ff1916911515919091179055565b610470610e21565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600061049d82610e7b565b92915050565b600480546040516370a0823160e01b81526001600160a01b038481169382019390935260609260009216906370a082319060240160206040518083038186803b1580156104ef57600080fd5b505afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052791906111d5565b905060008167ffffffffffffffff811115610544576105446113b0565b60405190808252806020026020018201604052801561056d578160200160208202803683370190505b509050600060015b600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c357600080fd5b505afa1580156105d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fb91906111d5565b811015610662576000818152600a60205260409020546001600160a01b038781169116141561065057808383815181106106375761063761139a565b60209081029190910101528161064c81611369565b9250505b8061065a81611369565b915050610575565b5090949350505050565b60006106aa838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610efc92505050565b9392505050565b3233146106d95760405162461bcd60e51b81526004016106d090611254565b60405180910390fd5b600260005414156106fc5760405162461bcd60e51b81526004016106d09061128b565b60026000908155805b828110156107b75760008484838181106107215761072161139a565b602090810292909201356000818152600a909352604090922054919250506001600160a01b031633146107665760405162461bcd60e51b81526004016106d0906112c2565b61078785858481811061077b5761077b61139a565b90506020020135610e7b565b61079190846112f9565b6000918252600b60205260409091204290559150806107af81611369565b915050610705565b506107c181610f52565b5050600160005550565b60008060006107d960095490565b905060015b6107e98260016112f9565b8111610831576000818152600a60205260409020546001600160a01b038681169116141561081f578261081b81611369565b9350505b8061082981611369565b9150506107de565b50909392505050565b610842610e21565b61084c6000610fb9565b565b610856610e21565b600591909155600655565b3233146108805760405162461bcd60e51b81526004016106d090611254565b600260005414156108a35760405162461bcd60e51b81526004016106d09061128b565b600260005560085460ff16156108f15760405162461bcd60e51b8152602060048201526013602482015272436f6e7472616374206973207061757365642160681b60448201526064016106d0565b6000805b828110156107b75760008484838181106109115761091161139a565b602090810292909201356000818152600a909352604090922054919250506001600160a01b031633146109565760405162461bcd60e51b81526004016106d0906112c2565b60048054604051630852cd8d60e31b81529182018390526001600160a01b0316906342966c6890602401600060405180830381600087803b15801561099a57600080fd5b505af11580156109ae573d6000803e3d6000fd5b50506002546040516323b872dd60e01b8152306004820152336024820152604481018590526001600160a01b0390911692506323b872dd9150606401600060405180830381600087803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050506000828152600a6020526040902080546001600160a01b031916905550610a4181610e7b565b610a4b90846112f9565b6000828152600b602052604080822082905551919450829133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7591a35080610a9381611369565b9150506108f5565b323314610aba5760405162461bcd60e51b81526004016106d090611254565b60026000541415610add5760405162461bcd60e51b81526004016106d09061128b565b600260005560085460ff1615610b2b5760405162461bcd60e51b8152602060048201526013602482015272436f6e7472616374206973207061757365642160681b60448201526064016106d0565b60005b818110156107c1576000838383818110610b4a57610b4a61139a565b6002546040516331a9108f60e11b815260209290920293909301356004820181905293506001600160a01b0390921691636352211e915060240160206040518083038186803b158015610b9c57600080fd5b505afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190611028565b6001600160a01b0316336001600160a01b031614610c045760405162461bcd60e51b81526004016106d0906112c2565b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610c5657600080fd5b505af1158015610c6a573d6000803e3d6000fd5b5050600480546040516340c10f1960e01b81523392810192909252602482018590526001600160a01b031692506340c10f199150604401600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050506000828152600a6020908152604080832080546001600160a01b03191633908117909155600b9092528083204290555184935090917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d91a35080610d3581611369565b915050610b2e565b600080610d49836104a3565b90506106aa81610efc565b610d5c610e21565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d86610e21565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610db0610e21565b6001600160a01b038116610e155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d0565b610e1e81610fb9565b50565b6001546001600160a01b0316331461084c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d0565b6000818152600b6020526040812054801580610e98575060065481115b80610ea4575060055481105b15610eb25750600092915050565b60004260065411610ec557600654610ec7565b425b90506000610ed58383611352565b90506201518060075482610ee99190611333565b610ef39190611311565b95945050505050565b60008060005b8351811015610f4b57610f2d848281518110610f2057610f2061139a565b6020026020010151610e7b565b610f3790836112f9565b915080610f4381611369565b915050610f02565b5092915050565b6003546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b5050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561101d57600080fd5b81356106aa816113c6565b60006020828403121561103a57600080fd5b81516106aa816113c6565b6000806000806080858703121561105b57600080fd5b8435611066816113c6565b93506020850135611076816113c6565b925060408501359150606085013567ffffffffffffffff8082111561109a57600080fd5b818701915087601f8301126110ae57600080fd5b8135818111156110c0576110c06113b0565b604051601f8201601f19908116603f011681019083821181831017156110e8576110e86113b0565b816040528281528a602084870101111561110157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806020838503121561113857600080fd5b823567ffffffffffffffff8082111561115057600080fd5b818501915085601f83011261116457600080fd5b81358181111561117357600080fd5b8660208260051b850101111561118857600080fd5b60209290920196919550909350505050565b6000602082840312156111ac57600080fd5b813580151581146106aa57600080fd5b6000602082840312156111ce57600080fd5b5035919050565b6000602082840312156111e757600080fd5b5051919050565b6000806040838503121561120157600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156112485783518352928401929184019160010161122c565b50909695505050505050565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601a908201527f596f7520646f206e6f74206f776e207468697320746f6b656e21000000000000604082015260600190565b6000821982111561130c5761130c611384565b500190565b60008261132e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561134d5761134d611384565b500290565b60008282101561136457611364611384565b500390565b600060001982141561137d5761137d611384565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e1e57600080fdfea26469706673582212200fd441875aa33900fac4ee32c23bdc64d2fca8b9a5076a685af8093a5b091d7e64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f95780638da5cb5b11610097578063bbcd5bbe11610071578063bbcd5bbe146103f4578063cb90b28b14610407578063d947ff691461041a578063f2fde38b1461042d57600080fd5b80638da5cb5b146103bd5780639b428e84146103ce5780639e4c4dd8146103e157600080fd5b80637c073ede116100d35780637c073ede146103655780637effd7951461036e5780637f3b09ca1461039757806389be7331146103aa57600080fd5b806370a0823114610337578063715018a61461034a5780637385204b1461035257600080fd5b8063438b63001161016657806367c20a7a1161014057806367c20a7a146102f557806367e69f00146103085780636999ac931461031b5780636ba4c1381461032457600080fd5b8063438b6300146102745780634e795b1c146102945780636352211e146102b457600080fd5b806318160ddd116101a257806318160ddd1461022d578063198df8da14610245578063257a0c3914610258578063314ca0391461026b57600080fd5b80631411dab0146101c9578063150b7a02146101de57806316c38b3c1461021a575b600080fd5b6101dc6101d73660046111bc565b610440565b005b6101fc6101ec366004611045565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b6101dc61022836600461119a565b61044d565b6009546102379081565b604051908152602001610211565b6101dc61025336600461100b565b610468565b6102376102663660046111bc565b610492565b61023760065481565b61028761028236600461100b565b6104a3565b6040516102119190611210565b6102376102a23660046111bc565b600b6020526000908152604090205481565b6102dd6102c23660046111bc565b6000908152600a60205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610211565b6003546102dd906001600160a01b031681565b610237610316366004611125565b61066c565b61023760075481565b6101dc610332366004611125565b6106b1565b61023761034536600461100b565b6107cb565b6101dc61083a565b6101dc6103603660046111ee565b61084e565b61023760055481565b6102dd61037c3660046111bc565b600a602052600090815260409020546001600160a01b031681565b6101dc6103a5366004611125565b610861565b6101dc6103b8366004611125565b610a9b565b6001546001600160a01b03166102dd565b6102376103dc36600461100b565b610d3d565b6101dc6103ef36600461100b565b610d54565b6101dc61040236600461100b565b610d7e565b6004546102dd906001600160a01b031681565b6002546102dd906001600160a01b031681565b6101dc61043b36600461100b565b610da8565b610448610e21565b600755565b610455610e21565b6008805460ff1916911515919091179055565b610470610e21565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600061049d82610e7b565b92915050565b600480546040516370a0823160e01b81526001600160a01b038481169382019390935260609260009216906370a082319060240160206040518083038186803b1580156104ef57600080fd5b505afa158015610503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052791906111d5565b905060008167ffffffffffffffff811115610544576105446113b0565b60405190808252806020026020018201604052801561056d578160200160208202803683370190505b509050600060015b600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c357600080fd5b505afa1580156105d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fb91906111d5565b811015610662576000818152600a60205260409020546001600160a01b038781169116141561065057808383815181106106375761063761139a565b60209081029190910101528161064c81611369565b9250505b8061065a81611369565b915050610575565b5090949350505050565b60006106aa838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610efc92505050565b9392505050565b3233146106d95760405162461bcd60e51b81526004016106d090611254565b60405180910390fd5b600260005414156106fc5760405162461bcd60e51b81526004016106d09061128b565b60026000908155805b828110156107b75760008484838181106107215761072161139a565b602090810292909201356000818152600a909352604090922054919250506001600160a01b031633146107665760405162461bcd60e51b81526004016106d0906112c2565b61078785858481811061077b5761077b61139a565b90506020020135610e7b565b61079190846112f9565b6000918252600b60205260409091204290559150806107af81611369565b915050610705565b506107c181610f52565b5050600160005550565b60008060006107d960095490565b905060015b6107e98260016112f9565b8111610831576000818152600a60205260409020546001600160a01b038681169116141561081f578261081b81611369565b9350505b8061082981611369565b9150506107de565b50909392505050565b610842610e21565b61084c6000610fb9565b565b610856610e21565b600591909155600655565b3233146108805760405162461bcd60e51b81526004016106d090611254565b600260005414156108a35760405162461bcd60e51b81526004016106d09061128b565b600260005560085460ff16156108f15760405162461bcd60e51b8152602060048201526013602482015272436f6e7472616374206973207061757365642160681b60448201526064016106d0565b6000805b828110156107b75760008484838181106109115761091161139a565b602090810292909201356000818152600a909352604090922054919250506001600160a01b031633146109565760405162461bcd60e51b81526004016106d0906112c2565b60048054604051630852cd8d60e31b81529182018390526001600160a01b0316906342966c6890602401600060405180830381600087803b15801561099a57600080fd5b505af11580156109ae573d6000803e3d6000fd5b50506002546040516323b872dd60e01b8152306004820152336024820152604481018590526001600160a01b0390911692506323b872dd9150606401600060405180830381600087803b158015610a0457600080fd5b505af1158015610a18573d6000803e3d6000fd5b5050506000828152600a6020526040902080546001600160a01b031916905550610a4181610e7b565b610a4b90846112f9565b6000828152600b602052604080822082905551919450829133917f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f7591a35080610a9381611369565b9150506108f5565b323314610aba5760405162461bcd60e51b81526004016106d090611254565b60026000541415610add5760405162461bcd60e51b81526004016106d09061128b565b600260005560085460ff1615610b2b5760405162461bcd60e51b8152602060048201526013602482015272436f6e7472616374206973207061757365642160681b60448201526064016106d0565b60005b818110156107c1576000838383818110610b4a57610b4a61139a565b6002546040516331a9108f60e11b815260209290920293909301356004820181905293506001600160a01b0390921691636352211e915060240160206040518083038186803b158015610b9c57600080fd5b505afa158015610bb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd49190611028565b6001600160a01b0316336001600160a01b031614610c045760405162461bcd60e51b81526004016106d0906112c2565b6002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610c5657600080fd5b505af1158015610c6a573d6000803e3d6000fd5b5050600480546040516340c10f1960e01b81523392810192909252602482018590526001600160a01b031692506340c10f199150604401600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050506000828152600a6020908152604080832080546001600160a01b03191633908117909155600b9092528083204290555184935090917f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d91a35080610d3581611369565b915050610b2e565b600080610d49836104a3565b90506106aa81610efc565b610d5c610e21565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b610d86610e21565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610db0610e21565b6001600160a01b038116610e155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106d0565b610e1e81610fb9565b50565b6001546001600160a01b0316331461084c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d0565b6000818152600b6020526040812054801580610e98575060065481115b80610ea4575060055481105b15610eb25750600092915050565b60004260065411610ec557600654610ec7565b425b90506000610ed58383611352565b90506201518060075482610ee99190611333565b610ef39190611311565b95945050505050565b60008060005b8351811015610f4b57610f2d848281518110610f2057610f2061139a565b6020026020010151610e7b565b610f3790836112f9565b915080610f4381611369565b915050610f02565b5092915050565b6003546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f1990604401600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b5050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561101d57600080fd5b81356106aa816113c6565b60006020828403121561103a57600080fd5b81516106aa816113c6565b6000806000806080858703121561105b57600080fd5b8435611066816113c6565b93506020850135611076816113c6565b925060408501359150606085013567ffffffffffffffff8082111561109a57600080fd5b818701915087601f8301126110ae57600080fd5b8135818111156110c0576110c06113b0565b604051601f8201601f19908116603f011681019083821181831017156110e8576110e86113b0565b816040528281528a602084870101111561110157600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806020838503121561113857600080fd5b823567ffffffffffffffff8082111561115057600080fd5b818501915085601f83011261116457600080fd5b81358181111561117357600080fd5b8660208260051b850101111561118857600080fd5b60209290920196919550909350505050565b6000602082840312156111ac57600080fd5b813580151581146106aa57600080fd5b6000602082840312156111ce57600080fd5b5035919050565b6000602082840312156111e757600080fd5b5051919050565b6000806040838503121561120157600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156112485783518352928401929184019160010161122c565b50909695505050505050565b6020808252601e908201527f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601a908201527f596f7520646f206e6f74206f776e207468697320746f6b656e21000000000000604082015260600190565b6000821982111561130c5761130c611384565b500190565b60008261132e57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561134d5761134d611384565b500290565b60008282101561136457611364611384565b500390565b600060001982141561137d5761137d611384565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e1e57600080fdfea26469706673582212200fd441875aa33900fac4ee32c23bdc64d2fca8b9a5076a685af8093a5b091d7e64736f6c63430008070033
Deployed Bytecode Sourcemap
27891:5825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33529:90;;;;;;:::i;:::-;;:::i;:::-;;24001:207;;;;;;:::i;:::-;-1:-1:-1;;;24001:207:0;;;;;;;;;;-1:-1:-1;;;;;;5789:33:1;;;5771:52;;5759:2;5744:18;24001:207:0;;;;;;;;33627:86;;;;;;:::i;:::-;;:::i;28449:35::-;;;;;;;;;;8843:25:1;;;8831:2;8816:18;28449:35:0;8697:177:1;33029:101:0;;;;;;:::i;:::-;;:::i;32015:131::-;;;;;;:::i;:::-;;:::i;28171:31::-;;;;;;32551:457;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28549:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;31577:117;;;;;;:::i;:::-;31633:7;31660:26;;;:16;:26;;;;;;-1:-1:-1;;;;;31660:26:0;;31577:117;;;;-1:-1:-1;;;;;4287:32:1;;;4269:51;;4257:2;4242:18;31577:117:0;4123:203:1;28052:17:0;;;;;-1:-1:-1;;;;;28052:17:0;;;32154:154;;;;;;:::i;:::-;;:::i;28209:36::-;;;;;;30121:479;;;;;;:::i;:::-;;:::i;31702:305::-;;;;;;:::i;:::-;;:::i;26991:103::-;;;:::i;33366:155::-;;;;;;:::i;:::-;;:::i;28131:33::-;;;;;;28491:51;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;28491:51:0;;;29395:718;;;;;;:::i;:::-;;:::i;28785:599::-;;;;;;:::i;:::-;;:::i;26343:87::-;26416:6;;-1:-1:-1;;;;;26416:6:0;26343:87;;32316:223;;;;;;:::i;:::-;;:::i;33241:117::-;;;;;;:::i;:::-;;:::i;33138:95::-;;;;;;:::i;:::-;;:::i;28076:32::-;;;;;-1:-1:-1;;;;;28076:32:0;;;28023:22;;;;;-1:-1:-1;;;;;28023:22:0;;;27249:201;;;;;;:::i;:::-;;:::i;33529:90::-;26229:13;:11;:13::i;:::-;33595:9:::1;:16:::0;33529:90::o;33627:86::-;26229:13;:11;:13::i;:::-;33688:8:::1;:17:::0;;-1:-1:-1;;33688:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33627:86::o;33029:101::-;26229:13;:11;:13::i;:::-;33105:6:::1;:17:::0;;-1:-1:-1;;;;;;33105:17:0::1;-1:-1:-1::0;;;;;33105:17:0;;;::::1;::::0;;;::::1;::::0;;33029:101::o;32015:131::-;32082:7;32109:29;32129:8;32109:19;:29::i;:::-;32102:36;32015:131;-1:-1:-1;;32015:131:0:o;32551:457::-;32668:12;;;:32;;-1:-1:-1;;;32668:32:0;;-1:-1:-1;;;;;4287:32:1;;;32668::0;;;4269:51:1;;;;32621:16:0;;32650:15;;32668:12;;:22;;4242:18:1;;32668:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32650:50;;32711:24;32752:7;32738:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32738:22:0;-1:-1:-1;32711:49:0;-1:-1:-1;32771:14:0;32813:1;32796:180;32820:6;;;;;;;;;-1:-1:-1;;;;;32820:6:0;-1:-1:-1;;;;;32820:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32816:1;:24;32796:180;;;32866:19;;;;:16;:19;;;;;;-1:-1:-1;;;;;32866:31:0;;;:19;;:31;32862:103;;;32937:1;32919:7;32927:6;32919:15;;;;;;;;:::i;:::-;;;;;;;;;;:19;32940:8;;;;:::i;:::-;;;;32862:103;32842:3;;;;:::i;:::-;;;;32796:180;;;-1:-1:-1;32993:7:0;;32551:457;-1:-1:-1;;;;32551:457:0:o;32154:154::-;32238:7;32265:35;32290:9;;32265:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32265:24:0;;-1:-1:-1;;;32265:35:0:i;:::-;32258:42;32154:154;-1:-1:-1;;;32154:154:0:o;30121:479::-;28665:9;28678:10;28665:23;28657:66;;;;-1:-1:-1;;;28657:66:0;;;;;;;:::i;:::-;;;;;;;;;21386:1:::1;21984:7;;:19;;21976:63;;;;-1:-1:-1::0;;;21976:63:0::1;;;;;;;:::i;:::-;21386:1;22117:7;:18:::0;;;:7;30250:299:::2;30270:20:::0;;::::2;30250:299;;;30312:7;30322:9;;30332:1;30322:12;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;::::2;;30371:20;::::0;;;:16:::2;:20:::0;;;;;;;;30322:12;;-1:-1:-1;;;;;;;30371:20:0::2;30357:10;:34;30349:73;;;;-1:-1:-1::0;;;30349:73:0::2;;;;;;;:::i;:::-;30456:33;30476:9;;30486:1;30476:12;;;;;;;:::i;:::-;;;;;;;30456:19;:33::i;:::-;30437:52;::::0;;::::2;:::i;:::-;30504:15;::::0;;;:11:::2;:15;::::0;;;;;30522::::2;30504:33:::0;;30437:52;-1:-1:-1;30292:3:0;::::2;::::0;::::2;:::i;:::-;;;;30250:299;;;;30569:23;30576:15;30569:6;:23::i;:::-;-1:-1:-1::0;;21342:1:0::1;22296:7;:22:::0;-1:-1:-1;30121:479:0:o;31702:305::-;31760:7;31780:16;31807:13;31823:21;:11;19073:14;;18981:114;31823:21;31807:37;-1:-1:-1;31872:1:0;31855:119;31880:9;:5;31888:1;31880:9;:::i;:::-;31875:1;:14;31855:119;;31915:19;;;;:16;:19;;;;;;-1:-1:-1;;;;;31915:31:0;;;:19;;:31;31911:52;;;31950:10;;;;:::i;:::-;;;;31911:52;31891:3;;;;:::i;:::-;;;;31855:119;;;-1:-1:-1;31991:8:0;;31702:305;-1:-1:-1;;;31702:305:0:o;26991:103::-;26229:13;:11;:13::i;:::-;27056:30:::1;27083:1;27056:18;:30::i;:::-;26991:103::o:0;33366:155::-;26229:13;:11;:13::i;:::-;33454:14:::1;:26:::0;;;;33491:12:::1;:22:::0;33366:155::o;29395:718::-;28665:9;28678:10;28665:23;28657:66;;;;-1:-1:-1;;;28657:66:0;;;;;;;:::i;:::-;21386:1:::1;21984:7;;:19;;21976:63;;;;-1:-1:-1::0;;;21976:63:0::1;;;;;;;:::i;:::-;21386:1;22117:7;:18:::0;29507:8:::2;::::0;::::2;;29506:9;29498:41;;;::::0;-1:-1:-1;;;29498:41:0;;7116:2:1;29498:41:0::2;::::0;::::2;7098:21:1::0;7155:2;7135:18;;;7128:30;-1:-1:-1;;;7174:18:1;;;7167:49;7233:18;;29498:41:0::2;6914:343:1::0;29498:41:0::2;29550:23;29593:9:::0;29588:474:::2;29608:20:::0;;::::2;29588:474;;;29650:7;29660:9;;29670:1;29660:12;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;::::2;;29709:20;::::0;;;:16:::2;:20:::0;;;;;;;;29660:12;;-1:-1:-1;;;;;;;29709:20:0::2;29695:10;:34;29687:73;;;;-1:-1:-1::0;;;29687:73:0::2;;;;;;;:::i;:::-;29777:12;::::0;;:21:::2;::::0;-1:-1:-1;;;29777:21:0;;;;::::2;8843:25:1::0;;;-1:-1:-1;;;;;29777:12:0::2;::::0;:17:::2;::::0;8816:18:1;;29777:21:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;29813:6:0::2;::::0;:50:::2;::::0;-1:-1:-1;;;29813:50:0;;29841:4:::2;29813:50;::::0;::::2;4571:34:1::0;29848:10:0::2;4621:18:1::0;;;4614:43;4673:18;;;4666:34;;;-1:-1:-1;;;;;29813:6:0;;::::2;::::0;-1:-1:-1;29813:19:0::2;::::0;-1:-1:-1;4506:18:1;;29813:50:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;29909:1:0::2;29878:20:::0;;;:16:::2;:20;::::0;;;;:33;;-1:-1:-1;;;;;;29878:33:0::2;::::0;;-1:-1:-1;29947:23:0::2;29895:2:::0;29947:19:::2;:23::i;:::-;29928:42;::::0;;::::2;:::i;:::-;30003:1;29985:15:::0;;;:11:::2;:15;::::0;;;;;:19;;;30026:24;29928:42;;-1:-1:-1;29997:2:0;;30035:10:::2;::::0;30026:24:::2;::::0;::::2;-1:-1:-1::0;29630:3:0;::::2;::::0;::::2;:::i;:::-;;;;29588:474;;28785:599:::0;28665:9;28678:10;28665:23;28657:66;;;;-1:-1:-1;;;28657:66:0;;;;;;;:::i;:::-;21386:1:::1;21984:7;;:19;;21976:63;;;;-1:-1:-1::0;;;21976:63:0::1;;;;;;;:::i;:::-;21386:1;22117:7;:18:::0;28895:8:::2;::::0;::::2;;28894:9;28886:41;;;::::0;-1:-1:-1;;;28886:41:0;;7116:2:1;28886:41:0::2;::::0;::::2;7098:21:1::0;7155:2;7135:18;;;7128:30;-1:-1:-1;;;7174:18:1;;;7167:49;7233:18;;28886:41:0::2;6914:343:1::0;28886:41:0::2;28943:9;28938:439;28958:20:::0;;::::2;28938:439;;;29000:7;29010:9;;29020:1;29010:12;;;;;;;:::i;:::-;29059:6;::::0;:18:::2;::::0;-1:-1:-1;;;29059:18:0;;29010:12:::2;::::0;;;::::2;::::0;;;::::2;;29059:18;::::0;::::2;8843:25:1::0;;;29010:12:0;-1:-1:-1;;;;;;29059:6:0;;::::2;::::0;:14:::2;::::0;-1:-1:-1;8816:18:1;;29059::0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29045:32:0::2;:10;-1:-1:-1::0;;;;;29045:32:0::2;;29037:71;;;;-1:-1:-1::0;;;29037:71:0::2;;;;;;;:::i;:::-;29125:6;::::0;:50:::2;::::0;-1:-1:-1;;;29125:50:0;;29145:10:::2;29125:50;::::0;::::2;4571:34:1::0;29165:4:0::2;4621:18:1::0;;;4614:43;4673:18;;;4666:34;;;-1:-1:-1;;;;;29125:6:0;;::::2;::::0;:19:::2;::::0;4506:18:1;;29125:50:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;29190:12:0::2;::::0;;:33:::2;::::0;-1:-1:-1;;;29190:33:0;;29208:10:::2;29190:33:::0;;::::2;4885:51:1::0;;;;4952:18;;;4945:34;;;-1:-1:-1;;;;;29190:12:0::2;::::0;-1:-1:-1;29190:17:0::2;::::0;-1:-1:-1;4858:18:1;;29190:33:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;;29240:20:0::2;::::0;;;:16:::2;:20;::::0;;;;;;;:33;;-1:-1:-1;;;;;;29240:33:0::2;29263:10;29240:33:::0;;::::2;::::0;;;29288:11:::2;:15:::0;;;;;;29306::::2;29288:33:::0;;29343:22;29257:2;;-1:-1:-1;29263:10:0;;29343:22:::2;::::0;::::2;-1:-1:-1::0;28980:3:0;::::2;::::0;::::2;:::i;:::-;;;;28938:439;;32316:223:::0;32392:7;32412:33;32448:23;32462:8;32448:13;:23::i;:::-;32412:59;;32489:42;32514:16;32489:24;:42::i;33241:117::-;26229:13;:11;:13::i;:::-;33327:12:::1;:23:::0;;-1:-1:-1;;;;;;33327:23:0::1;-1:-1:-1::0;;;;;33327:23:0;;;::::1;::::0;;;::::1;::::0;;33241:117::o;33138:95::-;26229:13;:11;:13::i;:::-;33210:4:::1;:15:::0;;-1:-1:-1;;;;;;33210:15:0::1;-1:-1:-1::0;;;;;33210:15:0;;;::::1;::::0;;;::::1;::::0;;33138:95::o;27249:201::-;26229:13;:11;:13::i;:::-;-1:-1:-1;;;;;27338:22:0;::::1;27330:73;;;::::0;-1:-1:-1;;;27330:73:0;;6709:2:1;27330:73:0::1;::::0;::::1;6691:21:1::0;6748:2;6728:18;;;6721:30;6787:34;6767:18;;;6760:62;-1:-1:-1;;;6838:18:1;;;6831:36;6884:19;;27330:73:0::1;6507:402:1::0;27330:73:0::1;27414:28;27433:8;27414:18;:28::i;:::-;27249:201:::0;:::o;26508:132::-;26416:6;;-1:-1:-1;;;;;26416:6:0;24974:10;26572:23;26564:68;;;;-1:-1:-1;;;26564:68:0;;7823:2:1;26564:68:0;;;7805:21:1;;;7842:18;;;7835:30;7901:34;7881:18;;;7874:62;7953:18;;26564:68:0;7621:356:1;30750:495:0;30820:7;30861:21;;;:11;:21;;;;;;30897:15;;;:44;;;30929:12;;30916:10;:25;30897:44;:75;;;;30958:14;;30945:10;:27;30897:75;30893:103;;;-1:-1:-1;30995:1:0;;30750:495;-1:-1:-1;;30750:495:0:o;30893:103::-;31009:27;31054:15;31039:12;;:30;:77;;31104:12;;31039:77;;;31086:15;31039:77;31009:107;-1:-1:-1;31127:20:0;31150:32;31172:10;31009:107;31150:32;:::i;:::-;31127:55;;31231:6;31218:9;;31203:12;:24;;;;:::i;:::-;31202:35;;;;:::i;:::-;31195:42;30750:495;-1:-1:-1;;;;;30750:495:0:o;31253:302::-;31338:7;31358:22;31396:9;31391:125;31415:9;:16;31411:1;:20;31391:125;;;31471:33;31491:9;31501:1;31491:12;;;;;;;;:::i;:::-;;;;;;;31471:19;:33::i;:::-;31453:51;;;;:::i;:::-;;-1:-1:-1;31433:3:0;;;;:::i;:::-;;;;31391:125;;;-1:-1:-1;31533:14:0;31253:302;-1:-1:-1;;31253:302:0:o;30635:107::-;30696:4;;:38;;-1:-1:-1;;;30696:38:0;;30706:10;30696:38;;;4885:51:1;4952:18;;;4945:34;;;-1:-1:-1;;;;;30696:4:0;;;;:9;;4858:18:1;;30696:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30635:107;:::o;27610:191::-;27703:6;;;-1:-1:-1;;;;;27720:17:0;;;-1:-1:-1;;;;;;27720:17:0;;;;;;;27753:40;;27703:6;;;27720:17;27703:6;;27753:40;;27684:16;;27753:40;27673:128;27610:191;:::o;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:1266::-;617:6;625;633;641;694:3;682:9;673:7;669:23;665:33;662:53;;;711:1;708;701:12;662:53;750:9;737:23;769:31;794:5;769:31;:::i;:::-;819:5;-1:-1:-1;876:2:1;861:18;;848:32;889:33;848:32;889:33;:::i;:::-;941:7;-1:-1:-1;995:2:1;980:18;;967:32;;-1:-1:-1;1050:2:1;1035:18;;1022:32;1073:18;1103:14;;;1100:34;;;1130:1;1127;1120:12;1100:34;1168:6;1157:9;1153:22;1143:32;;1213:7;1206:4;1202:2;1198:13;1194:27;1184:55;;1235:1;1232;1225:12;1184:55;1271:2;1258:16;1293:2;1289;1286:10;1283:36;;;1299:18;;:::i;:::-;1374:2;1368:9;1342:2;1428:13;;-1:-1:-1;;1424:22:1;;;1448:2;1420:31;1416:40;1404:53;;;1472:18;;;1492:22;;;1469:46;1466:72;;;1518:18;;:::i;:::-;1558:10;1554:2;1547:22;1593:2;1585:6;1578:18;1633:7;1628:2;1623;1619;1615:11;1611:20;1608:33;1605:53;;;1654:1;1651;1644:12;1605:53;1710:2;1705;1701;1697:11;1692:2;1684:6;1680:15;1667:46;1755:1;1750:2;1745;1737:6;1733:15;1729:24;1722:35;1776:6;1766:16;;;;;;;522:1266;;;;;;;:::o;1793:615::-;1879:6;1887;1940:2;1928:9;1919:7;1915:23;1911:32;1908:52;;;1956:1;1953;1946:12;1908:52;1996:9;1983:23;2025:18;2066:2;2058:6;2055:14;2052:34;;;2082:1;2079;2072:12;2052:34;2120:6;2109:9;2105:22;2095:32;;2165:7;2158:4;2154:2;2150:13;2146:27;2136:55;;2187:1;2184;2177:12;2136:55;2227:2;2214:16;2253:2;2245:6;2242:14;2239:34;;;2269:1;2266;2259:12;2239:34;2322:7;2317:2;2307:6;2304:1;2300:14;2296:2;2292:23;2288:32;2285:45;2282:65;;;2343:1;2340;2333:12;2282:65;2374:2;2366:11;;;;;2396:6;;-1:-1:-1;1793:615:1;;-1:-1:-1;;;;1793:615:1:o;2413:273::-;2469:6;2522:2;2510:9;2501:7;2497:23;2493:32;2490:52;;;2538:1;2535;2528:12;2490:52;2577:9;2564:23;2630:5;2623:13;2616:21;2609:5;2606:32;2596:60;;2652:1;2649;2642:12;3496:180;3555:6;3608:2;3596:9;3587:7;3583:23;3579:32;3576:52;;;3624:1;3621;3614:12;3576:52;-1:-1:-1;3647:23:1;;3496:180;-1:-1:-1;3496:180:1:o;3681:184::-;3751:6;3804:2;3792:9;3783:7;3779:23;3775:32;3772:52;;;3820:1;3817;3810:12;3772:52;-1:-1:-1;3843:16:1;;3681:184;-1:-1:-1;3681:184:1:o;3870:248::-;3938:6;3946;3999:2;3987:9;3978:7;3974:23;3970:32;3967:52;;;4015:1;4012;4005:12;3967:52;-1:-1:-1;;4038:23:1;;;4108:2;4093:18;;;4080:32;;-1:-1:-1;3870:248:1:o;4990:632::-;5161:2;5213:21;;;5283:13;;5186:18;;;5305:22;;;5132:4;;5161:2;5384:15;;;;5358:2;5343:18;;;5132:4;5427:169;5441:6;5438:1;5435:13;5427:169;;;5502:13;;5490:26;;5571:15;;;;5536:12;;;;5463:1;5456:9;5427:169;;;-1:-1:-1;5613:3:1;;4990:632;-1:-1:-1;;;;;;4990:632:1:o;7262:354::-;7464:2;7446:21;;;7503:2;7483:18;;;7476:30;7542:32;7537:2;7522:18;;7515:60;7607:2;7592:18;;7262:354::o;7982:355::-;8184:2;8166:21;;;8223:2;8203:18;;;8196:30;8262:33;8257:2;8242:18;;8235:61;8328:2;8313:18;;7982:355::o;8342:350::-;8544:2;8526:21;;;8583:2;8563:18;;;8556:30;8622:28;8617:2;8602:18;;8595:56;8683:2;8668:18;;8342:350::o;8879:128::-;8919:3;8950:1;8946:6;8943:1;8940:13;8937:39;;;8956:18;;:::i;:::-;-1:-1:-1;8992:9:1;;8879:128::o;9012:217::-;9052:1;9078;9068:132;;9122:10;9117:3;9113:20;9110:1;9103:31;9157:4;9154:1;9147:15;9185:4;9182:1;9175:15;9068:132;-1:-1:-1;9214:9:1;;9012:217::o;9234:168::-;9274:7;9340:1;9336;9332:6;9328:14;9325:1;9322:21;9317:1;9310:9;9303:17;9299:45;9296:71;;;9347:18;;:::i;:::-;-1:-1:-1;9387:9:1;;9234:168::o;9407:125::-;9447:4;9475:1;9472;9469:8;9466:34;;;9480:18;;:::i;:::-;-1:-1:-1;9517:9:1;;9407:125::o;9537:135::-;9576:3;-1:-1:-1;;9597:17:1;;9594:43;;;9617:18;;:::i;:::-;-1:-1:-1;9664:1:1;9653:13;;9537:135::o;9677:127::-;9738:10;9733:3;9729:20;9726:1;9719:31;9769:4;9766:1;9759:15;9793:4;9790:1;9783:15;9809:127;9870:10;9865:3;9861:20;9858:1;9851:31;9901:4;9898:1;9891:15;9925:4;9922:1;9915:15;9941:127;10002:10;9997:3;9993:20;9990:1;9983:31;10033:4;10030:1;10023:15;10057:4;10054:1;10047:15;10073:131;-1:-1:-1;;;;;10148:31:1;;10138:42;;10128:70;;10194:1;10191;10184:12
Swarm Source
ipfs://0fd441875aa33900fac4ee32c23bdc64d2fca8b9a5076a685af8093a5b091d7e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.