ETH Price: $2,679.83 (-1.16%)

Contract

0x97D03CD72905Bd8d197dDD80762AA085352F1087
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Zharta RentingERC721 Contract

Compiler Version
vyper:0.3.10

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

Contract Source Code (Vyper language format)

# @version 0.3.10

"""
@title Zharta RentingERC721 Contract
@author [Zharta](https://zharta.io/)
@notice This contract wraps renting vaults with deposited NFTs, exposing them as ERC721 tokens.
@dev This contract is a ERC721 implementation representing the NFTs deposited in the renting vaults. Tokens are minted and burned by the renting contract, and can be transferred by the owner or approved operators. The contract can be used with any ERC721 compatible wallet or marketplace.
Tokens are minted when the underlying NFTs are deposited in the renting vaults, and burned when the NFTs are withdrawn. The contract is initialised with the renting contract address, and only the renting contract can mint and burn tokens.
The ownership can be transferred while rentals are ongoing, althought ownership change does not automatically changes the permissions to manage rentals (set listings, claim rewards). Renting permissions can be claimed the owner by calling the `claim_token_ownership` in the `RentingV3.vy` contract.
"""

# Interfaces

from vyper.interfaces import ERC20 as IERC20
from vyper.interfaces import ERC721 as IERC721


interface ERC721Receiver:
    def onERC721Received(_operator: address, _from: address, _tokenId: uint256, _data: Bytes[1024]) -> bytes4: view

# Structs

struct TokenAndWallet:
    token_id: uint256
    wallet: address

# Events


event Transfer:
    sender: indexed(address)
    receiver: indexed(address)
    tokenId: indexed(uint256)

event Approval:
    owner: indexed(address)
    approved: indexed(address)
    tokenId: indexed(uint256)

event ApprovalForAll:
    owner: indexed(address)
    operator: indexed(address)
    approved: bool

# Global Variables
SUPPORTED_INTERFACES: constant(bytes4[3]) = [0x01ffc9a7, 0x80ac58cd, 0x5b5e139f] # ERC165, ERC721, ERC721Metadata

name: public(immutable(String[30]))
symbol: public(immutable(String[20]))

base_url: immutable(String[60])

contractURI: public(immutable(String[60]))

id_to_owner: HashMap[uint256, address]
id_to_approvals: HashMap[uint256, address]
owner_to_operators: HashMap[address, HashMap[address, bool]]
owner_to_nft_count: HashMap[address, uint256]

renting_addr: public(address)

##### EXTERNAL METHODS - WRITE #####


@external
def __init__(_name: String[30], _symbol: String[20], _base_url: String[60], _contract_uri: String[60]):

    """
    @notice Initialises the contract with the renting contract address.
    @param _name Name of the collection.
    @param _symbol Symbol of the collection.
    @param _base_url Base URL for the token URIs.
    @param _contract_uri URI for the contract metadata.
    """

    name = _name
    symbol = _symbol
    base_url = _base_url
    contractURI = _contract_uri


@external
def initialise():

    """
    @notice Initialises the contract with the renting contract address.
    @dev This method can only be called once, and sets the renting contract address.
    """

    assert self.renting_addr == empty(address), "already initialised"
    self.renting_addr = msg.sender


@external
def mint(tokens: DynArray[TokenAndWallet, 32]):

    """
    @notice Mints tokens for the given NFTs.
    @dev This method can only be called by the renting contract, and mints tokens wrapping the given NFTs to the given wallets.
    @param tokens Array of TokenAndWallet structs, containing the token id and the wallet address.
    """

    assert msg.sender == self.renting_addr, "not renting contract"

    for token in tokens:
        assert self.id_to_owner[token.token_id] == empty(address), "token already minted"
        self._mint_token_to(token.wallet, token.token_id)
        log Transfer(empty(address), token.wallet, token.token_id)


@external
def burn(tokens: DynArray[TokenAndWallet, 32]):

    """
    @notice Burns tokens for the given NFTs.
    @dev This method can only be called by the renting contract, and burns tokens wrapping the given NFTs from the given wallets.
    @param tokens Array of TokenAndWallet structs, containing the token id and the wallet address.
    """

    assert msg.sender == self.renting_addr, "not renting contract"

    for token in tokens:
        if self.id_to_owner[token.token_id] == token.wallet:
            self._burn_token_from(token.wallet, token.token_id)


@view
@external
def balanceOf(_owner: address) -> uint256:

    """
    @notice Returns the number of NFTs owned by the given address.
    @dev This method returns the number of NFTs owned by the given address.
    @param _owner Address for which to query the balance.
    @return uint256 Number of NFTs owned by the given address.
    """

    assert _owner != empty(address)
    return self.owner_to_nft_count[_owner]


@view
@external
def ownerOf(_tokenId: uint256) -> address:

    """
    @notice Returns the owner of the given NFT.
    @dev This method returns the owner of the given NFT. Reverts if the NFT does not exist.
    @param _tokenId ID of the NFT to query the owner of.
    @return address Address of the owner of the NFT.
    """

    owner: address = self.id_to_owner[_tokenId]
    assert owner != empty(address)
    return owner


@view
@external
def owner_of(_tokenId: uint256) -> address:

    """
    @notice Returns the owner of the given NFT.
    @dev This method returns the owner of the given NFT. Contrary to the ERC721 equivalent, does not revert if the NFT does not exist.
    @param _tokenId ID of the NFT to query the owner of.
    @return address Address of the owner of the NFT.
    """

    return self.id_to_owner[_tokenId]


@view
@external
def getApproved(_tokenId: uint256) -> address:

    """
    @notice Returns the approved address for the given NFT.
    @dev This method returns the approved address for the given NFT, if any. Reverts if the NFT does not exist.
    @param _tokenId ID of the NFT to query the approval of.
    @return address Address of the approved address for the NFT.
    """

    assert self.id_to_owner[_tokenId] != empty(address)
    return self.id_to_approvals[_tokenId]


@view
@external
def isApprovedForAll(_owner: address, _operator: address) -> bool:

    """
    @notice Returns if the given operator is approved to manage all NFTs of the given owner.
    @dev This method returns if the given operator is approved to manage all NFTs of the given owner.
    @param _owner Address of the owner to query for.
    @param _operator Address of the operator to query for.
    @return bool True if the operator is approved to manage all NFTs of the given owner, false otherwise.
    """

    return self.owner_to_operators[_owner][_operator]


@external
def transferFrom(_from: address, _to: address, _tokenId: uint256):

    """
    @notice Transfers the ownership of the given NFT to the given address.
    @dev This method transfers the ownership of the given NFT to the given address. Reverts if the sender is not the owner, the NFT does not exist, or the sender is not approved to transfer the NFT.
    @param _from Address of the current owner of the NFT.
    @param _to Address of the new owner of the NFT.
    @param _tokenId ID of 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""):

    """
    @notice Safely transfers the ownership of the given NFT to the given address.
    @dev This method safely transfers the ownership of the given NFT to the given address. Reverts if the sender is not the owner, the NFT does not exist, or the sender is not approved to transfer the NFT. If the receiver is a contract, it must implement the ERC721Receiver interface.
    @param _from Address of the current owner of the NFT.
    @param _to Address of the new owner of the NFT.
    @param _tokenId ID of 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:
        returnValue: bytes4 = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data)
        assert returnValue == convert(method_id("onERC721Received(address,address,uint256,bytes)", output_type=Bytes[4]), bytes4)


@external
def approve(_approved: address, _tokenId: uint256):

    """
    @notice Approves the given address to manage the given NFT.
    @dev This method approves the given address to manage the given NFT. Reverts if the sender is not the owner of the NFT.
    @param _approved Address to approve for the given NFT.
    @param _tokenId ID of the NFT to approve.
    """

    owner: address = self.id_to_owner[_tokenId]
    assert owner != empty(address)
    assert _approved != owner
    assert (self.id_to_owner[_tokenId] == msg.sender or self.owner_to_operators[owner][msg.sender])
    self.id_to_approvals[_tokenId] = _approved
    log Approval(owner, _approved, _tokenId)


@external
def setApprovalForAll(_operator: address, _approved: bool):

    """
    @notice Approves or revokes the given operator to manage all NFTs of the sender.
    @dev This method approves or revokes the given operator to manage all NFTs of the sender.
    @param _operator Address to approve or revoke for all NFTs of the sender.
    @param _approved True to approve, false to revoke.
    """

    assert _operator != msg.sender
    self.owner_to_operators[msg.sender][_operator] = _approved
    log ApprovalForAll(msg.sender, _operator, _approved)


@view
@external
def tokenURI(tokenId: uint256) -> String[138]:

    """
    @notice Returns the URI for the given token.
    @dev This method returns the URI for the given token. Reverts if the token does not exist.
    @param tokenId ID of the token to query the URI of.
    @return String[] URI for the given token.
    """

    return concat(base_url, uint2str(tokenId))


@pure
@external
def supportsInterface(interface_id: bytes4) -> bool:
    """
    @notice Check if the contract supports the given interface, as defined in ERC-165
    @dev Checks if the contract supports the given interface and returns true if it does.
    @param interface_id The interface id.
    @return True if the contract supports the given interface.
    """
    return interface_id in SUPPORTED_INTERFACES


@view
@internal
def _is_approved_or_owner(_spender: address, _token_id: uint256) -> bool:
    owner: address = self.id_to_owner[_token_id]
    return _spender == owner or _spender == self.id_to_approvals[_token_id] or self.owner_to_operators[owner][_spender]


@internal
def _mint_token_to(_to: address, _token_id: uint256):
    self._add_token_to(_to, _token_id)


@internal
def _burn_token_from(_owner: address, _token_id: uint256):
    self._remove_token_from(_owner, _token_id)
    log Transfer(_owner, empty(address), _token_id)


@internal
def _add_token_to(_to: address, _token_id: uint256):
    self.id_to_owner[_token_id] = _to
    self.owner_to_nft_count[_to] += 1


@internal
def _remove_token_from(_from: address, _token_id: uint256):
    self.id_to_owner[_token_id] = empty(address)
    self.owner_to_nft_count[_from] -= 1
    self._clear_approval(_from, _token_id)


@internal
def _clear_approval(_owner: address, _token_id: uint256):
    if self.id_to_approvals[_token_id] != empty(address):
        self.id_to_approvals[_token_id] = empty(address)


@internal
def _transfer_from(_from: address, _to: address, _token_id: uint256, _sender: address):
    assert self.id_to_owner[_token_id] == _from, "not owner"
    assert self._is_approved_or_owner(_sender, _token_id), "not approved or owner"
    assert _to != empty(address)
    self._clear_approval(_from, _token_id)
    self.id_to_owner[_token_id] = _to
    self.owner_to_nft_count[_from] -= 1
    self.owner_to_nft_count[_to] += 1
    log Transfer(_from, _to, _token_id)

Contract Security Audit

Contract ABI

[{"name":"Transfer","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","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":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_base_url","type":"string"},{"name":"_contract_uri","type":"string"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"initialise","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"mint","inputs":[{"name":"tokens","type":"tuple[]","components":[{"name":"token_id","type":"uint256"},{"name":"wallet","type":"address"}]}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"burn","inputs":[{"name":"tokens","type":"tuple[]","components":[{"name":"token_id","type":"uint256"},{"name":"wallet","type":"address"}]}],"outputs":[]},{"stateMutability":"view","type":"function","name":"balanceOf","inputs":[{"name":"_owner","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"ownerOf","inputs":[{"name":"_tokenId","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"owner_of","inputs":[{"name":"_tokenId","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"getApproved","inputs":[{"name":"_tokenId","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":"view","type":"function","name":"tokenURI","inputs":[{"name":"tokenId","type":"uint256"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"pure","type":"function","name":"supportsInterface","inputs":[{"name":"interface_id","type":"bytes4"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"contractURI","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"renting_addr","inputs":[],"outputs":[{"name":"","type":"address"}]}]

610f6d5150346101eb5760206110535f395f51601e602082611053015f395f51116101eb576020602082611053015f395f5101808261105301604039505060206110735f395f516014602082611053015f395f51116101eb576020602082611053015f395f5101808261105301608039505060206110935f395f51603c602082611053015f395f51116101eb576020602082611053015f395f510180826110530160c039505060206110b35f395f51603c602082611053015f395f51116101eb576020602082611053015f395f51018082611053016101203950506020604051015f81601f0160051c600281116101eb57801561011457905b8060051b604001518160051b610e4d01526001018181186100f8575b5050506020608051015f81601f0160051c600281116101eb57801561015457905b8060051b608001518160051b604001610e4d0152600101818118610135575b505050602060c051015f81601f0160051c600381116101eb57801561019457905b8060051b60c001518160051b608001610e4d0152600101818118610175575b505050602061012051015f81601f0160051c600381116101eb5780156101d657905b8060051b61012001518160051b60e001610e4d01526001018181186101b6575b505050610e4d6101ef61000039610f8d610000f35b5f80fd5f3560e01c60026015820660011b610e2301601e395f51565b6306fdde038118610b215734610e1f576020806040528060400160206020610e4d5f395f510180610e4d8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f3610b21565b6395d89b418118610b215734610e1f576020806040528060400160206020610e8d5f395f510180610e8d8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f3610b21565b63e8a3d4858118610b215734610e1f576020806040528060400160206020610f2d5f395f510180610f2d8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f3610b21565b6340f3a0978118610b215734610e1f5760045460405260206040f3610b21565b63592e6f598118610b215734610e1f57600454156101b95760136040527f616c726561647920696e697469616c697365640000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b3360045500610b21565b638fd404c7811861039d57604436103417610e1f576004356004016020813511610e1f5780355f8160208111610e1f57801561022e57905b8060061b60e0018160061b60208601018035825260208101358060a01c610e1f57602083015250506001018181186101fb575b50508060c05250506004543318156102a55760146108e0527f6e6f742072656e74696e6720636f6e7472616374000000000000000000000000610900526108e0506108e0518061090001601f825f031636823750506308c379a06108a05260206108c052601f19601f6108e05101166044016108bcfd5b5f60c05160208111610e1f57801561039957905b8060061b60e00180516108e052602081015161090052505f6108e0516020525f5260405f205415610349576014610920527f746f6b656e20616c7265616479206d696e7465640000000000000000000000006109405261092050610920518061094001601f825f031636823750506308c379a06108e052602061090052601f19601f6109205101166044016108fcfd5b610900516080526108e05160a05261035f610b58565b6108e051610900515f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f610920a46001018181186102b9575b5050005b6301ffc9a78118610b2157602436103417610e1f576004358060201b610e1f576040526040517f01ffc9a70000000000000000000000000000000000000000000000000000000081186103f1576001610444565b7f80ac58cd00000000000000000000000000000000000000000000000000000000811861041f576001610444565b7f5b5e139f000000000000000000000000000000000000000000000000000000008118155b905060805260206080f3610b21565b63ebc803d08118610b2157604436103417610e1f576004356004016020813511610e1f5780355f8160208111610e1f5780156104bf57905b8060061b610120018160061b60208601018035825260208101358060a01c610e1f576020830152505060010181811861048b575b505080610100525050600454331815610537576014610920527f6e6f742072656e74696e6720636f6e74726163740000000000000000000000006109405261092050610920518061094001601f825f031636823750506308c379a06108e052602061090052601f19601f6109205101166044016108fcfd5b5f6101005160208111610e1f57801561059d57905b8060061b6101200180516109205260208101516109405250610940515f610920516020525f5260405f205418610592576109405160c0526109205160e052610592610bda565b60010181811861054c575b505000610b21565b6370a0823181186105e857602436103417610e1f576004358060a01c610e1f5760405260405115610e1f5760036040516020525f5260405f205460605260206060f35b63a22cb4658118610b2157604436103417610e1f576004358060a01c610e1f576040526024358060011c610e1f576060523360405114610e1f576060516002336020525f5260405f20806040516020525f5260405f20905055604051337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160605160805260206080a300610b21565b636352211e8118610b2157602436103417610e1f575f6004356020525f5260405f205460405260405115610e1f5760206040f3610b21565b6342a0106b81186106db57602436103417610e1f575f6004356020525f5260405f205460405260206040f35b63e985e9c58118610b2157604436103417610e1f576004358060a01c610e1f576040526024358060a01c610e1f5760605260026040516020525f5260405f20806060516020525f5260405f2090505460805260206080f3610b21565b63081812fc811861077757602436103417610e1f575f6004356020525f5260405f205415610e1f5760016004356020525f5260405f205460405260206040f35b6323b872dd8118610b2157606436103417610e1f576004358060a01c610e1f57610180526024358060a01c610e1f576101a0526101805160a0526101a05160c05260443560e05233610100526107cb610c82565b00610b21565b6342842e0e81186107f057606436103417610e1f575f6101c05261091e565b63c87b56dd8118610b2157602436103417610e1f57602080610180525f6020610ecd5f395f518160e00181610eed8239508082019150506004358061084057603060415260016040526040610881565b5f604f905b8261085f578081608e035280608e03925061087d56610872565b600a830660300181608e0352600a830492505b600101818118610845575b5050805b90508051602082018360e0018281848460045afa505050808301925050508060c05260c09050816101800160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050905081019050610180f3610b21565b63b88d4fde8118610b215760a436103417610e1f57606435600401610400813511610e1f57602081350180826101c03750505b6004358060a01c610e1f57610180526024358060a01c610e1f576101a0526101805160a0526101a05160c05260443560e052336101005261095d610c82565b6101a0513b15610a55576101a05163150b7a026106205260803361064052610180516106605260443561068052806106a052806106400160206101c051018082826101c060045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690508101505060206106206104a461063c845afa6109e6573d5f5f3e3d5ffd5b60203d10610e1f57610620518060201b610e1f57610ae052610ae0905051610600526004610620527f150b7a020000000000000000000000000000000000000000000000000000000061064052610620805160200360031b6020820151811c811b905090506106005118610e1f575b00610b21565b63095ea7b38118610b2157604436103417610e1f576004358060a01c610e1f576040525f6024356020525f5260405f205460605260605115610e1f5760605160405114610e1f57335f6024356020525f5260405f205418610abd576001610ada565b60026060516020525f5260405f2080336020525f5260405f209050545b15610e1f5760405160016024356020525f5260405f20556024356040516060517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f6080a4005b5f5ffd5b6040515f6060516020525f5260405f205560036040516020525f5260405f20805460018101818110610e1f579050815550565b60805160405260a051606052610b6c610b25565b565b60016060516020525f5260405f205415610b93575f60016060516020525f5260405f20555b565b5f5f60a0516020525f5260405f205560036080516020525f5260405f20805460018103818111610e1f57905081555060805160405260a051606052610bd8610b6e565b565b60c05160805260e05160a052610bee610b95565b60e0515f60c0517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f610100a4565b5f6060516020525f5260405f205460805260805160405118610c40576001610c7d565b60016060516020525f5260405f205460405118610c5e576001610c7d565b60026080516020525f5260405f20806040516020525f5260405f209050545b815250565b60a0515f60e0516020525f5260405f20541815610cfc576009610120527f6e6f74206f776e657200000000000000000000000000000000000000000000006101405261012050610120518061014001601f825f031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b6101005160405260e051606052610d14610120610c1d565b61012051610d81576015610140527f6e6f7420617070726f766564206f72206f776e657200000000000000000000006101605261014050610140518061016001601f825f031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05115610e1f5760a05160405260e051606052610d9d610b6e565b60c0515f60e0516020525f5260405f2055600360a0516020525f5260405f20805460018103818111610e1f579050815550600360c0516020525f5260405f20805460018101818110610e1f57905081555060e05160c05160a0517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f610120a4565b5f80fd0b210453073707d106af0b21007205a50a5b0b2100180b2101c30b2101460b210b2108eb0126067700cc84190e4d81182a190140a16576797065728300030a0017000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000124b6f64616d617261205661756c7473205633000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104b4f44414d4152415641554c5453563300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f746f6b656e2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f6d657461646174610000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x5f3560e01c60026015820660011b610e2301601e395f51565b6306fdde038118610b215734610e1f576020806040528060400160206020610e4d5f395f510180610e4d8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f3610b21565b6395d89b418118610b215734610e1f576020806040528060400160206020610e8d5f395f510180610e8d8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f3610b21565b63e8a3d4858118610b215734610e1f576020806040528060400160206020610f2d5f395f510180610f2d8339508051806020830101601f825f03163682375050601f19601f825160200101169050810190506040f3610b21565b6340f3a0978118610b215734610e1f5760045460405260206040f3610b21565b63592e6f598118610b215734610e1f57600454156101b95760136040527f616c726561647920696e697469616c697365640000000000000000000000000060605260405060405180606001601f825f031636823750506308c379a05f526020602052601f19601f6040510116604401601cfd5b3360045500610b21565b638fd404c7811861039d57604436103417610e1f576004356004016020813511610e1f5780355f8160208111610e1f57801561022e57905b8060061b60e0018160061b60208601018035825260208101358060a01c610e1f57602083015250506001018181186101fb575b50508060c05250506004543318156102a55760146108e0527f6e6f742072656e74696e6720636f6e7472616374000000000000000000000000610900526108e0506108e0518061090001601f825f031636823750506308c379a06108a05260206108c052601f19601f6108e05101166044016108bcfd5b5f60c05160208111610e1f57801561039957905b8060061b60e00180516108e052602081015161090052505f6108e0516020525f5260405f205415610349576014610920527f746f6b656e20616c7265616479206d696e7465640000000000000000000000006109405261092050610920518061094001601f825f031636823750506308c379a06108e052602061090052601f19601f6109205101166044016108fcfd5b610900516080526108e05160a05261035f610b58565b6108e051610900515f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f610920a46001018181186102b9575b5050005b6301ffc9a78118610b2157602436103417610e1f576004358060201b610e1f576040526040517f01ffc9a70000000000000000000000000000000000000000000000000000000081186103f1576001610444565b7f80ac58cd00000000000000000000000000000000000000000000000000000000811861041f576001610444565b7f5b5e139f000000000000000000000000000000000000000000000000000000008118155b905060805260206080f3610b21565b63ebc803d08118610b2157604436103417610e1f576004356004016020813511610e1f5780355f8160208111610e1f5780156104bf57905b8060061b610120018160061b60208601018035825260208101358060a01c610e1f576020830152505060010181811861048b575b505080610100525050600454331815610537576014610920527f6e6f742072656e74696e6720636f6e74726163740000000000000000000000006109405261092050610920518061094001601f825f031636823750506308c379a06108e052602061090052601f19601f6109205101166044016108fcfd5b5f6101005160208111610e1f57801561059d57905b8060061b6101200180516109205260208101516109405250610940515f610920516020525f5260405f205418610592576109405160c0526109205160e052610592610bda565b60010181811861054c575b505000610b21565b6370a0823181186105e857602436103417610e1f576004358060a01c610e1f5760405260405115610e1f5760036040516020525f5260405f205460605260206060f35b63a22cb4658118610b2157604436103417610e1f576004358060a01c610e1f576040526024358060011c610e1f576060523360405114610e1f576060516002336020525f5260405f20806040516020525f5260405f20905055604051337f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160605160805260206080a300610b21565b636352211e8118610b2157602436103417610e1f575f6004356020525f5260405f205460405260405115610e1f5760206040f3610b21565b6342a0106b81186106db57602436103417610e1f575f6004356020525f5260405f205460405260206040f35b63e985e9c58118610b2157604436103417610e1f576004358060a01c610e1f576040526024358060a01c610e1f5760605260026040516020525f5260405f20806060516020525f5260405f2090505460805260206080f3610b21565b63081812fc811861077757602436103417610e1f575f6004356020525f5260405f205415610e1f5760016004356020525f5260405f205460405260206040f35b6323b872dd8118610b2157606436103417610e1f576004358060a01c610e1f57610180526024358060a01c610e1f576101a0526101805160a0526101a05160c05260443560e05233610100526107cb610c82565b00610b21565b6342842e0e81186107f057606436103417610e1f575f6101c05261091e565b63c87b56dd8118610b2157602436103417610e1f57602080610180525f6020610ecd5f395f518160e00181610eed8239508082019150506004358061084057603060415260016040526040610881565b5f604f905b8261085f578081608e035280608e03925061087d56610872565b600a830660300181608e0352600a830492505b600101818118610845575b5050805b90508051602082018360e0018281848460045afa505050808301925050508060c05260c09050816101800160208251018082828560045afa50508051806020830101601f825f03163682375050601f19601f825160200101169050905081019050610180f3610b21565b63b88d4fde8118610b215760a436103417610e1f57606435600401610400813511610e1f57602081350180826101c03750505b6004358060a01c610e1f57610180526024358060a01c610e1f576101a0526101805160a0526101a05160c05260443560e052336101005261095d610c82565b6101a0513b15610a55576101a05163150b7a026106205260803361064052610180516106605260443561068052806106a052806106400160206101c051018082826101c060045afa50508051806020830101601f825f03163682375050601f19601f8251602001011690508101505060206106206104a461063c845afa6109e6573d5f5f3e3d5ffd5b60203d10610e1f57610620518060201b610e1f57610ae052610ae0905051610600526004610620527f150b7a020000000000000000000000000000000000000000000000000000000061064052610620805160200360031b6020820151811c811b905090506106005118610e1f575b00610b21565b63095ea7b38118610b2157604436103417610e1f576004358060a01c610e1f576040525f6024356020525f5260405f205460605260605115610e1f5760605160405114610e1f57335f6024356020525f5260405f205418610abd576001610ada565b60026060516020525f5260405f2080336020525f5260405f209050545b15610e1f5760405160016024356020525f5260405f20556024356040516060517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f6080a4005b5f5ffd5b6040515f6060516020525f5260405f205560036040516020525f5260405f20805460018101818110610e1f579050815550565b60805160405260a051606052610b6c610b25565b565b60016060516020525f5260405f205415610b93575f60016060516020525f5260405f20555b565b5f5f60a0516020525f5260405f205560036080516020525f5260405f20805460018103818111610e1f57905081555060805160405260a051606052610bd8610b6e565b565b60c05160805260e05160a052610bee610b95565b60e0515f60c0517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f610100a4565b5f6060516020525f5260405f205460805260805160405118610c40576001610c7d565b60016060516020525f5260405f205460405118610c5e576001610c7d565b60026080516020525f5260405f20806040516020525f5260405f209050545b815250565b60a0515f60e0516020525f5260405f20541815610cfc576009610120527f6e6f74206f776e657200000000000000000000000000000000000000000000006101405261012050610120518061014001601f825f031636823750506308c379a060e052602061010052601f19601f61012051011660440160fcfd5b6101005160405260e051606052610d14610120610c1d565b61012051610d81576015610140527f6e6f7420617070726f766564206f72206f776e657200000000000000000000006101605261014050610140518061016001601f825f031636823750506308c379a061010052602061012052601f19601f61014051011660440161011cfd5b60c05115610e1f5760a05160405260e051606052610d9d610b6e565b60c0515f60e0516020525f5260405f2055600360a0516020525f5260405f20805460018103818111610e1f579050815550600360c0516020525f5260405f20805460018101818110610e1f57905081555060e05160c05160a0517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f610120a4565b5f80fd0b210453073707d106af0b21007205a50a5b0b2100180b2101c30b2101460b210b2108eb0126067700cc00000000000000000000000000000000000000000000000000000000000000124b6f64616d617261205661756c7473205633000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104b4f44414d4152415641554c5453563300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f746f6b656e2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f6d657461646174610000000000000000000000000000000000000000000000000000000000

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000124b6f64616d617261205661756c7473205633000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104b4f44414d4152415641554c5453563300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f746f6b656e2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f6d657461646174610000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Kodamara Vaults V3
Arg [1] : _symbol (string): KODAMARAVAULTSV3
Arg [2] : _base_url (string): https://kodamara.zharta.io/token/
Arg [3] : _contract_uri (string): https://kodamara.zharta.io/metadata

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [5] : 4b6f64616d617261205661756c74732056330000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000010
Arg [7] : 4b4f44414d4152415641554c5453563300000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [9] : 68747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f746f6b656e
Arg [10] : 2f00000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [12] : 68747470733a2f2f6b6f64616d6172612e7a68617274612e696f2f6d65746164
Arg [13] : 6174610000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

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

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.