ETH Price: $1,952.38 (-5.46%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...242229132026-01-13 2:48:1145 days ago1768272491IN
0xa5ea010a...20358dfD8
0 ETH0.000001090.04529097
Set Approval For...242210432026-01-12 20:33:1145 days ago1768249991IN
0xa5ea010a...20358dfD8
0 ETH0.000001050.04359465
Set Approval For...241224512025-12-30 2:23:1159 days ago1767061391IN
0xa5ea010a...20358dfD8
0 ETH0.000004590.1
Set Approval For...236584482025-10-26 1:47:47124 days ago1761443267IN
0xa5ea010a...20358dfD8
0 ETH0.000016270.67548819
Set Approval For...231612262025-08-17 13:58:11193 days ago1755439091IN
0xa5ea010a...20358dfD8
0 ETH0.000008490.18468302
Set Approval For...228794272025-07-09 5:05:11233 days ago1752037511IN
0xa5ea010a...20358dfD8
0 ETH0.000054612.26666943
Set Approval For...226713932025-06-10 3:10:35262 days ago1749525035IN
0xa5ea010a...20358dfD8
0 ETH0.000038081.5844479
Set Approval For...225720322025-05-27 5:27:11276 days ago1748323631IN
0xa5ea010a...20358dfD8
0 ETH0.00002230.48475529
Set Approval For...225719942025-05-27 5:19:35276 days ago1748323175IN
0xa5ea010a...20358dfD8
0 ETH0.00002250.49012981
Set Approval For...225566102025-05-25 1:36:23278 days ago1748136983IN
0xa5ea010a...20358dfD8
0 ETH0.000022030.47891114
Set Approval For...225547212025-05-24 19:15:59278 days ago1748114159IN
0xa5ea010a...20358dfD8
0 ETH0.00002130.46300952
Set Approval For...225348332025-05-22 0:27:23281 days ago1747873643IN
0xa5ea010a...20358dfD8
0 ETH0.000053232.03918315
Set Approval For...225348322025-05-22 0:27:11281 days ago1747873631IN
0xa5ea010a...20358dfD8
0 ETH0.000091721.99364859
Set Approval For...224934712025-05-16 5:10:11287 days ago1747372211IN
0xa5ea010a...20358dfD8
0 ETH0.000032370.70485973
Set Approval For...224846072025-05-14 23:16:35288 days ago1747264595IN
0xa5ea010a...20358dfD8
0 ETH0.000029730.64645302
Set Approval For...224491252025-05-09 23:24:59293 days ago1746833099IN
0xa5ea010a...20358dfD8
0 ETH0.000036351.39264701
Set Approval For...223376322025-04-24 8:18:47309 days ago1745482727IN
0xa5ea010a...20358dfD8
0 ETH0.000028241.17498922
Set Approval For...217849582025-02-06 4:04:59386 days ago1738814699IN
0xa5ea010a...20358dfD8
0 ETH0.00005061.1
Set Approval For...217847782025-02-06 3:28:47386 days ago1738812527IN
0xa5ea010a...20358dfD8
0 ETH0.000046851.0184412
Set Approval For...217498802025-02-01 6:28:47391 days ago1738391327IN
0xa5ea010a...20358dfD8
0 ETH0.000089281.94074099
Set Approval For...217224802025-01-28 10:38:59395 days ago1738060739IN
0xa5ea010a...20358dfD8
0 ETH0.000090843.47969356
Set Approval For...217224772025-01-28 10:38:23395 days ago1738060703IN
0xa5ea010a...20358dfD8
0 ETH0.000155713.38448974
Set Approval For...215170662024-12-30 18:24:47423 days ago1735583087IN
0xa5ea010a...20358dfD8
0 ETH0.0005576412.13970196
Set Approval For...213302092024-12-04 16:04:47449 days ago1733328287IN
0xa5ea010a...20358dfD8
0 ETH0.0023188150.49241475
Set Approval For...213302092024-12-04 16:04:47449 days ago1733328287IN
0xa5ea010a...20358dfD8
0 ETH0.0023230550.49241475
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
default evmVersion, MIT license

Contract Source Code (Vyper language format)

# @version 0.3.7
# @notice NPC-ers NFT
# @dev Implementation of ERC-721 non-fungible token standard.
# @author npcers.eth
# @license MIT
# Modified from: https://github.com/vyperlang/vyper/blob/de74722bf2d8718cca46902be165f9fe0e3641dd/examples/tokens/ERC721.vy

"""
         :=+******++=-:                 
      -+*+======------=+++=:            
     #+========------------=++=.        
    #+=======------------------++:      
   *+=======--------------------:++     
  =*=======------------------------*.   
 .%========-------------------------*.  
 %+=======-------------------------:-#  
+*========--------------------------:#  
%=========--------------------------:#. 
%=========--------------------+**=--:++ 
#+========-----=*#%#=--------#@@@@+-::*:
:%========-----+@@@@%=-------=@@@@#-::+=
 -#======-------+@@@%=----=*=--+**=-::#:
  :#+====---------==----===@%=------::% 
    #+===-------------======@%=------:=+
    .%===------------=======+@%------::#
     #+==-----------=========+@%-------+
     %===------------*%%%%%%%%@@#-----#.
     %====-----------============----#: 
     *+==#+----------+##%%%%%%%%@--=*.  
     -#==+%=---------=+=========--*=    
      +===+%+--------------------*-     
       =====*#=------------------#      
       .======*#*=------------=*+.      
         -======+*#*+--------*+         
          .-========+***+++=-.          
             .-=======:           

"""

from vyper.interfaces import ERC20
from vyper.interfaces import ERC165
from vyper.interfaces import ERC721

implements: ERC721
implements: ERC165

# Interface for the contract called by safeTransferFrom()
interface ERC721Receiver:
    def onERC721Received(
            operator: address,
            sender: address,
            tokenId: uint256,
            data: Bytes[1024]
        ) -> bytes4: nonpayable


# @dev Emits when ownership of any NFT changes by any mechanism.
#      This event emits when NFTs are created (`from` == 0) and destroyed (`to` == 0).
#      Exception: during contract creation, any number of NFTs may be created and assigned without emitting.
#      At the time of any transfer, the approved address for that NFT (if any) is reset to none.
# @param _from Sender of NFT (if address is zero address it indicates token creation).
# @param _to Receiver of NFT (if address is zero address it indicates token destruction).
# @param _tokenId The NFT that got transfered.

event Transfer:
    _from: indexed(address)
    _to: indexed(address)
    _tokenId: indexed(uint256)


# @dev This emits when the approved address for an NFT is changed or reaffirmed.
#      The zero address indicates there is no approved address.
#      When a Transfer event emits, this also indicates any approved address resets to none.
# @param _owner Owner of NFT.
# @param _approved Address that we are approving.
# @param _tokenId NFT which we are approving.

event Approval:
    _owner: indexed(address)
    _approved: indexed(address)
    _tokenId: indexed(uint256)


# @dev This emits when an operator is enabled or disabled for an owner.
#      The operator can manage all NFTs of the owner.
# @param _owner Owner of NFT.
# @param _operator Address to which we are setting operator rights.
# @param _approved Status of operator rights (true if operator rights given, false if revoked).

event ApprovalForAll:
    _owner: indexed(address)
    _operator: indexed(address)
    _approved: bool

IDENTITY_PRECOMPILE: constant(address) = 0x0000000000000000000000000000000000000004

# Metadata
symbol: public(String[32])
name: public(String[32])

# Permission
owner: public(address)
minter: public(address)

# URI
base_uri: public(String[128])
contract_uri: String[128]

# NFT Data
token_by_owner: HashMap[address, HashMap[uint256, uint256]]
token_count: uint256

owned_tokens: HashMap[uint256, address]                       # @dev NFT ID to the address that owns it
token_approvals: HashMap[uint256, address]                    # @dev NFT ID to approved address
operator_approvals: HashMap[address, HashMap[address, bool]]  # @dev Owner address to mapping of operator addresses
balances: HashMap[address, uint256]                           # @dev Owner address to token count

# @dev Static list of supported ERC165 interface ids
SUPPORTED_INTERFACES: constant(bytes4[5]) = [
    0x01FFC9A7,  # ERC165
    0x80AC58CD,  # ERC721
    0x150B7A02,  # ERC721TokenReceiver
    0x780E9D63,  # ERC721Enumerable
    0x5B5E139F,  # ERC721Metadata
]

# Custom NPC
revealed: public(bool)
default_uri: public(String[150])


@external
def __init__():
    self.symbol = "NPC"
    self.name = "NPC-ers"

    self.owner = msg.sender
    self.minter = msg.sender

    self.base_uri = "ipfs://bafybeibzrvcnrfzy6q5t5tkzmzktdqwlbvywtgzxybdkycubquh3e5rl2u/"
    self.contract_uri = "ipfs://QmTPTu31EEFawxbXEiAaZehLajRAKc7YhxPkTSg31SNVSe"
    self.default_uri = "ipfs://QmPQZadNVNeJ729toJ3ZTjSvC2xhgsQDJuwfSJRN43T2eu"

    self.revealed = True


@pure
@external
def supportsInterface(interface_id: bytes4) -> bool:
    """
    @notice Query if a contract implements an interface.
    @dev Interface identification is specified in ERC-165.
    @param interface_id Bytes4 representing the interface.
    @return bool True if supported.
    """

    return interface_id in SUPPORTED_INTERFACES


### VIEW FUNCTIONS ###


@view
@external
def balanceOf(owner: address) -> uint256:
    """
    @notice Count all NFTs assigned to an owner.
    @dev Returns the number of NFTs owned by `owner`.
         Throws if `owner` is the zero address.
         NFTs assigned to the zero address are considered invalid.
    @param owner Address for whom to query the balance.
    @return The address of the owner of the NFT
    """

    assert owner != empty(address)  # dev: "ERC721: balance query for the zero address"
    return self.balances[owner]


@view
@external
def ownerOf(token_id: uint256) -> address:
    """
    @notice Find the owner of an NFT.
    @dev Returns the address of the owner of the NFT.
         Throws if `token_id` is not a valid NFT.
    @param token_id The identifier for an NFT.
    @return The address of the owner of the NFT
    """

    owner: address = self.owned_tokens[token_id]
    assert owner != empty(address)  # dev: "ERC721: owner query for nonexistent token"
    return owner


@view
@external
def getApproved(token_id: uint256) -> address:
    """
    @notice Get the approved address for a single NFT
    @dev Get the approved address for a single NFT.
         Throws if `token_id` is not a valid NFT.
    @param token_id ID of the NFT for which to query approval.
    @return The approved address for this NFT, or the zero address if there is none
    """

    assert self.owned_tokens[token_id] != empty(
        address
    )  # dev: "ERC721: approved query for nonexistent token"
    return self.token_approvals[token_id]


@view
@external
def isApprovedForAll(owner: address, operator: address) -> bool:
    """
    @notice Query if an address is an authorized operator for another address
    @dev Checks if `operator` is an approved operator for `owner`.
    @param owner The address that owns the NFTs.
    @param operator The address that acts on behalf of the owner.
    @return True if `_operator` is an approved operator for `_owner`, false otherwise
    """

    return (self.operator_approvals[owner])[operator]


### TRANSFER FUNCTION HELPERS ###


@view
@internal
def _is_approved_or_owner(spender: address, token_id: uint256) -> bool:
    """
    @dev Returns whether the given spender can transfer a given token ID
    @param spender address of the spender to query
    @param token_id uint256 ID of the token to be transferred
    @return bool whether the msg.sender is approved for the given token ID,
        is an operator of the owner, or is the owner of the token
    """

    owner: address = self.owned_tokens[token_id]
    spender_is_owner: bool = owner == spender
    spender_is_approved: bool = spender == self.token_approvals[token_id]
    spender_is_approved_for_all: bool = self.operator_approvals[owner][spender]

    return (spender_is_owner or spender_is_approved) or spender_is_approved_for_all


@internal
def _add_token_to(_to: address, _token_id: uint256):
    """
    @dev Add a NFT to a given address
         Throws if `_token_id` is owned by someone.
    """

    # Throws if `_token_id` is owned by someone
    assert self.owned_tokens[_token_id] == empty(address)

    # Change the owner
    self.owned_tokens[_token_id] = _to

    # Change count tracking
    self.token_by_owner[_to][self.balances[_to]] = _token_id
    self.balances[_to] += 1


@internal
def _remove_token_from(_from: address, _token_id: uint256):
    """
    @dev Remove an NFT from a given address
         Throws if `_from` is not the current owner.
    """

    # Throws if `_from` is not the current owner
    assert self.owned_tokens[_token_id] == _from

    # Change the owner
    self.owned_tokens[_token_id] = empty(address)

    # Change count tracking
    self.balances[_from] -= 1


@internal
def _clear_approval(_owner: address, _token_id: uint256):
    """
    @dev Clear an approval of a given address
         Throws if `_owner` is not the current owner.
    """

    # Throws if `_owner` is not the current owner
    assert self.owned_tokens[_token_id] == _owner
    if self.token_approvals[_token_id] != empty(address):
        # Reset approvals
        self.token_approvals[_token_id] = empty(address)


@internal
def _transfer_from(_from: address, _to: address, _token_id: uint256, _sender: address):
    """
    @dev Execute transfer of a NFT.
         Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
         address for this NFT. (NOTE: `msg.sender` not allowed in private function so pass `_sender`.)
         Throws if `_to` is the zero address.
         Throws if `_from` is not the current owner.
         Throws if `_token_id` is not a valid NFT.
    """

    # Throws if `_to` is the zero address
    assert _to != empty(address)  # dev : "ERC721: transfer to the zero address"

    # Check requirements
    assert self._is_approved_or_owner(
        _sender, _token_id
    )  # dev : "ERC721: transfer caller is not owner nor approved"

    # Clear approval. Throws if `_from` is not the current owner
    self._clear_approval(_from, _token_id)

    # Remove NFT. Throws if `_token_id` is not a valid NFT
    self._remove_token_from(_from, _token_id)

    # Add NFT
    self._add_token_to(_to, _token_id)

    # Log the transfer
    log Transfer(_from, _to, _token_id)


### TRANSFER FUNCTIONS ###


@external
def transferFrom(from_addr: address, to_addr: address, token_id: uint256):
    """
    @dev Throws unless `msg.sender` is the current owner, an authorized operato_addrr, or the approved address for this NFT.
         Throws if `from_addr` is not the current owner.
         Throws if `to_addr` is the zero address.
         Throws if `token_id` is not a valid NFT.
    @notice The caller is responsible to_addr confirm that `to_addr` is capable of receiving NFTs or else they maybe be permanently lost.
    @param from_addr The current owner of the NFT.
    @param to_addr The new owner.
    @param token_id The NFT to_addr transfer.
    """

    self._transfer_from(from_addr, to_addr, token_id, msg.sender)


@external
def safeTransferFrom(
    from_addr: address, to_addr: address, token_id: uint256, data: Bytes[1024] = b""
):
    """
    @dev Transfers the ownership of an NFT from one address to another address.
         Throws unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT.
         Throws if `from_addr` is not the current owner.
         Throws if `to_addr` is the zero address.
         Throws if `token_id` is not a valid NFT.
         If `to_addr` is a smart contract, it calls `onERC721Received` on `to_addr` and throws if the return value is not `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
         NOTE: bytes4 is represented by bytes32 with padding
    @param from_addr The current owner of the NFT.
    @param to_addr The new owner.
    @param token_id The NFT to transfer.
    @param data Additional data with no specified format, sent in call to `to_addr`.
    """

    self._transfer_from(from_addr, to_addr, token_id, msg.sender)

    if to_addr.is_contract:  # check if `to_addr` is a contract address
        return_value: bytes4 = ERC721Receiver(to_addr).onERC721Received(
            msg.sender, from_addr, token_id, data
        )

        # Throws if transfer destination is a contract which does not implement 'onERC721Received'
        assert return_value == method_id(
            "onERC721Received(address,address,uint256,bytes)", output_type=bytes4
        )


@external
def approve(approved: address, token_id: uint256):
    """
    @notice Change or reaffirm the approved address for an NFT
    @dev Set or reaffirm the approved address for an NFT. The zero address indicates there is no approved address.
         Throws unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner.
         Throws if `token_id` is not a valid NFT. (NOTE: This is not written the EIP)
         Throws if `approved` is the current owner. (NOTE: This is not written the EIP)
    @param approved Address to be approved for the given NFT ID.
    @param token_id ID of the token to be approved.
    """

    owner: address = self.owned_tokens[token_id]

    # Throws if `token_id` is not a valid NFT
    assert owner != empty(address)  # dev: "ERC721: owner query for nonexistent token"

    # Throws if `approved` is the current owner
    assert approved != owner  # dev: "ERC721: approval to current owner"

    # Check requirements
    is_owner: bool = self.owned_tokens[token_id] == msg.sender
    is_approved_all: bool = (self.operator_approvals[owner])[msg.sender]
    assert (
        is_owner or is_approved_all
    )  # dev: "ERC721: approve caller is not owner nor approved for all"

    # Set the approval
    self.token_approvals[token_id] = approved

    log Approval(owner, approved, token_id)


@external
def setApprovalForAll(operator: address, approved: bool):
    """
    @notice notice Enable or disable approval for a third party ("operator") to manage all of `msg.sender`'s assets
    @dev Enables or disables approval for a third party ("operator") to manage all of`msg.sender`'s assets. It also emits the ApprovalForAll event.
         Throws if `operator` is the `msg.sender`. (NOTE: This is not written the EIP)
    This works even if sender doesn't own any tokens at the time.
    @param operator Address to add to the set of authorized operators.
    @param approved True if the operators is approved, false to revoke approval.
    """

    # Throws if `operator` is the `msg.sender`
    assert operator != msg.sender
    self.operator_approvals[msg.sender][operator] = approved

    log ApprovalForAll(msg.sender, operator, approved)


### MINT FUNCTIONS ###


@external
def mint(receiver: address):
    """
    @notice Function to mint a token
    @dev Function to mint tokens
         Throws if `msg.sender` is not the minter.
         Throws if `_to` is zero address.
    """

    # Checks
    assert msg.sender in [self.minter, self.owner]
    assert receiver != empty(address)  # dev: Cannot mint to empty address

    # Add NFT. Throws if `_token_id` is owned by someone
    token_id: uint256 = self.token_count
    self._add_token_to(receiver, token_id)
    self.token_count += 1

    log Transfer(empty(address), receiver, token_id)


### ERC721-URI STORAGE FUNCTIONS ###


@external
@view
def tokenURI(token_id: uint256) -> String[256]:
    """
    @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    @dev Throws if `_token_id` is not a valid NFT. URIs are defined in RFC 6686. The URI may point to a JSON file that conforms to the "ERC721 Metadata JSON Schema".
    """
    if self.owned_tokens[token_id] == empty(address):
        raise  # dev: "ERC721URIStorage: URI query for nonexistent token"

    if self.revealed:
        return concat(self.base_uri, uint2str(token_id))
    else:
        return self.default_uri


@external
@view
def contractURI() -> String[128]:
    """
    @notice URI for contract level metadata
    @return Contract URI
    """
    return self.contract_uri


### ADMIN FUNCTIONS


@external
def set_base_uri(base_uri: String[128]):
    """
    @notice Admin function to set a new Base URI for
    @dev Globally prepended to token_uri
    @param base_uri New URI for the token

    """
    assert msg.sender == self.owner
    self.base_uri = base_uri


@external
def set_contract_uri(new_uri: String[66]):
    """
    @notice Admin function to set a new contract URI
    @param new_uri New URI for the contract
    """

    assert msg.sender in [self.owner, self.minter]  # dev: Only Admin
    self.contract_uri = new_uri


@external
def set_owner(new_addr: address):
    """
    @notice Admin function to update owner
    @param new_addr The new owner address to take over immediately
    """

    assert msg.sender == self.owner  # dev: Only Owner
    self.owner = new_addr


@external
def set_revealed(flag: bool):
    """
    @notice Admin function to reveal collection.  If not revealed, all NFTs show default_uri
    @param flag Boolean, True to reveal, False to conceal
    """
    assert msg.sender in [self.owner, self.minter]
    self.revealed = flag


@external
def set_minter(new_address: address):
    """
    @notice Admin function to set a new minter address
    @dev Update the address authorized to mint
    @param new_address New minter address
    """

    assert msg.sender in [self.owner, self.minter]
    self.minter = new_address


@external
def admin_withdraw_erc20(coin: address, target: address, amount: uint256):
    """
    @notice Withdraw ERC20 tokens accidentally sent to contract
    @param coin ERC20 address
    @param target Address to receive
    @param amount Wei
    """
    assert self.owner == msg.sender  # dev: "Admin Only"
    ERC20(coin).transfer(target, amount)


## ERC-721 Enumerable Functions


@external
@view
def totalSupply() -> uint256:
    """
    @notice Enumerate valid NFTs
    @dev Throws if `_index` >= `totalSupply()`.
    @return The token identifier for the `_index`th NFT
    """
    return self.token_count


@external
@view
def tokenByIndex(_index: uint256) -> uint256:
    """
    @notice Enumerate valid NFTs
    @dev With no burn and direct minting, this is simple
    @param _index A counter less than `totalSupply()`
    @return The token identifier for the `_index`th NFT,
    """

    return _index


@external
@view
def tokenOfOwnerByIndex(owner: address, index: uint256) -> uint256:
    """
    @notice Enumerate NFTs assigned to an owner
    @dev Throws if `index` >= `balanceOf(owner)` or if `owner` is the zero address, representing invalid NFTs.
    @param owner An address where we are interested in NFTs owned by them
    @param index A counter less than `balanceOf(owner)`
    @return The token identifier for the `index`th NFT assigned to `owner`, (sort order not specified)
    """
    assert owner != empty(address)
    assert index < self.balances[owner]
    return self.token_by_owner[owner][index]

Contract Security Audit

Contract ABI

API
[{"name":"Transfer","inputs":[{"name":"_from","type":"address","indexed":true},{"name":"_to","type":"address","indexed":true},{"name":"_tokenId","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"Approval","inputs":[{"name":"_owner","type":"address","indexed":true},{"name":"_approved","type":"address","indexed":true},{"name":"_tokenId","type":"uint256","indexed":true}],"anonymous":false,"type":"event"},{"name":"ApprovalForAll","inputs":[{"name":"_owner","type":"address","indexed":true},{"name":"_operator","type":"address","indexed":true},{"name":"_approved","type":"bool","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"pure","type":"function","name":"supportsInterface","inputs":[{"name":"interface_id","type":"bytes4"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"ownerOf","inputs":[{"name":"token_id","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"getApproved","inputs":[{"name":"token_id","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"isApprovedForAll","inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"nonpayable","type":"function","name":"transferFrom","inputs":[{"name":"from_addr","type":"address"},{"name":"to_addr","type":"address"},{"name":"token_id","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom","inputs":[{"name":"from_addr","type":"address"},{"name":"to_addr","type":"address"},{"name":"token_id","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom","inputs":[{"name":"from_addr","type":"address"},{"name":"to_addr","type":"address"},{"name":"token_id","type":"uint256"},{"name":"data","type":"bytes"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"approved","type":"address"},{"name":"token_id","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"setApprovalForAll","inputs":[{"name":"operator","type":"address"},{"name":"approved","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"mint","inputs":[{"name":"receiver","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"tokenURI","inputs":[{"name":"token_id","type":"uint256"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"contractURI","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"nonpayable","type":"function","name":"set_base_uri","inputs":[{"name":"base_uri","type":"string"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_contract_uri","inputs":[{"name":"new_uri","type":"string"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_owner","inputs":[{"name":"new_addr","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_revealed","inputs":[{"name":"flag","type":"bool"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_minter","inputs":[{"name":"new_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"admin_withdraw_erc20","inputs":[{"name":"coin","type":"address"},{"name":"target","type":"address"},{"name":"amount","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"tokenByIndex","inputs":[{"name":"_index","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"tokenOfOwnerByIndex","inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"minter","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"base_uri","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"revealed","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"default_uri","inputs":[],"outputs":[{"name":"","type":"string"}]}]

346112425760036040527f4e50430000000000000000000000000000000000000000000000000000000000606052604080518060005560208201805160015550505060076040527f4e50432d657273000000000000000000000000000000000000000000000000006060526040805180600255602082018051600355505050336004553360055560436040527f697066733a2f2f62616679626569627a7276636e72667a793671357435746b7a6060527f6d7a6b746471776c6276797774677a787962646b79637562717568336535726c6080527f32752f000000000000000000000000000000000000000000000000000000000060a052604080518060065560208201600082601f0160051c6003811161124257801561013357905b8060051b830151816007015560010181811861011c575b505050505060356040527f697066733a2f2f516d5450547533314545466177786258456941615a65684c616060527f6a52414b6337596878506b5453673331534e56536500000000000000000000006080526040805180600b5560208201600082601f0160051c600281116112425780156101c157905b8060051b83015181600c01556001018181186101aa575b505050505060356040527f697066733a2f2f516d50515a61644e564e654a373239746f4a335a546a5376436060527f327868677351444a757766534a524e3433543265750000000000000000000000608052604080518060175560208201600082601f0160051c6002811161124257801561024f57905b8060051b8301518160180155600101818118610238575b50505050506001601655610fd661026b61000039610fd6610000f36003361161000c57610d86565b60003560e01c34610fc4576301ffc9a781186101235760243610610fc4576004358060201b610fc4576040526040517f01ffc9a7000000000000000000000000000000000000000000000000000000008118610069576001610118565b7f80ac58cd000000000000000000000000000000000000000000000000000000008118610097576001610118565b7f150b7a020000000000000000000000000000000000000000000000000000000081186100c5576001610118565b7f780e9d630000000000000000000000000000000000000000000000000000000081186100f3576001610118565b7f5b5e139f000000000000000000000000000000000000000000000000000000008118155b905060805260206080f35b6370a0823181186101665760243610610fc4576004358060a01c610fc45760405260405115610fc457601560405160205260005260406000205460605260206060f35b636352211e811861019b5760243610610fc457601260043560205260005260406000205460405260405115610fc45760206040f35b63081812fc81186101de5760243610610fc457601260043560205260005260406000205415610fc457601360043560205260005260406000205460405260206040f35b63e985e9c581186102385760443610610fc4576004358060a01c610fc4576040526024358060a01c610fc4576060526014604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6323b872dd811861028f5760643610610fc4576004358060a01c610fc4576101a0526024358060a01c610fc4576101c0526101a051610100526101c0516101205260443561014052336101605261028d610f22565b005b6342842e0e81186102b95760643610610fc4576000610600526106008051806101e05250506102f1565b63b88d4fde81186104165760a43610610fc457606435600401610400813511610fc4578035806101e052602082018181610200375050505b6004358060a01c610fc4576101a0526024358060a01c610fc4576101c0526101a051610100526101c05161012052604435610140523361016052610333610f22565b6101c0513b15610414576101c05163150b7a0261064052608033610660526101a051610680526044356106a052806106c05280610660016101e0518082526020820181818361020060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101505060206106406104a461065c6000855af16103c7573d600060003e3d6000fd5b60203d10610fc457610640518060201b610fc457610b0052610b00905051610620527f150b7a02000000000000000000000000000000000000000000000000000000006106205118610fc4575b005b63095ea7b381186104f35760443610610fc4576004358060a01c610fc457604052601260243560205260005260406000205460605260605115610fc45760605160405114610fc45733601260243560205260005260406000205414608052601460605160205260005260406000208033602052600052604060002090505460a0526080516104a65760a0516104a9565b60015b15610fc45760405160136024356020526000526040600020556024356040516060517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600060c0a4005b63a22cb46581186105805760443610610fc4576004358060a01c610fc4576040526024358060011c610fc4576060523360405114610fc4576060516014336020526000526040600020806040516020526000526040600020905055604051337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160605160805260206080a3005b636a62784281186106255760243610610fc4576004358060a01c610fc4576080523360055481186105b25760016105b9565b6004548118155b905015610fc45760805115610fc45760115460a05260805160405260a0516060526105e2610e0d565b60115460018101818110610fc457905060115560a05160805160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600060c0a4005b63c87b56dd81186107e95760243610610fc45760126004356020526000526040600020546106535760006000fd5b6016546106d3576020806040528060400160175480825260208201600082601f0160051c60058111610fc457801561069e57905b80601801548160051b840152600101818118610687575b505050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905060406107e7566107e7565b6020806101c05260006006548160e001600082601f0160051c60048111610fc457801561071357905b80600701548160051b8401526001018181186106fc575b5050508082019150506004358061073557603060415260016040526040610777565b6000604f905b82610755578081608e035280608e03925061077356610768565b600a830660300181608e0352600a830492505b60010181811861073b575b5050805b90508051602082018360e0018281848460045afa505050808301925050508060c05260c09050816101c001815180825260208301602083018281848460045afa505050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506101c05bf35b63e8a3d485811861086e5760043610610fc45760208060405280604001600b5480825260208201600082601f0160051c60048111610fc457801561084057905b80600c01548160051b840152600101818118610829575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63af1c521181186108e85760443610610fc4576004356004016080813511610fc4578035806040526020820181816060375050506004543318610fc45760405180600655600081601f0160051c60048111610fc45780156108e357905b8060051b6060015181600701556001018181186108cb575b505050005b633d57df4781186109785760443610610fc4576004356004016042813511610fc45780358060405260208201818160603750505033600454811861092d576001610934565b6005548118155b905015610fc45760405180600b55600081601f0160051c60038111610fc457801561097357905b8060051b6060015181600c015560010181811861095b575b505050005b637cb97b2b81186109aa5760243610610fc4576004358060a01c610fc4576040526004543318610fc457604051600455005b63f8ae2d8f81186109f25760243610610fc4576004358060011c610fc4576040523360045481186109dc5760016109e3565b6005548118155b905015610fc457604051601655005b631652e9fc8118610a3a5760243610610fc4576004358060a01c610fc457604052336004548118610a24576001610a2b565b6005548118155b905015610fc457604051600555005b637065230f8118610ac15760643610610fc4576004358060a01c610fc4576040526024358060a01c610fc4576060523360045418610fc45760405163a9059cbb60805260605160a05260443560c052602060806044609c6000855af1610aa5573d600060003e3d6000fd5b60203d10610fc4576080518060011c610fc45760e05260e05050005b6318160ddd8118610ae05760043610610fc45760115460405260206040f35b634f6ccce78118610aff5760243610610fc45760043560405260206040f35b632f745c598118610b6d5760443610610fc4576004358060a01c610fc45760405260405115610fc45760156040516020526000526040600020546024351015610fc4576010604051602052600052604060002080602435602052600052604060002090505460605260206060f35b6395d89b418118610bc55760043610610fc4576020806040528060400160005480825260208201600154815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6306fdde038118610c1d5760043610610fc4576020806040528060400160025480825260208201600354815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b638da5cb5b8118610c3c5760043610610fc45760045460405260206040f35b63075461728118610c5b5760043610610fc45760055460405260206040f35b63786f29108118610ce05760043610610fc4576020806040528060400160065480825260208201600082601f0160051c60048111610fc4578015610cb257905b80600701548160051b840152600101818118610c9b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63518302278118610cff5760043610610fc45760165460405260206040f35b6374ac38d78118610d845760043610610fc4576020806040528060400160175480825260208201600082601f0160051c60058111610fc4578015610d5657905b80601801548160051b840152600101818118610d3f575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b505b60006000fd5b60126060516020526000526040600020546080526040516080511460a05260136060516020526000526040600020546040511460c0526014608051602052600052604060002080604051602052600052604060002090505460e05260a051610df65760c051610df9565b60015b610e055760e051610e08565b60015b815250565b6012606051602052600052604060002054610fc457604051601260605160205260005260406000205560605160106040516020526000526040600020806015604051602052600052604060002054602052600052604060002090505560156040516020526000526040600020805460018101818110610fc4579050815550565b604051601260605160205260005260406000205418610fc4576000601260605160205260005260406000205560156040516020526000526040600020805460018103818111610fc4579050815550565b604051601260605160205260005260406000205418610fc457601360605160205260005260406000205415610f2057600060136060516020526000526040600020555b565b6101205115610fc4576101605160405261014051606052610f44610180610d8c565b6101805115610fc4576101005160405261014051606052610f63610edd565b6101005160405261014051606052610f79610e8d565b6101205160405261014051606052610f8f610e0d565b6101405161012051610100517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000610180a4565b600080fda165767970657283000307000b005b600080fd

Deployed Bytecode

0x6003361161000c57610d86565b60003560e01c34610fc4576301ffc9a781186101235760243610610fc4576004358060201b610fc4576040526040517f01ffc9a7000000000000000000000000000000000000000000000000000000008118610069576001610118565b7f80ac58cd000000000000000000000000000000000000000000000000000000008118610097576001610118565b7f150b7a020000000000000000000000000000000000000000000000000000000081186100c5576001610118565b7f780e9d630000000000000000000000000000000000000000000000000000000081186100f3576001610118565b7f5b5e139f000000000000000000000000000000000000000000000000000000008118155b905060805260206080f35b6370a0823181186101665760243610610fc4576004358060a01c610fc45760405260405115610fc457601560405160205260005260406000205460605260206060f35b636352211e811861019b5760243610610fc457601260043560205260005260406000205460405260405115610fc45760206040f35b63081812fc81186101de5760243610610fc457601260043560205260005260406000205415610fc457601360043560205260005260406000205460405260206040f35b63e985e9c581186102385760443610610fc4576004358060a01c610fc4576040526024358060a01c610fc4576060526014604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6323b872dd811861028f5760643610610fc4576004358060a01c610fc4576101a0526024358060a01c610fc4576101c0526101a051610100526101c0516101205260443561014052336101605261028d610f22565b005b6342842e0e81186102b95760643610610fc4576000610600526106008051806101e05250506102f1565b63b88d4fde81186104165760a43610610fc457606435600401610400813511610fc4578035806101e052602082018181610200375050505b6004358060a01c610fc4576101a0526024358060a01c610fc4576101c0526101a051610100526101c05161012052604435610140523361016052610333610f22565b6101c0513b15610414576101c05163150b7a0261064052608033610660526101a051610680526044356106a052806106c05280610660016101e0518082526020820181818361020060045afa5050508051806020830101601f82600003163682375050601f19601f8251602001011690508101505060206106406104a461065c6000855af16103c7573d600060003e3d6000fd5b60203d10610fc457610640518060201b610fc457610b0052610b00905051610620527f150b7a02000000000000000000000000000000000000000000000000000000006106205118610fc4575b005b63095ea7b381186104f35760443610610fc4576004358060a01c610fc457604052601260243560205260005260406000205460605260605115610fc45760605160405114610fc45733601260243560205260005260406000205414608052601460605160205260005260406000208033602052600052604060002090505460a0526080516104a65760a0516104a9565b60015b15610fc45760405160136024356020526000526040600020556024356040516060517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600060c0a4005b63a22cb46581186105805760443610610fc4576004358060a01c610fc4576040526024358060011c610fc4576060523360405114610fc4576060516014336020526000526040600020806040516020526000526040600020905055604051337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160605160805260206080a3005b636a62784281186106255760243610610fc4576004358060a01c610fc4576080523360055481186105b25760016105b9565b6004548118155b905015610fc45760805115610fc45760115460a05260805160405260a0516060526105e2610e0d565b60115460018101818110610fc457905060115560a05160805160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600060c0a4005b63c87b56dd81186107e95760243610610fc45760126004356020526000526040600020546106535760006000fd5b6016546106d3576020806040528060400160175480825260208201600082601f0160051c60058111610fc457801561069e57905b80601801548160051b840152600101818118610687575b505050508051806020830101601f82600003163682375050601f19601f8251602001011690508101905060406107e7566107e7565b6020806101c05260006006548160e001600082601f0160051c60048111610fc457801561071357905b80600701548160051b8401526001018181186106fc575b5050508082019150506004358061073557603060415260016040526040610777565b6000604f905b82610755578081608e035280608e03925061077356610768565b600a830660300181608e0352600a830492505b60010181811861073b575b5050805b90508051602082018360e0018281848460045afa505050808301925050508060c05260c09050816101c001815180825260208301602083018281848460045afa505050508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506101c05bf35b63e8a3d485811861086e5760043610610fc45760208060405280604001600b5480825260208201600082601f0160051c60048111610fc457801561084057905b80600c01548160051b840152600101818118610829575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63af1c521181186108e85760443610610fc4576004356004016080813511610fc4578035806040526020820181816060375050506004543318610fc45760405180600655600081601f0160051c60048111610fc45780156108e357905b8060051b6060015181600701556001018181186108cb575b505050005b633d57df4781186109785760443610610fc4576004356004016042813511610fc45780358060405260208201818160603750505033600454811861092d576001610934565b6005548118155b905015610fc45760405180600b55600081601f0160051c60038111610fc457801561097357905b8060051b6060015181600c015560010181811861095b575b505050005b637cb97b2b81186109aa5760243610610fc4576004358060a01c610fc4576040526004543318610fc457604051600455005b63f8ae2d8f81186109f25760243610610fc4576004358060011c610fc4576040523360045481186109dc5760016109e3565b6005548118155b905015610fc457604051601655005b631652e9fc8118610a3a5760243610610fc4576004358060a01c610fc457604052336004548118610a24576001610a2b565b6005548118155b905015610fc457604051600555005b637065230f8118610ac15760643610610fc4576004358060a01c610fc4576040526024358060a01c610fc4576060523360045418610fc45760405163a9059cbb60805260605160a05260443560c052602060806044609c6000855af1610aa5573d600060003e3d6000fd5b60203d10610fc4576080518060011c610fc45760e05260e05050005b6318160ddd8118610ae05760043610610fc45760115460405260206040f35b634f6ccce78118610aff5760243610610fc45760043560405260206040f35b632f745c598118610b6d5760443610610fc4576004358060a01c610fc45760405260405115610fc45760156040516020526000526040600020546024351015610fc4576010604051602052600052604060002080602435602052600052604060002090505460605260206060f35b6395d89b418118610bc55760043610610fc4576020806040528060400160005480825260208201600154815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b6306fdde038118610c1d5760043610610fc4576020806040528060400160025480825260208201600354815250508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b638da5cb5b8118610c3c5760043610610fc45760045460405260206040f35b63075461728118610c5b5760043610610fc45760055460405260206040f35b63786f29108118610ce05760043610610fc4576020806040528060400160065480825260208201600082601f0160051c60048111610fc4578015610cb257905b80600701548160051b840152600101818118610c9b575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b63518302278118610cff5760043610610fc45760165460405260206040f35b6374ac38d78118610d845760043610610fc4576020806040528060400160175480825260208201600082601f0160051c60058111610fc4578015610d5657905b80601801548160051b840152600101818118610d3f575b505050508051806020830101601f82600003163682375050601f19601f825160200101169050810190506040f35b505b60006000fd5b60126060516020526000526040600020546080526040516080511460a05260136060516020526000526040600020546040511460c0526014608051602052600052604060002080604051602052600052604060002090505460e05260a051610df65760c051610df9565b60015b610e055760e051610e08565b60015b815250565b6012606051602052600052604060002054610fc457604051601260605160205260005260406000205560605160106040516020526000526040600020806015604051602052600052604060002054602052600052604060002090505560156040516020526000526040600020805460018101818110610fc4579050815550565b604051601260605160205260005260406000205418610fc4576000601260605160205260005260406000205560156040516020526000526040600020805460018103818111610fc4579050815550565b604051601260605160205260005260406000205418610fc457601360605160205260005260406000205415610f2057600060136060516020526000526040600020555b565b6101205115610fc4576101605160405261014051606052610f44610180610d8c565b6101805115610fc4576101005160405261014051606052610f63610edd565b6101005160405261014051606052610f79610e8d565b6101205160405261014051606052610f8f610e0d565b6101405161012051610100517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000610180a4565b600080fda165767970657283000307000b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.