Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
0 PCB-NFT
Holders
4
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Filtered by Token Holder
*🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️🦍️.ethBalance
1 PCB-NFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ProjectClearBook
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.17; import "@openzeppelin/contracts/access/Ownable.sol"; import "./libs/ERC721.sol"; import "./libs/SSTORE2.sol"; contract ProjectClearBook is ERC721, Ownable { mapping(uint256 => address) private idToPointer; address private mintManager; uint256 public constant maxSupply = 128; constructor() ERC721('Project Clear Book', 'PCB-NFT') {} function mint(address to, uint256 id, bytes calldata json) external { require(id < 128); require(IMintManager(mintManager).canMint(to, id, keccak256(json))); idToPointer[id] = SSTORE2.write(json); _mint(to, id); } function setMintManager(address newManager) external onlyOwner { mintManager = newManager; } function tokenURI(uint256 id) external view override returns (string memory) { return string(SSTORE2.read(idToPointer[id])); } } interface IMintManager { function canMint(address to, uint256 id, bytes32 jsonHash) external returns(bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Read and write to persistent storage at a fraction of the cost. /// @author Solady (https://github.com/vectorized/solmady/blob/main/src/utils/SSTORE2.sol) /// @author Saw-mon-and-Natalie (https://github.com/Saw-mon-and-Natalie) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SSTORE2.sol) /// @author Modified from 0xSequence (https://github.com/0xSequence/sstore2/blob/master/contracts/SSTORE2.sol) library SSTORE2 { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CONSTANTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev We skip the first byte as it's a STOP opcode, /// which ensures the contract can't be called. uint256 internal constant DATA_OFFSET = 1; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Unable to deploy the storage contract. error DeploymentFailed(); /// @dev The storage contract address is invalid. error InvalidPointer(); /// @dev Attempt to read outside of the storage contract's bytecode bounds. error ReadOutOfBounds(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* WRITE LOGIC */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Writes `data` into the bytecode of a storage contract and returns its address. function write(bytes memory data) internal returns (address pointer) { /// @solidity memory-safe-assembly assembly { let originalDataLength := mload(data) // Add 1 to data size since we are prefixing it with a STOP opcode. let dataSize := add(originalDataLength, DATA_OFFSET) /** * ------------------------------------------------------------------------------+ * Opcode | Mnemonic | Stack | Memory | * ------------------------------------------------------------------------------| * 61 codeSize | PUSH2 codeSize | codeSize | | * 80 | DUP1 | codeSize codeSize | | * 60 0xa | PUSH1 0xa | 0xa codeSize codeSize | | * 3D | RETURNDATASIZE | 0 0xa codeSize codeSize | | * 39 | CODECOPY | codeSize | [0..codeSize): code | * 3D | RETURNDATASZIE | 0 codeSize | [0..codeSize): code | * F3 | RETURN | | [0..codeSize): code | * 00 | STOP | | | * ------------------------------------------------------------------------------+ * @dev Prefix the bytecode with a STOP opcode to ensure it cannot be called. * Also PUSH2 is used since max contract size cap is 24,576 bytes which is less than 2 ** 16. */ mstore( data, or( 0x61000080600a3d393df300, // Left shift `dataSize` by 64 so that it lines up with the 0000 after PUSH2. shl(0x40, dataSize) ) ) // Deploy a new contract with the generated creation code. pointer := create(0, add(data, 0x15), add(dataSize, 0xa)) // If `pointer` is zero, revert. if iszero(pointer) { // Store the function selector of `DeploymentFailed()`. mstore(0x00, 0x30116425) // Revert with (offset, size). revert(0x1c, 0x04) } // Restore original length of the variable size `data`. mstore(data, originalDataLength) } } /// @dev Writes `data` into the bytecode of a storage contract with `salt` /// and returns its deterministic address. function writeDeterministic(bytes memory data, bytes32 salt) internal returns (address pointer) { /// @solidity memory-safe-assembly assembly { let originalDataLength := mload(data) let dataSize := add(originalDataLength, DATA_OFFSET) mstore(data, or(0x61000080600a3d393df300, shl(0x40, dataSize))) // Deploy a new contract with the generated creation code. pointer := create2(0, add(data, 0x15), add(dataSize, 0xa), salt) // If `pointer` is zero, revert. if iszero(pointer) { // Store the function selector of `DeploymentFailed()`. mstore(0x00, 0x30116425) // Revert with (offset, size). revert(0x1c, 0x04) } // Restore original length of the variable size `data`. mstore(data, originalDataLength) } } /// @dev Returns the initialization code hash of the storage contract for `data`. /// Used for mining vanity addresses with create2crunch. function initCodeHash(bytes memory data) internal pure returns (bytes32 hash) { /// @solidity memory-safe-assembly assembly { let originalDataLength := mload(data) let dataSize := add(originalDataLength, DATA_OFFSET) mstore(data, or(0x61000080600a3d393df300, shl(0x40, dataSize))) hash := keccak256(add(data, 0x15), add(dataSize, 0xa)) // Restore original length of the variable size `data`. mstore(data, originalDataLength) } } /// @dev Returns the address of the storage contract for `data` /// deployed with `salt` by `deployer`. function predictDeterministicAddress(bytes memory data, bytes32 salt, address deployer) internal pure returns (address predicted) { bytes32 hash = initCodeHash(data); /// @solidity memory-safe-assembly assembly { // Compute and store the bytecode hash. mstore8(0x00, 0xff) // Write the prefix. mstore(0x35, hash) mstore(0x01, shl(96, deployer)) mstore(0x15, salt) predicted := keccak256(0x00, 0x55) // Restore the part of the free memory pointer that has been overwritten. mstore(0x35, 0) } } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* READ LOGIC */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Returns all the `data` from the bytecode of the storage contract at `pointer`. function read(address pointer) internal view returns (bytes memory data) { /// @solidity memory-safe-assembly assembly { let pointerCodesize := extcodesize(pointer) if iszero(pointerCodesize) { // Store the function selector of `InvalidPointer()`. mstore(0x00, 0x11052bb4) // Revert with (offset, size). revert(0x1c, 0x04) } // Offset all indices by 1 to skip the STOP opcode. let size := sub(pointerCodesize, DATA_OFFSET) // Get the pointer to the free memory and allocate // enough 32-byte words for the data and the length of the data, // then copy the code to the allocated memory. // Masking with 0xffe0 will suffice, since contract size is less than 16 bits. data := mload(0x40) mstore(0x40, add(data, and(add(size, 0x3f), 0xffe0))) mstore(data, size) mstore(add(add(data, 0x20), size), 0) // Zeroize the last slot. extcodecopy(pointer, add(data, 0x20), DATA_OFFSET, size) } } /// @dev Returns the `data` from the bytecode of the storage contract at `pointer`, /// from the byte at `start`, to the end of the data stored. function read(address pointer, uint256 start) internal view returns (bytes memory data) { /// @solidity memory-safe-assembly assembly { let pointerCodesize := extcodesize(pointer) if iszero(pointerCodesize) { // Store the function selector of `InvalidPointer()`. mstore(0x00, 0x11052bb4) // Revert with (offset, size). revert(0x1c, 0x04) } // If `!(pointer.code.size > start)`, reverts. // This also handles the case where `start + DATA_OFFSET` overflows. if iszero(gt(pointerCodesize, start)) { // Store the function selector of `ReadOutOfBounds()`. mstore(0x00, 0x84eb0dd1) // Revert with (offset, size). revert(0x1c, 0x04) } let size := sub(pointerCodesize, add(start, DATA_OFFSET)) // Get the pointer to the free memory and allocate // enough 32-byte words for the data and the length of the data, // then copy the code to the allocated memory. // Masking with 0xffe0 will suffice, since contract size is less than 16 bits. data := mload(0x40) mstore(0x40, add(data, and(add(size, 0x3f), 0xffe0))) mstore(data, size) mstore(add(add(data, 0x20), size), 0) // Zeroize the last slot. extcodecopy(pointer, add(data, 0x20), add(start, DATA_OFFSET), size) } } /// @dev Returns the `data` from the bytecode of the storage contract at `pointer`, /// from the byte at `start`, to the byte at `end` (exclusive) of the data stored. function read(address pointer, uint256 start, uint256 end) internal view returns (bytes memory data) { /// @solidity memory-safe-assembly assembly { let pointerCodesize := extcodesize(pointer) if iszero(pointerCodesize) { // Store the function selector of `InvalidPointer()`. mstore(0x00, 0x11052bb4) // Revert with (offset, size). revert(0x1c, 0x04) } // If `!(pointer.code.size > end) || (start > end)`, revert. // This also handles the cases where // `end + DATA_OFFSET` or `start + DATA_OFFSET` overflows. if iszero( and( gt(pointerCodesize, end), // Within bounds. iszero(gt(start, end)) // Valid range. ) ) { // Store the function selector of `ReadOutOfBounds()`. mstore(0x00, 0x84eb0dd1) // Revert with (offset, size). revert(0x1c, 0x04) } let size := sub(end, start) // Get the pointer to the free memory and allocate // enough 32-byte words for the data and the length of the data, // then copy the code to the allocated memory. // Masking with 0xffe0 will suffice, since contract size is less than 16 bits. data := mload(0x40) mstore(0x40, add(data, and(add(size, 0x3f), 0xffe0))) mstore(data, size) mstore(add(add(data, 0x20), size), 0) // Zeroize the last slot. extcodecopy(pointer, add(data, 0x20), add(start, DATA_OFFSET), size) } } }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Modern, minimalist, and gas efficient ERC-721 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol) abstract contract ERC721 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 indexed id); event Approval(address indexed owner, address indexed spender, uint256 indexed id); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /*////////////////////////////////////////////////////////////// METADATA STORAGE/LOGIC //////////////////////////////////////////////////////////////*/ string public name; string public symbol; function tokenURI(uint256 id) external view virtual returns (string memory); /*////////////////////////////////////////////////////////////// ERC721 BALANCE/OWNER STORAGE //////////////////////////////////////////////////////////////*/ mapping(uint256 => address) internal _ownerOf; mapping(address => uint256) internal _balanceOf; function ownerOf(uint256 id) public view virtual returns (address owner) { require((owner = _ownerOf[id]) != address(0), "NOT_MINTED"); } function balanceOf(address owner) public view virtual returns (uint256) { require(owner != address(0), "ZERO_ADDRESS"); return _balanceOf[owner]; } /*////////////////////////////////////////////////////////////// ERC721 APPROVAL STORAGE //////////////////////////////////////////////////////////////*/ mapping(uint256 => address) public getApproved; mapping(address => mapping(address => bool)) public isApprovedForAll; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(string memory _name, string memory _symbol) { name = _name; symbol = _symbol; } /*////////////////////////////////////////////////////////////// ERC721 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 id) public virtual { address owner = _ownerOf[id]; require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_AUTHORIZED"); getApproved[id] = spender; emit Approval(owner, spender, id); } function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function transferFrom( address from, address to, uint256 id ) public virtual { require(from == _ownerOf[id], "WRONG_FROM"); require(to != address(0), "INVALID_RECIPIENT"); require( msg.sender == from || isApprovedForAll[from][msg.sender] || msg.sender == getApproved[id], "NOT_AUTHORIZED" ); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. unchecked { _balanceOf[from]--; _balanceOf[to]++; } _ownerOf[id] = to; delete getApproved[id]; emit Transfer(from, to, id); } function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, "") == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); require( to.code.length == 0 || ERC721TokenReceiver(to).onERC721Received(msg.sender, from, id, data) == ERC721TokenReceiver.onERC721Received.selector, "UNSAFE_RECIPIENT" ); } /*////////////////////////////////////////////////////////////// ERC165 LOGIC //////////////////////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165 interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721 interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata } /*////////////////////////////////////////////////////////////// INTERNAL MINT LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 id) internal virtual { require(to != address(0), "INVALID_RECIPIENT"); require(_ownerOf[id] == address(0), "ALREADY_MINTED"); // Counter overflow is incredibly unrealistic. unchecked { _balanceOf[to]++; } _ownerOf[id] = to; emit Transfer(address(0), to, id); } } /// @notice A generic interface for a contract which properly accepts ERC721 tokens. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol) abstract contract ERC721TokenReceiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721TokenReceiver.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"json","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"setMintManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280601281526020017150726f6a65637420436c65617220426f6f6b60701b815250604051806040016040528060078152602001661410d08b53919560ca1b81525081600090816200006e91906200019b565b5060016200007d82826200019b565b5050506200009a62000094620000a060201b60201c565b620000a4565b62000267565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200012157607f821691505b6020821081036200014257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019657600081815260208120601f850160051c81016020861015620001715750805b601f850160051c820191505b8181101562000192578281556001016200017d565b5050505b505050565b81516001600160401b03811115620001b757620001b7620000f6565b620001cf81620001c884546200010c565b8462000148565b602080601f831160018114620002075760008415620001ee5750858301515b600019600386901b1c1916600185901b17855562000192565b600085815260208120601f198616915b82811015620002385788860151825594840194600190910190840162000217565b5085821015620002575787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6111e780620002776000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80638830eac0116100ad578063b88d4fde11610071578063b88d4fde1461026d578063c87b56dd14610280578063d5abeb0114610293578063e985e9c51461029b578063f2fde38b146102c957600080fd5b80638830eac01461021b5780638da5cb5b1461022e57806394d008ef1461023f57806395d89b4114610252578063a22cb4651461025a57600080fd5b806323b872dd116100f457806323b872dd146101b957806342842e0e146101cc5780636352211e146101df57806370a08231146101f2578063715018a61461021357600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b3146101a4575b600080fd5b610139610134366004610df7565b6102dc565b60405190151581526020015b60405180910390f35b61015661032e565b6040516101459190610e1b565b61018c610171366004610e69565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6101b76101b2366004610e99565b6103bc565b005b6101b76101c7366004610ec3565b6104a3565b6101b76101da366004610ec3565b61066a565b61018c6101ed366004610e69565b610762565b610205610200366004610eff565b6107b9565b604051908152602001610145565b6101b761081c565b6101b7610229366004610eff565b610852565b6006546001600160a01b031661018c565b6101b761024d366004610f63565b61089e565b6101566109d8565b6101b7610268366004610fcb565b6109e5565b6101b761027b366004611002565b610a51565b61015661028e366004610e69565b610b39565b610205608081565b6101396102a9366004611071565b600560209081526000928352604080842090915290825290205460ff1681565b6101b76102d7366004610eff565b610b5d565b60006301ffc9a760e01b6001600160e01b03198316148061030d57506380ac58cd60e01b6001600160e01b03198316145b806103285750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461033b906110a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610367906110a4565b80156103b45780601f10610389576101008083540402835291602001916103b4565b820191906000526020600020905b81548152906001019060200180831161039757829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061040557506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6104475760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600260205260409020546001600160a01b038481169116146104f95760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b604482015260640161043e565b6001600160a01b0382166105435760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161043e565b336001600160a01b038416148061057d57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061059e57506000818152600460205260409020546001600160a01b031633145b6105db5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161043e565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6106758383836104a3565b6001600160a01b0382163b158061071e5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071291906110de565b6001600160e01b031916145b61075d5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161043e565b505050565b6000818152600260205260409020546001600160a01b0316806107b45760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b604482015260640161043e565b919050565b60006001600160a01b0382166108005760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015260640161043e565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146108465760405162461bcd60e51b815260040161043e906110fb565b6108506000610bf8565b565b6006546001600160a01b0316331461087c5760405162461bcd60e51b815260040161043e906110fb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b608083106108ab57600080fd5b6008546040516001600160a01b03909116906316cacfa490869086906108d49087908790611130565b60405190819003812060e085901b6001600160e01b03191682526001600160a01b039093166004820152602481019190915260448101919091526064016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190611140565b61095d57600080fd5b61099c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c4a92505050565b600084815260076020526040902080546001600160a01b0319166001600160a01b03929092169190911790556109d28484610c8c565b50505050565b6001805461033b906110a4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610a5c8585856104a3565b6001600160a01b0384163b1580610af35750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610aa49033908a9089908990899060040161115d565b6020604051808303816000875af1158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906110de565b6001600160e01b031916145b610b325760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161043e565b5050505050565b600081815260076020526040902054606090610328906001600160a01b0316610d97565b6006546001600160a01b03163314610b875760405162461bcd60e51b815260040161043e906110fb565b6001600160a01b038116610bec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043e565b610bf581610bf8565b50565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f092505081610c865763301164256000526004601cfd5b90915290565b6001600160a01b038216610cd65760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161043e565b6000818152600260205260409020546001600160a01b031615610d2c5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b604482015260640161043e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060813b80610dae576311052bb46000526004601cfd5b600181039050604051915061ffe0603f820116820160405280825260008160208401015280600160208401853c50919050565b6001600160e01b031981168114610bf557600080fd5b600060208284031215610e0957600080fd5b8135610e1481610de1565b9392505050565b600060208083528351808285015260005b81811015610e4857858101830151858201604001528201610e2c565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215610e7b57600080fd5b5035919050565b80356001600160a01b03811681146107b457600080fd5b60008060408385031215610eac57600080fd5b610eb583610e82565b946020939093013593505050565b600080600060608486031215610ed857600080fd5b610ee184610e82565b9250610eef60208501610e82565b9150604084013590509250925092565b600060208284031215610f1157600080fd5b610e1482610e82565b60008083601f840112610f2c57600080fd5b50813567ffffffffffffffff811115610f4457600080fd5b602083019150836020828501011115610f5c57600080fd5b9250929050565b60008060008060608587031215610f7957600080fd5b610f8285610e82565b935060208501359250604085013567ffffffffffffffff811115610fa557600080fd5b610fb187828801610f1a565b95989497509550505050565b8015158114610bf557600080fd5b60008060408385031215610fde57600080fd5b610fe783610e82565b91506020830135610ff781610fbd565b809150509250929050565b60008060008060006080868803121561101a57600080fd5b61102386610e82565b945061103160208701610e82565b935060408601359250606086013567ffffffffffffffff81111561105457600080fd5b61106088828901610f1a565b969995985093965092949392505050565b6000806040838503121561108457600080fd5b61108d83610e82565b915061109b60208401610e82565b90509250929050565b600181811c908216806110b857607f821691505b6020821081036110d857634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156110f057600080fd5b8151610e1481610de1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8183823760009101908152919050565b60006020828403121561115257600080fd5b8151610e1481610fbd565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f8501168301019050969550505050505056fea264697066735822122073d6194707959a07b3cfcc59f84da7be64af665ca2a83698ab67b7ac4a95396664736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c80638830eac0116100ad578063b88d4fde11610071578063b88d4fde1461026d578063c87b56dd14610280578063d5abeb0114610293578063e985e9c51461029b578063f2fde38b146102c957600080fd5b80638830eac01461021b5780638da5cb5b1461022e57806394d008ef1461023f57806395d89b4114610252578063a22cb4651461025a57600080fd5b806323b872dd116100f457806323b872dd146101b957806342842e0e146101cc5780636352211e146101df57806370a08231146101f2578063715018a61461021357600080fd5b806301ffc9a71461012657806306fdde031461014e578063081812fc14610163578063095ea7b3146101a4575b600080fd5b610139610134366004610df7565b6102dc565b60405190151581526020015b60405180910390f35b61015661032e565b6040516101459190610e1b565b61018c610171366004610e69565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610145565b6101b76101b2366004610e99565b6103bc565b005b6101b76101c7366004610ec3565b6104a3565b6101b76101da366004610ec3565b61066a565b61018c6101ed366004610e69565b610762565b610205610200366004610eff565b6107b9565b604051908152602001610145565b6101b761081c565b6101b7610229366004610eff565b610852565b6006546001600160a01b031661018c565b6101b761024d366004610f63565b61089e565b6101566109d8565b6101b7610268366004610fcb565b6109e5565b6101b761027b366004611002565b610a51565b61015661028e366004610e69565b610b39565b610205608081565b6101396102a9366004611071565b600560209081526000928352604080842090915290825290205460ff1681565b6101b76102d7366004610eff565b610b5d565b60006301ffc9a760e01b6001600160e01b03198316148061030d57506380ac58cd60e01b6001600160e01b03198316145b806103285750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461033b906110a4565b80601f0160208091040260200160405190810160405280929190818152602001828054610367906110a4565b80156103b45780601f10610389576101008083540402835291602001916103b4565b820191906000526020600020905b81548152906001019060200180831161039757829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061040557506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b6104475760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000818152600260205260409020546001600160a01b038481169116146104f95760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b604482015260640161043e565b6001600160a01b0382166105435760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161043e565b336001600160a01b038416148061057d57506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b8061059e57506000818152600460205260409020546001600160a01b031633145b6105db5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b604482015260640161043e565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6106758383836104a3565b6001600160a01b0382163b158061071e5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af11580156106ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071291906110de565b6001600160e01b031916145b61075d5760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161043e565b505050565b6000818152600260205260409020546001600160a01b0316806107b45760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b604482015260640161043e565b919050565b60006001600160a01b0382166108005760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015260640161043e565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146108465760405162461bcd60e51b815260040161043e906110fb565b6108506000610bf8565b565b6006546001600160a01b0316331461087c5760405162461bcd60e51b815260040161043e906110fb565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b608083106108ab57600080fd5b6008546040516001600160a01b03909116906316cacfa490869086906108d49087908790611130565b60405190819003812060e085901b6001600160e01b03191682526001600160a01b039093166004820152602481019190915260448101919091526064016020604051808303816000875af1158015610930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109549190611140565b61095d57600080fd5b61099c82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c4a92505050565b600084815260076020526040902080546001600160a01b0319166001600160a01b03929092169190911790556109d28484610c8c565b50505050565b6001805461033b906110a4565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610a5c8585856104a3565b6001600160a01b0384163b1580610af35750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610aa49033908a9089908990899060040161115d565b6020604051808303816000875af1158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906110de565b6001600160e01b031916145b610b325760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b604482015260640161043e565b5050505050565b600081815260076020526040902054606090610328906001600160a01b0316610d97565b6006546001600160a01b03163314610b875760405162461bcd60e51b815260040161043e906110fb565b6001600160a01b038116610bec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043e565b610bf581610bf8565b50565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008151600181018060401b6a61000080600a3d393df300178452600a8101601585016000f092505081610c865763301164256000526004601cfd5b90915290565b6001600160a01b038216610cd65760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b604482015260640161043e565b6000818152600260205260409020546001600160a01b031615610d2c5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b604482015260640161043e565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060813b80610dae576311052bb46000526004601cfd5b600181039050604051915061ffe0603f820116820160405280825260008160208401015280600160208401853c50919050565b6001600160e01b031981168114610bf557600080fd5b600060208284031215610e0957600080fd5b8135610e1481610de1565b9392505050565b600060208083528351808285015260005b81811015610e4857858101830151858201604001528201610e2c565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215610e7b57600080fd5b5035919050565b80356001600160a01b03811681146107b457600080fd5b60008060408385031215610eac57600080fd5b610eb583610e82565b946020939093013593505050565b600080600060608486031215610ed857600080fd5b610ee184610e82565b9250610eef60208501610e82565b9150604084013590509250925092565b600060208284031215610f1157600080fd5b610e1482610e82565b60008083601f840112610f2c57600080fd5b50813567ffffffffffffffff811115610f4457600080fd5b602083019150836020828501011115610f5c57600080fd5b9250929050565b60008060008060608587031215610f7957600080fd5b610f8285610e82565b935060208501359250604085013567ffffffffffffffff811115610fa557600080fd5b610fb187828801610f1a565b95989497509550505050565b8015158114610bf557600080fd5b60008060408385031215610fde57600080fd5b610fe783610e82565b91506020830135610ff781610fbd565b809150509250929050565b60008060008060006080868803121561101a57600080fd5b61102386610e82565b945061103160208701610e82565b935060408601359250606086013567ffffffffffffffff81111561105457600080fd5b61106088828901610f1a565b969995985093965092949392505050565b6000806040838503121561108457600080fd5b61108d83610e82565b915061109b60208401610e82565b90509250929050565b600181811c908216806110b857607f821691505b6020821081036110d857634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156110f057600080fd5b8151610e1481610de1565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b8183823760009101908152919050565b60006020828403121561115257600080fd5b8151610e1481610fbd565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f8501168301019050969550505050505056fea264697066735822122073d6194707959a07b3cfcc59f84da7be64af665ca2a83698ab67b7ac4a95396664736f6c63430008110033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.