Overview
Max Total Supply
0 EXRTP
Holders
515
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
1 EXRTPLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
TrainingPassERC721
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @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/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.15; import {IERC721} from "openzeppelin-contracts/token/ERC721/IERC721.sol"; import {IERC721Metadata} from "openzeppelin-contracts/token/ERC721/extensions/IERC721Metadata.sol"; import {IERC165} from "openzeppelin-contracts/utils/introspection/IERC165.sol"; import {ERC165} from "openzeppelin-contracts/utils/introspection/ERC165.sol"; /// @title A custom ERC-721 implementation for soulbound tokens /// @author RaceDev /// @notice An ERC-721 token that cannot be transferred, or sold /// @dev Heavily inspired by Solmate's ERC721 and Party DAO's CrowdfundNFT abstract contract SoulBoundERC721 is ERC165, IERC721, IERC721Metadata { string private _name; string private _symbol; mapping(uint256 => address) internal _owners; /*////////////////////////////////////////////// E R R O R S //////////////////////////////////////////////*/ error SoulBound(); error AlreadyBurnedError(address owner, uint256 tokenId); error InvalidTokenError(uint256 tokenId); error AlreadyMintedError(address owner, uint256 tokenId); /*////////////////////////////////////////////// M O D I F I E R S //////////////////////////////////////////////*/ modifier soulBound() { revert SoulBound(); _; // Compiler requires this. } /*////////////////////////////////////////////// C O N S T R U C T O R //////////////////////////////////////////////*/ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /*////////////////////////////////////////////// M E T A D A T A //////////////////////////////////////////////*/ function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } /*////////////////////////////////////////////// E R C 7 2 1 //////////////////////////////////////////////*/ /// @notice Returns the user's balance /// @dev Can only be 1 or 0. function balanceOf(address owner) external view returns (uint256 numTokens) { return _doesTokenExistFor(owner) ? 1 : 0; } /// @notice Returns the owner of a given ID function ownerOf(uint256 tokenId) public view returns (address owner) { owner = _owners[tokenId]; if (owner == address(0)) { revert InvalidTokenError(tokenId); } } /*////////////////////////////////////////////// S O U L B O N D I N G //////////////////////////////////////////////*/ /// @notice NB: Don't call. Token is Soulbound - this will fail. function transferFrom( address, address, uint256 ) external soulBound {} /// @notice NB: Don't call. Token is Soulbound - this will fail. function safeTransferFrom( address, address, uint256 ) external soulBound {} /// @notice NB: Don't call. Token is Soulbound - this will fail. function safeTransferFrom( address, address, uint256, bytes calldata ) external soulBound {} /// @notice NB: Don't call. Token is Soulbound - this will fail. function approve(address, uint256) external soulBound {} /// @notice NB: Don't call. Token is Soulbound - this will fail. function setApprovalForAll(address, bool) external soulBound {} /// @notice NB: Don't call. Token is Soulbound - this will fail. function getApproved(uint256) external pure returns (address) { return address(0); } /// @notice This is a soulbound NFT and cannot be transferred. /// Attempting to call this function will always return false. function isApprovedForAll(address, address) external pure returns (bool) { return false; } /*////////////////////////////////////////////// C O M P L I A N C E //////////////////////////////////////////////*/ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /*////////////////////////////////////////////// I N T E R N A L //////////////////////////////////////////////*/ /// @dev No need to increment a tokenId, as each owner address /// will generate a unique tokenId. function _mint(address owner) internal returns (uint256 tokenId) { tokenId = _addressToTokenId(owner); if (_owners[tokenId] != owner) { _owners[tokenId] = owner; emit Transfer(address(0), owner, tokenId); } else { revert AlreadyMintedError(owner, tokenId); } } function _burn(address owner) internal { uint256 tokenId = _addressToTokenId(owner); if (_owners[tokenId] == owner) { delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); return; } revert AlreadyBurnedError(owner, tokenId); } /*////////////////////////////////////////////// U T I L S //////////////////////////////////////////////*/ function _doesTokenExistFor(address owner) internal view returns (bool) { return _owners[_addressToTokenId(owner)] != address(0); } function _addressToTokenId(address user) internal pure returns (uint256 tokenId) { tokenId = uint256(uint160(user)); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.15; import {SoulBoundERC721} from "./SoulboundERC721.sol"; /// @title A Soulbound Training Pass ERC721 for the EXR ecosystem /// @author RacerDev /// @notice The Training Pass is a utility NFT and can only be airdropped to someone /// who holds at least one Pilot, one Racecraft, and one Booster /// @dev Users cannot mint for themselves - passes can only be airdropped by an authorized user /// @dev Tokens cannot be sold or transferred, but can be burned by the user /// @dev All tokens in this contract share the `sharedUri` as the `tokenURI` /// @dev Token IDs are not sequential and are derived from each user's address, therefore unique contract TrainingPassERC721 is SoulBoundERC721 { // the metadata uri shared by every token string private sharedUri; // the contract owner, ie. super admin address private immutable owner; // stores authorized users (capable of airdropping/minting) mapping(address => bool) private _authorized; // keeps track of which tokens (by user) have been burned mapping(address => bool) private _burned; /*////////////////////////////////////////////// E R R O R S //////////////////////////////////////////////*/ error NotAuthorized(); error OnlyOwner(); error NotTokenOwner(); error TokenAlreadyBurned(); /*////////////////////////////////////////////// M O D I F I E R S //////////////////////////////////////////////*/ modifier onlyOwner() { if (msg.sender != owner) { revert OnlyOwner(); } _; } modifier onlyAuthorized() { if (!_authorized[msg.sender]) revert NotAuthorized(); _; } /*////////////////////////////////////////////// C O N S T R U C T O R //////////////////////////////////////////////*/ constructor( string memory name_, string memory symbol_, string memory uri_ ) SoulBoundERC721(name_, symbol_) { owner = msg.sender; sharedUri = uri_; } /*////////////////////////////////////////////// C O N V E N I E N C E //////////////////////////////////////////////*/ /// @notice convenience function to check if an address is an authorized user function isAuthorizedUser(address user) external view returns (bool) { return _authorized[user]; } function hasUserBurnedToken(address user) external view returns (bool) { return _burned[user]; } /*////////////////////////////////////////////// M E T A D A T A //////////////////////////////////////////////*/ /// @notice Returns the metadata URI for a given token ID /// @dev All tokens return the same `sharedUri` function tokenURI(uint256 tokenId) public view override returns (string memory) { if (_owners[tokenId] == address(0)) { revert InvalidTokenError(tokenId); } return sharedUri; } /*////////////////////////////////////////////// U S E R F U N C T I O N S //////////////////////////////////////////////*/ /// @notice Burns the soulbound token. Cannot be reclaimed once burned. /// @dev Marks the token as burned in `_burned` so it cannot be reminted. function burn() external { uint256 id = _addressToTokenId(msg.sender); if (msg.sender != _owners[id]) revert NotTokenOwner(); _burned[msg.sender] = true; _burn(msg.sender); } /*////////////////////////////////////////////// A U T H O R I Z E D //////////////////////////////////////////////*/ /// @notice Airdrops a token to a user. /// @dev Can only be minted/airdroped by an authorized user. function airdrop(address user) external onlyAuthorized returns (uint256 tokenId) { if (_burned[user]) { revert TokenAlreadyBurned(); } tokenId = _mint(user); } /*////////////////////////////////////////////// O W N E R //////////////////////////////////////////////*/ /// @notice Adds an authorized user to the contract. /// @dev Only authorized users can mint/airdrop tokens. function addAuthorizedUser(address user) external onlyOwner { _authorized[user] = true; } /// @notice Removes an authorized user from the contract. function removeAuthorizedUser(address user) external onlyOwner { _authorized[user] = false; } /// @notice Updates the metadata URI function updateURI(string memory newUri_) external onlyOwner { sharedUri = newUri_; } }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "bytecodeHash": "none" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"uri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AlreadyBurnedError","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"AlreadyMintedError","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"InvalidTokenError","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"NotTokenOwner","type":"error"},{"inputs":[],"name":"OnlyOwner","type":"error"},{"inputs":[],"name":"SoulBound","type":"error"},{"inputs":[],"name":"TokenAlreadyBurned","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"addAuthorizedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"airdrop","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"hasUserBurnedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isAuthorizedUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeAuthorizedUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"setApprovalForAll","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":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri_","type":"string"}],"name":"updateURI","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200148e3803806200148e83398101604081905262000034916200013f565b828260006200004483826200025f565b5060016200005382826200025f565b5050336080525060036200006882826200025f565b505050506200032b565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200009a57600080fd5b81516001600160401b0380821115620000b757620000b762000072565b604051601f8301601f19908116603f01168101908282118183101715620000e257620000e262000072565b81604052838152602092508683858801011115620000ff57600080fd5b600091505b8382101562000123578582018301518183018401529082019062000104565b83821115620001355760008385830101525b9695505050505050565b6000806000606084860312156200015557600080fd5b83516001600160401b03808211156200016d57600080fd5b6200017b8783880162000088565b945060208601519150808211156200019257600080fd5b620001a08783880162000088565b93506040860151915080821115620001b757600080fd5b50620001c68682870162000088565b9150509250925092565b600181811c90821680620001e557607f821691505b6020821081036200020657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025a57600081815260208120601f850160051c81016020861015620002355750805b601f850160051c820191505b81811015620002565782815560010162000241565b5050505b505050565b81516001600160401b038111156200027b576200027b62000072565b62000293816200028c8454620001d0565b846200020c565b602080601f831160018114620002cb5760008415620002b25750858301515b600019600386901b1c1916600185901b17855562000256565b600085815260208120601f198616915b82811015620002fc57888601518255948401946001909101908401620002db565b50858210156200031b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6080516111396200035560003960008181610512015281816107ce015261089801526111396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636352211e116100cd578063b88d4fde11610081578063c87b56dd11610066578063c87b56dd146102ef578063e985e9c514610302578063ec17e13a1461031857600080fd5b8063b88d4fde146102ce578063c30f4a5a146102dc57600080fd5b806389fabc80116100b257806389fabc80146102a557806395d89b41146102b8578063a22cb465146102c057600080fd5b80636352211e1461027f57806370a082311461029257600080fd5b806321860a051161012457806336f5fa511161010957806336f5fa511461023e57806342842e0e1461023057806344df8e701461027757600080fd5b806321860a051461020f57806323b872dd1461023057600080fd5b8063081812fc11610155578063081812fc146101ae578063095ea7b3146101e7578063177d2a74146101fc57600080fd5b806301ffc9a71461017157806306fdde0314610199575b600080fd5b61018461017f366004610bee565b610351565b60405190151581526020015b60405180910390f35b6101a1610436565b6040516101909190610c37565b6101c26101bc366004610caa565b50600090565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101fa6101f5366004610ce7565b6104c8565b005b6101fa61020a366004610d11565b6104fa565b61022261021d366004610d11565b6105b8565b604051908152602001610190565b6101fa6101f5366004610d2c565b61018461024c366004610d11565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205460ff1690565b6101fa61066a565b6101c261028d366004610caa565b61070c565b6102226102a0366004610d11565b610775565b6101fa6102b3366004610d11565b6107b6565b6101a1610871565b6101fa6101f5366004610d68565b6101fa6101f5366004610da4565b6101fa6102ea366004610e6e565b610880565b6101a16102fd366004610caa565b6108ff565b610184610310366004610f3d565b600092915050565b610184610326366004610d11565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806103e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061043057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461044590610f70565b80601f016020809104026020016040519081016040528092919081815260200182805461047190610f70565b80156104be5780601f10610493576101008083540402835291602001916104be565b820191906000526020600020905b8154815290600101906020018083116104a157829003601f168201915b5050505050905090565b6040517f24cf071e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610569576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b3360009081526004602052604081205460ff16610601576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604090205460ff1615610661576040517f8af5f39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610430826109f2565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1681146106c8576040517f59dc379f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561070990610af2565b50565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610770576040517f557fc64e000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600260205260408120549091166107aa5760006107ad565b60015b60ff1692915050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610825576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461044590610f70565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146108ef576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036108fb8282611012565b5050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16610960576040517f557fc64e00000000000000000000000000000000000000000000000000000000815260048101839052602401610767565b6003805461096d90610f70565b80601f016020809104026020016040519081016040528092919081815260200182805461099990610f70565b80156109e65780601f106109bb576101008083540402835291602001916109e6565b820191906000526020600020905b8154815290600101906020018083116109c957829003601f168201915b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600260205260409020549091168114610aa15760008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4919050565b6040517fc343b42b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610767565b73ffffffffffffffffffffffffffffffffffffffff818116600081815260026020526040902054909116819003610b9d5760008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040517f16bf921900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610767565b600060208284031215610c0057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610c3057600080fd5b9392505050565b600060208083528351808285015260005b81811015610c6457858101830151858201604001528201610c48565b81811115610c76576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610cbc57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461077057600080fd5b60008060408385031215610cfa57600080fd5b610d0383610cc3565b946020939093013593505050565b600060208284031215610d2357600080fd5b610c3082610cc3565b600080600060608486031215610d4157600080fd5b610d4a84610cc3565b9250610d5860208501610cc3565b9150604084013590509250925092565b60008060408385031215610d7b57600080fd5b610d8483610cc3565b915060208301358015158114610d9957600080fd5b809150509250929050565b600080600080600060808688031215610dbc57600080fd5b610dc586610cc3565b9450610dd360208701610cc3565b935060408601359250606086013567ffffffffffffffff80821115610df757600080fd5b818801915088601f830112610e0b57600080fd5b813581811115610e1a57600080fd5b896020828501011115610e2c57600080fd5b9699959850939650602001949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610e8057600080fd5b813567ffffffffffffffff80821115610e9857600080fd5b818401915084601f830112610eac57600080fd5b813581811115610ebe57610ebe610e3f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610f0457610f04610e3f565b81604052828152876020848701011115610f1d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215610f5057600080fd5b610f5983610cc3565b9150610f6760208401610cc3565b90509250929050565b600181811c90821680610f8457607f821691505b602082108103610fbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561100d57600081815260208120601f850160051c81016020861015610fea5750805b601f850160051c820191505b8181101561100957828155600101610ff6565b5050505b505050565b815167ffffffffffffffff81111561102c5761102c610e3f565b6110408161103a8454610f70565b84610fc3565b602080601f831160018114611093576000841561105d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611009565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156110e0578886015182559484019460019091019084016110c1565b508582101561111c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c634300080f000a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001145585220547261696e696e67205061737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054558525450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e68747470733a2f2f6578722e6d7970696e6174612e636c6f75642f697066732f516d5041356f3553624542725a4c4e7154723243396144455743384165454e4258636a4733546a4d507643715169000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80636352211e116100cd578063b88d4fde11610081578063c87b56dd11610066578063c87b56dd146102ef578063e985e9c514610302578063ec17e13a1461031857600080fd5b8063b88d4fde146102ce578063c30f4a5a146102dc57600080fd5b806389fabc80116100b257806389fabc80146102a557806395d89b41146102b8578063a22cb465146102c057600080fd5b80636352211e1461027f57806370a082311461029257600080fd5b806321860a051161012457806336f5fa511161010957806336f5fa511461023e57806342842e0e1461023057806344df8e701461027757600080fd5b806321860a051461020f57806323b872dd1461023057600080fd5b8063081812fc11610155578063081812fc146101ae578063095ea7b3146101e7578063177d2a74146101fc57600080fd5b806301ffc9a71461017157806306fdde0314610199575b600080fd5b61018461017f366004610bee565b610351565b60405190151581526020015b60405180910390f35b6101a1610436565b6040516101909190610c37565b6101c26101bc366004610caa565b50600090565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101fa6101f5366004610ce7565b6104c8565b005b6101fa61020a366004610d11565b6104fa565b61022261021d366004610d11565b6105b8565b604051908152602001610190565b6101fa6101f5366004610d2c565b61018461024c366004610d11565b73ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205460ff1690565b6101fa61066a565b6101c261028d366004610caa565b61070c565b6102226102a0366004610d11565b610775565b6101fa6102b3366004610d11565b6107b6565b6101a1610871565b6101fa6101f5366004610d68565b6101fa6101f5366004610da4565b6101fa6102ea366004610e6e565b610880565b6101a16102fd366004610caa565b6108ff565b610184610310366004610f3d565b600092915050565b610184610326366004610d11565b73ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806103e457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061043057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461044590610f70565b80601f016020809104026020016040519081016040528092919081815260200182805461047190610f70565b80156104be5780601f10610493576101008083540402835291602001916104be565b820191906000526020600020905b8154815290600101906020018083116104a157829003601f168201915b5050505050905090565b6040517f24cf071e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002d5a7128a39c88f3f7d6f3f8eaff91299ae703a01614610569576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b3360009081526004602052604081205460ff16610601576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604090205460ff1615610661576040517f8af5f39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610430826109f2565b3360008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1681146106c8576040517f59dc379f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260056020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561070990610af2565b50565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610770576040517f557fc64e000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b919050565b73ffffffffffffffffffffffffffffffffffffffff8082166000908152600260205260408120549091166107aa5760006107ad565b60015b60ff1692915050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002d5a7128a39c88f3f7d6f3f8eaff91299ae703a01614610825576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60606001805461044590610f70565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002d5a7128a39c88f3f7d6f3f8eaff91299ae703a016146108ef576040517f5fc483c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60036108fb8282611012565b5050565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16610960576040517f557fc64e00000000000000000000000000000000000000000000000000000000815260048101839052602401610767565b6003805461096d90610f70565b80601f016020809104026020016040519081016040528092919081815260200182805461099990610f70565b80156109e65780601f106109bb576101008083540402835291602001916109e6565b820191906000526020600020905b8154815290600101906020018083116109c957829003601f168201915b50505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600260205260409020549091168114610aa15760008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4919050565b6040517fc343b42b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610767565b73ffffffffffffffffffffffffffffffffffffffff818116600081815260026020526040902054909116819003610b9d5760008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555182919073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6040517f16bf921900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610767565b600060208284031215610c0057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610c3057600080fd5b9392505050565b600060208083528351808285015260005b81811015610c6457858101830151858201604001528201610c48565b81811115610c76576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b600060208284031215610cbc57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461077057600080fd5b60008060408385031215610cfa57600080fd5b610d0383610cc3565b946020939093013593505050565b600060208284031215610d2357600080fd5b610c3082610cc3565b600080600060608486031215610d4157600080fd5b610d4a84610cc3565b9250610d5860208501610cc3565b9150604084013590509250925092565b60008060408385031215610d7b57600080fd5b610d8483610cc3565b915060208301358015158114610d9957600080fd5b809150509250929050565b600080600080600060808688031215610dbc57600080fd5b610dc586610cc3565b9450610dd360208701610cc3565b935060408601359250606086013567ffffffffffffffff80821115610df757600080fd5b818801915088601f830112610e0b57600080fd5b813581811115610e1a57600080fd5b896020828501011115610e2c57600080fd5b9699959850939650602001949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215610e8057600080fd5b813567ffffffffffffffff80821115610e9857600080fd5b818401915084601f830112610eac57600080fd5b813581811115610ebe57610ebe610e3f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610f0457610f04610e3f565b81604052828152876020848701011115610f1d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215610f5057600080fd5b610f5983610cc3565b9150610f6760208401610cc3565b90509250929050565b600181811c90821680610f8457607f821691505b602082108103610fbd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561100d57600081815260208120601f850160051c81016020861015610fea5750805b601f850160051c820191505b8181101561100957828155600101610ff6565b5050505b505050565b815167ffffffffffffffff81111561102c5761102c610e3f565b6110408161103a8454610f70565b84610fc3565b602080601f831160018114611093576000841561105d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611009565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156110e0578886015182559484019460019091019084016110c1565b508582101561111c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c634300080f000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001145585220547261696e696e67205061737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054558525450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004e68747470733a2f2f6578722e6d7970696e6174612e636c6f75642f697066732f516d5041356f3553624542725a4c4e7154723243396144455743384165454e4258636a4733546a4d507643715169000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): EXR Training Pass
Arg [1] : symbol_ (string): EXRTP
Arg [2] : uri_ (string): https://exr.mypinata.cloud/ipfs/QmPA5o5SbEBrZLNqTr2C9aDEWC8AeENBXcjG3TjMPvCqQi
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000011
Arg [4] : 45585220547261696e696e672050617373000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 4558525450000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000004e
Arg [8] : 68747470733a2f2f6578722e6d7970696e6174612e636c6f75642f697066732f
Arg [9] : 516d5041356f3553624542725a4c4e7154723243396144455743384165454e42
Arg [10] : 58636a4733546a4d507643715169000000000000000000000000000000000000
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.