ETH Price: $3,358.39 (-2.78%)
Gas: 3 Gwei

Token

PAC DAO PHATCATS (PHATCAT)
 

Overview

Max Total Supply

72 PHATCAT

Holders

66

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 PHATCAT
0xaf79312eb821871208ac76a80c8e282f8796964e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.3

Optimization Enabled:
N/A

Other Settings:
MIT license

Contract Source Code (Vyper language format)

# @version 0.3.3
# @title PAC DAO 2022 Congressional Scorecard
# @notice Crowdsourced Scorecard of Crypto Friendliness of 117th US Congress
# @dev Implementation of ERC-721 non-fungible token standard
# @author pacdao.eth
# @license MIT
#
#                        ::
#                        ::
#                       .::.
#                     ..::::..
#                    .:-::::-:.
#                   .::::::::::.
#                   :+========+:
#                   ::.:.::.:.::
#            ..     :+========+:    ..
# @@@@@@@...........:.:.:..:.:.:...........@@@@@@@@
# @@@@@@@@@@* :::. .:.:.:..:.:.:   . .  ..@@@@@@@@@
# @@@@@@@@@@@@@***: :....::-.:.:.:.:-@@@@@@@@@@@@@@
# @@@@@@@@@@@@@@@@..+==========+...:@@@@@@@@@@@@@@@


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]
        ) -> bytes32: view


# @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_log: DynArray[uint256, 1000]

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[6]) = [
    0x01FFC9A7,  # ERC165
    0x80AC58CD,  # ERC721
    0x150B7A02,  # ERC721TokenReceiver
    0x5B5E166F,  # ERC721Metadata
    0x780E9D63,  # ERC721Enumerable
    0x5B5E139F,  # ERC721Enumerable
]


@external
def __init__():
    """
    @dev Contract constructor.
    """
    self.symbol = "PHATCAT"
    self.name = "PAC DAO PHATCATS"

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

    self.base_uri = (
        "ipfs://bafybeicrbcbmxaeluzapoczl3tt3a23hj6crx3lzgvcilbccjzs2srhksy/"
    )
    self.contract_uri = (
        "ipfs://bafkreigq4v4daqdfiiw77zea36m7y3i2gediy36m2btrdpndbw5xnug3ru"
    )


@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.balances[_to] += 1


@internal
def _remove_token_from(_from: address, _token_id: uint256):
    """
    @dev Remove a 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: address, _to: address, _tokenId: uint256):
    """
    @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT.
         Throws if `_from` is not the current owner.
         Throws if `_to` is the zero address.
         Throws if `_tokenId` is not a valid NFT.
    @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else they maybe be permanently lost.
    @param _from The current owner of the NFT.
    @param _to The new owner.
    @param _tokenId The NFT to transfer.
    """

    self._transfer_from(_from, _to, _tokenId, msg.sender)


@external
def safeTransferFrom(
    _from: address, _to: address, _tokenId: 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` is not the current owner.
         Throws if `_to` is the zero address.
         Throws if `_tokenId` is not a valid NFT.
         If `_to` is a smart contract, it calls `onERC721Received` on `_to` 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 The current owner of the NFT.
    @param _to The new owner.
    @param _tokenId The NFT to transfer.
    @param _data Additional data with no specified format, sent in call to `_to`.
    """

    self._transfer_from(_from, _to, _tokenId, msg.sender)

    if _to.is_contract:  # check if `_to` is a contract address
        return_value: bytes32 = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _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=bytes32)


@external
def approve(_approved: address, _tokenId: 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 `_tokenId` 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 _tokenId ID of the token to be approved.
    """

    owner: address = self.owned_tokens[_tokenId]

    # Throws if `_tokenId` 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[_tokenId] == 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[_tokenId] = _approved

    log Approval(owner, _approved, _tokenId)


@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, seat_id : uint256):
    """
    @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
    self._add_token_to(receiver, seat_id)
    self.token_log.append(seat_id)
    log Transfer(empty(address), receiver, seat_id)



### ERC721-URI STORAGE FUNCTIONS ###


@internal
@pure
def uint2str(_value: uint256) -> String[78]:
    if _value == 0:
        return "0"

    buffer: Bytes[78] = b""
    digits: uint256 = 78

    for i in range(78):
        # go forward to find the # of digits, and set it
        # only if we have found the last index
        if digits == 78 and _value / 10 ** i == 0:
            digits = i

        val: uint256 = ((_value / 10 ** (77 - i)) % 10) + 48
        char: Bytes[1] = slice(convert(val, bytes32), 31, 1)
        buffer = raw_call(
            IDENTITY_PRECOMPILE,
            concat(buffer, char),
            max_outsize=78,
            is_static_call=True,
        )

    return convert(slice(buffer, 78 - digits, digits), String[78])


@external
@view
def tokenURI(token_id: uint256) -> String[256]:
    """
    @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    @dev Throws if `_tokenId` 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"

    return concat(self.base_uri, self.uint2str(token_id))


@external
@view
def contractURI() -> String[128]:
    """
    @notice URI for contract level metadata
    """
    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 and contract_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
    @dev Appended to base_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_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 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 len(self.token_log)


@external
@view
def tokenByIndex(_index: uint256) -> uint256:
    """
    @notice Enumerate valid NFTs
    @dev Better not call this from another smart contract.  Gas hog
    @param _index A counter less than `totalSupply()`
    @return The token identifier for the `_index`th NFT,
    """

    return self.token_log[_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)
    """

    counter: uint256 = 0
    retval: uint256 = 1001 

    for i in self.token_log:
        if self.owned_tokens[i] == _owner:
            if counter == _index:
                retval = i
            counter += 1

    if retval == 1001:
        raise "ERC721Enumerable: global index out of bounds"
    
    return retval

Contract Security Audit

Contract ABI

[{"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","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"safeTransferFrom","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"approve","inputs":[{"name":"_approved","type":"address"},{"name":"_tokenId","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"},{"name":"seat_id","type":"uint256"}],"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_minter","inputs":[{"name":"new_address","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"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"}]}]

60076040527f5048415443415400000000000000000000000000000000000000000000000000606052604080518060005560208201805160015550505060106040527f5041432044414f205048415443415453000000000000000000000000000000006060526040805180600255602082018051600355505050336004553360055560436040527f697066733a2f2f6261667962656963726263626d7861656c757a61706f637a6c6060527f33747433613233686a36637278336c7a677663696c6263636a7a73327372686b6080527f73792f000000000000000000000000000000000000000000000000000000000060a0526040805180600655602082016000602083601f0104600381116112d857801561012e57905b602081028301518160070155600101818118610117575b505050505060426040527f697066733a2f2f6261666b7265696771347634646171646669697737377a65616060527f33366d3779336932676564697933366d3262747264706e64627735786e7567336080527f727500000000000000000000000000000000000000000000000000000000000060a0526040805180600b55602082016000602083601f0104600381116112d85780156101e057905b6020810283015181600c01556001018181186101c9575b50505050506110d96101fe6300000000396110d96000016300000000f3600436101561000d57610c6a565b60003560e01c346110d4576301ffc9a7811861014e576004358060201b6110d4576040526040517f01ffc9a7000000000000000000000000000000000000000000000000000000006080527f80ac58cd0000000000000000000000000000000000000000000000000000000060a0527f150b7a020000000000000000000000000000000000000000000000000000000060c0527f5b5e166f0000000000000000000000000000000000000000000000000000000060e0527f780e9d6300000000000000000000000000000000000000000000000000000000610100527f5b5e139f0000000000000000000000000000000000000000000000000000000061012052600060605260006006905b6020810260800151831861013157600160605261013c565b600101818118610119575b50506060519050610140526020610140f35b6370a08231811861018c576004358060a01c6110d4576040526000604051146110d4576103fc60405160205260005260406000205460605260206060f35b636352211e81186101bc576103f96004356020526000526040600020546040526000604051146110d45760206040f35b63081812fc81186101fb5760006103f9600435602052600052604060002054146110d4576103fa60043560205260005260406000205460405260206040f35b63e985e9c5811861024e576004358060a01c6110d4576040526024358060a01c6110d4576060526103fb604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6323b872dd811861029d576004358060a01c6110d4576101a0526024358060a01c6110d4576101c0526101a051610100526101c0516101205260443561014052336101605261029b610de9565b005b6342842e0e81186102bf576000610600526106008051806101e05250506102ef565b63b88d4fde81186103e7576064356004016104008135116110d4578035806101e052602082018181610200375050505b6004358060a01c6110d4576101a0526024358060a01c6110d4576101c0526101a051610100526101c05161012052604435610140523361016052610331610de9565b60006101c0513b11156103e55763150b7a0261064052608033610660526101a051610680526044356106a052806106c05280610660016101e0518082526020820181818361020060045afa90505050805180602083010181600003601f163682375050601f19601f8251602001011690508101505060206106406104a461065c6101c0515afa6103c6573d600060003e3d6000fd5b60203d106110d457610640516106205263150b7a0261062051186110d4575b005b63095ea7b381186104c2576004358060a01c6110d4576040526103f96024356020526000526040600020546060526000606051146110d457606051604051146110d457336103f9602435602052600052604060002054146080526103fb60605160205260005260406000208033602052600052604060002090505460a0526080516104745760a051610477565b60015b156110d4576040516103fa6024356020526000526040600020556024356040516060517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600060c0a4005b63a22cb4658118610548576004358060a01c6110d4576040526024358060011c6110d45760605233604051146110d4576060516103fb336020526000526040600020806040516020526000526040600020905055604051337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160605160805260206080a3005b6340c10f198118610612576004358060a01c6110d4576080523360055460c05260045460e052600060a05260006002905b6020810260c00151831861059157600160a05261059c565b600101818118610579575b505060a0519050156110d4576000608051146110d4576080516040526024356060526105c6610cf4565b6010546103e781116110d4576001810160105560243581601101555060243560805160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600060a0a4005b63c87b56dd811861070c576103f96004356020526000526040600020546106395760006000fd5b60208061040052600060065481610320016000602083601f0104600481116110d457801561067a57905b806007015460208202840152600101818118610663575b505050808201915050600435604052610694610280610e8d565b61028080516020820183610320018281848460045afa9050505080830192505050806103005261030090508161040001815180825260208301602083018281848460045afa905090505050805180602083010181600003601f163682375050601f19601f825160200101169050905081019050610400f35b63e8a3d48581186107895760208060405280604001600b54808252602082016000602083601f0104600481116110d457801561075b57905b80600c015460208202840152600101818118610744575b50505050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b63af1c521181186107fb5760043560040160808135116110d45780358060405260208201818160603750505060045433186110d457604051806006556000602082601f0104600481116110d45780156107f657905b602081026060015181600701556001018181186107de575b505050005b633d57df4781186108ac5760043560040160428135116110d4578035806040526020820181816060375050503360045460e05260055461010052600060c05260006002905b6020810260e00151831861085857600160c052610863565b600101818118610840575b505060c0519050156110d45760405180600b556000602082601f0104600381116110d45780156108a757905b602081026060015181600c015560010181811861088f575b505050005b637cb97b2b81186108d6576004358060a01c6110d45760405260045433186110d457604051600455005b631652e9fc811861093e576004358060a01c6110d4576040523360045460805260055460a052600060605260006002905b6020810260800151831861091f57600160605261092a565b600101818118610907575b50506060519050156110d457604051600555005b63957ca7c081186109bb576004358060a01c6110d4576040526024358060a01c6110d45760605233600454186110d45763a9059cbb60805260605160a05260443560c052602060806044609c60006040515af16109a0573d600060003e3d6000fd5b60203d106110d4576080518060011c6110d45760e05260e050005b6318160ddd81186109d25760105460405260206040f35b634f6ccce781186109f7576004356010548110156110d4576011015460405260206040f35b632f745c598118610b1d576004358060a01c6110d45760405260006060526103e960805260006010546103e881116110d4578015610a8957905b806011015460a0526040516103f960a05160205260005260406000205418610a7e5760243560605118610a655760a0516080525b606051600181818301106110d457808201905090506060525b600101818118610a31575b50506103e960805118610b1757602c60a0527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60c0527f7574206f6620626f756e6473000000000000000000000000000000000000000060e05260a05060a0518060c00181600003601f1636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60206080f35b6395d89b418118610b6d57602080604052806040016000548082526020820160015481525050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b6306fdde038118610bbd57602080604052806040016002548082526020820160035481525050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b638da5cb5b8118610bd45760045460405260206040f35b63075461728118610beb5760055460405260206040f35b63786f29108118610c685760208060405280604001600654808252602082016000602083601f0104600481116110d4578015610c3a57905b806007015460208202840152600101818118610c23575b50505050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b505b60006000fd5b6103f96060516020526000526040600020546080526040516080511460a0526103fa6060516020526000526040600020546040511460c0526103fb608051602052600052604060002080604051602052600052604060002090505460e05260a051610cdd5760c051610ce0565b60015b610cec5760e051610cef565b60015b815250565b6103f96060516020526000526040600020546110d4576040516103f96060516020526000526040600020556103fc60405160205260005260406000208054600181818301106110d45780820190509050815550565b6040516103f9606051602052600052604060002054186110d45760006103f96060516020526000526040600020556103fc6040516020526000526040600020805460018082106110d45780820390509050815550565b6040516103f9606051602052600052604060002054186110d45760006103fa60605160205260005260406000205414610de75760006103fa6060516020526000526040600020555b565b600061012051146110d4576101605160405261014051606052610e0d610180610c70565b61018051156110d4576101005160405261014051606052610e2c610d9f565b6101005160405261014051606052610e42610d49565b6101205160405261014051606052610e58610cf4565b6101405161012051610100517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000610180a4565b604051610eda5760016060527f30000000000000000000000000000000000000000000000000000000000000006080526060805180835260208201602084018151815250505050506110d2565b600060e05260e08051806060525050604e60e0526000604e905b8061010052604e60e05118610f2c57604051604e6101005110156110d45761010051600a0a8080156110d45782049050905015610f2f565b60005b15610f3c576101005160e0525b604051604e604d610100518082106110d4578082039050905010156110d457604d610100518082106110d45780820390509050600a0a8080156110d457820490509050600a80820690509050603081818301106110d4578082019050905061012052610120516101805261018060206020116110d457601f810180516101c0525060016101a0526101a0905080518061014052602082018051610160525050506000606051816101a001818183608060045afa505080820191505061014051816101a0016101605181525080820191505080610180526101805050604e610220610180516101a060045afa611036573d600060003e3d6000fd5b610200604e3d808211611049578161104b565b805b90509050815280518060605260208201816080838360045afa905090505050600101818118610ef4575050604e60e0518082106110d4578082039050905060e051606051818301116110d4578160800181610120838360045afa5050806101005261010090509050805180835260208201602084018281848460045afa9050905090505050505b565b600080fd005b600080fd

Deployed Bytecode

0x600436101561000d57610c6a565b60003560e01c346110d4576301ffc9a7811861014e576004358060201b6110d4576040526040517f01ffc9a7000000000000000000000000000000000000000000000000000000006080527f80ac58cd0000000000000000000000000000000000000000000000000000000060a0527f150b7a020000000000000000000000000000000000000000000000000000000060c0527f5b5e166f0000000000000000000000000000000000000000000000000000000060e0527f780e9d6300000000000000000000000000000000000000000000000000000000610100527f5b5e139f0000000000000000000000000000000000000000000000000000000061012052600060605260006006905b6020810260800151831861013157600160605261013c565b600101818118610119575b50506060519050610140526020610140f35b6370a08231811861018c576004358060a01c6110d4576040526000604051146110d4576103fc60405160205260005260406000205460605260206060f35b636352211e81186101bc576103f96004356020526000526040600020546040526000604051146110d45760206040f35b63081812fc81186101fb5760006103f9600435602052600052604060002054146110d4576103fa60043560205260005260406000205460405260206040f35b63e985e9c5811861024e576004358060a01c6110d4576040526024358060a01c6110d4576060526103fb604051602052600052604060002080606051602052600052604060002090505460805260206080f35b6323b872dd811861029d576004358060a01c6110d4576101a0526024358060a01c6110d4576101c0526101a051610100526101c0516101205260443561014052336101605261029b610de9565b005b6342842e0e81186102bf576000610600526106008051806101e05250506102ef565b63b88d4fde81186103e7576064356004016104008135116110d4578035806101e052602082018181610200375050505b6004358060a01c6110d4576101a0526024358060a01c6110d4576101c0526101a051610100526101c05161012052604435610140523361016052610331610de9565b60006101c0513b11156103e55763150b7a0261064052608033610660526101a051610680526044356106a052806106c05280610660016101e0518082526020820181818361020060045afa90505050805180602083010181600003601f163682375050601f19601f8251602001011690508101505060206106406104a461065c6101c0515afa6103c6573d600060003e3d6000fd5b60203d106110d457610640516106205263150b7a0261062051186110d4575b005b63095ea7b381186104c2576004358060a01c6110d4576040526103f96024356020526000526040600020546060526000606051146110d457606051604051146110d457336103f9602435602052600052604060002054146080526103fb60605160205260005260406000208033602052600052604060002090505460a0526080516104745760a051610477565b60015b156110d4576040516103fa6024356020526000526040600020556024356040516060517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600060c0a4005b63a22cb4658118610548576004358060a01c6110d4576040526024358060011c6110d45760605233604051146110d4576060516103fb336020526000526040600020806040516020526000526040600020905055604051337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160605160805260206080a3005b6340c10f198118610612576004358060a01c6110d4576080523360055460c05260045460e052600060a05260006002905b6020810260c00151831861059157600160a05261059c565b600101818118610579575b505060a0519050156110d4576000608051146110d4576080516040526024356060526105c6610cf4565b6010546103e781116110d4576001810160105560243581601101555060243560805160007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600060a0a4005b63c87b56dd811861070c576103f96004356020526000526040600020546106395760006000fd5b60208061040052600060065481610320016000602083601f0104600481116110d457801561067a57905b806007015460208202840152600101818118610663575b505050808201915050600435604052610694610280610e8d565b61028080516020820183610320018281848460045afa9050505080830192505050806103005261030090508161040001815180825260208301602083018281848460045afa905090505050805180602083010181600003601f163682375050601f19601f825160200101169050905081019050610400f35b63e8a3d48581186107895760208060405280604001600b54808252602082016000602083601f0104600481116110d457801561075b57905b80600c015460208202840152600101818118610744575b50505050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b63af1c521181186107fb5760043560040160808135116110d45780358060405260208201818160603750505060045433186110d457604051806006556000602082601f0104600481116110d45780156107f657905b602081026060015181600701556001018181186107de575b505050005b633d57df4781186108ac5760043560040160428135116110d4578035806040526020820181816060375050503360045460e05260055461010052600060c05260006002905b6020810260e00151831861085857600160c052610863565b600101818118610840575b505060c0519050156110d45760405180600b556000602082601f0104600381116110d45780156108a757905b602081026060015181600c015560010181811861088f575b505050005b637cb97b2b81186108d6576004358060a01c6110d45760405260045433186110d457604051600455005b631652e9fc811861093e576004358060a01c6110d4576040523360045460805260055460a052600060605260006002905b6020810260800151831861091f57600160605261092a565b600101818118610907575b50506060519050156110d457604051600555005b63957ca7c081186109bb576004358060a01c6110d4576040526024358060a01c6110d45760605233600454186110d45763a9059cbb60805260605160a05260443560c052602060806044609c60006040515af16109a0573d600060003e3d6000fd5b60203d106110d4576080518060011c6110d45760e05260e050005b6318160ddd81186109d25760105460405260206040f35b634f6ccce781186109f7576004356010548110156110d4576011015460405260206040f35b632f745c598118610b1d576004358060a01c6110d45760405260006060526103e960805260006010546103e881116110d4578015610a8957905b806011015460a0526040516103f960a05160205260005260406000205418610a7e5760243560605118610a655760a0516080525b606051600181818301106110d457808201905090506060525b600101818118610a31575b50506103e960805118610b1757602c60a0527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60c0527f7574206f6620626f756e6473000000000000000000000000000000000000000060e05260a05060a0518060c00181600003601f1636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60206080f35b6395d89b418118610b6d57602080604052806040016000548082526020820160015481525050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b6306fdde038118610bbd57602080604052806040016002548082526020820160035481525050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b638da5cb5b8118610bd45760045460405260206040f35b63075461728118610beb5760055460405260206040f35b63786f29108118610c685760208060405280604001600654808252602082016000602083601f0104600481116110d4578015610c3a57905b806007015460208202840152600101818118610c23575b50505050805180602083010181600003601f163682375050601f19601f825160200101169050810190506040f35b505b60006000fd5b6103f96060516020526000526040600020546080526040516080511460a0526103fa6060516020526000526040600020546040511460c0526103fb608051602052600052604060002080604051602052600052604060002090505460e05260a051610cdd5760c051610ce0565b60015b610cec5760e051610cef565b60015b815250565b6103f96060516020526000526040600020546110d4576040516103f96060516020526000526040600020556103fc60405160205260005260406000208054600181818301106110d45780820190509050815550565b6040516103f9606051602052600052604060002054186110d45760006103f96060516020526000526040600020556103fc6040516020526000526040600020805460018082106110d45780820390509050815550565b6040516103f9606051602052600052604060002054186110d45760006103fa60605160205260005260406000205414610de75760006103fa6060516020526000526040600020555b565b600061012051146110d4576101605160405261014051606052610e0d610180610c70565b61018051156110d4576101005160405261014051606052610e2c610d9f565b6101005160405261014051606052610e42610d49565b6101205160405261014051606052610e58610cf4565b6101405161012051610100517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6000610180a4565b604051610eda5760016060527f30000000000000000000000000000000000000000000000000000000000000006080526060805180835260208201602084018151815250505050506110d2565b600060e05260e08051806060525050604e60e0526000604e905b8061010052604e60e05118610f2c57604051604e6101005110156110d45761010051600a0a8080156110d45782049050905015610f2f565b60005b15610f3c576101005160e0525b604051604e604d610100518082106110d4578082039050905010156110d457604d610100518082106110d45780820390509050600a0a8080156110d457820490509050600a80820690509050603081818301106110d4578082019050905061012052610120516101805261018060206020116110d457601f810180516101c0525060016101a0526101a0905080518061014052602082018051610160525050506000606051816101a001818183608060045afa505080820191505061014051816101a0016101605181525080820191505080610180526101805050604e610220610180516101a060045afa611036573d600060003e3d6000fd5b610200604e3d808211611049578161104b565b805b90509050815280518060605260208201816080838360045afa905090505050600101818118610ef4575050604e60e0518082106110d4578082039050905060e051606051818301116110d4578160800181610120838360045afa5050806101005261010090509050805180835260208201602084018281848460045afa9050905090505050505b565b600080fd

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.