Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,366 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
Value | ||||
---|---|---|---|---|---|---|---|---|---|
Mint Commit | 15807409 | 615 days ago | IN | 0 ETH | 0.00031602 | ||||
Mint Commit | 15781732 | 618 days ago | IN | 0 ETH | 0.00032981 | ||||
Mint Commit | 15781689 | 618 days ago | IN | 0 ETH | 0.00029183 | ||||
Mint Reveal | 15781268 | 618 days ago | IN | 0 ETH | 0.00040488 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00237206 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178806 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178806 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178806 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00237206 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00178847 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00237206 | ||||
Emergency Extrac... | 15779225 | 619 days ago | IN | 0 ETH | 0.00237165 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
PirateGames
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; import "@openzeppelin/contracts/security/Pausable.sol"; import "./interfaces/IPirateGames.sol"; import "./interfaces/IPytheas.sol"; import "./interfaces/IOrbitalBlockade.sol"; import "./interfaces/ITPirates.sol"; import "./interfaces/IRAW.sol"; import "./interfaces/IPirates.sol"; import "./interfaces/IColonist.sol"; import "./interfaces/IImperialGuild.sol"; import "@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol"; import "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; contract PirateGames is IPirateGames, VRFConsumerBaseV2, Pausable { struct MintCommit { bool stake; uint16 tokenId; } uint8[][6] public rarities; uint8[][6] public aliases; uint256 public OnosiaLiquorId; uint256 private maxRawEonCost; // address => can call mapping(address => bool) private admins; // address -> commit # -> commits mapping(address => mapping(uint16 => MintCommit)) private _mintCommits; // address -> commit num of commit need revealed for account mapping(address => uint16) private _pendingCommitId; // amout pending needed to toggle randomness uint16 toggleLimit; // counter for toggle randomness uint16 toggleCounter; uint16 private _commitId = 1; uint16 private pendingMintAmt; bool public allowCommits = false; address public auth; // reference to Pytheas for checking that a colonist has mined enough //rEON to make an attempt as well as pay from this amount, either the current mint cost on //a successful pirate mint, or pirate tax on a failed attempt. IPytheas public pytheas; //reference to the OrbitalBlockade, where pirates are staked out, awaiting weak colonist miners. IOrbitalBlockade public orbital; // reference to raw Eon for attempts IRAW public raw; // reference to pirate collection IPirates public pirateNFT; // reference to the colonist NFT collection IColonist public colonistNFT; // reference to the galactic imperialGuild collection IImperialGuild public imperialGuild; // Chainlink references VRFCoordinatorV2Interface COORDINATOR; uint64 s_subscriptionId; uint256 linkFee; address vrfCoordinator = 0x271682DEB8C4E0901D1a1550aD2e64D568E69909; bytes32 keyHash; uint32 callbackGasLimit; uint16 requestConfirmations; //amount pending that toggles a randomness call uint32 public numWords = 1; uint256[] private randomness; uint256 public s_requestId; address s_owner; event MintCommitted(address indexed owner, uint256 indexed tokenId); event MintRevealed(address indexed owner, uint16[] indexed tokenId); constructor() VRFConsumerBaseV2(vrfCoordinator) { COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator); s_owner = msg.sender; auth = msg.sender; admins[msg.sender] = true; admins[address(this)] = true; //RatioChance 90 rarities[0] = [27, 230]; aliases[0] = [1, 0]; //RatioChance 80 rarities[1] = [51, 204]; aliases[1] = [1, 0]; //RatioChance 60 rarities[2] = [90, 175]; aliases[2] = [1, 0]; //RatioChance 40 rarities[3] = [155, 132]; aliases[3] = [1, 0]; //RatioChance 10 rarities[4] = [200, 60]; aliases[4] = [1, 0]; //RatioChance 0 rarities[5] = [255]; aliases[5] = [0]; } modifier noCheaters() { uint256 size = 0; address acc = msg.sender; assembly { size := extcodesize(acc) } require( admins[msg.sender] || (msg.sender == tx.origin && size == 0), "you're trying to cheat!" ); _; } modifier onlyOwner() { require(msg.sender == auth); _; } /** CRITICAL TO SETUP */ modifier requireContractsSet() { require( address(raw) != address(0) && address(pirateNFT) != address(0) && address(colonistNFT) != address(0) && address(pytheas) != address(0) && address(orbital) != address(0) && address(imperialGuild) != address(0), "Contracts not set" ); _; } function setContracts( address _rEON, address _pirateNFT, address _colonistNFT, address _pytheas, address _orbital, address _imperialGuild ) external onlyOwner { raw = IRAW(_rEON); pirateNFT = IPirates(_pirateNFT); colonistNFT = IColonist(_colonistNFT); pytheas = IPytheas(_pytheas); orbital = IOrbitalBlockade(_orbital); imperialGuild = IImperialGuild(_imperialGuild); } 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) { uint16 commitIdCur = _pendingCommitId[addr]; if (randomness.length == 1) { return _pendingCommitId[addr] != 0; } else { return _pendingCommitId[addr] != 0 && (randomness.length - 1) >= commitIdCur; } } // Assumes the subscription is funded sufficiently. function requestRandomWords() internal { // Will revert if subscription is not set and funded. s_requestId = COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); } function fulfillRandomWords( uint256, /* requestId */ uint256[] memory randomWords ) internal override { randomness.push(randomWords[0]); } function deleteCommit(address addr) external { require( auth == msg.sender || admins[msg.sender], "Only admins can call this" ); uint16 commitIdCur = _pendingCommitId[addr]; require(commitIdCur > 0, "No pending commit"); delete _mintCommits[addr][commitIdCur]; delete _pendingCommitId[addr]; } function forceRevealCommit(address addr) external { require( auth == msg.sender || admins[msg.sender], "Only admins can call this" ); pirateAttempt(addr); } function mintCommit(uint16 tokenId, bool stake) external whenNotPaused noCheaters { require(allowCommits, "adding commits disallowed"); require( _pendingCommitId[msg.sender] == 0, "Already have pending mints" ); uint16 piratesMinted = pirateNFT.piratesMinted(); require( piratesMinted + pendingMintAmt + 1 <= 6000, "All tokens minted" ); uint256 minted = colonistNFT.minted(); uint256 maxTokens = colonistNFT.getMaxTokens(); uint256 rawCost = rawMintCost(minted, maxTokens); raw.burn(1, rawCost, msg.sender); raw.updateOriginAccess(msg.sender); colonistNFT.transferFrom(msg.sender, address(this), tokenId); _mintCommits[msg.sender][_commitId] = MintCommit(stake, tokenId); _pendingCommitId[msg.sender] = _commitId; pendingMintAmt += 1; toggleCounter += 1; if (toggleCounter == toggleLimit) { requestRandomWords(); toggleCounter = 0; _commitId += 1; } emit MintCommitted(msg.sender, tokenId); } function mintReveal() external whenNotPaused noCheaters { pirateAttempt(msg.sender); } function pirateAttempt(address addr) internal { uint16 commitIdCur = _pendingCommitId[addr]; require(commitIdCur >= 0, "No pending commit"); require(randomness.length >= commitIdCur, "Random seed not set"); MintCommit memory commit = _mintCommits[addr][commitIdCur]; pendingMintAmt -= 1; uint16 colonistId = commit.tokenId; uint16 piratesMinted = pirateNFT.piratesMinted(); uint256 seed = randomness[commitIdCur]; uint256 circulation = colonistNFT.totalCir(); uint8 chanceTable = getRatioChance(piratesMinted, circulation); seed = uint256(keccak256(abi.encode(seed, addr))); uint8 yayNay = getPirateResults(seed, chanceTable); // if the attempt fails, pay pirate tax and claim remaining if (yayNay == 0) { colonistNFT.safeTransferFrom(address(this), addr, colonistId); } else { colonistNFT.burn(colonistId); uint16[] memory pirateId = new uint16[](1); uint16[] memory pirateIdToStake = new uint16[](1); piratesMinted++; address recipient = selectRecipient(seed); if ( recipient != addr && imperialGuild.getBalance(addr, OnosiaLiquorId) > 0 ) { // If the mint is going to be stolen, there's a 50% chance // a pirate will prefer a fine crafted EON liquor over it if (seed & 1 == 1) { imperialGuild.safeTransferFrom( addr, recipient, OnosiaLiquorId, 1, "" ); recipient = addr; } } pirateId[0] = piratesMinted; if (!commit.stake || recipient != addr) { pirateNFT._mintPirate(recipient, seed); } else { pirateNFT._mintPirate(address(orbital), seed); pirateIdToStake[0] = piratesMinted; } pirateNFT.updateOriginAccess(pirateId); if (commit.stake) { orbital.addPiratesToCrew(addr, pirateIdToStake); } emit MintRevealed(addr, pirateId); } delete _mintCommits[addr][commitIdCur]; delete _pendingCommitId[addr]; } /** * @return the cost of the given token ID */ function rawMintCost(uint256 tokenId, uint256 maxTokens) internal view returns (uint256) { if (tokenId <= (maxTokens * 8) / 24) return 4000; //10k-20k if (tokenId <= (maxTokens * 12) / 24) return 16000; //20k-30k if (tokenId <= (maxTokens * 16) / 24) return 48000; //30k-40k if (tokenId <= (maxTokens * 20) / 24) return 122500; //40k-50k if (tokenId <= (maxTokens * 22) / 24) return 250000; //50k-55k return maxRawEonCost; } function getRatioChance(uint256 pirates, uint256 circulation) public pure returns (uint8) { uint256 ratio = (pirates * 10000) / circulation; if (ratio <= 100) { return 0; } else if (ratio <= 300 && ratio >= 100) { return 1; } else if (ratio <= 500 && ratio >= 300) { return 2; } else if (ratio <= 800 && ratio >= 500) { return 3; } else if (ratio <= 999 && ratio >= 800) { return 4; } else { return 5; } } /** * Determines if an attempt to join the pirates is successful or not * granting a higher chance of success when the pirate to colonist ratio is * low, as the ratio gets closer to 10% the harder a chance at joining the pirates * becomes until ultimately they will not accept anyone else if the ratio is += 10% */ function getPirateResults(uint256 seed, uint8 chanceTable) internal view returns (uint8) { seed >>= 16; uint8 yayNay = getResult(uint16(seed & 0xFFFF), chanceTable); return yayNay; } function getResult(uint256 seed, uint8 chanceTable) internal view returns (uint8) { uint8 result = uint8(seed) % uint8(rarities[chanceTable].length); // If the selected chance talbles rareity is selected (biased coin) return that if (seed >> 8 < rarities[chanceTable][result]) return result; // else return the aliases return aliases[chanceTable][result]; } /** INTERNAL */ /** * the first 10k colonist mints go to the minter * the remaining 80% have a 10% chance to be given to a random staked pirate * @param seed a random value to select a recipient from * @return the address of the recipient (either the minter or the pirate thief's owner) */ function selectRecipient(uint256 seed) internal view returns (address) { if (((seed >> 245) % 10) != 0) return msg.sender; // top 10 bits address thief = orbital.randomPirateOwner(seed >> 144); // 144 bits reserved for trait selection if (thief == address(0x0)) return msg.sender; return thief; } // Assumes the subscription is funded sufficiently. function adminRequestRandomWords() external { require(admins[msg.sender], "only admins can request randomness"); // Will revert if subscription is not set and funded. s_requestId = COORDINATOR.requestRandomWords( keyHash, s_subscriptionId, requestConfirmations, callbackGasLimit, numWords ); } /** * enables owner to pause / unpause contract */ function setPaused(bool _paused) external requireContractsSet onlyOwner { if (_paused) _pause(); else _unpause(); } function setOnosiaLiquorId(uint256 typeId) external onlyOwner { OnosiaLiquorId = typeId; } function setAllowCommits(bool allowed) external onlyOwner { allowCommits = allowed; } function setToggleLimit(uint16 _toggleLimit) external onlyOwner { toggleLimit = _toggleLimit; } function setPendingMintAmt(uint256 pendingAmt) external onlyOwner { pendingMintAmt = uint16(pendingAmt); } function setVRFsub(bytes32 _keyHash, uint64 _s_subscriptionId, uint32 _callbackGasLimit, uint16 _requestConfirmations) external onlyOwner { keyHash = _keyHash; s_subscriptionId = _s_subscriptionId; callbackGasLimit = _callbackGasLimit; requestConfirmations = _requestConfirmations; } function resetToggleCounter (uint16 _toggleCounter) external onlyOwner { toggleCounter = _toggleCounter; } function resetCommitId (uint16 commitId) external onlyOwner { _commitId = commitId; } function getCurrent() external view returns (uint16, uint256) { return (_commitId, randomness.length); } /* 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 disable */ function removeAdmin(address addr) external onlyOwner { admins[addr] = false; } function emergencyExtraction(address recipient, uint256 tokenId) external onlyOwner { colonistNFT.transferFrom(address(this), recipient, tokenId); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. It ensures 2 things: * @dev 1. The fulfillment came from the VRFCoordinator * @dev 2. The consumer contract implements fulfillRandomWords. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash). Create subscription, fund it * @dev and your consumer contract as a consumer of it (see VRFCoordinatorInterface * @dev subscription management functions). * @dev Call requestRandomWords(keyHash, subId, minimumRequestConfirmations, * @dev callbackGasLimit, numWords), * @dev see (VRFCoordinatorInterface for a description of the arguments). * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomWords method. * * @dev The randomness argument to fulfillRandomWords is a set of random words * @dev generated from your requestId and the blockHash of the request. * * @dev If your contract could have concurrent requests open, you can use the * @dev requestId returned from requestRandomWords to track which response is associated * @dev with which randomness request. * @dev See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously. * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. It is for this reason that * @dev that you can signal to an oracle you'd like them to wait longer before * @dev responding to the request (however this is not enforced in the contract * @dev and so remains effective only in the case of unmodified oracle software). */ abstract contract VRFConsumerBaseV2 { error OnlyCoordinatorCanFulfill(address have, address want); address private immutable vrfCoordinator; /** * @param _vrfCoordinator address of VRFCoordinator contract */ constructor(address _vrfCoordinator) { vrfCoordinator = _vrfCoordinator; } /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBaseV2 expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomWords the VRF output expanded to the requested number of words */ function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal virtual; // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomWords(uint256 requestId, uint256[] memory randomWords) external { if (msg.sender != vrfCoordinator) { revert OnlyCoordinatorCanFulfill(msg.sender, vrfCoordinator); } fulfillRandomWords(requestId, randomWords); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface VRFCoordinatorV2Interface { /** * @notice Get configuration relevant for making requests * @return minimumRequestConfirmations global min for request confirmations * @return maxGasLimit global max for request gas limit * @return s_provingKeyHashes list of registered key hashes */ function getRequestConfig() external view returns ( uint16, uint32, bytes32[] memory ); /** * @notice Request a set of random words. * @param keyHash - Corresponds to a particular oracle job which uses * that key for generating the VRF proof. Different keyHash's have different gas price * ceilings, so you can select a specific one to bound your maximum per request cost. * @param subId - The ID of the VRF subscription. Must be funded * with the minimum subscription balance required for the selected keyHash. * @param minimumRequestConfirmations - How many blocks you'd like the * oracle to wait before responding to the request. See SECURITY CONSIDERATIONS * for why you may want to request more. The acceptable range is * [minimumRequestBlockConfirmations, 200]. * @param callbackGasLimit - How much gas you'd like to receive in your * fulfillRandomWords callback. Note that gasleft() inside fulfillRandomWords * may be slightly less than this amount because of gas used calling the function * (argument decoding etc.), so you may need to request slightly more than you expect * to have inside fulfillRandomWords. The acceptable range is * [0, maxGasLimit] * @param numWords - The number of uint256 random values you'd like to receive * in your fulfillRandomWords callback. Note these numbers are expanded in a * secure way by the VRFCoordinator from a single random value supplied by the oracle. * @return requestId - A unique identifier of the request. Can be used to match * a request to a response in fulfillRandomWords. */ function requestRandomWords( bytes32 keyHash, uint64 subId, uint16 minimumRequestConfirmations, uint32 callbackGasLimit, uint32 numWords ) external returns (uint256 requestId); /** * @notice Create a VRF subscription. * @return subId - A unique subscription id. * @dev You can manage the consumer set dynamically with addConsumer/removeConsumer. * @dev Note to fund the subscription, use transferAndCall. For example * @dev LINKTOKEN.transferAndCall( * @dev address(COORDINATOR), * @dev amount, * @dev abi.encode(subId)); */ function createSubscription() external returns (uint64 subId); /** * @notice Get a VRF subscription. * @param subId - ID of the subscription * @return balance - LINK balance of the subscription in juels. * @return reqCount - number of requests for this subscription, determines fee tier. * @return owner - owner of the subscription. * @return consumers - list of consumer address which are able to use this subscription. */ function getSubscription(uint64 subId) external view returns ( uint96 balance, uint64 reqCount, address owner, address[] memory consumers ); /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @param newOwner - proposed new owner of the subscription */ function requestSubscriptionOwnerTransfer(uint64 subId, address newOwner) external; /** * @notice Request subscription owner transfer. * @param subId - ID of the subscription * @dev will revert if original owner of subId has * not requested that msg.sender become the new owner. */ function acceptSubscriptionOwnerTransfer(uint64 subId) external; /** * @notice Add a consumer to a VRF subscription. * @param subId - ID of the subscription * @param consumer - New consumer which can use the subscription */ function addConsumer(uint64 subId, address consumer) external; /** * @notice Remove a consumer from a VRF subscription. * @param subId - ID of the subscription * @param consumer - Consumer to remove from the subscription */ function removeConsumer(uint64 subId, address consumer) external; /** * @notice Cancel a subscription * @param subId - ID of the subscription * @param to - Where to send the remaining LINK to */ function cancelSubscription(uint64 subId, address to) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) 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 // 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; } }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IColonist { // struct to store each Colonist's traits struct Colonist { bool isColonist; uint8 background; uint8 body; uint8 shirt; uint8 jacket; uint8 jaw; uint8 eyes; uint8 hair; uint8 held; uint8 gen; } struct HColonist { uint8 Legendary; } function transferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function isOwner(uint256 tokenId) external view returns (address); function minted() external returns (uint16); function totalCir() external returns (uint256); function _mintColonist(address recipient, uint256 seed) external; function _mintToHonors(address recipient, uint256 seed) external; function _mintHonors(address recipient, uint8 id) external; function burn(uint256 tokenId) external; function getMaxTokens() external view returns (uint256); function getPaidTokens() external view returns (uint256); function getTokenTraitsColonist(uint256 tokenId) external view returns (Colonist memory); function getTokenTraitsHonors(uint256 tokenId) external view returns (HColonist memory); function tokenNameByIndex(uint256 index) external view returns (string memory); function hasBeenNamed(uint256 tokenId) external view returns (bool); function nameColonist(uint256 tokenId, string memory newName) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IImperialGuild { function getBalance( address account, uint256 id ) external returns(uint256); function mint( uint256 typeId, uint256 paymentId, uint16 qty, address recipient ) external; function burn( uint256 typeId, uint16 qty, address burnFrom ) external; function handlePayment(uint256 amount) external; function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) external; function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IOrbitalBlockade { function addPiratesToCrew(address account, uint16[] calldata tokenIds) external; function claimPiratesFromCrew(address account, uint16[] calldata tokenIds, bool unstake) external; function payPirateTax(uint256 amount) external; function randomPirateOwner(uint256 seed) external view returns (address); }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IPirateGames {}
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IPirates { // struct to store each Colonist's traits struct Pirate { bool isPirate; uint8 sky; uint8 cockpit; uint8 base; uint8 engine; uint8 nose; uint8 wing; uint8 weapon1; uint8 weapon2; uint8 rank; } struct HPirates { uint8 Legendary; } function transferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId ) external; function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) external; function minted() external returns (uint16); function piratesMinted() external returns (uint16); function isOwner(uint256 tokenId) external view returns (address); function _mintPirate(address recipient, uint256 seed) external; function burn(uint256 tokenId) external; function getTokenTraitsPirate(uint256 tokenId) external view returns (Pirate memory); function getTokenTraitsHonors(uint256 tokenId) external view returns (HPirates memory); function tokenNameByIndex(uint256 index) external view returns (string memory); function isHonors(uint256 tokenId) external view returns (bool); function updateOriginAccess(uint16[] memory tokenIds) external; function getTokenWriteBlock(uint256 tokenId) external view returns(uint64); function hasBeenNamed(uint256 tokenId) external view returns (bool); function namePirate(uint256 tokenId, string memory newName) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IPytheas { function addColonistToPytheas(address account, uint16[] calldata tokenIds) external; function claimColonistFromPytheas(address account, uint16[] calldata tokenIds, bool unstake) external; function getColonistMined(address account, uint16 tokenId) external returns (uint256); function handleJoinPirates(address addr, uint16 tokenId) external; function payUp( uint16 tokenId, uint256 amtMined, address addr ) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface IRAW { function updateOriginAccess(address user) external; function balanceOf( address account, uint256 id ) external returns(uint256); function mint( uint256 typeId, uint256 qty, address recipient ) external; function burn( uint256 typeId, uint256 qty, address burnFrom ) external; function updateMintBurns( uint256 typeId, uint256 mintQty, uint256 burnQty ) external; function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) external; function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) external; }
// SPDX-License-Identifier: MIT LICENSE pragma solidity ^0.8.0; interface ITPirates { function tokenURI(uint256 tokenId) external view returns (string memory); }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "details": { "constantOptimizer": true, "cse": true, "deduplicate": true, "inliner": true, "jumpdestRemover": true, "orderLiterals": true, "peephole": true, "yul": true, "yulDetails": { "optimizerSteps": "dhfoDgvulfnTUtnIf", "stackAllocation": true } }, "runs": 2000 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"have","type":"address"},{"internalType":"address","name":"want","type":"address"}],"name":"OnlyCoordinatorCanFulfill","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"MintCommitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint16[]","name":"tokenId","type":"uint16[]"}],"name":"MintRevealed","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":[],"name":"OnosiaLiquorId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"adminRequestRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"aliases","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowCommits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auth","outputs":[{"internalType":"address","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":[],"name":"colonistNFT","outputs":[{"internalType":"contract IColonist","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"deleteCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"emergencyExtraction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"forceRevealCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrent","outputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getPendingMint","outputs":[{"components":[{"internalType":"bool","name":"stake","type":"bool"},{"internalType":"uint16","name":"tokenId","type":"uint16"}],"internalType":"struct PirateGames.MintCommit","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pirates","type":"uint256"},{"internalType":"uint256","name":"circulation","type":"uint256"}],"name":"getRatioChance","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"hasMintPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imperialGuild","outputs":[{"internalType":"contract IImperialGuild","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"tokenId","type":"uint16"},{"internalType":"bool","name":"stake","type":"bool"}],"name":"mintCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"numWords","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orbital","outputs":[{"internalType":"contract IOrbitalBlockade","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateNFT","outputs":[{"internalType":"contract IPirates","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pytheas","outputs":[{"internalType":"contract IPytheas","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raw","outputs":[{"internalType":"contract IRAW","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"randomWords","type":"uint256[]"}],"name":"rawFulfillRandomWords","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"removeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"commitId","type":"uint16"}],"name":"resetCommitId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_toggleCounter","type":"uint16"}],"name":"resetToggleCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"s_requestId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowCommits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rEON","type":"address"},{"internalType":"address","name":"_pirateNFT","type":"address"},{"internalType":"address","name":"_colonistNFT","type":"address"},{"internalType":"address","name":"_pytheas","type":"address"},{"internalType":"address","name":"_orbital","type":"address"},{"internalType":"address","name":"_imperialGuild","type":"address"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"typeId","type":"uint256"}],"name":"setOnosiaLiquorId","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":"uint16","name":"_toggleLimit","type":"uint16"}],"name":"setToggleLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_keyHash","type":"bytes32"},{"internalType":"uint64","name":"_s_subscriptionId","type":"uint64"},{"internalType":"uint32","name":"_callbackGasLimit","type":"uint32"},{"internalType":"uint16","name":"_requestConfirmations","type":"uint16"}],"name":"setVRFsub","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040526012805464ff0000ffff60201b1916640100000000179055601b80546001600160a01b03191673271682deb8c4e0901d1a1550ad2e64d568e69909179055601d805463ffffffff60301b191666010000000000001790553480156200006857600080fd5b50601b80546001600160a01b031660808190526000805460ff199081168255601980546001600160a01b03199081169094179055602080543394168417815560128054600160481b600160e81b03191669010000000000000000008602179055928252600f8352604080832080548316600190811790915530845281842080549093168117909255805180820190915293845260e69284019290925262000114929101906002620002b0565b506040805180820190915260018152600060208201526200013a906007906002620002b0565b50604080518082019091526033815260cc60208201526200015f9060029081620002b0565b5060408051808201909152600181526000602082015262000185906008906002620002b0565b5060408051808201909152605a815260af6020820152620001ab906003906002620002b0565b50604080518082019091526001815260006020820152620001d1906009906002620002b0565b5060408051808201909152609b815260846020820152620001f7906004906002620002b0565b506040805180820190915260018152600060208201526200021d90600a906002620002b0565b506040805180820190915260c88152603c602082015262000243906005906002620002b0565b506040805180820190915260018152600060208201526200026990600b906002620002b0565b50604080516020810190915260ff815262000289906006906001620002b0565b50604080516020810190915260008152620002a990600c906001620002b0565b5062000374565b82805482825590600052602060002090601f016020900481019282156200034b5791602002820160005b838211156200031a57835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302620002da565b8015620003495782816101000a81549060ff02191690556001016020816000010492830192600103026200031a565b505b50620003599291506200035d565b5090565b5b808211156200035957600081556001016200035e565b608051612e6962000397600039600081816106ce01526106f60152612e696000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c806377f4f37c11610160578063de4a69d5116100d8578063ecb206711161008c578063f4c1fc5f11610071578063f4c1fc5f14610571578063f62b1c0d14610579578063ff9e23d01461058c57600080fd5b8063ecb206711461054b578063f49bb4921461055e57600080fd5b8063df34157d116100bd578063df34157d1461051c578063e89e106a1461052f578063ebcf25301461053857600080fd5b8063de4a69d5146104e2578063de9375f2146104f557600080fd5b8063be0e176a1161012f578063c2ba474411610114578063c2ba47441461048d578063ce4f276c146104a0578063ce8e61de146104cf57600080fd5b8063be0e176a14610472578063c096a6321461047a57600080fd5b806377f4f37c146104125780637ccfd7fc1461042557806393de58231461044c578063b0c0bcf61461045f57600080fd5b80633df6cc4f116101f35780634e9510f1116101c25780635d0b16ae116101a75780635d0b16ae146103d9578063630a679f146103ec57806370480275146103ff57600080fd5b80634e9510f1146103bb5780635c975abb146103ce57600080fd5b80633df6cc4f14610359578063497f71721461036c578063498c626a1461037f5780634e070971146103a557600080fd5b806322ba04321161024a57806333df4b2c1161022f57806333df4b2c1461030657806335a5cfcb14610326578063368383911461034657600080fd5b806322ba0432146102e05780632463a55a146102f357600080fd5b8063165272311461027c57806316c38b3c146102a55780631785f53c146102ba5780631fe543e3146102cd575b600080fd5b60145461028f906001600160a01b031681565b60405161029c919061220d565b60405180910390f35b6102b86102b3366004612235565b6105ac565b005b6102b86102c836600461227b565b610684565b6102b86102db3660046123d0565b6106c3565b60175461028f906001600160a01b031681565b6102b8610301366004612428565b610757565b6103196103143660046124b2565b6107fc565b60405161029c91906124ee565b601254601e5460405161029c92640100000000900461ffff16919061250c565b6103196103543660046124b2565b610842565b6102b8610367366004612235565b610852565b6102b861037a36600461227b565b6108ae565b6012546103989068010000000000000000900460ff1681565b60405161029c919061252f565b6103ae600d5481565b60405161029c919061253d565b6102b86103c936600461254b565b61097b565b60005460ff16610398565b6102b86103e7366004612582565b610a1c565b6102b86103fa3660046125a3565b610a5a565b6102b861040d36600461227b565b61104a565b60185461028f906001600160a01b031681565b601d5461043f906601000000000000900463ffffffff1681565b60405161029c91906125e2565b60135461028f906001600160a01b031681565b6102b861046d366004612622565b61108c565b6102b861114b565b60155461028f906001600160a01b031681565b61039861049b36600461227b565b611257565b6103986104ae36600461227b565b6001600160a01b031660009081526011602052604090205461ffff16151590565b6102b86104dd366004612582565b6112ea565b6103196104f03660046124b2565b611345565b60125461050f90600160481b90046001600160a01b031681565b60405161029c919061268f565b6102b861052a366004612582565b61140a565b6103ae601f5481565b6102b861054636600461269d565b611440565b60165461028f906001600160a01b031681565b6102b861056c36600461227b565b611463565b6102b86114b7565b6102b861058736600461269d565b611529565b61059f61059a36600461227b565b611586565b60405161029c91906126e2565b6015546001600160a01b0316158015906105d057506016546001600160a01b031615155b80156105e657506017546001600160a01b031615155b80156105fc57506013546001600160a01b031615155b801561061257506014546001600160a01b031615155b801561062857506018546001600160a01b031615155b61064d5760405162461bcd60e51b815260040161064490612724565b60405180910390fd5b601254600160481b90046001600160a01b0316331461066b57600080fd5b801561067c57610679611625565b50565b610679611694565b601254600160481b90046001600160a01b031633146106a257600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461074957337f00000000000000000000000000000000000000000000000000000000000000006040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610644929190612734565b61075382826116e7565b5050565b601254600160481b90046001600160a01b0316331461077557600080fd5b601580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0398891617909155601680548216968816969096179095556017805486169487169490941790935560138054851692861692909217909155601480548416918516919091179055601880549092169216919091179055565b6001826006811061080c57600080fd5b01818154811061081b57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6007826006811061080c57600080fd5b601254600160481b90046001600160a01b0316331461087057600080fd5b6012805491151568010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055565b601254600160481b90046001600160a01b03163314806108dd5750336000908152600f602052604090205460ff165b6108f95760405162461bcd60e51b815260040161064490612781565b6001600160a01b03811660009081526011602052604090205461ffff16806109335760405162461bcd60e51b8152600401610644906127c3565b6001600160a01b03909116600081815260106020908152604080832061ffff9095168352938152838220805462ffffff19169055918152601190915220805461ffff19169055565b601254600160481b90046001600160a01b0316331461099957600080fd5b6017546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd906109e6903090869086906004016127d3565b600060405180830381600087803b158015610a0057600080fd5b505af1158015610a14573d6000803e3d6000fd5b505050505050565b601254600160481b90046001600160a01b03163314610a3a57600080fd5b6012805461ffff909216620100000263ffff000019909216919091179055565b60005460ff1615610a7d5760405162461bcd60e51b81526004016106449061282d565b336000818152600f6020526040902054813b919060ff1680610aa757503332148015610aa7575081155b610ac35760405162461bcd60e51b81526004016106449061286f565b60125468010000000000000000900460ff16610af15760405162461bcd60e51b8152600401610644906128b1565b3360009081526011602052604090205461ffff1615610b225760405162461bcd60e51b8152600401610644906128f3565b601654604080517f046b07aa00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163046b07aa916004808301926020929190829003018187875af1158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa919061290e565b60125490915061177090610bcc906601000000000000900461ffff1683612945565b610bd7906001612945565b61ffff161115610bf95760405162461bcd60e51b8152600401610644906129a0565b601754604080517f4f02c42000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634f02c420916004808301926020929190829003018187875af1158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c81919061290e565b61ffff1690506000601760009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0091906129bb565b90506000610d0e838361171f565b6015546040517f749388c40000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063749388c490610d5d90600190859033906004016129f1565b600060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b50506015546040517f229a3fdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063229a3fdd9150610dd890339060040161268f565b600060405180830381600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b50506017546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506323b872dd9150610e5790339030908d90600401612a32565b600060405180830381600087803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b50506040805180820182528a1515815261ffff808d166020808401918252336000818152601083528681206012805464010000000090819004881684529185528883209751885496518816610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff9115159190911662ffffff19909716969096179590951790965583549181526011909252949020805461ffff191693909404821692909217909255805460019450909250600691610f53918591660100000000000090910416612945565b92506101000a81548161ffff021916908361ffff1602179055506001601260028282829054906101000a900461ffff16610f8d9190612945565b825461ffff9182166101009390930a928302928202191691909117909155601254620100008104821691161415905061100f57610fc861117a565b6012805463ffff0000191680825560019190600490610ff4908490640100000000900461ffff16612945565b92506101000a81548161ffff021916908361ffff1602179055505b60405161ffff89169033907faf67cde32876f45d0ccb318d8ddb3e26990a5bfce179cec382204ceddf93143590600090a35050505050505050565b601254600160481b90046001600160a01b0316331461106857600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b601254600160481b90046001600160a01b031633146110aa57600080fd5b601c939093556019805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff90931692909217909155601d805461ffff909316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931663ffffffff90921691909117919091179055565b336000908152600f602052604090205460ff1661117a5760405162461bcd60e51b815260040161064490612a5a565b601954601c54601d546040517f5d3b1d300000000000000000000000000000000000000000000000000000000081526001600160a01b03841693635d3b1d309361120f9390927401000000000000000000000000000000000000000090920467ffffffffffffffff1691640100000000820461ffff169163ffffffff8082169266010000000000009092041690600401612acb565b6020604051808303816000875af115801561122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125291906129bb565b601f55565b6001600160a01b038116600090815260116020526040812054601e5461ffff90911690600114156112a55750506001600160a01b031660009081526011602052604090205461ffff16151590565b6001600160a01b03831660009081526011602052604090205461ffff16158015906112e35750601e5461ffff8216906112e090600190612b17565b10155b9392505050565b601254600160481b90046001600160a01b0316331461130857600080fd5b6012805461ffff909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff909216919091179055565b6000808261135585612710612b32565b61135f9190612b85565b905060648111611373576000915050611404565b61012c8111158015611386575060648110155b15611395576001915050611404565b6101f481111580156113a9575061012c8110155b156113b8576002915050611404565b61032081111580156113cc57506101f48110155b156113db576003915050611404565b6103e781111580156113ef57506103208110155b156113fe576004915050611404565b60059150505b92915050565b601254600160481b90046001600160a01b0316331461142857600080fd5b6012805461ffff191661ffff92909216919091179055565b601254600160481b90046001600160a01b0316331461145e57600080fd5b600d55565b601254600160481b90046001600160a01b03163314806114925750336000908152600f602052604090205460ff165b6114ae5760405162461bcd60e51b815260040161064490612781565b610679816117eb565b60005460ff16156114da5760405162461bcd60e51b81526004016106449061282d565b336000818152600f6020526040902054813b919060ff168061150457503332148015611504575081155b6115205760405162461bcd60e51b81526004016106449061286f565b610753336117eb565b601254600160481b90046001600160a01b0316331461154757600080fd5b6012805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b60408051808201909152600080825260208201526001600160a01b03821660009081526011602052604090205461ffff166115d35760405162461bcd60e51b815260040161064490612bcb565b506001600160a01b03166000908152601060209081526040808320601183528184205461ffff90811685529083529281902081518083019092525460ff81161515825261010090049092169082015290565b60005460ff16156116485760405162461bcd60e51b81526004016106449061282d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861167d3390565b60405161168a919061268f565b60405180910390a1565b60005460ff166116b65760405162461bcd60e51b815260040161064490612c0d565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361167d565b601e816000815181106116fc576116fc612c1d565b602090810291909101810151825460018101845560009384529190922001555050565b6000601861172e836008612b32565b6117389190612b85565b83116117475750610fa0611404565b601861175483600c612b32565b61175e9190612b85565b831161176d5750613e80611404565b601861177a836010612b32565b6117849190612b85565b8311611793575061bb80611404565b60186117a0836014612b32565b6117aa9190612b85565b83116117ba57506201de84611404565b60186117c7836016612b32565b6117d19190612b85565b83116117e157506203d090611404565b50600e5492915050565b6001600160a01b03811660009081526011602052604090205461ffff16601e5461ffff8216111561182e5760405162461bcd60e51b815260040161064490612c65565b6001600160a01b038216600090815260106020908152604080832061ffff80861685529083529281902081518083019092525460ff811615158252610100900483169181019190915260128054919260019260069161189a918591660100000000000090910416612c75565b92506101000a81548161ffff021916908361ffff1602179055506000816020015190506000601660009054906101000a90046001600160a01b03166001600160a01b031663046b07aa6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611914573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611938919061290e565b90506000601e8561ffff168154811061195357611953612c1d565b6000918252602080832090910154601754604080517fa70e847b00000000000000000000000000000000000000000000000000000000815290519295506001600160a01b039091169263a70e847b92600480840193829003018187875af11580156119c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e691906129bb565b905060006119f88461ffff1683611345565b90508288604051602001611a0d929190612c83565b6040516020818303038152906040528051906020012060001c92506000611a348483612009565b905060ff8116611ac2576017546040517f42842e0e0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906342842e0e90611a8b9030908d908b90600401612a32565b600060405180830381600087803b158015611aa557600080fd5b505af1158015611ab9573d6000803e3d6000fd5b50505050611fb7565b6017546040517f42966c680000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906342966c6890611b0b908990600401612c91565b600060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b506000925060019150611b499050565b604051908082528060200260200182016040528015611b72578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905086611ba381612c9f565b9750506000611bb187612029565b90508b6001600160a01b0316816001600160a01b031614158015611c5c57506000601860009054906101000a90046001600160a01b03166001600160a01b0316632b04e8408e600d546040518363ffffffff1660e01b8152600401611c17929190612cc1565b6020604051808303816000875af1158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a91906129bb565b115b15611ced578660011660011415611ced57601860009054906101000a90046001600160a01b03166001600160a01b031663f242432a8d83600d5460016040518563ffffffff1660e01b8152600401611cb79493929190612ccf565b600060405180830381600087803b158015611cd157600080fd5b505af1158015611ce5573d6000803e3d6000fd5b505050508b90505b8783600081518110611d0157611d01612c1d565b61ffff9092166020928302919091019091015289511580611d3457508b6001600160a01b0316816001600160a01b031614155b15611dbb576016546040517f70c124cc0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906370c124cc90611d849084908b90600401612cc1565b600060405180830381600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b50505050611e67565b6016546014546040517f70c124cc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926370c124cc92611e0a929116908b90600401612cc1565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050508782600081518110611e5057611e50612c1d565b602002602001019061ffff16908161ffff16815250505b6016546040517f35ca838b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335ca838b90611eb0908690600401612d71565b600060405180830381600087803b158015611eca57600080fd5b505af1158015611ede573d6000803e3d6000fd5b50505050896000015115611f6a576014546040517fa36410330000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a364103390611f37908f908690600401612d82565b600060405180830381600087803b158015611f5157600080fd5b505af1158015611f65573d6000803e3d6000fd5b505050505b82604051611f789190612dd8565b604051908190038120906001600160a01b038e16907fbd00fa2e20904db8e6e01199e3e017a99cf325a47fde37b3b8af402d0a86402b90600090a35050505b5050506001600160a01b03909516600081815260106020908152604080832061ffff9098168352968152868220805462ffffff19169055918152601190915293909320805461ffff1916905550505050565b60109190911c9060008061202161ffff8516846120ed565b949350505050565b600061203a600a60f584901c612de2565b15612046575033919050565b6014546040517f5163cfdd0000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690635163cfdd9061209490609087901c9060040161253d565b602060405180830381865afa1580156120b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d59190612e05565b90506001600160a01b03811661140457503392915050565b60008060018360ff166006811061210657612106612c1d565b01546121129085612e26565b905060018360ff166006811061212a5761212a612c1d565b018160ff168154811061213f5761213f612c1d565b60009182526020918290209181049091015460ff601f9092166101000a900416600885901c1015612171579050611404565b60078360ff166006811061218757612187612c1d565b018160ff168154811061219c5761219c612c1d565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b60006114046001600160a01b0383166121dc565b90565b6001600160a01b031690565b6000611404826121c5565b6000611404826121e8565b612207816121f3565b82525050565b6020810161140482846121fe565b8015155b811461067957600080fd5b80356114048161221b565b60006020828403121561224a5761224a600080fd5b6000612021848461222a565b60006001600160a01b038216611404565b61221f81612256565b803561140481612267565b60006020828403121561229057612290600080fd5b60006120218484612270565b8061221f565b80356114048161229c565b634e487b7160e01b600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715612307576123076122ad565b6040525050565b600061231960405190565b905061232582826122c3565b919050565b600067ffffffffffffffff821115612344576123446122ad565b5060209081020190565b600061236161235c8461232a565b61230e565b8381529050602080820190840283018581111561238057612380600080fd5b835b818110156123a25761239487826122a2565b835260209283019201612382565b5050509392505050565b600082601f8301126123c0576123c0600080fd5b813561202184826020860161234e565b600080604083850312156123e6576123e6600080fd5b60006123f285856122a2565b925050602083013567ffffffffffffffff81111561241257612412600080fd5b61241e858286016123ac565b9150509250929050565b60008060008060008060c0878903121561244457612444600080fd5b60006124508989612270565b965050602061246189828a01612270565b955050604061247289828a01612270565b945050606061248389828a01612270565b935050608061249489828a01612270565b92505060a06124a589828a01612270565b9150509295509295509295565b600080604083850312156124c8576124c8600080fd5b60006124d485856122a2565b925050602061241e858286016122a2565b60ff8116612207565b6020810161140482846124e5565b61ffff8116612207565b80612207565b6040810161251a82856124fc565b6112e36020830184612506565b801515612207565b602081016114048284612527565b602081016114048284612506565b6000806040838503121561256157612561600080fd5b60006124d48585612270565b61ffff811661221f565b80356114048161256d565b60006020828403121561259757612597600080fd5b60006120218484612577565b600080604083850312156125b9576125b9600080fd5b60006125c58585612577565b925050602061241e8582860161222a565b63ffffffff8116612207565b6020810161140482846125d6565b67ffffffffffffffff811661221f565b8035611404816125f0565b63ffffffff811661221f565b80356114048161260b565b6000806000806080858703121561263b5761263b600080fd5b600061264787876122a2565b945050602061265887828801612600565b935050604061266987828801612617565b925050606061267a87828801612577565b91505092959194509250565b61220781612256565b602081016114048284612686565b6000602082840312156126b2576126b2600080fd5b600061202184846122a2565b80516126ca8382612527565b5060208101516126dd60208401826124fc565b505050565b6040810161140482846126be565b60118152602081017f436f6e747261637473206e6f7420736574000000000000000000000000000000815290505b60200190565b60208082528101611404816126f0565b604081016127428285612686565b6112e36020830184612686565b60198152602081017f4f6e6c792061646d696e732063616e2063616c6c2074686973000000000000008152905061271e565b602080825281016114048161274f565b60118152602081017f4e6f2070656e64696e6720636f6d6d69740000000000000000000000000000008152905061271e565b6020808252810161140481612791565b606081016127e18286612686565b6127ee6020830185612686565b6120216040830184612506565b60108152602081017f5061757361626c653a20706175736564000000000000000000000000000000008152905061271e565b60208082528101611404816127fb565b60178152602081017f796f7527726520747279696e6720746f206368656174210000000000000000008152905061271e565b602080825281016114048161283d565b60198152602081017f616464696e6720636f6d6d69747320646973616c6c6f776564000000000000008152905061271e565b602080825281016114048161287f565b601a8152602081017f416c726561647920686176652070656e64696e67206d696e74730000000000008152905061271e565b60208082528101611404816128c1565b80516114048161256d565b60006020828403121561292357612923600080fd5b60006120218484612903565b634e487b7160e01b600052601160045260246000fd5b61ffff8116905061ffff8216915060008261ffff038211156129695761296961292f565b500190565b60118152602081017f416c6c20746f6b656e73206d696e7465640000000000000000000000000000008152905061271e565b602080825281016114048161296e565b80516114048161229c565b6000602082840312156129d0576129d0600080fd5b600061202184846129b0565b60006114046121d98381565b612207816129dc565b606081016129ff82866129e8565b612a0c6020830185612506565b6120216040830184612686565b60006114046121d961ffff841681565b61220781612a19565b60608101612a408286612686565b612a4d6020830185612686565b6120216040830184612a29565b6020808252810161140481602281527f6f6e6c792061646d696e732063616e20726571756573742072616e646f6d6e6560208201527f7373000000000000000000000000000000000000000000000000000000000000604082015260600190565b67ffffffffffffffff8116612207565b60a08101612ad98288612506565b612ae66020830187612abb565b612af360408301866124fc565b612b0060608301856125d6565b612b0d60808301846125d6565b9695505050505050565b815b9150600082821015612b2d57612b2d61292f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b6a57612b6a61292f565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612b9457612b94612b6f565b500490565b60128152602081017f6e6f2070656e64696e6720636f6d6d69747300000000000000000000000000008152905061271e565b6020808252810161140481612b99565b60148152602081017f5061757361626c653a206e6f74207061757365640000000000000000000000008152905061271e565b6020808252810161140481612bdb565b634e487b7160e01b600052603260045260246000fd5b60138152602081017f52616e646f6d2073656564206e6f7420736574000000000000000000000000008152905061271e565b6020808252810161140481612c33565b61ffff908116908216612b19565b604081016127428285612506565b602081016114048284612a29565b61ffff81169050600061ffff821415612cba57612cba61292f565b5060010190565b6040810161251a8285612686565b60a08101612cdd8287612686565b612cea6020830186612686565b612cf76040830185612506565b612d0460608301846129e8565b81810360808301526000815260208101612b0d565b612d2382826124fc565b5060200190565b6000612d34825190565b808452602093840193830160005b82811015612d67578151612d568782612d19565b965050602082019150600101612d42565b5093949350505050565b602080825281016112e38184612d2a565b60408101612d908285612686565b81810360208301526120218184612d2a565b6000612dac825190565b6020830160005b82811015612d67578151612dc78782612d19565b965050602082019150600101612db3565b6114048183612da2565b815b9150600082612df557612df5612b6f565b500690565b805161140481612267565b600060208284031215612e1a57612e1a600080fd5b60006120218484612dfa565b60ff908116908216612de456fea2646970667358221220995a6120304533a1cde38e5ac240bbb57750023ab0250cd1a6974b26f7e85f9d64736f6c634300080b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102775760003560e01c806377f4f37c11610160578063de4a69d5116100d8578063ecb206711161008c578063f4c1fc5f11610071578063f4c1fc5f14610571578063f62b1c0d14610579578063ff9e23d01461058c57600080fd5b8063ecb206711461054b578063f49bb4921461055e57600080fd5b8063df34157d116100bd578063df34157d1461051c578063e89e106a1461052f578063ebcf25301461053857600080fd5b8063de4a69d5146104e2578063de9375f2146104f557600080fd5b8063be0e176a1161012f578063c2ba474411610114578063c2ba47441461048d578063ce4f276c146104a0578063ce8e61de146104cf57600080fd5b8063be0e176a14610472578063c096a6321461047a57600080fd5b806377f4f37c146104125780637ccfd7fc1461042557806393de58231461044c578063b0c0bcf61461045f57600080fd5b80633df6cc4f116101f35780634e9510f1116101c25780635d0b16ae116101a75780635d0b16ae146103d9578063630a679f146103ec57806370480275146103ff57600080fd5b80634e9510f1146103bb5780635c975abb146103ce57600080fd5b80633df6cc4f14610359578063497f71721461036c578063498c626a1461037f5780634e070971146103a557600080fd5b806322ba04321161024a57806333df4b2c1161022f57806333df4b2c1461030657806335a5cfcb14610326578063368383911461034657600080fd5b806322ba0432146102e05780632463a55a146102f357600080fd5b8063165272311461027c57806316c38b3c146102a55780631785f53c146102ba5780631fe543e3146102cd575b600080fd5b60145461028f906001600160a01b031681565b60405161029c919061220d565b60405180910390f35b6102b86102b3366004612235565b6105ac565b005b6102b86102c836600461227b565b610684565b6102b86102db3660046123d0565b6106c3565b60175461028f906001600160a01b031681565b6102b8610301366004612428565b610757565b6103196103143660046124b2565b6107fc565b60405161029c91906124ee565b601254601e5460405161029c92640100000000900461ffff16919061250c565b6103196103543660046124b2565b610842565b6102b8610367366004612235565b610852565b6102b861037a36600461227b565b6108ae565b6012546103989068010000000000000000900460ff1681565b60405161029c919061252f565b6103ae600d5481565b60405161029c919061253d565b6102b86103c936600461254b565b61097b565b60005460ff16610398565b6102b86103e7366004612582565b610a1c565b6102b86103fa3660046125a3565b610a5a565b6102b861040d36600461227b565b61104a565b60185461028f906001600160a01b031681565b601d5461043f906601000000000000900463ffffffff1681565b60405161029c91906125e2565b60135461028f906001600160a01b031681565b6102b861046d366004612622565b61108c565b6102b861114b565b60155461028f906001600160a01b031681565b61039861049b36600461227b565b611257565b6103986104ae36600461227b565b6001600160a01b031660009081526011602052604090205461ffff16151590565b6102b86104dd366004612582565b6112ea565b6103196104f03660046124b2565b611345565b60125461050f90600160481b90046001600160a01b031681565b60405161029c919061268f565b6102b861052a366004612582565b61140a565b6103ae601f5481565b6102b861054636600461269d565b611440565b60165461028f906001600160a01b031681565b6102b861056c36600461227b565b611463565b6102b86114b7565b6102b861058736600461269d565b611529565b61059f61059a36600461227b565b611586565b60405161029c91906126e2565b6015546001600160a01b0316158015906105d057506016546001600160a01b031615155b80156105e657506017546001600160a01b031615155b80156105fc57506013546001600160a01b031615155b801561061257506014546001600160a01b031615155b801561062857506018546001600160a01b031615155b61064d5760405162461bcd60e51b815260040161064490612724565b60405180910390fd5b601254600160481b90046001600160a01b0316331461066b57600080fd5b801561067c57610679611625565b50565b610679611694565b601254600160481b90046001600160a01b031633146106a257600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19169055565b336001600160a01b037f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e69909161461074957337f000000000000000000000000271682deb8c4e0901d1a1550ad2e64d568e699096040517f1cf993f4000000000000000000000000000000000000000000000000000000008152600401610644929190612734565b61075382826116e7565b5050565b601254600160481b90046001600160a01b0316331461077557600080fd5b601580547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0398891617909155601680548216968816969096179095556017805486169487169490941790935560138054851692861692909217909155601480548416918516919091179055601880549092169216919091179055565b6001826006811061080c57600080fd5b01818154811061081b57600080fd5b9060005260206000209060209182820401919006915091509054906101000a900460ff1681565b6007826006811061080c57600080fd5b601254600160481b90046001600160a01b0316331461087057600080fd5b6012805491151568010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055565b601254600160481b90046001600160a01b03163314806108dd5750336000908152600f602052604090205460ff165b6108f95760405162461bcd60e51b815260040161064490612781565b6001600160a01b03811660009081526011602052604090205461ffff16806109335760405162461bcd60e51b8152600401610644906127c3565b6001600160a01b03909116600081815260106020908152604080832061ffff9095168352938152838220805462ffffff19169055918152601190915220805461ffff19169055565b601254600160481b90046001600160a01b0316331461099957600080fd5b6017546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd906109e6903090869086906004016127d3565b600060405180830381600087803b158015610a0057600080fd5b505af1158015610a14573d6000803e3d6000fd5b505050505050565b601254600160481b90046001600160a01b03163314610a3a57600080fd5b6012805461ffff909216620100000263ffff000019909216919091179055565b60005460ff1615610a7d5760405162461bcd60e51b81526004016106449061282d565b336000818152600f6020526040902054813b919060ff1680610aa757503332148015610aa7575081155b610ac35760405162461bcd60e51b81526004016106449061286f565b60125468010000000000000000900460ff16610af15760405162461bcd60e51b8152600401610644906128b1565b3360009081526011602052604090205461ffff1615610b225760405162461bcd60e51b8152600401610644906128f3565b601654604080517f046b07aa00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163046b07aa916004808301926020929190829003018187875af1158015610b86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610baa919061290e565b60125490915061177090610bcc906601000000000000900461ffff1683612945565b610bd7906001612945565b61ffff161115610bf95760405162461bcd60e51b8152600401610644906129a0565b601754604080517f4f02c42000000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691634f02c420916004808301926020929190829003018187875af1158015610c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c81919061290e565b61ffff1690506000601760009054906101000a90046001600160a01b03166001600160a01b0316636abcded16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0091906129bb565b90506000610d0e838361171f565b6015546040517f749388c40000000000000000000000000000000000000000000000000000000081529192506001600160a01b03169063749388c490610d5d90600190859033906004016129f1565b600060405180830381600087803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b50506015546040517f229a3fdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063229a3fdd9150610dd890339060040161268f565b600060405180830381600087803b158015610df257600080fd5b505af1158015610e06573d6000803e3d6000fd5b50506017546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911692506323b872dd9150610e5790339030908d90600401612a32565b600060405180830381600087803b158015610e7157600080fd5b505af1158015610e85573d6000803e3d6000fd5b50506040805180820182528a1515815261ffff808d166020808401918252336000818152601083528681206012805464010000000090819004881684529185528883209751885496518816610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff9115159190911662ffffff19909716969096179590951790965583549181526011909252949020805461ffff191693909404821692909217909255805460019450909250600691610f53918591660100000000000090910416612945565b92506101000a81548161ffff021916908361ffff1602179055506001601260028282829054906101000a900461ffff16610f8d9190612945565b825461ffff9182166101009390930a928302928202191691909117909155601254620100008104821691161415905061100f57610fc861117a565b6012805463ffff0000191680825560019190600490610ff4908490640100000000900461ffff16612945565b92506101000a81548161ffff021916908361ffff1602179055505b60405161ffff89169033907faf67cde32876f45d0ccb318d8ddb3e26990a5bfce179cec382204ceddf93143590600090a35050505050505050565b601254600160481b90046001600160a01b0316331461106857600080fd5b6001600160a01b03166000908152600f60205260409020805460ff19166001179055565b601254600160481b90046001600160a01b031633146110aa57600080fd5b601c939093556019805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff90931692909217909155601d805461ffff909316640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090931663ffffffff90921691909117919091179055565b336000908152600f602052604090205460ff1661117a5760405162461bcd60e51b815260040161064490612a5a565b601954601c54601d546040517f5d3b1d300000000000000000000000000000000000000000000000000000000081526001600160a01b03841693635d3b1d309361120f9390927401000000000000000000000000000000000000000090920467ffffffffffffffff1691640100000000820461ffff169163ffffffff8082169266010000000000009092041690600401612acb565b6020604051808303816000875af115801561122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125291906129bb565b601f55565b6001600160a01b038116600090815260116020526040812054601e5461ffff90911690600114156112a55750506001600160a01b031660009081526011602052604090205461ffff16151590565b6001600160a01b03831660009081526011602052604090205461ffff16158015906112e35750601e5461ffff8216906112e090600190612b17565b10155b9392505050565b601254600160481b90046001600160a01b0316331461130857600080fd5b6012805461ffff909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff909216919091179055565b6000808261135585612710612b32565b61135f9190612b85565b905060648111611373576000915050611404565b61012c8111158015611386575060648110155b15611395576001915050611404565b6101f481111580156113a9575061012c8110155b156113b8576002915050611404565b61032081111580156113cc57506101f48110155b156113db576003915050611404565b6103e781111580156113ef57506103208110155b156113fe576004915050611404565b60059150505b92915050565b601254600160481b90046001600160a01b0316331461142857600080fd5b6012805461ffff191661ffff92909216919091179055565b601254600160481b90046001600160a01b0316331461145e57600080fd5b600d55565b601254600160481b90046001600160a01b03163314806114925750336000908152600f602052604090205460ff165b6114ae5760405162461bcd60e51b815260040161064490612781565b610679816117eb565b60005460ff16156114da5760405162461bcd60e51b81526004016106449061282d565b336000818152600f6020526040902054813b919060ff168061150457503332148015611504575081155b6115205760405162461bcd60e51b81526004016106449061286f565b610753336117eb565b601254600160481b90046001600160a01b0316331461154757600080fd5b6012805461ffff9092166601000000000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff909216919091179055565b60408051808201909152600080825260208201526001600160a01b03821660009081526011602052604090205461ffff166115d35760405162461bcd60e51b815260040161064490612bcb565b506001600160a01b03166000908152601060209081526040808320601183528184205461ffff90811685529083529281902081518083019092525460ff81161515825261010090049092169082015290565b60005460ff16156116485760405162461bcd60e51b81526004016106449061282d565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861167d3390565b60405161168a919061268f565b60405180910390a1565b60005460ff166116b65760405162461bcd60e51b815260040161064490612c0d565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361167d565b601e816000815181106116fc576116fc612c1d565b602090810291909101810151825460018101845560009384529190922001555050565b6000601861172e836008612b32565b6117389190612b85565b83116117475750610fa0611404565b601861175483600c612b32565b61175e9190612b85565b831161176d5750613e80611404565b601861177a836010612b32565b6117849190612b85565b8311611793575061bb80611404565b60186117a0836014612b32565b6117aa9190612b85565b83116117ba57506201de84611404565b60186117c7836016612b32565b6117d19190612b85565b83116117e157506203d090611404565b50600e5492915050565b6001600160a01b03811660009081526011602052604090205461ffff16601e5461ffff8216111561182e5760405162461bcd60e51b815260040161064490612c65565b6001600160a01b038216600090815260106020908152604080832061ffff80861685529083529281902081518083019092525460ff811615158252610100900483169181019190915260128054919260019260069161189a918591660100000000000090910416612c75565b92506101000a81548161ffff021916908361ffff1602179055506000816020015190506000601660009054906101000a90046001600160a01b03166001600160a01b031663046b07aa6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611914573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611938919061290e565b90506000601e8561ffff168154811061195357611953612c1d565b6000918252602080832090910154601754604080517fa70e847b00000000000000000000000000000000000000000000000000000000815290519295506001600160a01b039091169263a70e847b92600480840193829003018187875af11580156119c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e691906129bb565b905060006119f88461ffff1683611345565b90508288604051602001611a0d929190612c83565b6040516020818303038152906040528051906020012060001c92506000611a348483612009565b905060ff8116611ac2576017546040517f42842e0e0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906342842e0e90611a8b9030908d908b90600401612a32565b600060405180830381600087803b158015611aa557600080fd5b505af1158015611ab9573d6000803e3d6000fd5b50505050611fb7565b6017546040517f42966c680000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906342966c6890611b0b908990600401612c91565b600060405180830381600087803b158015611b2557600080fd5b505af1158015611b39573d6000803e3d6000fd5b506000925060019150611b499050565b604051908082528060200260200182016040528015611b72578160200160208202803683370190505b50604080516001808252818301909252919250600091906020808301908036833701905050905086611ba381612c9f565b9750506000611bb187612029565b90508b6001600160a01b0316816001600160a01b031614158015611c5c57506000601860009054906101000a90046001600160a01b03166001600160a01b0316632b04e8408e600d546040518363ffffffff1660e01b8152600401611c17929190612cc1565b6020604051808303816000875af1158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a91906129bb565b115b15611ced578660011660011415611ced57601860009054906101000a90046001600160a01b03166001600160a01b031663f242432a8d83600d5460016040518563ffffffff1660e01b8152600401611cb79493929190612ccf565b600060405180830381600087803b158015611cd157600080fd5b505af1158015611ce5573d6000803e3d6000fd5b505050508b90505b8783600081518110611d0157611d01612c1d565b61ffff9092166020928302919091019091015289511580611d3457508b6001600160a01b0316816001600160a01b031614155b15611dbb576016546040517f70c124cc0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906370c124cc90611d849084908b90600401612cc1565b600060405180830381600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b50505050611e67565b6016546014546040517f70c124cc0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316926370c124cc92611e0a929116908b90600401612cc1565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050508782600081518110611e5057611e50612c1d565b602002602001019061ffff16908161ffff16815250505b6016546040517f35ca838b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906335ca838b90611eb0908690600401612d71565b600060405180830381600087803b158015611eca57600080fd5b505af1158015611ede573d6000803e3d6000fd5b50505050896000015115611f6a576014546040517fa36410330000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a364103390611f37908f908690600401612d82565b600060405180830381600087803b158015611f5157600080fd5b505af1158015611f65573d6000803e3d6000fd5b505050505b82604051611f789190612dd8565b604051908190038120906001600160a01b038e16907fbd00fa2e20904db8e6e01199e3e017a99cf325a47fde37b3b8af402d0a86402b90600090a35050505b5050506001600160a01b03909516600081815260106020908152604080832061ffff9098168352968152868220805462ffffff19169055918152601190915293909320805461ffff1916905550505050565b60109190911c9060008061202161ffff8516846120ed565b949350505050565b600061203a600a60f584901c612de2565b15612046575033919050565b6014546040517f5163cfdd0000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690635163cfdd9061209490609087901c9060040161253d565b602060405180830381865afa1580156120b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d59190612e05565b90506001600160a01b03811661140457503392915050565b60008060018360ff166006811061210657612106612c1d565b01546121129085612e26565b905060018360ff166006811061212a5761212a612c1d565b018160ff168154811061213f5761213f612c1d565b60009182526020918290209181049091015460ff601f9092166101000a900416600885901c1015612171579050611404565b60078360ff166006811061218757612187612c1d565b018160ff168154811061219c5761219c612c1d565b90600052602060002090602091828204019190069054906101000a900460ff1691505092915050565b60006114046001600160a01b0383166121dc565b90565b6001600160a01b031690565b6000611404826121c5565b6000611404826121e8565b612207816121f3565b82525050565b6020810161140482846121fe565b8015155b811461067957600080fd5b80356114048161221b565b60006020828403121561224a5761224a600080fd5b6000612021848461222a565b60006001600160a01b038216611404565b61221f81612256565b803561140481612267565b60006020828403121561229057612290600080fd5b60006120218484612270565b8061221f565b80356114048161229c565b634e487b7160e01b600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715612307576123076122ad565b6040525050565b600061231960405190565b905061232582826122c3565b919050565b600067ffffffffffffffff821115612344576123446122ad565b5060209081020190565b600061236161235c8461232a565b61230e565b8381529050602080820190840283018581111561238057612380600080fd5b835b818110156123a25761239487826122a2565b835260209283019201612382565b5050509392505050565b600082601f8301126123c0576123c0600080fd5b813561202184826020860161234e565b600080604083850312156123e6576123e6600080fd5b60006123f285856122a2565b925050602083013567ffffffffffffffff81111561241257612412600080fd5b61241e858286016123ac565b9150509250929050565b60008060008060008060c0878903121561244457612444600080fd5b60006124508989612270565b965050602061246189828a01612270565b955050604061247289828a01612270565b945050606061248389828a01612270565b935050608061249489828a01612270565b92505060a06124a589828a01612270565b9150509295509295509295565b600080604083850312156124c8576124c8600080fd5b60006124d485856122a2565b925050602061241e858286016122a2565b60ff8116612207565b6020810161140482846124e5565b61ffff8116612207565b80612207565b6040810161251a82856124fc565b6112e36020830184612506565b801515612207565b602081016114048284612527565b602081016114048284612506565b6000806040838503121561256157612561600080fd5b60006124d48585612270565b61ffff811661221f565b80356114048161256d565b60006020828403121561259757612597600080fd5b60006120218484612577565b600080604083850312156125b9576125b9600080fd5b60006125c58585612577565b925050602061241e8582860161222a565b63ffffffff8116612207565b6020810161140482846125d6565b67ffffffffffffffff811661221f565b8035611404816125f0565b63ffffffff811661221f565b80356114048161260b565b6000806000806080858703121561263b5761263b600080fd5b600061264787876122a2565b945050602061265887828801612600565b935050604061266987828801612617565b925050606061267a87828801612577565b91505092959194509250565b61220781612256565b602081016114048284612686565b6000602082840312156126b2576126b2600080fd5b600061202184846122a2565b80516126ca8382612527565b5060208101516126dd60208401826124fc565b505050565b6040810161140482846126be565b60118152602081017f436f6e747261637473206e6f7420736574000000000000000000000000000000815290505b60200190565b60208082528101611404816126f0565b604081016127428285612686565b6112e36020830184612686565b60198152602081017f4f6e6c792061646d696e732063616e2063616c6c2074686973000000000000008152905061271e565b602080825281016114048161274f565b60118152602081017f4e6f2070656e64696e6720636f6d6d69740000000000000000000000000000008152905061271e565b6020808252810161140481612791565b606081016127e18286612686565b6127ee6020830185612686565b6120216040830184612506565b60108152602081017f5061757361626c653a20706175736564000000000000000000000000000000008152905061271e565b60208082528101611404816127fb565b60178152602081017f796f7527726520747279696e6720746f206368656174210000000000000000008152905061271e565b602080825281016114048161283d565b60198152602081017f616464696e6720636f6d6d69747320646973616c6c6f776564000000000000008152905061271e565b602080825281016114048161287f565b601a8152602081017f416c726561647920686176652070656e64696e67206d696e74730000000000008152905061271e565b60208082528101611404816128c1565b80516114048161256d565b60006020828403121561292357612923600080fd5b60006120218484612903565b634e487b7160e01b600052601160045260246000fd5b61ffff8116905061ffff8216915060008261ffff038211156129695761296961292f565b500190565b60118152602081017f416c6c20746f6b656e73206d696e7465640000000000000000000000000000008152905061271e565b602080825281016114048161296e565b80516114048161229c565b6000602082840312156129d0576129d0600080fd5b600061202184846129b0565b60006114046121d98381565b612207816129dc565b606081016129ff82866129e8565b612a0c6020830185612506565b6120216040830184612686565b60006114046121d961ffff841681565b61220781612a19565b60608101612a408286612686565b612a4d6020830185612686565b6120216040830184612a29565b6020808252810161140481602281527f6f6e6c792061646d696e732063616e20726571756573742072616e646f6d6e6560208201527f7373000000000000000000000000000000000000000000000000000000000000604082015260600190565b67ffffffffffffffff8116612207565b60a08101612ad98288612506565b612ae66020830187612abb565b612af360408301866124fc565b612b0060608301856125d6565b612b0d60808301846125d6565b9695505050505050565b815b9150600082821015612b2d57612b2d61292f565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b6a57612b6a61292f565b500290565b634e487b7160e01b600052601260045260246000fd5b600082612b9457612b94612b6f565b500490565b60128152602081017f6e6f2070656e64696e6720636f6d6d69747300000000000000000000000000008152905061271e565b6020808252810161140481612b99565b60148152602081017f5061757361626c653a206e6f74207061757365640000000000000000000000008152905061271e565b6020808252810161140481612bdb565b634e487b7160e01b600052603260045260246000fd5b60138152602081017f52616e646f6d2073656564206e6f7420736574000000000000000000000000008152905061271e565b6020808252810161140481612c33565b61ffff908116908216612b19565b604081016127428285612506565b602081016114048284612a29565b61ffff81169050600061ffff821415612cba57612cba61292f565b5060010190565b6040810161251a8285612686565b60a08101612cdd8287612686565b612cea6020830186612686565b612cf76040830185612506565b612d0460608301846129e8565b81810360808301526000815260208101612b0d565b612d2382826124fc565b5060200190565b6000612d34825190565b808452602093840193830160005b82811015612d67578151612d568782612d19565b965050602082019150600101612d42565b5093949350505050565b602080825281016112e38184612d2a565b60408101612d908285612686565b81810360208301526120218184612d2a565b6000612dac825190565b6020830160005b82811015612d67578151612dc78782612d19565b965050602082019150600101612db3565b6114048183612da2565b815b9150600082612df557612df5612b6f565b500690565b805161140481612267565b600060208284031215612e1a57612e1a600080fd5b60006120218484612dfa565b60ff908116908216612de456fea2646970667358221220995a6120304533a1cde38e5ac240bbb57750023ab0250cd1a6974b26f7e85f9d64736f6c634300080b0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.