Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
Latest 25 from a total of 31,690 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Sell Treasure Ch... | 14530841 | 773 days ago | IN | 0 ETH | 0.00280277 | ||||
Sell Treasure Ch... | 14530831 | 773 days ago | IN | 0 ETH | 0.00390088 | ||||
Sell Treasure Ch... | 14530826 | 773 days ago | IN | 0 ETH | 0.00302977 | ||||
Sell Treasure Ch... | 14530825 | 773 days ago | IN | 0 ETH | 0.00317242 | ||||
Sell Treasure Ch... | 14530815 | 773 days ago | IN | 0 ETH | 0.00359281 | ||||
Sell Treasure Ch... | 14530812 | 773 days ago | IN | 0 ETH | 0.00290645 | ||||
Sell Treasure Ch... | 14530799 | 773 days ago | IN | 0 ETH | 0.00294555 | ||||
Sell Treasure Ch... | 14530797 | 773 days ago | IN | 0 ETH | 0.00285679 | ||||
Sell Treasure Ch... | 14530790 | 773 days ago | IN | 0 ETH | 0.00292464 | ||||
Sell Treasure Ch... | 14530774 | 773 days ago | IN | 0 ETH | 0.00469338 | ||||
Sell Treasure Ch... | 14092937 | 841 days ago | IN | 0 ETH | 0.00570913 | ||||
Make Treasure Ch... | 14063288 | 846 days ago | IN | 0 ETH | 0.00566141 | ||||
Sell Treasure Ch... | 14063279 | 846 days ago | IN | 0 ETH | 0.00757415 | ||||
Make Treasure Ch... | 14063273 | 846 days ago | IN | 0 ETH | 0.00768801 | ||||
Make Treasure Ch... | 13982695 | 858 days ago | IN | 0 ETH | 0.01254632 | ||||
Make Treasure Ch... | 13982692 | 858 days ago | IN | 0 ETH | 0.01311376 | ||||
Mint Reveal | 13841325 | 880 days ago | IN | 0 ETH | 0.01658568 | ||||
Sell Treasure Ch... | 13835805 | 881 days ago | IN | 0 ETH | 0.00247444 | ||||
Sell Treasure Ch... | 13826813 | 882 days ago | IN | 0 ETH | 0.00525077 | ||||
Make Treasure Ch... | 13821085 | 883 days ago | IN | 0 ETH | 0.0037598 | ||||
Make Treasure Ch... | 13820774 | 883 days ago | IN | 0 ETH | 0.00588308 | ||||
Make Treasure Ch... | 13815405 | 884 days ago | IN | 0 ETH | 0.00501372 | ||||
Make Treasure Ch... | 13808996 | 885 days ago | IN | 0 ETH | 0.00330981 | ||||
Sell Treasure Ch... | 13807998 | 885 days ago | IN | 0 ETH | 0.00386109 | ||||
Sell Treasure Ch... | 13805151 | 886 days ago | IN | 0 ETH | 0.00451808 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
WnDGameCR
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./interfaces/IWnDGame.sol"; import "./interfaces/ITower.sol"; import "./interfaces/ITraits.sol"; import "./interfaces/IGP.sol"; import "./interfaces/IWnD.sol"; import "./interfaces/ISacrificialAlter.sol"; import "./interfaces/IRandomizer.sol"; contract WnDGameCR is IWnDGame, Ownable, ReentrancyGuard, Pausable { event MintCommitted(address indexed owner, uint256 indexed amount); event MintRevealed(address indexed owner, uint256 indexed amount); struct MintCommit { bool stake; uint16 amount; } uint256 public treasureChestTypeId; // max $GP cost uint256 private maxGpCost = 72000 ether; // address -> commit # -> commits mapping(address => mapping(uint16 => MintCommit)) private _mintCommits; // address -> commit num of commit need revealed for account mapping(address => uint16) private _pendingCommitId; // commit # -> offchain random mapping(uint16 => uint256) private _commitRandoms; uint16 private _commitId = 1; uint16 private pendingMintAmt; bool public allowCommits = true; // address => can call addCommitRandom mapping(address => bool) private admins; // reference to the Tower for choosing random Dragon thieves ITower public tower; // reference to $GP for burning on mint IGP public gpToken; // reference to Traits ITraits public traits; // reference to NFT collection IWnD public wndNFT; // reference to alter collection ISacrificialAlter public alter; constructor() { _pause(); } /** CRITICAL TO SETUP */ modifier requireContractsSet() { require(address(gpToken) != address(0) && address(traits) != address(0) && address(wndNFT) != address(0) && address(tower) != address(0) && address(alter) != address(0) , "Contracts not set"); _; } function setContracts(address _gp, address _traits, address _wnd, address _tower, address _alter) external onlyOwner { gpToken = IGP(_gp); traits = ITraits(_traits); wndNFT = IWnD(_wnd); tower = ITower(_tower); alter = ISacrificialAlter(_alter); } /** EXTERNAL */ function getPendingMint(address addr) external view returns (MintCommit memory) { require(_pendingCommitId[addr] != 0, "no pending commits"); return _mintCommits[addr][_pendingCommitId[addr]]; } function hasMintPending(address addr) external view returns (bool) { return _pendingCommitId[addr] != 0; } function canMint(address addr) external view returns (bool) { return _pendingCommitId[addr] != 0 && _commitRandoms[_pendingCommitId[addr]] > 0; } // Seed the current commit id so that pending commits can be revealed function addCommitRandom(uint256 seed) external { require(owner() == _msgSender() || admins[_msgSender()], "Only admins can call this"); _commitRandoms[_commitId] = seed; _commitId += 1; } function deleteCommit(address addr) external { require(owner() == _msgSender() || admins[_msgSender()], "Only admins can call this"); uint16 commitIdCur = _pendingCommitId[_msgSender()]; require(commitIdCur > 0, "No pending commit"); delete _mintCommits[addr][commitIdCur]; delete _pendingCommitId[addr]; } function forceRevealCommit(address addr) external { require(owner() == _msgSender() || admins[_msgSender()], "Only admins can call this"); reveal(addr); } /** Initiate the start of a mint. This action burns $GP, as the intent of committing is that you cannot back out once you've started. * This will add users into the pending queue, to be revealed after a random seed is generated and assigned to the commit id this * commit was added to. */ function mintCommit(uint256 amount, bool stake) external whenNotPaused nonReentrant { require(allowCommits, "adding commits disallowed"); require(tx.origin == _msgSender(), "Only EOA"); require(_pendingCommitId[_msgSender()] == 0, "Already have pending mints"); uint16 minted = wndNFT.minted(); uint256 maxTokens = wndNFT.getMaxTokens(); require(minted + pendingMintAmt + amount <= maxTokens, "All tokens minted"); require(amount > 0 && amount <= 10, "Invalid mint amount"); uint256 totalGpCost = 0; // Loop through the amount of for (uint i = 1; i <= amount; i++) { totalGpCost += mintCost(minted + pendingMintAmt + i, maxTokens); } if (totalGpCost > 0) { gpToken.burn(_msgSender(), totalGpCost); gpToken.updateOriginAccess(); } uint16 amt = uint16(amount); _mintCommits[_msgSender()][_commitId] = MintCommit(stake, amt); _pendingCommitId[_msgSender()] = _commitId; pendingMintAmt += amt; emit MintCommitted(_msgSender(), amount); } /** Reveal the commits for this user. This will be when the user gets their NFT, and can only be done when the commit id that * the user is pending for has been assigned a random seed. */ function mintReveal() external whenNotPaused nonReentrant { require(tx.origin == _msgSender(), "Only EOA1"); reveal(_msgSender()); } function reveal(address addr) internal { uint16 commitIdCur = _pendingCommitId[addr]; require(commitIdCur > 0, "No pending commit"); require(_commitRandoms[commitIdCur] > 0, "random seed not set"); uint16 minted = wndNFT.minted(); MintCommit memory commit = _mintCommits[addr][commitIdCur]; pendingMintAmt -= commit.amount; uint16[] memory tokenIds = new uint16[](commit.amount); uint16[] memory tokenIdsToStake = new uint16[](commit.amount); uint256 seed = _commitRandoms[commitIdCur]; for (uint k = 0; k < commit.amount; k++) { minted++; // scramble the random so the steal / treasure mechanic are different per mint seed = uint256(keccak256(abi.encode(seed, addr))); address recipient = selectRecipient(seed); if(recipient != addr && alter.balanceOf(addr, treasureChestTypeId) > 0) { // If the mint is going to be stolen, there's a 50% chance // a dragon will prefer a treasure chest over it if(seed & 1 == 1) { alter.safeTransferFrom(addr, recipient, treasureChestTypeId, 1, ""); recipient = addr; } } tokenIds[k] = minted; if (!commit.stake || recipient != addr) { wndNFT.mint(recipient, seed); } else { wndNFT.mint(address(tower), seed); tokenIdsToStake[k] = minted; } } wndNFT.updateOriginAccess(tokenIds); if(commit.stake) { tower.addManyToTowerAndFlight(addr, tokenIdsToStake); } delete _mintCommits[addr][commitIdCur]; delete _pendingCommitId[addr]; emit MintCommitted(addr, tokenIds.length); } /** * @param tokenId the ID to check the cost of to mint * @return the cost of the given token ID */ function mintCost(uint256 tokenId, uint256 maxTokens) public view returns (uint256) { if (tokenId <= maxTokens * 8 / 20) return 24000 ether; if (tokenId <= maxTokens * 11 / 20) return 36000 ether; if (tokenId <= maxTokens * 14 / 20) return 48000 ether; if (tokenId <= maxTokens * 17 / 20) return 60000 ether; // if (tokenId > maxTokens * 17 / 20) return maxGpCost; } function payTribute(uint256 gpAmt) external whenNotPaused nonReentrant { require(tx.origin == _msgSender(), "Only EOA"); uint16 minted = wndNFT.minted(); uint256 maxTokens = wndNFT.getMaxTokens(); uint256 gpMintCost = mintCost(minted, maxTokens); require(gpMintCost > 0, "Sacrificial alter currently closed"); require(gpAmt >= gpMintCost, "Not enough gp given"); gpToken.burn(_msgSender(), gpAmt); if(gpAmt < gpMintCost * 2) { alter.mint(1, 1, _msgSender()); } else { alter.mint(2, 1, _msgSender()); } } function makeTreasureChests(uint16 qty) external whenNotPaused { require(tx.origin == _msgSender(), "Only EOA"); require(treasureChestTypeId > 0, "DEVS DO SOMETHING"); // $GP exchange amount handled within alter contract // Will fail if sender doesn't have enough $GP // Transfer does not need approved, // as there is established trust between this contract and the alter contract alter.mint(treasureChestTypeId, qty, _msgSender()); } function sellTreasureChests(uint16 qty) external whenNotPaused { require(tx.origin == _msgSender(), "Only EOA"); require(treasureChestTypeId > 0, "DEVS DO SOMETHING"); // $GP exchange amount handled within alter contract alter.burn(treasureChestTypeId, qty, _msgSender()); } function sacrifice(uint256 tokenId, uint256 gpAmt) external whenNotPaused nonReentrant { require(tx.origin == _msgSender(), "Only EOA"); uint64 lastTokenWrite = wndNFT.getTokenWriteBlock(tokenId); // Must check this, as getTokenTraits will be allowed since this contract is an admin require(lastTokenWrite < block.number, "hmmmm what doing?"); IWnD.WizardDragon memory nft = wndNFT.getTokenTraits(tokenId); uint16 minted = wndNFT.minted(); uint256 maxTokens = wndNFT.getMaxTokens(); uint256 gpMintCost = mintCost(minted, maxTokens); require(gpMintCost > 0, "Sacrificial alter currently closed"); if(nft.isWizard) { // Wizard sacrifice requires 3x $GP curve require(gpAmt >= gpMintCost * 3, "not enough gp provided"); gpToken.burn(_msgSender(), gpAmt); // This will check if origin is the owner of the token wndNFT.burn(tokenId); alter.mint(3, 1, _msgSender()); } else { // Dragon sacrifice requires 4x $GP curve require(gpAmt >= gpMintCost * 4, "not enough gp provided"); gpToken.burn(_msgSender(), gpAmt); // This will check if origin is the owner of the token wndNFT.burn(tokenId); alter.mint(4, 1, _msgSender()); } } /** INTERNAL */ /** * the first 25% (ETH purchases) go to the minter * the remaining 80% have a 10% chance to be given to a random staked dragon * @param seed a random value to select a recipient from * @return the address of the recipient (either the minter or the Dragon thief's owner) */ function selectRecipient(uint256 seed) internal view returns (address) { if (((seed >> 245) % 10) != 0) return _msgSender(); // top 10 bits haven't been used address thief = tower.randomDragonOwner(seed >> 144); // 144 bits reserved for trait selection if (thief == address(0x0)) return _msgSender(); return thief; } /** ADMIN */ /** * enables owner to pause / unpause contract */ function setPaused(bool _paused) external requireContractsSet onlyOwner { if (_paused) _pause(); else _unpause(); } function setMaxGpCost(uint256 _amount) external requireContractsSet onlyOwner { maxGpCost = _amount; } function setTreasureChestId(uint256 typeId) external onlyOwner { treasureChestTypeId = typeId; } function setAllowCommits(bool allowed) external onlyOwner { allowCommits = allowed; } /** Allow the contract owner to set the pending mint amount. * This allows any long-standing pending commits to be overwritten, say for instance if the max supply has been * reached but there are many stale pending commits, it could be used to free up those spaces if needed/desired by the community. * This function should not be called lightly, this will have negative consequences on the game. */ function setPendingMintAmt(uint256 pendingAmt) external onlyOwner { pendingMintAmt = uint16(pendingAmt); } /** * enables an address to mint / burn * @param addr the address to enable */ function addAdmin(address addr) external onlyOwner { admins[addr] = true; } /** * disables an address from minting / burning * @param addr the address to disbale */ function removeAdmin(address addr) external onlyOwner { admins[addr] = false; } /** * allows owner to withdraw funds from minting */ function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT 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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IWnDGame { }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ITower { function addManyToTowerAndFlight(address account, uint16[] calldata tokenIds) external; function randomDragonOwner(uint256 seed) external view returns (address); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ITraits { function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IGP { function mint(address to, uint256 amount) external; function burn(address from, uint256 amount) external; function updateOriginAccess() external; function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; interface IWnD is IERC721Enumerable { // game data storage struct WizardDragon { bool isWizard; uint8 body; uint8 head; uint8 spell; uint8 eyes; uint8 neck; uint8 mouth; uint8 wand; uint8 tail; uint8 rankIndex; } function minted() external returns (uint16); function updateOriginAccess(uint16[] memory tokenIds) external; function mint(address recipient, uint256 seed) external; function burn(uint256 tokenId) external; function getMaxTokens() external view returns (uint256); function getPaidTokens() external view returns (uint256); function getTokenTraits(uint256 tokenId) external view returns (WizardDragon memory); function getTokenWriteBlock(uint256 tokenId) external view returns(uint64); function isWizard(uint256 tokenId) external view returns(bool); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ISacrificialAlter { function mint(uint256 typeId, uint16 qty, address recipient) external; function burn(uint256 typeId, uint16 qty, address burnFrom) external; function updateOriginAccess() external; function balanceOf(address account, uint256 id) external returns (uint256); function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes memory data) external; }
pragma solidity ^0.8.0; interface IRandomizer { function random() external returns (uint256); }
// SPDX-License-Identifier: MIT 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; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; }
// SPDX-License-Identifier: MIT 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); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintCommitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"MintRevealed","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"addCommitRandom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowCommits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alter","outputs":[{"internalType":"contract ISacrificialAlter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"deleteCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"forceRevealCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getPendingMint","outputs":[{"components":[{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"uint16","name":"amount","type":"uint16"}],"internalType":"struct WnDGameCR.MintCommit","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gpToken","outputs":[{"internalType":"contract IGP","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"hasMintPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"qty","type":"uint16"}],"name":"makeTreasureChests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"mintCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"name":"mintCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gpAmt","type":"uint256"}],"name":"payTribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"gpAmt","type":"uint256"}],"name":"sacrifice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"qty","type":"uint16"}],"name":"sellTreasureChests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowCommits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gp","type":"address"},{"internalType":"address","name":"_traits","type":"address"},{"internalType":"address","name":"_wnd","type":"address"},{"internalType":"address","name":"_tower","type":"address"},{"internalType":"address","name":"_alter","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxGpCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pendingAmt","type":"uint256"}],"name":"setPendingMintAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"setTreasureChestId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tower","outputs":[{"internalType":"contract ITower","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"traits","outputs":[{"internalType":"contract ITraits","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasureChestTypeId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wndNFT","outputs":[{"internalType":"contract IWnD","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052690f3f20b8dfa69d0000006004556008805464ff0000ffff19166401000000011790553480156200003457600080fd5b5062000040336200005e565b600180556002805460ff1916905562000058620000ae565b6200014c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615620000f95760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640160405180910390fd5b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200012f3390565b6040516001600160a01b03909116815260200160405180910390a1565b612d10806200015c6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063bdc8cbc21161011a578063f2eea45c116100ad578063f62b1c0d1161007c578063f62b1c0d1461043a578063f63bf8bd1461044d578063f8248ad014610460578063f8b2a46e14610473578063ff9e23d01461048657600080fd5b8063f2eea45c146103f9578063f2fde38b1461040c578063f49bb4921461041f578063f4c1fc5f1461043257600080fd5b8063e1fc334f116100e9578063e1fc334f146103a9578063e5d391a2146103bc578063e6eebd8b146103cf578063e74c6bb5146103f057600080fd5b8063bdc8cbc214610341578063c2ba474414610354578063ca14df4f14610367578063ce4f276c1461037a57600080fd5b8063498c626a11610192578063715018a611610161578063715018a6146103025780637b25e04c1461030a57806383c72a831461031d5780638da5cb5b1461033057600080fd5b8063498c626a1461028f5780635c975abb146102b95780636f7bb00a146102c457806370480275146102ef57600080fd5b806331305082116101ce578063313050821461024e5780633ccfd60b146102615780633df6cc4f14610269578063497f71721461027c57600080fd5b806316c38b3c146102005780631785f53c1461021557806318adfb62146102285780631f4fb37a1461023b575b600080fd5b61021361020e3660046127ca565b6104ba565b005b610213610223366004612722565b6105a8565b6102136102363660046128e5565b6105f3565b6102136102493660046128e5565b6106c8565b61021361025c3660046128e5565b6106f7565b610213610785565b6102136102773660046127ca565b6107e9565b61021361028a366004612722565b610833565b6008546102a490640100000000900460ff1681565b60405190151581526020015b60405180910390f35b60025460ff166102a4565b600b546102d7906001600160a01b031681565b6040516001600160a01b0390911681526020016102b0565b6102136102fd366004612722565b610914565b610213610962565b610213610318366004612944565b610998565b61021361032b3660046128ad565b610fc5565b6000546001600160a01b03166102d7565b61021361034f3660046128ad565b6110bb565b6102a4610362366004612722565b611162565b600a546102d7906001600160a01b031681565b6102a4610388366004612722565b6001600160a01b031660009081526006602052604090205461ffff16151590565b600c546102d7906001600160a01b031681565b6102136103ca366004612915565b6111bb565b6103e26103dd366004612944565b6116e7565b6040519081526020016102b0565b6103e260035481565b600e546102d7906001600160a01b031681565b61021361041a366004612722565b6117ab565b61021361042d366004612722565b611843565b610213611890565b6102136104483660046128e5565b611925565b61021361045b36600461275a565b61196f565b61021361046e3660046128e5565b6119f8565b600d546102d7906001600160a01b031681565b610499610494366004612722565b611d45565b6040805182511515815260209283015161ffff1692810192909252016102b0565b600b546001600160a01b0316158015906104de5750600c546001600160a01b031615155b80156104f45750600d546001600160a01b031615155b801561050a5750600a546001600160a01b031615155b80156105205750600e546001600160a01b031615155b6105655760405162461bcd60e51b815260206004820152601160248201527010dbdb9d1c9858dd1cc81b9bdd081cd95d607a1b60448201526064015b60405180910390fd5b6000546001600160a01b0316331461058f5760405162461bcd60e51b815260040161055c90612af2565b80156105a05761059d611e09565b50565b61059d611e7e565b6000546001600160a01b031633146105d25760405162461bcd60e51b815260040161055c90612af2565b6001600160a01b03166000908152600960205260409020805460ff19169055565b600b546001600160a01b0316158015906106175750600c546001600160a01b031615155b801561062d5750600d546001600160a01b031615155b80156106435750600a546001600160a01b031615155b80156106595750600e546001600160a01b031615155b6106995760405162461bcd60e51b815260206004820152601160248201527010dbdb9d1c9858dd1cc81b9bdd081cd95d607a1b604482015260640161055c565b6000546001600160a01b031633146106c35760405162461bcd60e51b815260040161055c90612af2565b600455565b6000546001600160a01b031633146106f25760405162461bcd60e51b815260040161055c90612af2565b600355565b6000546001600160a01b031633148061071f57503360009081526009602052604090205460ff165b61073b5760405162461bcd60e51b815260040161055c90612a2d565b6008805461ffff908116600090815260076020526040812084905582546001939261076891859116612b96565b92506101000a81548161ffff021916908361ffff16021790555050565b6000546001600160a01b031633146107af5760405162461bcd60e51b815260040161055c90612af2565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561059d573d6000803e3d6000fd5b6000546001600160a01b031633146108135760405162461bcd60e51b815260040161055c90612af2565b600880549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b031633148061085b57503360009081526009602052604090205460ff165b6108775760405162461bcd60e51b815260040161055c90612a2d565b3360009081526006602052604090205461ffff16806108cc5760405162461bcd60e51b8152602060048201526011602482015270139bc81c195b991a5b99c818dbdb5b5a5d607a1b604482015260640161055c565b6001600160a01b03909116600081815260056020908152604080832061ffff9095168352938152838220805462ffffff19169055918152600690915220805461ffff19169055565b6000546001600160a01b0316331461093e5760405162461bcd60e51b815260040161055c90612af2565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b0316331461098c5760405162461bcd60e51b815260040161055c90612af2565b6109966000611ef8565b565b60025460ff16156109bb5760405162461bcd60e51b815260040161055c90612ac8565b600260015414156109de5760405162461bcd60e51b815260040161055c90612b27565b6002600155323314610a025760405162461bcd60e51b815260040161055c90612a64565b600d54604051631d7a2e6d60e31b8152600481018490526000916001600160a01b03169063ebd173689060240160206040518083038186803b158015610a4757600080fd5b505afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f9190612965565b9050438167ffffffffffffffff1610610ace5760405162461bcd60e51b8152602060048201526011602482015270686d6d6d6d207768617420646f696e673f60781b604482015260640161055c565b600d546040516394e5684760e01b8152600481018590526000916001600160a01b0316906394e56847906024016101406040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906127e6565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316634f02c4206040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd891906128c9565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6291906128fd565b90506000610c748361ffff16836116e7565b905060008111610c965760405162461bcd60e51b815260040161055c90612a86565b835115610e2d57610ca8816003612be8565b861015610cf05760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da0819dc081c1c9bdd9a59195960521b604482015260640161055c565b600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101899052604401600060405180830381600087803b158015610d4a57600080fd5b505af1158015610d5e573d6000803e3d6000fd5b5050600d54604051630852cd8d60e31b8152600481018b90526001600160a01b0390911692506342966c689150602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b5050600e54604051635141601960e01b81526001600160a01b03909116925063514160199150610df6906003906001903390600401612a0a565b600060405180830381600087803b158015610e1057600080fd5b505af1158015610e24573d6000803e3d6000fd5b50505050610fb8565b610e38816004612be8565b861015610e805760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da0819dc081c1c9bdd9a59195960521b604482015260640161055c565b600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101899052604401600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b5050600d54604051630852cd8d60e31b8152600481018b90526001600160a01b0390911692506342966c689150602401600060405180830381600087803b158015610f3857600080fd5b505af1158015610f4c573d6000803e3d6000fd5b5050600e54604051635141601960e01b81526001600160a01b03909116925063514160199150610f859060049060019033908301612a0a565b600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b505050505b5050600180555050505050565b60025460ff1615610fe85760405162461bcd60e51b815260040161055c90612ac8565b3233146110075760405162461bcd60e51b815260040161055c90612a64565b60006003541161104d5760405162461bcd60e51b81526020600482015260116024820152704445565320444f20534f4d455448494e4760781b604482015260640161055c565b600e546003546001600160a01b039091169063514160199083335b6040518463ffffffff1660e01b815260040161108693929190612a0a565b600060405180830381600087803b1580156110a057600080fd5b505af11580156110b4573d6000803e3d6000fd5b5050505050565b60025460ff16156110de5760405162461bcd60e51b815260040161055c90612ac8565b3233146110fd5760405162461bcd60e51b815260040161055c90612a64565b6000600354116111435760405162461bcd60e51b81526020600482015260116024820152704445565320444f20534f4d455448494e4760781b604482015260640161055c565b600e546003546001600160a01b03909116906306e7b953908333611068565b6001600160a01b03811660009081526006602052604081205461ffff16158015906111b557506001600160a01b03821660009081526006602090815260408083205461ffff168352600790915290205415155b92915050565b60025460ff16156111de5760405162461bcd60e51b815260040161055c90612ac8565b600260015414156112015760405162461bcd60e51b815260040161055c90612b27565b6002600155600854640100000000900460ff166112605760405162461bcd60e51b815260206004820152601960248201527f616464696e6720636f6d6d69747320646973616c6c6f77656400000000000000604482015260640161055c565b32331461127f5760405162461bcd60e51b815260040161055c90612a64565b3360009081526006602052604090205461ffff16156112e05760405162461bcd60e51b815260206004820152601a60248201527f416c726561647920686176652070656e64696e67206d696e7473000000000000604482015260640161055c565b600d5460408051630278162160e51b815290516000926001600160a01b031691634f02c42091600480830192602092919082900301818787803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135e91906128c9565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e891906128fd565b600854909150819085906114069062010000900461ffff1685612b96565b61ffff166114149190612bbc565b11156114565760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604482015260640161055c565b6000841180156114675750600a8411155b6114a95760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b604482015260640161055c565b600060015b858111611504576008546114e69082906114d29062010000900461ffff1687612b96565b61ffff166114e09190612bbc565b846116e7565b6114f09083612bbc565b9150806114fc81612c4c565b9150506114ae565b5080156115e657600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b15801561156557600080fd5b505af1158015611579573d6000803e3d6000fd5b50505050600b60009054906101000a90046001600160a01b03166001600160a01b0316639c47ee3b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505050505b604080518082018252851515815261ffff878116602080840191825233600081815260058352868120600880548716835290845287822096518754955187166101000262ffff00199115159190911662ffffff1990961695909517949094179095558254908552600690915293909220805461ffff191693821693909317909255805487928392916002916116849185916201000090910416612b96565b92506101000a81548161ffff021916908361ffff160217905550856116a63390565b6001600160a01b03167faf67cde32876f45d0ccb318d8ddb3e26990a5bfce179cec382204ceddf93143560405160405180910390a350506001805550505050565b600060146116f6836008612be8565b6117009190612bd4565b831161171757506905150ae84a8cdf0000006111b5565b601461172483600b612be8565b61172e9190612bd4565b8311611745575069079f905c6fd34e8000006111b5565b601461175283600e612be8565b61175c9190612bd4565b83116117735750690a2a15d09519be0000006111b5565b6014611780836011612be8565b61178a9190612bd4565b83116117a15750690cb49b44ba602d8000006111b5565b5060045492915050565b6000546001600160a01b031633146117d55760405162461bcd60e51b815260040161055c90612af2565b6001600160a01b03811661183a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161055c565b61059d81611ef8565b6000546001600160a01b031633148061186b57503360009081526009602052604090205460ff165b6118875760405162461bcd60e51b815260040161055c90612a2d565b61059d81611f48565b60025460ff16156118b35760405162461bcd60e51b815260040161055c90612ac8565b600260015414156118d65760405162461bcd60e51b815260040161055c90612b27565b60026001553233146119165760405162461bcd60e51b81526020600482015260096024820152684f6e6c7920454f413160b81b604482015260640161055c565b61191f33611f48565b60018055565b6000546001600160a01b0316331461194f5760405162461bcd60e51b815260040161055c90612af2565b6008805461ffff909216620100000263ffff000019909216919091179055565b6000546001600160a01b031633146119995760405162461bcd60e51b815260040161055c90612af2565b600b80546001600160a01b03199081166001600160a01b0397881617909155600c8054821695871695909517909455600d8054851693861693909317909255600a80548416918516919091179055600e80549092169216919091179055565b60025460ff1615611a1b5760405162461bcd60e51b815260040161055c90612ac8565b60026001541415611a3e5760405162461bcd60e51b815260040161055c90612b27565b6002600155323314611a625760405162461bcd60e51b815260040161055c90612a64565b600d5460408051630278162160e51b815290516000926001600160a01b031691634f02c42091600480830192602092919082900301818787803b158015611aa857600080fd5b505af1158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae091906128c9565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3257600080fd5b505afa158015611b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6a91906128fd565b90506000611b7c8361ffff16836116e7565b905060008111611b9e5760405162461bcd60e51b815260040161055c90612a86565b80841015611be45760405162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b41033b81033b4bb32b760691b604482015260640161055c565b600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101879052604401600060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b50505050806002611c639190612be8565b841015611cd457600e546001600160a01b03166351416019600180336040518463ffffffff1660e01b8152600401611c9d93929190612a0a565b600060405180830381600087803b158015611cb757600080fd5b505af1158015611ccb573d6000803e3d6000fd5b50505050611d3b565b600e546001600160a01b0316635141601960026001336040518463ffffffff1660e01b8152600401611d0893929190612a0a565b600060405180830381600087803b158015611d2257600080fd5b505af1158015611d36573d6000803e3d6000fd5b505050505b5050600180555050565b60408051808201909152600080825260208201526001600160a01b03821660009081526006602052604090205461ffff16611db75760405162461bcd60e51b81526020600482015260126024820152716e6f2070656e64696e6720636f6d6d69747360701b604482015260640161055c565b506001600160a01b03166000908152600560209081526040808320600683528184205461ffff90811685529083529281902081518083019092525460ff81161515825261010090049092169082015290565b60025460ff1615611e2c5760405162461bcd60e51b815260040161055c90612ac8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e613390565b6040516001600160a01b03909116815260200160405180910390a1565b60025460ff16611ec75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161055c565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611e61565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811660009081526006602052604090205461ffff1680611fa65760405162461bcd60e51b8152602060048201526011602482015270139bc81c195b991a5b99c818dbdb5b5a5d607a1b604482015260640161055c565b61ffff8116600090815260076020526040902054611ffc5760405162461bcd60e51b81526020600482015260136024820152721c985b991bdb481cd95959081b9bdd081cd95d606a1b604482015260640161055c565b600d5460408051630278162160e51b815290516000926001600160a01b031691634f02c42091600480830192602092919082900301818787803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207a91906128c9565b6001600160a01b038416600090815260056020908152604080832061ffff80881685529083529281902081518083019092525460ff81161515825261010090048316918101829052600880549495509093919290916002916120e59185916201000090910416612c07565b92506101000a81548161ffff021916908361ffff1602179055506000816020015161ffff1667ffffffffffffffff81111561213057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612159578160200160208202803683370190505b5090506000826020015161ffff1667ffffffffffffffff81111561218d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156121b6578160200160208202803683370190505b5061ffff86166000908152600760205260408120549192505b846020015161ffff1681101561250257856121e981612c2a565b96505081886040516020016122119291909182526001600160a01b0316602082015260400190565b6040516020818303038152906040528051906020012060001c915060006122378361264c565b9050886001600160a01b0316816001600160a01b0316141580156122f05750600e54600354604051627eeac760e11b81526000926001600160a01b03169162fdd58e9161229c918e916004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156122b657600080fd5b505af11580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee91906128fd565b115b1561238b57826001166001141561238b57600e54600354604051637921219560e11b81526001600160a01b038c81166004830152848116602483015260448201929092526001606482015260a06084820152600060a482015291169063f242432a9060c401600060405180830381600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050508890505b868583815181106123ac57634e487b7160e01b600052603260045260246000fd5b61ffff90921660209283029190910190910152855115806123df5750886001600160a01b0316816001600160a01b031614155b1561244f57600d546040516340c10f1960e01b81526001600160a01b03838116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506124ef565b600d54600a546040516340c10f1960e01b81526001600160a01b039182166004820152602481018690529116906340c10f1990604401600060405180830381600087803b15801561249f57600080fd5b505af11580156124b3573d6000803e3d6000fd5b50505050868483815181106124d857634e487b7160e01b600052603260045260246000fd5b602002602001019061ffff16908161ffff16815250505b50806124fa81612c4c565b9150506121cf565b50600d546040516335ca838b60e01b81526001600160a01b03909116906335ca838b906125339086906004016129f7565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050508360000151156125d457600a5460405163315ec95760e11b81526001600160a01b03909116906362bd92ae906125a1908a9086906004016129cb565b600060405180830381600087803b1580156125bb57600080fd5b505af11580156125cf573d6000803e3d6000fd5b505050505b6001600160a01b038716600081815260056020908152604080832061ffff8b1684528252808320805462ffffff191690558383526006909152808220805461ffff19169055855190519092917faf67cde32876f45d0ccb318d8ddb3e26990a5bfce179cec382204ceddf93143591a350505050505050565b600061265d600a60f584901c612c67565b1561266857336111b5565b600a54604051638336a6cf60e01b8152609084901c60048201526000916001600160a01b031690638336a6cf9060240160206040518083038186803b1580156126b057600080fd5b505afa1580156126c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e8919061273e565b90506001600160a01b0381166111b557335b9392505050565b805161270c81612cbc565b919050565b805160ff8116811461270c57600080fd5b600060208284031215612733578081fd5b81356126fa81612ca7565b60006020828403121561274f578081fd5b81516126fa81612ca7565b600080600080600060a08688031215612771578081fd5b853561277c81612ca7565b9450602086013561278c81612ca7565b9350604086013561279c81612ca7565b925060608601356127ac81612ca7565b915060808601356127bc81612ca7565b809150509295509295909350565b6000602082840312156127db578081fd5b81356126fa81612cbc565b600061014082840312156127f8578081fd5b612800612b5e565b61280983612701565b815261281760208401612711565b602082015261282860408401612711565b604082015261283960608401612711565b606082015261284a60808401612711565b608082015261285b60a08401612711565b60a082015261286c60c08401612711565b60c082015261287d60e08401612711565b60e0820152610100612890818501612711565b908201526101206128a2848201612711565b908201529392505050565b6000602082840312156128be578081fd5b81356126fa81612cca565b6000602082840312156128da578081fd5b81516126fa81612cca565b6000602082840312156128f6578081fd5b5035919050565b60006020828403121561290e578081fd5b5051919050565b60008060408385031215612927578182fd5b82359150602083013561293981612cbc565b809150509250929050565b60008060408385031215612956578182fd5b50508035926020909101359150565b600060208284031215612976578081fd5b815167ffffffffffffffff811681146126fa578182fd5b6000815180845260208085019450808401835b838110156129c057815161ffff16875295820195908201906001016129a0565b509495945050505050565b6001600160a01b03831681526040602082018190526000906129ef9083018461298d565b949350505050565b6020815260006126fa602083018461298d565b92835261ffff9190911660208301526001600160a01b0316604082015260600190565b60208082526019908201527f4f6e6c792061646d696e732063616e2063616c6c207468697300000000000000604082015260600190565b6020808252600890820152674f6e6c7920454f4160c01b604082015260600190565b60208082526022908201527f536163726966696369616c20616c7465722063757272656e746c7920636c6f73604082015261195960f21b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051610140810167ffffffffffffffff81118282101715612b9057634e487b7160e01b600052604160045260246000fd5b60405290565b600061ffff808316818516808303821115612bb357612bb3612c7b565b01949350505050565b60008219821115612bcf57612bcf612c7b565b500190565b600082612be357612be3612c91565b500490565b6000816000190483118215151615612c0257612c02612c7b565b500290565b600061ffff83811690831681811015612c2257612c22612c7b565b039392505050565b600061ffff80831681811415612c4257612c42612c7b565b6001019392505050565b6000600019821415612c6057612c60612c7b565b5060010190565b600082612c7657612c76612c91565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811461059d57600080fd5b801515811461059d57600080fd5b61ffff8116811461059d57600080fdfea2646970667358221220a424992af6f9e84044af88089516eb986e85a19db635844d633dab1bcaf55a3c64736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063bdc8cbc21161011a578063f2eea45c116100ad578063f62b1c0d1161007c578063f62b1c0d1461043a578063f63bf8bd1461044d578063f8248ad014610460578063f8b2a46e14610473578063ff9e23d01461048657600080fd5b8063f2eea45c146103f9578063f2fde38b1461040c578063f49bb4921461041f578063f4c1fc5f1461043257600080fd5b8063e1fc334f116100e9578063e1fc334f146103a9578063e5d391a2146103bc578063e6eebd8b146103cf578063e74c6bb5146103f057600080fd5b8063bdc8cbc214610341578063c2ba474414610354578063ca14df4f14610367578063ce4f276c1461037a57600080fd5b8063498c626a11610192578063715018a611610161578063715018a6146103025780637b25e04c1461030a57806383c72a831461031d5780638da5cb5b1461033057600080fd5b8063498c626a1461028f5780635c975abb146102b95780636f7bb00a146102c457806370480275146102ef57600080fd5b806331305082116101ce578063313050821461024e5780633ccfd60b146102615780633df6cc4f14610269578063497f71721461027c57600080fd5b806316c38b3c146102005780631785f53c1461021557806318adfb62146102285780631f4fb37a1461023b575b600080fd5b61021361020e3660046127ca565b6104ba565b005b610213610223366004612722565b6105a8565b6102136102363660046128e5565b6105f3565b6102136102493660046128e5565b6106c8565b61021361025c3660046128e5565b6106f7565b610213610785565b6102136102773660046127ca565b6107e9565b61021361028a366004612722565b610833565b6008546102a490640100000000900460ff1681565b60405190151581526020015b60405180910390f35b60025460ff166102a4565b600b546102d7906001600160a01b031681565b6040516001600160a01b0390911681526020016102b0565b6102136102fd366004612722565b610914565b610213610962565b610213610318366004612944565b610998565b61021361032b3660046128ad565b610fc5565b6000546001600160a01b03166102d7565b61021361034f3660046128ad565b6110bb565b6102a4610362366004612722565b611162565b600a546102d7906001600160a01b031681565b6102a4610388366004612722565b6001600160a01b031660009081526006602052604090205461ffff16151590565b600c546102d7906001600160a01b031681565b6102136103ca366004612915565b6111bb565b6103e26103dd366004612944565b6116e7565b6040519081526020016102b0565b6103e260035481565b600e546102d7906001600160a01b031681565b61021361041a366004612722565b6117ab565b61021361042d366004612722565b611843565b610213611890565b6102136104483660046128e5565b611925565b61021361045b36600461275a565b61196f565b61021361046e3660046128e5565b6119f8565b600d546102d7906001600160a01b031681565b610499610494366004612722565b611d45565b6040805182511515815260209283015161ffff1692810192909252016102b0565b600b546001600160a01b0316158015906104de5750600c546001600160a01b031615155b80156104f45750600d546001600160a01b031615155b801561050a5750600a546001600160a01b031615155b80156105205750600e546001600160a01b031615155b6105655760405162461bcd60e51b815260206004820152601160248201527010dbdb9d1c9858dd1cc81b9bdd081cd95d607a1b60448201526064015b60405180910390fd5b6000546001600160a01b0316331461058f5760405162461bcd60e51b815260040161055c90612af2565b80156105a05761059d611e09565b50565b61059d611e7e565b6000546001600160a01b031633146105d25760405162461bcd60e51b815260040161055c90612af2565b6001600160a01b03166000908152600960205260409020805460ff19169055565b600b546001600160a01b0316158015906106175750600c546001600160a01b031615155b801561062d5750600d546001600160a01b031615155b80156106435750600a546001600160a01b031615155b80156106595750600e546001600160a01b031615155b6106995760405162461bcd60e51b815260206004820152601160248201527010dbdb9d1c9858dd1cc81b9bdd081cd95d607a1b604482015260640161055c565b6000546001600160a01b031633146106c35760405162461bcd60e51b815260040161055c90612af2565b600455565b6000546001600160a01b031633146106f25760405162461bcd60e51b815260040161055c90612af2565b600355565b6000546001600160a01b031633148061071f57503360009081526009602052604090205460ff165b61073b5760405162461bcd60e51b815260040161055c90612a2d565b6008805461ffff908116600090815260076020526040812084905582546001939261076891859116612b96565b92506101000a81548161ffff021916908361ffff16021790555050565b6000546001600160a01b031633146107af5760405162461bcd60e51b815260040161055c90612af2565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f1935050505015801561059d573d6000803e3d6000fd5b6000546001600160a01b031633146108135760405162461bcd60e51b815260040161055c90612af2565b600880549115156401000000000264ff0000000019909216919091179055565b6000546001600160a01b031633148061085b57503360009081526009602052604090205460ff165b6108775760405162461bcd60e51b815260040161055c90612a2d565b3360009081526006602052604090205461ffff16806108cc5760405162461bcd60e51b8152602060048201526011602482015270139bc81c195b991a5b99c818dbdb5b5a5d607a1b604482015260640161055c565b6001600160a01b03909116600081815260056020908152604080832061ffff9095168352938152838220805462ffffff19169055918152600690915220805461ffff19169055565b6000546001600160a01b0316331461093e5760405162461bcd60e51b815260040161055c90612af2565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b0316331461098c5760405162461bcd60e51b815260040161055c90612af2565b6109966000611ef8565b565b60025460ff16156109bb5760405162461bcd60e51b815260040161055c90612ac8565b600260015414156109de5760405162461bcd60e51b815260040161055c90612b27565b6002600155323314610a025760405162461bcd60e51b815260040161055c90612a64565b600d54604051631d7a2e6d60e31b8152600481018490526000916001600160a01b03169063ebd173689060240160206040518083038186803b158015610a4757600080fd5b505afa158015610a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7f9190612965565b9050438167ffffffffffffffff1610610ace5760405162461bcd60e51b8152602060048201526011602482015270686d6d6d6d207768617420646f696e673f60781b604482015260640161055c565b600d546040516394e5684760e01b8152600481018590526000916001600160a01b0316906394e56847906024016101406040518083038186803b158015610b1457600080fd5b505afa158015610b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4c91906127e6565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316634f02c4206040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd891906128c9565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b815260040160206040518083038186803b158015610c2a57600080fd5b505afa158015610c3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6291906128fd565b90506000610c748361ffff16836116e7565b905060008111610c965760405162461bcd60e51b815260040161055c90612a86565b835115610e2d57610ca8816003612be8565b861015610cf05760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da0819dc081c1c9bdd9a59195960521b604482015260640161055c565b600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101899052604401600060405180830381600087803b158015610d4a57600080fd5b505af1158015610d5e573d6000803e3d6000fd5b5050600d54604051630852cd8d60e31b8152600481018b90526001600160a01b0390911692506342966c689150602401600060405180830381600087803b158015610da857600080fd5b505af1158015610dbc573d6000803e3d6000fd5b5050600e54604051635141601960e01b81526001600160a01b03909116925063514160199150610df6906003906001903390600401612a0a565b600060405180830381600087803b158015610e1057600080fd5b505af1158015610e24573d6000803e3d6000fd5b50505050610fb8565b610e38816004612be8565b861015610e805760405162461bcd60e51b81526020600482015260166024820152751b9bdd08195b9bdd59da0819dc081c1c9bdd9a59195960521b604482015260640161055c565b600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101899052604401600060405180830381600087803b158015610eda57600080fd5b505af1158015610eee573d6000803e3d6000fd5b5050600d54604051630852cd8d60e31b8152600481018b90526001600160a01b0390911692506342966c689150602401600060405180830381600087803b158015610f3857600080fd5b505af1158015610f4c573d6000803e3d6000fd5b5050600e54604051635141601960e01b81526001600160a01b03909116925063514160199150610f859060049060019033908301612a0a565b600060405180830381600087803b158015610f9f57600080fd5b505af1158015610fb3573d6000803e3d6000fd5b505050505b5050600180555050505050565b60025460ff1615610fe85760405162461bcd60e51b815260040161055c90612ac8565b3233146110075760405162461bcd60e51b815260040161055c90612a64565b60006003541161104d5760405162461bcd60e51b81526020600482015260116024820152704445565320444f20534f4d455448494e4760781b604482015260640161055c565b600e546003546001600160a01b039091169063514160199083335b6040518463ffffffff1660e01b815260040161108693929190612a0a565b600060405180830381600087803b1580156110a057600080fd5b505af11580156110b4573d6000803e3d6000fd5b5050505050565b60025460ff16156110de5760405162461bcd60e51b815260040161055c90612ac8565b3233146110fd5760405162461bcd60e51b815260040161055c90612a64565b6000600354116111435760405162461bcd60e51b81526020600482015260116024820152704445565320444f20534f4d455448494e4760781b604482015260640161055c565b600e546003546001600160a01b03909116906306e7b953908333611068565b6001600160a01b03811660009081526006602052604081205461ffff16158015906111b557506001600160a01b03821660009081526006602090815260408083205461ffff168352600790915290205415155b92915050565b60025460ff16156111de5760405162461bcd60e51b815260040161055c90612ac8565b600260015414156112015760405162461bcd60e51b815260040161055c90612b27565b6002600155600854640100000000900460ff166112605760405162461bcd60e51b815260206004820152601960248201527f616464696e6720636f6d6d69747320646973616c6c6f77656400000000000000604482015260640161055c565b32331461127f5760405162461bcd60e51b815260040161055c90612a64565b3360009081526006602052604090205461ffff16156112e05760405162461bcd60e51b815260206004820152601a60248201527f416c726561647920686176652070656e64696e67206d696e7473000000000000604482015260640161055c565b600d5460408051630278162160e51b815290516000926001600160a01b031691634f02c42091600480830192602092919082900301818787803b15801561132657600080fd5b505af115801561133a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135e91906128c9565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b815260040160206040518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e891906128fd565b600854909150819085906114069062010000900461ffff1685612b96565b61ffff166114149190612bbc565b11156114565760405162461bcd60e51b8152602060048201526011602482015270105b1b081d1bdad95b9cc81b5a5b9d1959607a1b604482015260640161055c565b6000841180156114675750600a8411155b6114a95760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b5a5b9d08185b5bdd5b9d606a1b604482015260640161055c565b600060015b858111611504576008546114e69082906114d29062010000900461ffff1687612b96565b61ffff166114e09190612bbc565b846116e7565b6114f09083612bbc565b9150806114fc81612c4c565b9150506114ae565b5080156115e657600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401600060405180830381600087803b15801561156557600080fd5b505af1158015611579573d6000803e3d6000fd5b50505050600b60009054906101000a90046001600160a01b03166001600160a01b0316639c47ee3b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156115cd57600080fd5b505af11580156115e1573d6000803e3d6000fd5b505050505b604080518082018252851515815261ffff878116602080840191825233600081815260058352868120600880548716835290845287822096518754955187166101000262ffff00199115159190911662ffffff1990961695909517949094179095558254908552600690915293909220805461ffff191693821693909317909255805487928392916002916116849185916201000090910416612b96565b92506101000a81548161ffff021916908361ffff160217905550856116a63390565b6001600160a01b03167faf67cde32876f45d0ccb318d8ddb3e26990a5bfce179cec382204ceddf93143560405160405180910390a350506001805550505050565b600060146116f6836008612be8565b6117009190612bd4565b831161171757506905150ae84a8cdf0000006111b5565b601461172483600b612be8565b61172e9190612bd4565b8311611745575069079f905c6fd34e8000006111b5565b601461175283600e612be8565b61175c9190612bd4565b83116117735750690a2a15d09519be0000006111b5565b6014611780836011612be8565b61178a9190612bd4565b83116117a15750690cb49b44ba602d8000006111b5565b5060045492915050565b6000546001600160a01b031633146117d55760405162461bcd60e51b815260040161055c90612af2565b6001600160a01b03811661183a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161055c565b61059d81611ef8565b6000546001600160a01b031633148061186b57503360009081526009602052604090205460ff165b6118875760405162461bcd60e51b815260040161055c90612a2d565b61059d81611f48565b60025460ff16156118b35760405162461bcd60e51b815260040161055c90612ac8565b600260015414156118d65760405162461bcd60e51b815260040161055c90612b27565b60026001553233146119165760405162461bcd60e51b81526020600482015260096024820152684f6e6c7920454f413160b81b604482015260640161055c565b61191f33611f48565b60018055565b6000546001600160a01b0316331461194f5760405162461bcd60e51b815260040161055c90612af2565b6008805461ffff909216620100000263ffff000019909216919091179055565b6000546001600160a01b031633146119995760405162461bcd60e51b815260040161055c90612af2565b600b80546001600160a01b03199081166001600160a01b0397881617909155600c8054821695871695909517909455600d8054851693861693909317909255600a80548416918516919091179055600e80549092169216919091179055565b60025460ff1615611a1b5760405162461bcd60e51b815260040161055c90612ac8565b60026001541415611a3e5760405162461bcd60e51b815260040161055c90612b27565b6002600155323314611a625760405162461bcd60e51b815260040161055c90612a64565b600d5460408051630278162160e51b815290516000926001600160a01b031691634f02c42091600480830192602092919082900301818787803b158015611aa857600080fd5b505af1158015611abc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae091906128c9565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3257600080fd5b505afa158015611b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6a91906128fd565b90506000611b7c8361ffff16836116e7565b905060008111611b9e5760405162461bcd60e51b815260040161055c90612a86565b80841015611be45760405162461bcd60e51b81526020600482015260136024820152722737ba1032b737bab3b41033b81033b4bb32b760691b604482015260640161055c565b600b546001600160a01b0316639dc29fac336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101879052604401600060405180830381600087803b158015611c3e57600080fd5b505af1158015611c52573d6000803e3d6000fd5b50505050806002611c639190612be8565b841015611cd457600e546001600160a01b03166351416019600180336040518463ffffffff1660e01b8152600401611c9d93929190612a0a565b600060405180830381600087803b158015611cb757600080fd5b505af1158015611ccb573d6000803e3d6000fd5b50505050611d3b565b600e546001600160a01b0316635141601960026001336040518463ffffffff1660e01b8152600401611d0893929190612a0a565b600060405180830381600087803b158015611d2257600080fd5b505af1158015611d36573d6000803e3d6000fd5b505050505b5050600180555050565b60408051808201909152600080825260208201526001600160a01b03821660009081526006602052604090205461ffff16611db75760405162461bcd60e51b81526020600482015260126024820152716e6f2070656e64696e6720636f6d6d69747360701b604482015260640161055c565b506001600160a01b03166000908152600560209081526040808320600683528184205461ffff90811685529083529281902081518083019092525460ff81161515825261010090049092169082015290565b60025460ff1615611e2c5760405162461bcd60e51b815260040161055c90612ac8565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e613390565b6040516001600160a01b03909116815260200160405180910390a1565b60025460ff16611ec75760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161055c565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611e61565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811660009081526006602052604090205461ffff1680611fa65760405162461bcd60e51b8152602060048201526011602482015270139bc81c195b991a5b99c818dbdb5b5a5d607a1b604482015260640161055c565b61ffff8116600090815260076020526040902054611ffc5760405162461bcd60e51b81526020600482015260136024820152721c985b991bdb481cd95959081b9bdd081cd95d606a1b604482015260640161055c565b600d5460408051630278162160e51b815290516000926001600160a01b031691634f02c42091600480830192602092919082900301818787803b15801561204257600080fd5b505af1158015612056573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207a91906128c9565b6001600160a01b038416600090815260056020908152604080832061ffff80881685529083529281902081518083019092525460ff81161515825261010090048316918101829052600880549495509093919290916002916120e59185916201000090910416612c07565b92506101000a81548161ffff021916908361ffff1602179055506000816020015161ffff1667ffffffffffffffff81111561213057634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612159578160200160208202803683370190505b5090506000826020015161ffff1667ffffffffffffffff81111561218d57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156121b6578160200160208202803683370190505b5061ffff86166000908152600760205260408120549192505b846020015161ffff1681101561250257856121e981612c2a565b96505081886040516020016122119291909182526001600160a01b0316602082015260400190565b6040516020818303038152906040528051906020012060001c915060006122378361264c565b9050886001600160a01b0316816001600160a01b0316141580156122f05750600e54600354604051627eeac760e11b81526000926001600160a01b03169162fdd58e9161229c918e916004016001600160a01b03929092168252602082015260400190565b602060405180830381600087803b1580156122b657600080fd5b505af11580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee91906128fd565b115b1561238b57826001166001141561238b57600e54600354604051637921219560e11b81526001600160a01b038c81166004830152848116602483015260448201929092526001606482015260a06084820152600060a482015291169063f242432a9060c401600060405180830381600087803b15801561236f57600080fd5b505af1158015612383573d6000803e3d6000fd5b505050508890505b868583815181106123ac57634e487b7160e01b600052603260045260246000fd5b61ffff90921660209283029190910190910152855115806123df5750886001600160a01b0316816001600160a01b031614155b1561244f57600d546040516340c10f1960e01b81526001600160a01b03838116600483015260248201869052909116906340c10f1990604401600060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506124ef565b600d54600a546040516340c10f1960e01b81526001600160a01b039182166004820152602481018690529116906340c10f1990604401600060405180830381600087803b15801561249f57600080fd5b505af11580156124b3573d6000803e3d6000fd5b50505050868483815181106124d857634e487b7160e01b600052603260045260246000fd5b602002602001019061ffff16908161ffff16815250505b50806124fa81612c4c565b9150506121cf565b50600d546040516335ca838b60e01b81526001600160a01b03909116906335ca838b906125339086906004016129f7565b600060405180830381600087803b15801561254d57600080fd5b505af1158015612561573d6000803e3d6000fd5b505050508360000151156125d457600a5460405163315ec95760e11b81526001600160a01b03909116906362bd92ae906125a1908a9086906004016129cb565b600060405180830381600087803b1580156125bb57600080fd5b505af11580156125cf573d6000803e3d6000fd5b505050505b6001600160a01b038716600081815260056020908152604080832061ffff8b1684528252808320805462ffffff191690558383526006909152808220805461ffff19169055855190519092917faf67cde32876f45d0ccb318d8ddb3e26990a5bfce179cec382204ceddf93143591a350505050505050565b600061265d600a60f584901c612c67565b1561266857336111b5565b600a54604051638336a6cf60e01b8152609084901c60048201526000916001600160a01b031690638336a6cf9060240160206040518083038186803b1580156126b057600080fd5b505afa1580156126c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e8919061273e565b90506001600160a01b0381166111b557335b9392505050565b805161270c81612cbc565b919050565b805160ff8116811461270c57600080fd5b600060208284031215612733578081fd5b81356126fa81612ca7565b60006020828403121561274f578081fd5b81516126fa81612ca7565b600080600080600060a08688031215612771578081fd5b853561277c81612ca7565b9450602086013561278c81612ca7565b9350604086013561279c81612ca7565b925060608601356127ac81612ca7565b915060808601356127bc81612ca7565b809150509295509295909350565b6000602082840312156127db578081fd5b81356126fa81612cbc565b600061014082840312156127f8578081fd5b612800612b5e565b61280983612701565b815261281760208401612711565b602082015261282860408401612711565b604082015261283960608401612711565b606082015261284a60808401612711565b608082015261285b60a08401612711565b60a082015261286c60c08401612711565b60c082015261287d60e08401612711565b60e0820152610100612890818501612711565b908201526101206128a2848201612711565b908201529392505050565b6000602082840312156128be578081fd5b81356126fa81612cca565b6000602082840312156128da578081fd5b81516126fa81612cca565b6000602082840312156128f6578081fd5b5035919050565b60006020828403121561290e578081fd5b5051919050565b60008060408385031215612927578182fd5b82359150602083013561293981612cbc565b809150509250929050565b60008060408385031215612956578182fd5b50508035926020909101359150565b600060208284031215612976578081fd5b815167ffffffffffffffff811681146126fa578182fd5b6000815180845260208085019450808401835b838110156129c057815161ffff16875295820195908201906001016129a0565b509495945050505050565b6001600160a01b03831681526040602082018190526000906129ef9083018461298d565b949350505050565b6020815260006126fa602083018461298d565b92835261ffff9190911660208301526001600160a01b0316604082015260600190565b60208082526019908201527f4f6e6c792061646d696e732063616e2063616c6c207468697300000000000000604082015260600190565b6020808252600890820152674f6e6c7920454f4160c01b604082015260600190565b60208082526022908201527f536163726966696369616c20616c7465722063757272656e746c7920636c6f73604082015261195960f21b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051610140810167ffffffffffffffff81118282101715612b9057634e487b7160e01b600052604160045260246000fd5b60405290565b600061ffff808316818516808303821115612bb357612bb3612c7b565b01949350505050565b60008219821115612bcf57612bcf612c7b565b500190565b600082612be357612be3612c91565b500490565b6000816000190483118215151615612c0257612c02612c7b565b500290565b600061ffff83811690831681811015612c2257612c22612c7b565b039392505050565b600061ffff80831681811415612c4257612c42612c7b565b6001019392505050565b6000600019821415612c6057612c60612c7b565b5060010190565b600082612c7657612c76612c91565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6001600160a01b038116811461059d57600080fd5b801515811461059d57600080fd5b61ffff8116811461059d57600080fdfea2646970667358221220a424992af6f9e84044af88089516eb986e85a19db635844d633dab1bcaf55a3c64736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 25 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.