ETH Price: $3,485.29 (+3.67%)
Gas: 2 Gwei

Contract

0xEdE30a830C6bD69ABb358976B108b3596e5DA7c9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Whitelist Collec...201488482024-06-22 17:51:358 days ago1719078695IN
0xEdE30a83...96e5DA7c9
0 ETH0.000276873.13263129
Whitelist Collec...200694252024-06-11 15:16:5919 days ago1718119019IN
0xEdE30a83...96e5DA7c9
0 ETH0.0027864131.53090683
Whitelist Collec...200452542024-06-08 6:14:4722 days ago1717827287IN
0xEdE30a83...96e5DA7c9
0 ETH0.000387925.66546925
Whitelist Collec...200451902024-06-08 6:01:5922 days ago1717826519IN
0xEdE30a83...96e5DA7c9
0 ETH0.000603646.83170334
Whitelist Collec...199613342024-05-27 12:53:1134 days ago1716814391IN
0xEdE30a83...96e5DA7c9
0 ETH0.0012184713.78635024
Whitelist Collec...197663412024-04-30 6:29:2361 days ago1714458563IN
0xEdE30a83...96e5DA7c9
0 ETH0.00052167.61652587
Whitelist Collec...197647112024-04-30 1:02:3562 days ago1714438955IN
0xEdE30a83...96e5DA7c9
0 ETH0.000521447.61420393
Whitelist Collec...197639822024-04-29 22:35:4762 days ago1714430147IN
0xEdE30a83...96e5DA7c9
0 ETH0.000527977.71090316
Whitelist Collec...197638372024-04-29 22:06:4762 days ago1714428407IN
0xEdE30a83...96e5DA7c9
0 ETH0.000597256.75752892
Whitelist Collec...197113792024-04-22 13:56:5969 days ago1713794219IN
0xEdE30a83...96e5DA7c9
0 ETH0.0009427519.87928451
Whitelist Collec...196265262024-04-10 16:49:4781 days ago1712767787IN
0xEdE30a83...96e5DA7c9
0 ETH0.0029188133.02457363
Whitelist Collec...193546372024-03-03 12:26:59119 days ago1709468819IN
0xEdE30a83...96e5DA7c9
0 ETH0.0037494442.4284932
Whitelist Collec...192267572024-02-14 14:20:59137 days ago1707920459IN
0xEdE30a83...96e5DA7c9
0 ETH0.0057925565.55701883
Whitelist Collec...192184822024-02-13 10:25:35138 days ago1707819935IN
0xEdE30a83...96e5DA7c9
0 ETH0.0020782823.51455332
Whitelist Collec...191951812024-02-10 3:57:35142 days ago1707537455IN
0xEdE30a83...96e5DA7c9
0 ETH0.0034145538.63367132
Whitelist Collec...191609752024-02-05 8:46:11146 days ago1707122771IN
0xEdE30a83...96e5DA7c9
0 ETH0.001230313.92390181
Whitelist Collec...191609722024-02-05 8:45:35146 days ago1707122735IN
0xEdE30a83...96e5DA7c9
0 ETH0.0011761713.3076818
Whitelist Collec...191594412024-02-05 3:35:59147 days ago1707104159IN
0xEdE30a83...96e5DA7c9
0 ETH0.0010129711.46123613
Whitelist Collec...191418792024-02-02 16:23:59149 days ago1706891039IN
0xEdE30a83...96e5DA7c9
0 ETH0.0022322125.25617335
Whitelist Collec...191393662024-02-02 7:55:47149 days ago1706860547IN
0xEdE30a83...96e5DA7c9
0 ETH0.0019075821.58321653
Whitelist Collec...191363052024-02-01 21:37:23150 days ago1706823443IN
0xEdE30a83...96e5DA7c9
0 ETH0.0023861126.99741108
Whitelist Collec...191354342024-02-01 18:42:35150 days ago1706812955IN
0xEdE30a83...96e5DA7c9
0 ETH0.0056466763.89737534
Whitelist Collec...191344612024-02-01 15:26:47150 days ago1706801207IN
0xEdE30a83...96e5DA7c9
0 ETH0.003196836.17479726
Whitelist Collec...191301822024-02-01 0:58:59151 days ago1706749139IN
0xEdE30a83...96e5DA7c9
0 ETH0.0019062521.56806729
Whitelist Collec...191272192024-01-31 15:00:47151 days ago1706713247IN
0xEdE30a83...96e5DA7c9
0 ETH0.0035457340.11781168
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:
NinfaWhitelist

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 4194304 runs

Other Settings:
default evmVersion
File 1 of 2 : NinfaWhitelist.sol
/*----------------------------------------------------------*|
|*          ███    ██ ██ ███    ██ ███████  █████           *|
|*          ████   ██ ██ ████   ██ ██      ██   ██          *|
|*          ██ ██  ██ ██ ██ ██  ██ █████   ███████          *|
|*          ██  ██ ██ ██ ██  ██ ██ ██      ██   ██          *|
|*          ██   ████ ██ ██   ████ ██      ██   ██          *|
|*----------------------------------------------------------*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "./access/AccessControl.sol";

/**
 *
 * @title NinfaWhitelist                               *
 *                                                           *
 * @notice allowa lazy whitelist and access control          *
 *                                                           *
 * @custom:security-contact [email protected]                    *
 *
 */

// this contract will need to have the CURATOR_ROLE on the factory
// and to be the owner of the marketplace and auction contracts
contract NinfaWhitelist is AccessControl {

    address private feeAccount; // this is the address that will receive the fee

    bytes32 private DOMAIN_SEPARATOR;
    bytes32 private DOMAIN_TYPEHASH;
    bytes32 private WHITELIST_PERMIT_TYPEHASH;

    // keccak256("CURATOR_ROLE");
    bytes32 private constant CURATOR_ROLE = 0x850d585eb7f024ccee5e68e55f2c26cc72e1e6ee456acf62135757a5eb9d4a10;

    uint256 private flatFee;

    mapping(bytes => bool) private usedSignatures;

    mapping(address => bool) public isWhitelisted;

    struct WhitelistPermit {
        address collection;
        bool isWhitelisted;
        bytes32 collectionType;
        bytes32 salt;
    }

    event Whitelist(
        address collection, address indexed whitelister, bytes32 indexed collectionType, bool isWhitelisted
    );

    /**
     * @dev whoever has a valid signature can call the whitelistCollection
     * function, a flat fee could be payed of any
     * @param _permit contains information on what collection to whitelist and
     * if it should be whitelisted or not
     * @param _signature the signature of the curator
     */
    function whitelistCollection(WhitelistPermit calldata _permit, bytes memory _signature) external payable {
        require(msg.value >= flatFee);

        if (flatFee > 0) {
            _sendValue(feeAccount, flatFee);
        }

        address _signer = _recover(_permit, _signature);

        require(hasRole(CURATOR_ROLE, _signer) && !usedSignatures[_signature]);

        usedSignatures[_signature] = true;

        isWhitelisted[_permit.collection] = _permit.isWhitelisted;

        emit Whitelist(_permit.collection, msg.sender, _permit.collectionType, _permit.isWhitelisted);
    }

    /*----------------------------------------------------------*|
    |*  # RECOVER FUNCTIONS                                     *|
    |*----------------------------------------------------------*/

    function _recover(
        WhitelistPermit calldata _permit,
        bytes memory _signature
    )
        private
        view
        returns (address _signer)
    {
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        WHITELIST_PERMIT_TYPEHASH,
                        _permit.collection,
                        _permit.isWhitelisted,
                        _permit.collectionType,
                        _permit.salt
                    )
                )
            )
        );

        bytes32 r;
        bytes32 s;
        uint8 v;

        assembly {
            r := mload(add(_signature, 0x20))
            s := mload(add(_signature, 0x40))
            v := byte(0, mload(add(_signature, 0x60)))
        }

        _signer = ecrecover(digest, v, r, s);
        if (_signer == address(0)) revert();
    }

    /*----------------------------------------------------------*|
    |*  # OWNER FUNCTIONS                                       *|
    |*----------------------------------------------------------*/

    function setFlatFee(uint256 _flatFee) external onlyRole(DEFAULT_ADMIN_ROLE) {
        flatFee = _flatFee;
    }

    function setFeeAccount(address _feeAccount) external onlyRole(DEFAULT_ADMIN_ROLE) {
        feeAccount = _feeAccount;
    }

    // this function is used to allow the curator to firectly whitelist a collection
    function whitelistCollection(address collection, bool isWhitelisted_) external onlyRole(CURATOR_ROLE) {
        isWhitelisted[collection] = isWhitelisted_;
    }

    function whitelistCollections(address[] memory collections, bool isWhitelisted_) external onlyRole(CURATOR_ROLE) {
        for (uint256 i = 0; i < collections.length; i++) {
            isWhitelisted[collections[i]] = isWhitelisted_;
        }
    }

    receive() external payable {
        revert();
    }

    /*----------------------------------------------------------*|
    |*  #  OTHER                                                *|
    |*----------------------------------------------------------*/

    function _sendValue(address _receiver, uint256 _amount) private {
        // solhint-disable-next-line avoid-low-level-calls
        (bool success,) = payable(_receiver).call{ value: _amount }("");
        require(success);
    }

    constructor(string memory _eip712DomainName) {
        DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");
        WHITELIST_PERMIT_TYPEHASH =
            keccak256("WhitelistPermit(address collection,bool isWhitelisted,bytes32 collectionType,bytes32 salt)");

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(_eip712DomainName)), // name
                block.chainid, // chainId
                address(this) // verifyingContract
            )
        );

        _grantRole(DEFAULT_ADMIN_ROLE, msg.sender);
    }
}

File 2 of 2 : AccessControl.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow
 * enumerating role
 * members except through off-chain means by accessing the contract event logs.
 * Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role,
     * replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 role, bytes32 previousAdminRole, bytes32 newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 role, address account, address sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 role, address account, address sender);

    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 internal constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular
     * expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role
     * (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, msg.sender);
        _;
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular
     * expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role
     * (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert("Account is missing role");
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external {
        require(account == msg.sender); // "AccessControl: can only renounce
            // roles for self"

        _revokeRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, msg.sender);
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, msg.sender);
        }
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "solmate/=lib/solmate/src/",
    "src/=src/",
    "test/=test/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 4194304,
    "details": {
      "constantOptimizer": true,
      "yul": true,
      "yulDetails": {
        "stackAllocation": true,
        "optimizerSteps": "dhfoDgvulfnTUtnIf"
      }
    }
  },
  "metadata": {
    "bytecodeHash": "none",
    "appendCBOR": false
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_eip712DomainName","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":true,"internalType":"address","name":"whitelister","type":"address"},{"indexed":true,"internalType":"bytes32","name":"collectionType","type":"bytes32"},{"indexed":false,"internalType":"bool","name":"isWhitelisted","type":"bool"}],"name":"Whitelist","type":"event"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAccount","type":"address"}],"name":"setFeeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_flatFee","type":"uint256"}],"name":"setFlatFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"bool","name":"isWhitelisted","type":"bool"},{"internalType":"bytes32","name":"collectionType","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"internalType":"struct NinfaWhitelist.WhitelistPermit","name":"_permit","type":"tuple"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"whitelistCollection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"bool","name":"isWhitelisted_","type":"bool"}],"name":"whitelistCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"collections","type":"address[]"},{"internalType":"bool","name":"isWhitelisted_","type":"bool"}],"name":"whitelistCollections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523462000030576200001e620000186200014d565b6200024d565b604051610ee9620004448239610ee990f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b90601f01601f191681019081106001600160401b038211176200006d57604052565b62000035565b906200008a6200008260405190565b92836200004b565b565b6001600160401b0381116200006d57602090601f01601f19160190565b60005b838110620000bd5750506000910152565b8181015183820152602001620000ac565b90929192620000e7620000e1826200008c565b62000073565b9381855260208501908284011162000030576200008a92620000a9565b9080601f83011215620000305781516200012192602001620000ce565b90565b90602082820312620000305781516001600160401b038111620000305762000121920162000104565b620001216200132d80380380620001648162000073565b92833981019062000124565b90600019905b9181191691161790565b906200019162000121620001999290565b825462000170565b9055565b620001219081565b6200012190546200019d565b6200012190620001c7906001600160a01b031682565b6001600160a01b031690565b6200012190620001b1565b6200012190620001d3565b9052565b620001e990620001c7565b620002296200008a94620002226060949897956200021b608086019a6000870152565b6020850152565b6040830152565b0190620001ed565b6200012162000121620001219290565b62000121600062000231565b6200031f906200027f7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866600362000180565b620002ac7fc1182dc2d9ab67f064a639f451bb806c023b2d0511ab186cc982497c3e26f4ec600462000180565b62000309620002c4620002c06003620001a5565b9290565b620002d8620002d1825190565b9160200190565b204692620002fc620002ea30620001de565b604051958694602086019485620001f8565b908103825203826200004b565b62000316620002d1825190565b20600262000180565b6200008a6200032d62000241565b339062000399565b905b600052602052604060002090565b906200033790620001de565b9060ff9062000176565b906200036e620001216200019992151590565b825462000351565b9081526060810193926200008a92909160409162000229906020830190620001ed565b90620003ae620003aa828462000425565b1590565b620003b7575050565b620003dd6001620003d7836000620003d0878262000335565b0162000345565b6200035b565b3391620004197f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d936200040f60405190565b9384938462000376565b0390a1565b5460ff1690565b62000121916200043d91620003d06000918262000335565b6200041e56fe6080604052600436101561001e575b361561001957600080fd5b600080fd5b60003560e01c806323fa495a146100ce578063248a9ca3146100c95780632f2ff15d146100c457806336568abe146100bf5780633af32abf146100ba5780634b023cf8146100b55780637177907b146100b057806374052633146100ab57806384562fa5146100a657806391d14854146100a15763d547741f0361000e57610564565b610548565b61052f565b610469565b61041d565b6102a4565b610277565b6101cc565b6101b3565b610123565b610102565b805b0361001957565b905035906100e9826100d3565b565b90602082820312610019576100ff916100dc565b90565b346100195761011a6101153660046100eb565b610ab5565b604051005b0390f35b346100195761011f61013e6101393660046100eb565b610d68565b6040519182918290815260200190565b73ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff81166100d5565b905035906100e982610167565b9190604083820312610019576100ff906101aa81856100dc565b93602001610183565b346100195761011a6101c6366004610190565b90610da2565b346100195761011a6101df366004610190565b90610dd1565b90602082820312610019576100ff91610183565b61014e6100ff6100ff9273ffffffffffffffffffffffffffffffffffffffff1690565b6100ff906101f9565b6100ff9061021c565b9061023890610225565b600052602052604060002090565b6100ff916008021c5b60ff1690565b906100ff9154610246565b6100ff9061027260079160009261022e565b610255565b346100195761011f61029261028d3660046101e5565b610260565b60405191829182901515815260200190565b346100195761011a6102b73660046101e5565b610b10565b908160809103126100195790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761033957604052565b6102ca565b906100e961034b60405190565b92836102f9565b67ffffffffffffffff811161033957602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b0190565b90826000939282370152565b909291926103b26103ad82610352565b61033e565b93818552602085019082840111610019576100e992610391565b9080601f83011215610019578160206100ff9335910161039d565b91909160a081840312610019576103fe83826102bc565b92608082013567ffffffffffffffff8111610019576100ff92016103cc565b61011a61042b3660046103e7565b906106df565b8015156100d5565b905035906100e982610431565b9190604083820312610019576100ff906104608185610183565b93602001610439565b346100195761011a61047c366004610446565b90610b38565b67ffffffffffffffff81116103395760208091020190565b909291926104aa6103ad82610482565b938185526020808601920283019281841161001957915b8383106104ce5750505050565b602080916104dc8486610183565b8152019201916104c1565b9080601f83011215610019578160206100ff9335910161049a565b91906040838203126100195782359067ffffffffffffffff821161001957610460816100ff9386016104e7565b346100195761011a610542366004610502565b90610c69565b346100195761011f61029261055e366004610190565b90610cdc565b346100195761011a610577366004610190565b90610dc7565b6100ff9081565b6100ff905461057d565b1561001957565b6100ff6100ff6100ff9290565b6100ff9061014e565b6100ff90546105a2565b6100ff7f850d585eb7f024ccee5e68e55f2c26cc72e1e6ee456acf62135757a5eb9d4a10610595565b60005b8381106105f15750506000910152565b81810151838201526020016105e1565b61038d61061992602092610613815190565b94859290565b938491016105de565b61063261038d9160209493610601565b918252565b61064c61064360405190565b92839283610622565b03902090565b6100ff91610637565b6100ff9061024f565b6100ff905461065b565b9060ff905b9181191691161790565b9061068d6100ff61069492151590565b825461066e565b9055565b356100ff81610431565b356100ff81610167565b356100ff816100d3565b73ffffffffffffffffffffffffffffffffffffffff919091168152901515602082015260400190565b906106ff346106f86106f46100ff6005610584565b9190565b101561058e565b61075d61070c6005610584565b9160009261071c6106f485610595565b11610816575b61073c61072f828661091d565b6107376105b5565b610cdc565b806107f1575b61074b9061058e565b6107586001916006610652565b61067d565b61078e602083019161078961077184610698565b610758600793870193610783856106a2565b9061022e565b6106a2565b916107a561079f60403393016106ac565b92610698565b6107d66107d27f700d4612865d4cdb90581de10b68a71a4ee418771fcb93fc940575a974cb60e393610225565b9390565b936107ec6107e360405190565b928392836106b6565b0390a3565b5061074b61080f61080b610806846006610652565b610664565b1590565b9050610742565b61083361082360016105ab565b61082d6005610584565b90610c9f565b610722565b909594926100e9946108826108899261087960809661085c60a088019c6000890152565b73ffffffffffffffffffffffffffffffffffffffff166020870152565b15156040850152565b6060830152565b0152565b60208093926108c561063261038d947f1901000000000000000000000000000000000000000000000000000000000000815260020190565b01918252565b6108896100e9946108f46060949897956108ea608086019a6000870152565b60ff166020850152565b6040830152565b6040513d6000823e3d90fd5b61014e6100ff6100ff9290565b6100ff90610907565b60209160009161098d6109c384926109356002610584565b906109996109436004610584565b61094e8984016106a2565b9061098d61095d8c8601610698565b94610976606061096f604084016106ac565b92016106ac565b9061098060405190565b9687958f87019586610838565b908103825203826102f9565b6109ab6109a4825190565b9160200190565b20906109b660405190565b938492898401928361088d565b6109ce6109a4825190565b2090506109f8848301519260606040820151910151851a936109ef60405190565b948594856108cb565b838052039060015afa15610a415760005190600082610a36610a1c61014e84610914565b9173ffffffffffffffffffffffffffffffffffffffff1690565b14610a3e5750565b80fd5b6108fb565b6100ff6000610595565b6100e990610a66610a5f610a46565b3390610cf6565b610aaa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90610673565b90610aa36100ff61069492610595565b8254610a6b565b6100e9906005610a93565b6100e990610a50565b6100e990610acd610a5f610a46565b610b05565b9073ffffffffffffffffffffffffffffffffffffffff90610673565b90610afe6100ff61069492610225565b8254610ad2565b6100e9906001610aee565b6100e990610abe565b906100e991610b29610a5f6105b5565b906107586100e992600761022e565b906100e991610b19565b906100e991610b52610a5f6105b5565b610c06565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bb35760010190565b610b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90610bf0825190565b811015610c01576020809102010190565b610bb8565b919091610c136000610595565b610c1e6100ff835190565b811015610c6357610c5e90610c59856107586007610783610c3f8689610be7565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610b86565b610c13565b50509050565b906100e991610b42565b906106326103ad83610352565b3d15610c9a57610c8f3d610c73565b903d6000602084013e565b606090565b60006100e992610cb7610cb28394610225565b610225565b90610cc160405190565b90818003925af1610cd0610c80565b5061058e565b90610238565b6100ff9161080691610cf060009182610cd6565b0161022e565b610d039161080b91610cdc565b610d0957565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4163636f756e74206973206d697373696e6720726f6c650000000000000000006044820152606490fd5b6001610d816100ff92610d79600090565b506000610cd6565b01610584565b906100e991610d98610a5f82610d68565b906100e991610e29565b906100e991610d87565b906100e991610dbd610a5f82610d68565b906100e991610e92565b906100e991610dac565b6100e99190610df73373ffffffffffffffffffffffffffffffffffffffff84161461058e565b610e92565b90815273ffffffffffffffffffffffffffffffffffffffff91821660208201529116604082015260600190565b90610e3761080b8284610cdc565b610e3f575050565b610e546001610758836000610cf08782610cd6565b3391610e8d7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d93610e8460405190565b93849384610dfc565b0390a1565b90610e9d8183610cdc565b610ea5575050565b610eb960006107588382610cf08782610cd6565b3391610e8d7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b93610e846040519056000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000086e696e66612e696f000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436101561001e575b361561001957600080fd5b600080fd5b60003560e01c806323fa495a146100ce578063248a9ca3146100c95780632f2ff15d146100c457806336568abe146100bf5780633af32abf146100ba5780634b023cf8146100b55780637177907b146100b057806374052633146100ab57806384562fa5146100a657806391d14854146100a15763d547741f0361000e57610564565b610548565b61052f565b610469565b61041d565b6102a4565b610277565b6101cc565b6101b3565b610123565b610102565b805b0361001957565b905035906100e9826100d3565b565b90602082820312610019576100ff916100dc565b90565b346100195761011a6101153660046100eb565b610ab5565b604051005b0390f35b346100195761011f61013e6101393660046100eb565b610d68565b6040519182918290815260200190565b73ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff81166100d5565b905035906100e982610167565b9190604083820312610019576100ff906101aa81856100dc565b93602001610183565b346100195761011a6101c6366004610190565b90610da2565b346100195761011a6101df366004610190565b90610dd1565b90602082820312610019576100ff91610183565b61014e6100ff6100ff9273ffffffffffffffffffffffffffffffffffffffff1690565b6100ff906101f9565b6100ff9061021c565b9061023890610225565b600052602052604060002090565b6100ff916008021c5b60ff1690565b906100ff9154610246565b6100ff9061027260079160009261022e565b610255565b346100195761011f61029261028d3660046101e5565b610260565b60405191829182901515815260200190565b346100195761011a6102b73660046101e5565b610b10565b908160809103126100195790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810190811067ffffffffffffffff82111761033957604052565b6102ca565b906100e961034b60405190565b92836102f9565b67ffffffffffffffff811161033957602090601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160190565b0190565b90826000939282370152565b909291926103b26103ad82610352565b61033e565b93818552602085019082840111610019576100e992610391565b9080601f83011215610019578160206100ff9335910161039d565b91909160a081840312610019576103fe83826102bc565b92608082013567ffffffffffffffff8111610019576100ff92016103cc565b61011a61042b3660046103e7565b906106df565b8015156100d5565b905035906100e982610431565b9190604083820312610019576100ff906104608185610183565b93602001610439565b346100195761011a61047c366004610446565b90610b38565b67ffffffffffffffff81116103395760208091020190565b909291926104aa6103ad82610482565b938185526020808601920283019281841161001957915b8383106104ce5750505050565b602080916104dc8486610183565b8152019201916104c1565b9080601f83011215610019578160206100ff9335910161049a565b91906040838203126100195782359067ffffffffffffffff821161001957610460816100ff9386016104e7565b346100195761011a610542366004610502565b90610c69565b346100195761011f61029261055e366004610190565b90610cdc565b346100195761011a610577366004610190565b90610dc7565b6100ff9081565b6100ff905461057d565b1561001957565b6100ff6100ff6100ff9290565b6100ff9061014e565b6100ff90546105a2565b6100ff7f850d585eb7f024ccee5e68e55f2c26cc72e1e6ee456acf62135757a5eb9d4a10610595565b60005b8381106105f15750506000910152565b81810151838201526020016105e1565b61038d61061992602092610613815190565b94859290565b938491016105de565b61063261038d9160209493610601565b918252565b61064c61064360405190565b92839283610622565b03902090565b6100ff91610637565b6100ff9061024f565b6100ff905461065b565b9060ff905b9181191691161790565b9061068d6100ff61069492151590565b825461066e565b9055565b356100ff81610431565b356100ff81610167565b356100ff816100d3565b73ffffffffffffffffffffffffffffffffffffffff919091168152901515602082015260400190565b906106ff346106f86106f46100ff6005610584565b9190565b101561058e565b61075d61070c6005610584565b9160009261071c6106f485610595565b11610816575b61073c61072f828661091d565b6107376105b5565b610cdc565b806107f1575b61074b9061058e565b6107586001916006610652565b61067d565b61078e602083019161078961077184610698565b610758600793870193610783856106a2565b9061022e565b6106a2565b916107a561079f60403393016106ac565b92610698565b6107d66107d27f700d4612865d4cdb90581de10b68a71a4ee418771fcb93fc940575a974cb60e393610225565b9390565b936107ec6107e360405190565b928392836106b6565b0390a3565b5061074b61080f61080b610806846006610652565b610664565b1590565b9050610742565b61083361082360016105ab565b61082d6005610584565b90610c9f565b610722565b909594926100e9946108826108899261087960809661085c60a088019c6000890152565b73ffffffffffffffffffffffffffffffffffffffff166020870152565b15156040850152565b6060830152565b0152565b60208093926108c561063261038d947f1901000000000000000000000000000000000000000000000000000000000000815260020190565b01918252565b6108896100e9946108f46060949897956108ea608086019a6000870152565b60ff166020850152565b6040830152565b6040513d6000823e3d90fd5b61014e6100ff6100ff9290565b6100ff90610907565b60209160009161098d6109c384926109356002610584565b906109996109436004610584565b61094e8984016106a2565b9061098d61095d8c8601610698565b94610976606061096f604084016106ac565b92016106ac565b9061098060405190565b9687958f87019586610838565b908103825203826102f9565b6109ab6109a4825190565b9160200190565b20906109b660405190565b938492898401928361088d565b6109ce6109a4825190565b2090506109f8848301519260606040820151910151851a936109ef60405190565b948594856108cb565b838052039060015afa15610a415760005190600082610a36610a1c61014e84610914565b9173ffffffffffffffffffffffffffffffffffffffff1690565b14610a3e5750565b80fd5b6108fb565b6100ff6000610595565b6100e990610a66610a5f610a46565b3390610cf6565b610aaa565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90610673565b90610aa36100ff61069492610595565b8254610a6b565b6100e9906005610a93565b6100e990610a50565b6100e990610acd610a5f610a46565b610b05565b9073ffffffffffffffffffffffffffffffffffffffff90610673565b90610afe6100ff61069492610225565b8254610ad2565b6100e9906001610aee565b6100e990610abe565b906100e991610b29610a5f6105b5565b906107586100e992600761022e565b906100e991610b19565b906100e991610b52610a5f6105b5565b610c06565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610bb35760010190565b610b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90610bf0825190565b811015610c01576020809102010190565b610bb8565b919091610c136000610595565b610c1e6100ff835190565b811015610c6357610c5e90610c59856107586007610783610c3f8689610be7565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610b86565b610c13565b50509050565b906100e991610b42565b906106326103ad83610352565b3d15610c9a57610c8f3d610c73565b903d6000602084013e565b606090565b60006100e992610cb7610cb28394610225565b610225565b90610cc160405190565b90818003925af1610cd0610c80565b5061058e565b90610238565b6100ff9161080691610cf060009182610cd6565b0161022e565b610d039161080b91610cdc565b610d0957565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4163636f756e74206973206d697373696e6720726f6c650000000000000000006044820152606490fd5b6001610d816100ff92610d79600090565b506000610cd6565b01610584565b906100e991610d98610a5f82610d68565b906100e991610e29565b906100e991610d87565b906100e991610dbd610a5f82610d68565b906100e991610e92565b906100e991610dac565b6100e99190610df73373ffffffffffffffffffffffffffffffffffffffff84161461058e565b610e92565b90815273ffffffffffffffffffffffffffffffffffffffff91821660208201529116604082015260600190565b90610e3761080b8284610cdc565b610e3f575050565b610e546001610758836000610cf08782610cd6565b3391610e8d7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d93610e8460405190565b93849384610dfc565b0390a1565b90610e9d8183610cdc565b610ea5575050565b610eb960006107588382610cf08782610cd6565b3391610e8d7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b93610e846040519056

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

000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000086e696e66612e696f000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _eip712DomainName (string): ninfa.io

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [2] : 6e696e66612e696f000000000000000000000000000000000000000000000000


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.