Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 19,846 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Boost | 16285521 | 783 days ago | IN | 0 ETH | 0.00070233 | ||||
Reroll | 16285507 | 783 days ago | IN | 0 ETH | 0.00273791 | ||||
Boost | 16285507 | 783 days ago | IN | 0 ETH | 0.00136297 | ||||
Boost | 16285504 | 783 days ago | IN | 0 ETH | 0.00118317 | ||||
Reroll | 16285502 | 783 days ago | IN | 0 ETH | 0.00320171 | ||||
Boost | 16285501 | 783 days ago | IN | 0 ETH | 0.00119119 | ||||
Reroll | 16285500 | 783 days ago | IN | 0 ETH | 0.00272031 | ||||
Boost | 16285500 | 783 days ago | IN | 0 ETH | 0.00129224 | ||||
Reroll | 16285498 | 783 days ago | IN | 0 ETH | 0.00194367 | ||||
Reroll | 16285496 | 783 days ago | IN | 0 ETH | 0.00236045 | ||||
Reroll | 16285496 | 783 days ago | IN | 0 ETH | 0.00220869 | ||||
Reroll | 16285494 | 783 days ago | IN | 0 ETH | 0.00220754 | ||||
Reroll | 16285492 | 783 days ago | IN | 0 ETH | 0.00183105 | ||||
Reroll | 16285490 | 783 days ago | IN | 0 ETH | 0.0018025 | ||||
Boost | 16285489 | 783 days ago | IN | 0 ETH | 0.00088112 | ||||
Boost | 16285488 | 783 days ago | IN | 0 ETH | 0.00100785 | ||||
Boost | 16285487 | 783 days ago | IN | 0 ETH | 0.00093774 | ||||
Reroll | 16285487 | 783 days ago | IN | 0 ETH | 0.0023079 | ||||
Reroll | 16285485 | 783 days ago | IN | 0 ETH | 0.00193317 | ||||
Reroll | 16285483 | 783 days ago | IN | 0 ETH | 0.00194859 | ||||
Reroll | 16285483 | 783 days ago | IN | 0 ETH | 0.00247297 | ||||
Reroll | 16285483 | 783 days ago | IN | 0 ETH | 0.00236465 | ||||
Boost | 16285482 | 783 days ago | IN | 0 ETH | 0.00098813 | ||||
Boost | 16285480 | 783 days ago | IN | 0 ETH | 0.00093808 | ||||
Reroll | 16285480 | 783 days ago | IN | 0 ETH | 0.00190252 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ValhallaDNA
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 1000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "./utils/Ownable.sol"; import "./token/ERC721/IERC721A.sol"; ///////////////////////////////////////////////////////////////////////////// // // // // // ██╗░░░██╗░█████╗░██╗░░░░░██╗░░██╗░█████╗░██╗░░░░░██╗░░░░░░█████╗░ // // ██║░░░██║██╔══██╗██║░░░░░██║░░██║██╔══██╗██║░░░░░██║░░░░░██╔══██╗ // // ╚██╗░██╔╝███████║██║░░░░░███████║███████║██║░░░░░██║░░░░░███████║ // // ░╚████╔╝░██╔══██║██║░░░░░██╔══██║██╔══██║██║░░░░░██║░░░░░██╔══██║ // // ░░╚██╔╝░░██║░░██║███████╗██║░░██║██║░░██║███████╗███████╗██║░░██║ // // ░░░╚═╝░░░╚═╝░░╚═╝╚══════╝╚═╝░░╚═╝╚═╝░░╚═╝╚══════╝╚══════╝╚═╝░░╚═╝ // // // // // ///////////////////////////////////////////////////////////////////////////// /** * Subset of a Utility with only the methods that the dna contract will call. */ interface Utility { function approvedBurn(address spender, uint256 tokenId, uint256 amount) external; } contract ValhallaDNA is Ownable { // ============================================================= // CONSTANTS // ============================================================= // This IPFS code hash will have a function that can translate any token's // DNA into the corresponding traits. This logic is put here instead of on the // contract so that the gas fee for rerolling is minimal for the user. string public constant DNA_TRANSLATOR_CODE_HASH = "QmbFBwrDdSSd7VxsSGxhyPAASMuJJBqY5n8RY6LkUg1smx"; // Checks the `ownerOf` method of this address for tokenId re-roll eligibility address public immutable TOKEN_CONTRACT; // Hash for the initial revealed tokens. string public constant MINT_PROVENANCE_HASH = "037226b21636376001dbfd22f52d1dd72845efa9613baf51a6a011ac731b2327"; // Proof of hash will be given after all tokens are auctioned. string public constant AUCTION_PROVENANCE_HASH = "eb8c88969a4b776d757de962a194f5b4ffaaadb991ecfbb24d806c7bc6397d30"; // The Initial DNA is composed of 128 bits for each token // with each trait taking up 8 bits. uint256 private constant _BITMASK_INITIAL_DNA = (1 << 8) - 1; // Each call to reroll will give this many options to select during boost uint256 public constant NUM_BOOSTS = 3; // Offset in bits where the booster information will start uint256 private constant _BOOSTER_OFFSET = 128; // 3 rerollable traits will fit in 2 bits uint256 private constant _BITLEN_BOOSTER_TRAIT = 2; uint256 private constant _BITMASK_BOOSTER_TRAIT = (1 << _BITLEN_BOOSTER_TRAIT) - 1; uint256 private constant _BITLEN_SINGLE_BOOST = 20; uint256 private constant _BITMASK_SINGLE_BOOST = (1 << _BITLEN_SINGLE_BOOST) - 1; uint256 private constant _BITLEN_TRAIT_BOOST = 21; uint256 private constant _BITMASK_TRAIT_BOOST = (1 << _BITLEN_TRAIT_BOOST) - 1; // ============================================================= // STORAGE // ============================================================= // These will define what token is required to reroll traits address public utilityAddress; uint256 public utilityTokenId; // Only address allowed to change a token's dna. address public dnaInjectorAddress; // Will be locked after all the tokens are auctioned bool public dnaInjectionLocked; // A token's dna cannot be changed unless both of these are active. bool public rerollActive; bool public boostingActive; // for pseudo-rng uint256 private _seed; // Mapping tokenId to DNA information. An extra bit is needed for // each trait because the random boosterValue does have the tiniest // but non-zero probability to roll a 0. (1 in 1_048_576) // // Bits Layout: // - [0..127] `initialDna` // - [128] `hasHairBooster` // - [129..148] `hairBooster` // - [149] `hasClothingBooster` // - [150..169] `clothingBooster` // - [170] `hasPrimaryBooster` // - [171..190] `primaryBooster` // - [191..255] Extra Unused Bits mapping(uint256 => uint256) private _dna; // Bits Layout: // - [0..1] `boosterIdx` // - [2..21] `boosterRoll` // - [22..41] `boosterRoll` // - [42..61] `boosterRoll` // - [62..256] Extra Unused Bits mapping(uint256 => uint256) public activeBooster; // ============================================================= // Events // ============================================================= event Bought( uint256 indexed tokenId, uint256 indexed traitId, uint256 tokenDna, uint256 boosterVal ); event Boost(uint256 indexed tokenId, uint256 boosterId, uint256 tokenDna); // ============================================================= // Constructor // ============================================================= constructor (address tokenAddress) { TOKEN_CONTRACT = tokenAddress; } // ============================================================= // Only Owner // ============================================================= /** * @notice Allows the owner to change the dna of any tokenId. Used for initial dna injection, * and the owner can call {lockDnaInjection} below to ensure that future dna changes can only * be achieved by the token owner themselves. */ function injectDna(uint256[] memory dna, uint256[] memory tokenIds) external { if (msg.sender != dnaInjectorAddress) revert NotDnaInjector(); if (dnaInjectionLocked) revert DnaLocked(); for (uint i = 0; i < tokenIds.length; ) { _dna[tokenIds[i]] = dna[i]; unchecked { ++i; } } } /** * @notice Allows the owner to prevent the owner from injecting dna forever. * THIS CANNOT BE UNDONE. */ function lockDnaInjection() external onlyOwner { dnaInjectionLocked = true; } /** * @notice Allows the owner to update the dna translator script. */ function setDnaInjector(address dnaInjector) external onlyOwner { dnaInjectorAddress = dnaInjector; } /** * @notice Allows the owner to select an address and token that must be burned to alter a token's * dna. This address must have an {approvedBurn} method that is callable by this contract for * another user's tokens. */ function setRerollToken(address token, uint256 tokenId) external onlyOwner { utilityAddress = token; utilityTokenId = tokenId; } /** * @notice Allows the owner to enable or disable token owners from rolling their dna. */ function setRerollActive(bool active) external onlyOwner { rerollActive = active; } /** * @notice Allows the owner to enable or disable token owners from finalizing rolls into their dna. */ function setBoostingActive(bool active) external onlyOwner { boostingActive = active; } // ============================================================= // Dna Interactions // ============================================================= /** * @dev Returns the saved token dna for a given id. This dna can be translated into * metadata using the scripts that are part of the DNA_TRANSLATOR_CODE_HASH constant. */ function getTokenDna(uint256 tokenId) external view returns (uint256) { return _dna[tokenId]; } /** * @dev Adds an activeBooster to a given tokenId for a certain trait. The caller cannot be * a contract address and they must own both the Valhalla tokenId as well as the corresponding * Utility token to be burned. * * Note: * - A token CANNOT reroll a trait they do not have * - A token CAN override an existing activeBooster with another roll without calling {boost} * - The override is true even if a different rerollTraitId is selected from the first roll * * @param tokenId tokenId that the booster is attached to * @param rerollTraitId 0 for hair, 1 for clothing, 2 for primary */ function reroll(uint256 tokenId, uint256 rerollTraitId) external { if (!rerollActive) revert RerollInactive(); if (msg.sender != tx.origin) revert NotEOA(); if (rerollTraitId > 2) revert TraitNotRerollable(); if (IERC721A(TOKEN_CONTRACT).ownerOf(tokenId) != msg.sender) revert NotTokenOwner(); Utility(utilityAddress).approvedBurn(msg.sender, utilityTokenId, 1); // Cheaper gaswise to do bitshift than to multiply rerollTraitId by 8 if (_dna[tokenId] & (_BITMASK_INITIAL_DNA << (rerollTraitId << 3)) == 0) revert TraitNotOnToken(); // Shift _randomNumber up to make room for reroll traitId uint256 boosterVal = _randomNumber() << _BITLEN_BOOSTER_TRAIT; boosterVal = boosterVal | rerollTraitId; activeBooster[tokenId] = boosterVal; emit Bought(tokenId, rerollTraitId, _dna[tokenId], boosterVal); } /** * @dev Selects one of the boosters rolled from the {reroll} method and replaces the appropriate * section in the token dna's bits with one of the new values that was randomly rolled. */ function boost(uint256 tokenId, uint256 boosterIdx) external { if(!boostingActive) revert BoostingInactive(); if(IERC721A(TOKEN_CONTRACT).ownerOf(tokenId) != msg.sender) revert NotTokenOwner(); uint256 boosterVal = activeBooster[tokenId]; if (boosterVal == 0) revert NoBoosterAtIdx(); activeBooster[tokenId] = 0; if (boosterIdx >= NUM_BOOSTS) revert InvalidBoostIdx(); uint256 selectedVal = (boosterVal >> (boosterIdx * _BITLEN_SINGLE_BOOST + _BITLEN_BOOSTER_TRAIT)) & _BITMASK_SINGLE_BOOST; // This shifts the value up one bit and adds a flag to show that this trait has been boosted. // This is needed on the small chance that random value generated is exactly 0. selectedVal = selectedVal << 1 | 1; uint256 rerollTraitId = boosterVal & _BITMASK_BOOSTER_TRAIT; uint256 traitShiftAmount = rerollTraitId * _BITLEN_TRAIT_BOOST + _BOOSTER_OFFSET; _dna[tokenId] = _dna[tokenId] & ~(_BITMASK_TRAIT_BOOST << traitShiftAmount) | (selectedVal << traitShiftAmount); emit Boost(tokenId, boosterIdx, _dna[tokenId]); } /** * @dev Makes a pseudo-random number. Although there is some room for the block.timestamp to be * manipulated by miners, the random number used here is not used to determine something with high * impact such as determining a lottery winner. * * Implementing a more secure random number generator would lead to a worse reroll experience. */ function _randomNumber() internal returns (uint256) { return uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, ++_seed))); } error BoostingInactive(); error DnaLocked(); error InvalidBoostIdx(); error NoBoosterAtIdx(); error NotDnaInjector(); error NotEOA(); error NotTokenOwner(); error RerollInactive(); error TraitNotRerollable(); error TraitNotOnToken(); }
// SPDX-License-Identifier: MIT // ERC721A Contracts v4.2.3 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of ERC721A. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the * ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); /** * The `quantity` minted with ERC2309 exceeds the safety limit. */ error MintERC2309QuantityExceedsLimit(); /** * The `extraData` cannot be set on an unintialized ownership slot. */ error OwnershipNotInitializedForExtraData(); // ============================================================= // STRUCTS // ============================================================= struct TokenOwnership { // The address of the owner. address addr; // Stores the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; // Arbitrary data similar to `startTimestamp` that can be set via {_extraData}. uint24 extraData; } // ============================================================= // TOKEN COUNTERS // ============================================================= /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see {_totalMinted}. */ function totalSupply() external view returns (uint256); // ============================================================= // IERC165 // ============================================================= /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================================================= // IERC721 // ============================================================= /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables * (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in `owner`'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, * 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, bytes calldata data ) external payable; /** * @dev Equivalent to `safeTransferFrom(from, to, tokenId, '')`. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; /** * @dev Transfers `tokenId` 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 payable; /** * @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 payable; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} * for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll}. */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================================================= // IERC721Metadata // ============================================================= /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// 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 // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; error CallerNotOwner(); error OwnerNotZero(); /** * @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 internal _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) revert CallerNotOwner(); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) revert OwnerNotZero(); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
{ "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BoostingInactive","type":"error"},{"inputs":[],"name":"CallerNotOwner","type":"error"},{"inputs":[],"name":"DnaLocked","type":"error"},{"inputs":[],"name":"InvalidBoostIdx","type":"error"},{"inputs":[],"name":"NoBoosterAtIdx","type":"error"},{"inputs":[],"name":"NotDnaInjector","type":"error"},{"inputs":[],"name":"NotEOA","type":"error"},{"inputs":[],"name":"NotTokenOwner","type":"error"},{"inputs":[],"name":"OwnerNotZero","type":"error"},{"inputs":[],"name":"RerollInactive","type":"error"},{"inputs":[],"name":"TraitNotOnToken","type":"error"},{"inputs":[],"name":"TraitNotRerollable","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boosterId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenDna","type":"uint256"}],"name":"Boost","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"traitId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenDna","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"boosterVal","type":"uint256"}],"name":"Bought","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"},{"inputs":[],"name":"AUCTION_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DNA_TRANSLATOR_CODE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NUM_BOOSTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"activeBooster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"boosterIdx","type":"uint256"}],"name":"boost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"boostingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dnaInjectionLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dnaInjectorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenDna","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"dna","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"injectDna","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockDnaInjection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"rerollTraitId","type":"uint256"}],"name":"reroll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rerollActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setBoostingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dnaInjector","type":"address"}],"name":"setDnaInjector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setRerollActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"setRerollToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"utilityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utilityTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b5060405161112438038061112483398101604081905261002f91610099565b61003833610049565b6001600160a01b03166080526100c9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100ab57600080fd5b81516001600160a01b03811681146100c257600080fd5b9392505050565b6080516110326100f26000396000818161022301528181610448015261076201526110326000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806382f25b18116100e3578063d7390a351161008c578063eb565dba11610066578063eb565dba14610358578063f29b22391461036c578063f2fde38b1461037f57600080fd5b8063d7390a3514610335578063dd8dcf291461033d578063e46c8e5c1461034557600080fd5b8063ae968c1f116100bd578063ae968c1f14610306578063b808350f1461030e578063d6d214f91461032257600080fd5b806382f25b18146102c25780638da5cb5b146102e25780639c3048dd146102f357600080fd5b80634cd351d311610145578063715018a61161011f578063715018a6146102a95780637b62b73f146102b1578063813dcfad146102ba57600080fd5b80634cd351d314610270578063562d0b21146102835780635bbf68c71461029657600080fd5b80631e6f6709116101765780631e6f6709146101fa578063363393881461021e57806340be7bec1461025d57600080fd5b80630599f1131461019d5780631642ac1c146101d057806318f309b9146101e5575b600080fd5b6101bd6101ab366004610c72565b60009081526005602052604090205490565b6040519081526020015b60405180910390f35b6101d8610392565b6040516101c79190610c8b565b6101f86101f3366004610cf5565b6103ae565b005b60035461020e90600160b01b900460ff1681565b60405190151581526020016101c7565b6102457f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101c7565b6101f861026b366004610d19565b6103e5565b6101f861027e366004610d3b565b61064a565b600354610245906001600160a01b031681565b6101f86102a4366004610d19565b61068b565b6101f861093f565b6101bd60025481565b6101d8610953565b6101bd6102d0366004610c72565b60066020526000908152604090205481565b6000546001600160a01b0316610245565b6101f8610301366004610d3b565b61096f565b6101f86109b0565b60035461020e90600160a01b900460ff1681565b6101f8610330366004610e0e565b6109e8565b6101d8610ad6565b6101bd600381565b6101f8610353366004610e72565b610af2565b60035461020e90600160a81b900460ff1681565b600154610245906001600160a01b031681565b6101f861038d366004610cf5565b610b2d565b604051806060016040528060408152602001610f4f6040913981565b6103b6610b81565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600354600160b01b900460ff16610428576040517f0a2fe31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561048f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b39190610e9e565b6001600160a01b0316146104da576040516359dc379f60e01b815260040160405180910390fd5b60008281526006602052604081205490819003610523576040517f9cb99d3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600660205260408120556003821061056c576040517fff6e61fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061057c600162100000610ed1565b6002610589601486610ee8565b6105939190610f07565b83901c16600190811b811791506000906105ae906004610ed1565b83169050600060806105c1601584610ee8565b6105cb9190610f07565b905082811b816105df600162200000610ed1565b6000898152600560205260409081902080549290931b19919091169290921790819055905187917fc660fd3b205f791a73a3455e6197bca3eb8c766ad6dcb0825df6509e62592f189161063a91898252602082015260400190565b60405180910390a2505050505050565b610652610b81565b60038054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600354600160a81b900460ff166106ce576040517fbbe450b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214610707576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002811115610742576040517fa88013c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156107a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cd9190610e9e565b6001600160a01b0316146107f4576040516359dc379f60e01b815260040160405180910390fd5b600180546002546040517f8c6eafde000000000000000000000000000000000000000000000000000000008152336004820152602481019190915260448101929092526001600160a01b031690638c6eafde90606401600060405180830381600087803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b50505060008381526005602052604081205460ff600385901b1b16900390506108cd576040517f7743cafa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060026108d9610bc5565b60008581526006602090815260408083209390941b8617928390556005815290839020548351908152908101829052909250839185917f47abb63d521dd2e26fcdd6dd304df0a109af421045f9cf9d53a6d1b7f5c16376910160405180910390a3505050565b610947610b81565b6109516000610c15565b565b604051806060016040528060408152602001610fbd6040913981565b610977610b81565b60038054911515600160b01b027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6109b8610b81565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b6003546001600160a01b03163314610a2c576040517f52b5d46f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600160a01b900460ff1615610a70576040517fecfaa1d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8151811015610ad157828181518110610a8e57610a8e610f1f565b602002602001015160056000848481518110610aac57610aac610f1f565b6020026020010151815260200190815260200160002081905550806001019050610a73565b505050565b6040518060600160405280602e8152602001610f8f602e913981565b610afa610b81565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039390931692909217909155600255565b610b35610b81565b6001600160a01b038116610b75576040517fa2604f6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7e81610c15565b50565b6000546001600160a01b03163314610951576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004244600460008154610bd890610f35565b918290555060408051602081019490945283019190915260608201526080016040516020818303038152906040528051906020012060001c905090565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c8457600080fd5b5035919050565b600060208083528351808285015260005b81811015610cb857858101830151858201604001528201610c9c565b81811115610cca576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b7e57600080fd5b600060208284031215610d0757600080fd5b8135610d1281610ce0565b9392505050565b60008060408385031215610d2c57600080fd5b50508035926020909101359150565b600060208284031215610d4d57600080fd5b81358015158114610d1257600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112610d8457600080fd5b8135602067ffffffffffffffff80831115610da157610da1610d5d565b8260051b604051601f19603f83011681018181108482111715610dc657610dc6610d5d565b604052938452858101830193838101925087851115610de457600080fd5b83870191505b84821015610e0357813583529183019190830190610dea565b979650505050505050565b60008060408385031215610e2157600080fd5b823567ffffffffffffffff80821115610e3957600080fd5b610e4586838701610d73565b93506020850135915080821115610e5b57600080fd5b50610e6885828601610d73565b9150509250929050565b60008060408385031215610e8557600080fd5b8235610e9081610ce0565b946020939093013593505050565b600060208284031215610eb057600080fd5b8151610d1281610ce0565b634e487b7160e01b600052601160045260246000fd5b600082821015610ee357610ee3610ebb565b500390565b6000816000190483118215151615610f0257610f02610ebb565b500290565b60008219821115610f1a57610f1a610ebb565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201610f4757610f47610ebb565b506001019056fe30333732323662323136333633373630303164626664323266353264316464373238343565666139363133626166353161366130313161633733316232333237516d62464277724464535364375678735347786879504141534d754a4a427159356e385259364c6b556731736d7865623863383839363961346237373664373537646539363261313934663562346666616161646239393165636662623234643830366337626336333937643330a2646970667358221220007b8af1e2409225e35c4ad6f8fccbae2e8ffb9bf3e773cc07e849fc9d44366364736f6c634300080d0033000000000000000000000000231d3559aa848bf10366fb9868590f01d34bf240
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101985760003560e01c806382f25b18116100e3578063d7390a351161008c578063eb565dba11610066578063eb565dba14610358578063f29b22391461036c578063f2fde38b1461037f57600080fd5b8063d7390a3514610335578063dd8dcf291461033d578063e46c8e5c1461034557600080fd5b8063ae968c1f116100bd578063ae968c1f14610306578063b808350f1461030e578063d6d214f91461032257600080fd5b806382f25b18146102c25780638da5cb5b146102e25780639c3048dd146102f357600080fd5b80634cd351d311610145578063715018a61161011f578063715018a6146102a95780637b62b73f146102b1578063813dcfad146102ba57600080fd5b80634cd351d314610270578063562d0b21146102835780635bbf68c71461029657600080fd5b80631e6f6709116101765780631e6f6709146101fa578063363393881461021e57806340be7bec1461025d57600080fd5b80630599f1131461019d5780631642ac1c146101d057806318f309b9146101e5575b600080fd5b6101bd6101ab366004610c72565b60009081526005602052604090205490565b6040519081526020015b60405180910390f35b6101d8610392565b6040516101c79190610c8b565b6101f86101f3366004610cf5565b6103ae565b005b60035461020e90600160b01b900460ff1681565b60405190151581526020016101c7565b6102457f000000000000000000000000231d3559aa848bf10366fb9868590f01d34bf24081565b6040516001600160a01b0390911681526020016101c7565b6101f861026b366004610d19565b6103e5565b6101f861027e366004610d3b565b61064a565b600354610245906001600160a01b031681565b6101f86102a4366004610d19565b61068b565b6101f861093f565b6101bd60025481565b6101d8610953565b6101bd6102d0366004610c72565b60066020526000908152604090205481565b6000546001600160a01b0316610245565b6101f8610301366004610d3b565b61096f565b6101f86109b0565b60035461020e90600160a01b900460ff1681565b6101f8610330366004610e0e565b6109e8565b6101d8610ad6565b6101bd600381565b6101f8610353366004610e72565b610af2565b60035461020e90600160a81b900460ff1681565b600154610245906001600160a01b031681565b6101f861038d366004610cf5565b610b2d565b604051806060016040528060408152602001610f4f6040913981565b6103b6610b81565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600354600160b01b900460ff16610428576040517f0a2fe31d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b037f000000000000000000000000231d3559aa848bf10366fb9868590f01d34bf2401690636352211e90602401602060405180830381865afa15801561048f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b39190610e9e565b6001600160a01b0316146104da576040516359dc379f60e01b815260040160405180910390fd5b60008281526006602052604081205490819003610523576040517f9cb99d3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600660205260408120556003821061056c576040517fff6e61fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061057c600162100000610ed1565b6002610589601486610ee8565b6105939190610f07565b83901c16600190811b811791506000906105ae906004610ed1565b83169050600060806105c1601584610ee8565b6105cb9190610f07565b905082811b816105df600162200000610ed1565b6000898152600560205260409081902080549290931b19919091169290921790819055905187917fc660fd3b205f791a73a3455e6197bca3eb8c766ad6dcb0825df6509e62592f189161063a91898252602082015260400190565b60405180910390a2505050505050565b610652610b81565b60038054911515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b600354600160a81b900460ff166106ce576040517fbbe450b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214610707576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002811115610742576040517fa88013c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516331a9108f60e11b81526004810183905233906001600160a01b037f000000000000000000000000231d3559aa848bf10366fb9868590f01d34bf2401690636352211e90602401602060405180830381865afa1580156107a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cd9190610e9e565b6001600160a01b0316146107f4576040516359dc379f60e01b815260040160405180910390fd5b600180546002546040517f8c6eafde000000000000000000000000000000000000000000000000000000008152336004820152602481019190915260448101929092526001600160a01b031690638c6eafde90606401600060405180830381600087803b15801561086457600080fd5b505af1158015610878573d6000803e3d6000fd5b50505060008381526005602052604081205460ff600385901b1b16900390506108cd576040517f7743cafa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060026108d9610bc5565b60008581526006602090815260408083209390941b8617928390556005815290839020548351908152908101829052909250839185917f47abb63d521dd2e26fcdd6dd304df0a109af421045f9cf9d53a6d1b7f5c16376910160405180910390a3505050565b610947610b81565b6109516000610c15565b565b604051806060016040528060408152602001610fbd6040913981565b610977610b81565b60038054911515600160b01b027fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6109b8610b81565b600380547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055565b6003546001600160a01b03163314610a2c576040517f52b5d46f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600354600160a01b900460ff1615610a70576040517fecfaa1d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8151811015610ad157828181518110610a8e57610a8e610f1f565b602002602001015160056000848481518110610aac57610aac610f1f565b6020026020010151815260200190815260200160002081905550806001019050610a73565b505050565b6040518060600160405280602e8152602001610f8f602e913981565b610afa610b81565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039390931692909217909155600255565b610b35610b81565b6001600160a01b038116610b75576040517fa2604f6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7e81610c15565b50565b6000546001600160a01b03163314610951576040517f5cd8319200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004244600460008154610bd890610f35565b918290555060408051602081019490945283019190915260608201526080016040516020818303038152906040528051906020012060001c905090565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c8457600080fd5b5035919050565b600060208083528351808285015260005b81811015610cb857858101830151858201604001528201610c9c565b81811115610cca576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610b7e57600080fd5b600060208284031215610d0757600080fd5b8135610d1281610ce0565b9392505050565b60008060408385031215610d2c57600080fd5b50508035926020909101359150565b600060208284031215610d4d57600080fd5b81358015158114610d1257600080fd5b634e487b7160e01b600052604160045260246000fd5b600082601f830112610d8457600080fd5b8135602067ffffffffffffffff80831115610da157610da1610d5d565b8260051b604051601f19603f83011681018181108482111715610dc657610dc6610d5d565b604052938452858101830193838101925087851115610de457600080fd5b83870191505b84821015610e0357813583529183019190830190610dea565b979650505050505050565b60008060408385031215610e2157600080fd5b823567ffffffffffffffff80821115610e3957600080fd5b610e4586838701610d73565b93506020850135915080821115610e5b57600080fd5b50610e6885828601610d73565b9150509250929050565b60008060408385031215610e8557600080fd5b8235610e9081610ce0565b946020939093013593505050565b600060208284031215610eb057600080fd5b8151610d1281610ce0565b634e487b7160e01b600052601160045260246000fd5b600082821015610ee357610ee3610ebb565b500390565b6000816000190483118215151615610f0257610f02610ebb565b500290565b60008219821115610f1a57610f1a610ebb565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201610f4757610f47610ebb565b506001019056fe30333732323662323136333633373630303164626664323266353264316464373238343565666139363133626166353161366130313161633733316232333237516d62464277724464535364375678735347786879504141534d754a4a427159356e385259364c6b556731736d7865623863383839363961346237373664373537646539363261313934663562346666616161646239393165636662623234643830366337626336333937643330a2646970667358221220007b8af1e2409225e35c4ad6f8fccbae2e8ffb9bf3e773cc07e849fc9d44366364736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000231d3559aa848bf10366fb9868590f01d34bf240
-----Decoded View---------------
Arg [0] : tokenAddress (address): 0x231d3559aa848Bf10366fB9868590F01d34bF240
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000231d3559aa848bf10366fb9868590f01d34bf240
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.