ETH Price: $2,504.33 (+3.76%)

Contract

0x96f2C09190Ab3388c4AA6421d4c8a95C1100eF88
 

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
Mint202502162024-07-06 21:40:3592 days ago1720302035IN
0x96f2C091...C1100eF88
0 ETH0.000139411.52535208
Mint201857562024-06-27 21:37:35101 days ago1719524255IN
0x96f2C091...C1100eF88
0 ETH0.006073536.51753104
Mint198405392024-05-10 15:29:35149 days ago1715354975IN
0x96f2C091...C1100eF88
0 ETH0.001665497.19556039
Mint197124342024-04-22 17:29:47167 days ago1713806987IN
0x96f2C091...C1100eF88
0 ETH0.0014353115.70233217
Mint196775962024-04-17 20:31:35172 days ago1713385895IN
0x96f2C091...C1100eF88
0 ETH0.0011320812.38492181
Mint196775782024-04-17 20:27:59172 days ago1713385679IN
0x96f2C091...C1100eF88
0 ETH0.0014967913.69184843
Mint194350192024-03-14 18:28:59206 days ago1710440939IN
0x96f2C091...C1100eF88
0 ETH0.0045856450.16678325
Mint194239932024-03-13 5:14:11207 days ago1710306851IN
0x96f2C091...C1100eF88
0 ETH0.0042985539.3164899
Mint193679192024-03-05 8:58:23215 days ago1709629103IN
0x96f2C091...C1100eF88
0 ETH0.0043546158.60225178
Mint193673432024-03-05 7:02:35215 days ago1709622155IN
0x96f2C091...C1100eF88
0 ETH0.0055675974.92587101
Mint193551052024-03-03 14:00:59217 days ago1709474459IN
0x96f2C091...C1100eF88
0 ETH0.0193466647.58600178
Mint193340732024-02-29 15:30:35220 days ago1709220635IN
0x96f2C091...C1100eF88
0 ETH0.0074579281.60012282
Mint193317052024-02-29 7:32:35220 days ago1709191955IN
0x96f2C091...C1100eF88
0 ETH0.0065287651.63361831
Mint193008032024-02-24 23:43:47225 days ago1708818227IN
0x96f2C091...C1100eF88
0 ETH0.0020811722.7739629
Mint192323282024-02-15 9:06:35234 days ago1707987995IN
0x96f2C091...C1100eF88
0 ETH0.003137219.43194145
Mint192198512024-02-13 15:03:47236 days ago1707836627IN
0x96f2C091...C1100eF88
0 ETH0.0041544655.91774522
Mint191311742024-02-01 4:20:23248 days ago1706761223IN
0x96f2C091...C1100eF88
0 ETH0.0078410519.28567198
Mint191305762024-02-01 2:18:47249 days ago1706753927IN
0x96f2C091...C1100eF88
0 ETH0.0066952728.93353202
Mint191075132024-01-28 20:47:59252 days ago1706474879IN
0x96f2C091...C1100eF88
0 ETH0.0021801611.09866901
Mint189947962024-01-13 1:49:11268 days ago1705110551IN
0x96f2C091...C1100eF88
0 ETH0.001300414.226391
Mint189295902024-01-03 21:46:35277 days ago1704318395IN
0x96f2C091...C1100eF88
0 ETH0.0152558620.15915814
Mint189046752023-12-31 9:49:47280 days ago1704016187IN
0x96f2C091...C1100eF88
0 ETH0.0053602813.18441281
Mint189013732023-12-30 22:42:47281 days ago1703976167IN
0x96f2C091...C1100eF88
0 ETH0.0014350115.69904165
Mint188704822023-12-26 14:31:11285 days ago1703601071IN
0x96f2C091...C1100eF88
0 ETH0.0030384533.24491825
Mint188077582023-12-17 19:15:59294 days ago1702840559IN
0x96f2C091...C1100eF88
0 ETH0.003197634.98170789
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SignatureMint

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : SignatureMint.sol
// SPDX-License-Identifier: AGPL-3.0-only+VPL
pragma solidity ^0.8.19;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

import "./libraries/EIP712.sol";
import "./interfaces/IYAYOMintable.sol";

/*
  It saves bytecode to revert on custom errors instead of using require
  statements. We are just declaring these errors for reverting with upon various
  conditions later in this contract.
*/
error CannotMintExpiredSignature ();
error CannotMintInvalidSignature ();
error MintArrayLengthMismatch ();
error SignerCannotBeZero ();

/**
  @custom:benediction DEVS BENEDICAT ET PROTEGAT CONTRACTVS MEAM
  @title A contract which accepts signatures from a trusted signer to mint an
    ERC-721 item.
  @author Tim Clancy <tim-clancy.eth>
  @author cheb <evmcheb.eth>

  This token contract allows for the implementation of off-chain systems that
  mint items to callers using entirely off-chain data.

  @custom:date May 24th, 2023
*/
contract SignatureMint is EIP712, Ownable, ReentrancyGuard {

  /**
    A constant hash of the mint operation's signature.
  
    @dev _minter The address of the minter for the signed-for item. This must
      be the address of the caller.
    @dev _expiry The expiry time after which this signature cannot execute.
    @dev _tokenId The ID of the specific token being minted.
  */
  bytes32 public constant MINT_TYPEHASH = keccak256(
    "mint(address _minter,uint256 _expiry,uint256 _tokenId)"
  );

  /// The name of this minter.
  string public name;

  /// The address permitted to sign claim signatures.
  address public signer;

  /// The address of the YAYO contract to mint new items into.
  address public immutable yayo;

  /**
    An event emitted when a caller mints a new item.

    @param caller The caller who claimed the tokens.
    @param id The ID of the specific item within the ERC-721 `item` contract.
  */
  event Minted (
    address indexed caller,
    uint256 id
  );

  /**
    Construct a new minter by providing it a permissioned claim signer which may
    issue claims and claim amounts, and the item to mint in.

    @param _name The name of the minter, used in EIP-712 domain separation.
    @param _signer The address permitted to sign claim signatures.
    @param _yayo The address of the YAYO NFT contract that items are minted into.
  */
  constructor (
    string memory _name,
    address _signer,
    address _yayo
  ) EIP712 (_name, "1") {
    if (_signer == address(0)) { revert SignerCannotBeZero(); }
    name = _name;
    signer = _signer;
    yayo = _yayo;
  }

  /**
    A private helper function to validate a signature supplied for item mints.
    This function constructs a digest and verifies that the signature signer was
    the authorized address we expect.

    @param _minter The address of the minter for the signed-for item. This must
      be the address of the caller.
    @param _expiry The expiry time after which this signature cannot execute.
    @param _tokenId The specific ID of the item to mint.
    @param _v The recovery byte of the signature.
    @param _r Half of the ECDSA signature pair.
    @param _s Half of the ECDSA signature pair.
  */
  function validMint (
    address _minter,
    uint256 _expiry,
    uint256 _tokenId,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) private view returns (bool) {
    bytes32 digest = keccak256(
      abi.encodePacked(
        "\x19\x01",
        DOMAIN_SEPARATOR,
        keccak256(
          abi.encode(MINT_TYPEHASH, _minter, _expiry, _tokenId)
        )
      )
    );

    // The claim is validated if it was signed by our authorized signer.
    return ecrecover(digest, _v, _r, _s) == signer;
  }

  /**
    Allow a caller to mint a new item if
      1. the mint is backed by a valid signature from the trusted `signer`.
      2. the signature is not expired.

    @param _minter The address of the minter for the signed-for item. This does
      not have to be the address of the caller, allowing for meta-transaction
      style minting.
    @param _expiry The expiry time after which this signature cannot execute.
    @param _tokenId The specific ID of the item to mint.
    @param _v The recovery byte of the signature.
    @param _r Half of the ECDSA signature pair.
    @param _s Half of the ECDSA signature pair.
  */
  function _mint (
    address _minter,
    uint256 _expiry,
    uint256 _tokenId,
    uint8 _v,
    bytes32 _r,
    bytes32 _s
  ) internal nonReentrant {

    // Validate the expiration time.
    if (_expiry < block.timestamp) { revert CannotMintExpiredSignature(); }

    // Validiate that the claim was provided by our trusted `signer`.
    bool validSignature = validMint(_minter, _expiry, _tokenId, _v, _r, _s);
    if (!validSignature) {
      revert CannotMintInvalidSignature();
    }

    // Mint the new item.
    IYAYOMintable yayoContract = IYAYOMintable(yayo);
    yayoContract.mint(_minter, _tokenId);

    // Emit an event.
    emit Minted(_minter, _tokenId);
  }

  /**
    Allow a caller to mint any new items in an array if, for each item
      1. the mint is backed by a valid signature from the trusted `signer`.
      2. the signature is not expired.

    @param _minters Addresses of the minters for the signed-for item. This
      does not have to be the address of the caller, allowing for
      meta-transaction style minting.
    @param _expiries The expiry times after which a signature cannot execute.
    @param _tokenIds The specific IDs of the items to mint.
    @param _v The recovery bytes of the signature.
    @param _r Halves of the ECDSA signature pair.
    @param _s Halves of the ECDSA signature pair.
  */
  function mint (
    address[] memory _minters,
    uint256[] memory _expiries,
    uint256[] memory _tokenIds,
    uint8[] memory _v,
    bytes32[] memory _r,
    bytes32[] memory _s
  ) external {
    if (
      _minters.length != _expiries.length || 
      _minters.length != _tokenIds.length || 
      _minters.length != _v.length ||
      _minters.length != _r.length ||
      _minters.length != _s.length
    ) {
      revert MintArrayLengthMismatch();
    }

    // Mint each item.
    for (uint256 i = 0; i < _minters.length; i++) {
      _mint(_minters[i], _expiries[i], _tokenIds[i], _v[i], _r[i], _s[i]);
    }
  }

  /**
    An administrative function to change the signer address. This may be used to
    rotate the signer address routinely or in the event of a key compromise.
    The zero address is used to disable the signer entirely.

    @param _newSigner The address of the new address permitted to sign claim
      signatures.
  */
  function setSigner (
    address _newSigner
  ) external onlyOwner {
    if (_newSigner == address(0)) {
      revert SignerCannotBeZero();
    }
    signer = _newSigner;
  }
}

File 2 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 6 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 6 : EIP712.sol
pragma solidity ^0.8.11;

abstract contract EIP712 {
    struct EIP712Domain {
        string name;
        string version;
        uint256 chainId;
        address verifyingContract;
    }

    bytes32 constant EIP712DOMAIN_TYPEHASH =
        keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");

    bytes internal personalSignPrefix = "\x19Ethereum Signed Message:\n";

    bytes32 public immutable DOMAIN_SEPARATOR;

    constructor(string memory name, string memory version) {
        uint256 chainId_;
        assembly {
            chainId_ := chainid()
        }
        DOMAIN_SEPARATOR =
            hash(EIP712Domain({name: name, version: version, chainId: chainId_, verifyingContract: address(this)}));
    }

    function hash(EIP712Domain memory eip712Domain) internal pure returns (bytes32) {
        return keccak256(
            abi.encode(
                EIP712DOMAIN_TYPEHASH,
                keccak256(bytes(eip712Domain.name)),
                keccak256(bytes(eip712Domain.version)),
                eip712Domain.chainId,
                eip712Domain.verifyingContract
            )
        );
    }

    function parseSignature(bytes memory signature) internal pure returns (uint8 v, bytes32 r, bytes32 s) {
        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }
        return (v, r, s);
    }
}

File 5 of 6 : IYAYOMintable.sol
// SPDX-License-Identifier: AGPL-3.0-only+VPL
pragma solidity ^0.8.19;

/**
  @custom:benediction DEVS BENEDICAT ET PROTEGAT CONTRACTVS MEAM
  @title A contract for minting new Ethereum-side YAYO tokens.
  @author cheb <evmcheb.eth>
  @author Tim Clancy <tim-clancy.eth>
  
  This token contract allows for privileged callers to mint new YAYO.

  @custom:date May 24th, 2023
*/
interface IYAYOMintable {

  /**
    A permissioned minting function. This function may only be called by the
    admin-specified minter.

    @param _to The recipient of the minted item.
    @param _tokenId The ID of the item to mint.
  */
  function mint (
    address _to,
    uint256 _tokenId
  ) external;
}

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/=lib/openzeppelin-contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "solady/=lib/solady/src/",
    "solarray/=lib/solarray/src/",
    "solmate/=lib/solady/lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"address","name":"_yayo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CannotMintExpiredSignature","type":"error"},{"inputs":[],"name":"CannotMintInvalidSignature","type":"error"},{"inputs":[],"name":"MintArrayLengthMismatch","type":"error"},{"inputs":[],"name":"SignerCannotBeZero","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_minters","type":"address[]"},{"internalType":"uint256[]","name":"_expiries","type":"uint256[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"uint8[]","name":"_v","type":"uint8[]"},{"internalType":"bytes32[]","name":"_r","type":"bytes32[]"},{"internalType":"bytes32[]","name":"_s","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yayo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

610100604052601a60c09081527f19457468657265756d205369676e6564204d6573736167653a0a00000000000060e0526000906200003f9082620002c2565b503480156200004d57600080fd5b5060405162001072380380620010728339810160408190526200007091620003ab565b60408051808201825260018152603160f81b602080830191909152825160808101845286815290810182905246928101839052306060820152859290620000b7906200012d565b60805250620000ca9150339050620001cb565b60016002556001600160a01b038216620000f757604051633d9d06fb60e11b815260040160405180910390fd5b6003620001058482620002c2565b50600480546001600160a01b0319166001600160a01b039384161790551660a05250620004a5565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82600001518051906020012083602001518051906020012084604001518560600151604051602001620001ae9594939291909485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b604051602081830303815290604052805190602001209050919050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200024857607f821691505b6020821081036200026957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002bd57600081815260208120601f850160051c81016020861015620002985750805b601f850160051c820191505b81811015620002b957828155600101620002a4565b5050505b505050565b81516001600160401b03811115620002de57620002de6200021d565b620002f681620002ef845462000233565b846200026f565b602080601f8311600181146200032e5760008415620003155750858301515b600019600386901b1c1916600185901b178555620002b9565b600085815260208120601f198616915b828110156200035f578886015182559484019460019091019084016200033e565b50858210156200037e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b0381168114620003a657600080fd5b919050565b600080600060608486031215620003c157600080fd5b83516001600160401b0380821115620003d957600080fd5b818601915086601f830112620003ee57600080fd5b8151818111156200040357620004036200021d565b604051601f8201601f19908116603f011681019083821181831017156200042e576200042e6200021d565b816040528281526020935089848487010111156200044b57600080fd5b600091505b828210156200046f578482018401518183018501529083019062000450565b60008484830101528097505050506200048a8187016200038e565b935050506200049c604085016200038e565b90509250925092565b60805160a051610b9a620004d860003960008181610154015261058201526000818160f101526107000152610b9a6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b1461013e578063d9507f981461014f578063f2fde38b14610176578063f76fc35e14610189578063fbb710a9146101b057600080fd5b806306fdde03146100a3578063238ac933146100c15780633644e515146100ec5780636c19e78314610121578063715018a614610136575b600080fd5b6100ab6101c3565b6040516100b891906107c9565b60405180910390f35b6004546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6101137f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016100b8565b61013461012f366004610833565b610251565b005b6101346102a2565b6001546001600160a01b03166100d4565b6100d47f000000000000000000000000000000000000000000000000000000000000000081565b610134610184366004610833565b6102b6565b6101137f8e857ca7f733815b4c7a73c6300e4f2969a43fcd45f9c2ccee90365477affab081565b6101346101be3660046109f8565b610334565b600380546101d090610aed565b80601f01602080910402602001604051908101604052809291908181526020018280546101fc90610aed565b80156102495780601f1061021e57610100808354040283529160200191610249565b820191906000526020600020905b81548152906001019060200180831161022c57829003601f168201915b505050505081565b610259610457565b6001600160a01b03811661028057604051633d9d06fb60e11b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6102aa610457565b6102b460006104b1565b565b6102be610457565b6001600160a01b0381166103285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610331816104b1565b50565b8451865114158061034757508351865114155b8061035457508251865114155b8061036157508151865114155b8061036e57508051865114155b1561038c57604051633757dfe560e01b815260040160405180910390fd5b60005b865181101561044e5761043c8782815181106103ad576103ad610b27565b60200260200101518783815181106103c7576103c7610b27565b60200260200101518784815181106103e1576103e1610b27565b60200260200101518785815181106103fb576103fb610b27565b602002602001015187868151811061041557610415610b27565b602002602001015187878151811061042f5761042f610b27565b6020026020010151610503565b8061044681610b3d565b91505061038f565b50505050505050565b6001546001600160a01b031633146102b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161031f565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61050b610638565b4285101561052c57604051632a0fbded60e21b815260040160405180910390fd5b600061053c87878787878761068f565b90508061055c5760405163b7fc248b60e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038881166004830152602482018790527f000000000000000000000000000000000000000000000000000000000000000091908216906340c10f1990604401600060405180830381600087803b1580156105c957600080fd5b505af11580156105dd573d6000803e3d6000fd5b50505050876001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8760405161061c91815260200190565b60405180910390a250506106306001600255565b505050505050565b60028054036106895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161031f565b60028055565b604080517f8e857ca7f733815b4c7a73c6300e4f2969a43fcd45f9c2ccee90365477affab06020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a08301909352825192019190912061190160f01b60c08301527f000000000000000000000000000000000000000000000000000000000000000060c283015260e282015260009081906101020160408051808303601f1901815282825280516020918201206004546000855291840180845281905260ff89169284019290925260608301879052608083018690529092506001600160a01b03169060019060a0016020604051602081039080840390855afa1580156107a8573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149150509695505050505050565b600060208083528351808285015260005b818110156107f6578581018301518582016040015282016107da565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461082e57600080fd5b919050565b60006020828403121561084557600080fd5b61084e82610817565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561089457610894610855565b604052919050565b600067ffffffffffffffff8211156108b6576108b6610855565b5060051b60200190565b600082601f8301126108d157600080fd5b813560206108e66108e18361089c565b61086b565b82815260059290921b8401810191818101908684111561090557600080fd5b8286015b848110156109275761091a81610817565b8352918301918301610909565b509695505050505050565b600082601f83011261094357600080fd5b813560206109536108e18361089c565b82815260059290921b8401810191818101908684111561097257600080fd5b8286015b848110156109275780358352918301918301610976565b600082601f83011261099e57600080fd5b813560206109ae6108e18361089c565b82815260059290921b840181019181810190868411156109cd57600080fd5b8286015b8481101561092757803560ff811681146109eb5760008081fd5b83529183019183016109d1565b60008060008060008060c08789031215610a1157600080fd5b863567ffffffffffffffff80821115610a2957600080fd5b610a358a838b016108c0565b97506020890135915080821115610a4b57600080fd5b610a578a838b01610932565b96506040890135915080821115610a6d57600080fd5b610a798a838b01610932565b95506060890135915080821115610a8f57600080fd5b610a9b8a838b0161098d565b94506080890135915080821115610ab157600080fd5b610abd8a838b01610932565b935060a0890135915080821115610ad357600080fd5b50610ae089828a01610932565b9150509295509295509295565b600181811c90821680610b0157607f821691505b602082108103610b2157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201610b5d57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220c1c67133427f9a905edef006ffc3e4faba93b58ff59b36742242eaf0adeedd9664736f6c634300081300330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000009f66a094a0070ebddefa192a33fa5d75b59d46b00000000000000000000000000000000000000000000000000000000000000075961796f4e465400000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80638da5cb5b116100665780638da5cb5b1461013e578063d9507f981461014f578063f2fde38b14610176578063f76fc35e14610189578063fbb710a9146101b057600080fd5b806306fdde03146100a3578063238ac933146100c15780633644e515146100ec5780636c19e78314610121578063715018a614610136575b600080fd5b6100ab6101c3565b6040516100b891906107c9565b60405180910390f35b6004546100d4906001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b6101137f583819e6b7eb78f01193d914a00475f3225558e7f851791958a7bf23dd97aa1a81565b6040519081526020016100b8565b61013461012f366004610833565b610251565b005b6101346102a2565b6001546001600160a01b03166100d4565b6100d47f00000000000000000000000009f66a094a0070ebddefa192a33fa5d75b59d46b81565b610134610184366004610833565b6102b6565b6101137f8e857ca7f733815b4c7a73c6300e4f2969a43fcd45f9c2ccee90365477affab081565b6101346101be3660046109f8565b610334565b600380546101d090610aed565b80601f01602080910402602001604051908101604052809291908181526020018280546101fc90610aed565b80156102495780601f1061021e57610100808354040283529160200191610249565b820191906000526020600020905b81548152906001019060200180831161022c57829003601f168201915b505050505081565b610259610457565b6001600160a01b03811661028057604051633d9d06fb60e11b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6102aa610457565b6102b460006104b1565b565b6102be610457565b6001600160a01b0381166103285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b610331816104b1565b50565b8451865114158061034757508351865114155b8061035457508251865114155b8061036157508151865114155b8061036e57508051865114155b1561038c57604051633757dfe560e01b815260040160405180910390fd5b60005b865181101561044e5761043c8782815181106103ad576103ad610b27565b60200260200101518783815181106103c7576103c7610b27565b60200260200101518784815181106103e1576103e1610b27565b60200260200101518785815181106103fb576103fb610b27565b602002602001015187868151811061041557610415610b27565b602002602001015187878151811061042f5761042f610b27565b6020026020010151610503565b8061044681610b3d565b91505061038f565b50505050505050565b6001546001600160a01b031633146102b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161031f565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61050b610638565b4285101561052c57604051632a0fbded60e21b815260040160405180910390fd5b600061053c87878787878761068f565b90508061055c5760405163b7fc248b60e01b815260040160405180910390fd5b6040516340c10f1960e01b81526001600160a01b038881166004830152602482018790527f00000000000000000000000009f66a094a0070ebddefa192a33fa5d75b59d46b91908216906340c10f1990604401600060405180830381600087803b1580156105c957600080fd5b505af11580156105dd573d6000803e3d6000fd5b50505050876001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8760405161061c91815260200190565b60405180910390a250506106306001600255565b505050505050565b60028054036106895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161031f565b60028055565b604080517f8e857ca7f733815b4c7a73c6300e4f2969a43fcd45f9c2ccee90365477affab06020808301919091526001600160a01b038916828401526060820188905260808083018890528351808403909101815260a08301909352825192019190912061190160f01b60c08301527f583819e6b7eb78f01193d914a00475f3225558e7f851791958a7bf23dd97aa1a60c283015260e282015260009081906101020160408051808303601f1901815282825280516020918201206004546000855291840180845281905260ff89169284019290925260608301879052608083018690529092506001600160a01b03169060019060a0016020604051602081039080840390855afa1580156107a8573d6000803e3d6000fd5b505050602060405103516001600160a01b0316149150509695505050505050565b600060208083528351808285015260005b818110156107f6578581018301518582016040015282016107da565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b038116811461082e57600080fd5b919050565b60006020828403121561084557600080fd5b61084e82610817565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561089457610894610855565b604052919050565b600067ffffffffffffffff8211156108b6576108b6610855565b5060051b60200190565b600082601f8301126108d157600080fd5b813560206108e66108e18361089c565b61086b565b82815260059290921b8401810191818101908684111561090557600080fd5b8286015b848110156109275761091a81610817565b8352918301918301610909565b509695505050505050565b600082601f83011261094357600080fd5b813560206109536108e18361089c565b82815260059290921b8401810191818101908684111561097257600080fd5b8286015b848110156109275780358352918301918301610976565b600082601f83011261099e57600080fd5b813560206109ae6108e18361089c565b82815260059290921b840181019181810190868411156109cd57600080fd5b8286015b8481101561092757803560ff811681146109eb5760008081fd5b83529183019183016109d1565b60008060008060008060c08789031215610a1157600080fd5b863567ffffffffffffffff80821115610a2957600080fd5b610a358a838b016108c0565b97506020890135915080821115610a4b57600080fd5b610a578a838b01610932565b96506040890135915080821115610a6d57600080fd5b610a798a838b01610932565b95506060890135915080821115610a8f57600080fd5b610a9b8a838b0161098d565b94506080890135915080821115610ab157600080fd5b610abd8a838b01610932565b935060a0890135915080821115610ad357600080fd5b50610ae089828a01610932565b9150509295509295509295565b600181811c90821680610b0157607f821691505b602082108103610b2157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201610b5d57634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220c1c67133427f9a905edef006ffc3e4faba93b58ff59b36742242eaf0adeedd9664736f6c63430008130033

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

0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000009f66a094a0070ebddefa192a33fa5d75b59d46b00000000000000000000000000000000000000000000000000000000000000075961796f4e465400000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): YayoNFT
Arg [1] : _signer (address): 0x0000000000000000000000000000000000000001
Arg [2] : _yayo (address): 0x09f66a094a0070EBDdeFA192a33fa5d75b59D46b

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [2] : 00000000000000000000000009f66a094a0070ebddefa192a33fa5d75b59d46b
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 5961796f4e465400000000000000000000000000000000000000000000000000


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
[ 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.