ETH Price: $2,394.43 (-3.02%)
Gas: 7.85 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Request Transfer...182205212023-09-26 14:23:23405 days ago1695738203IN
0x4deAcdDE...5fA7F8EdA
0 ETH0.0008325918
Set Contracts182205202023-09-26 14:23:11405 days ago1695738191IN
0x4deAcdDE...5fA7F8EdA
0 ETH0.0033939118
0x60806040182205062023-09-26 14:20:23405 days ago1695738023IN
 Create: NftfiHub
0 ETH0.0115186318

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NftfiHub

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion
File 1 of 7 : NftfiHub.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.19;

import "./interfaces/INftfiHub.sol";
import "./utils/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./utils/ContractKeys.sol";

/**
 * @title  NftfiHub
 * @author NFTfi
 * @dev Registry for the contracts supported by NFTfi protocol.
 */
contract NftfiHub is Ownable, Pausable, ReentrancyGuard, INftfiHub {
    /* ******* */
    /* STORAGE */
    /* ******* */

    mapping(bytes32 => address) private contracts;

    /* ****** */
    /* EVENTS */
    /* ****** */

    /**
     * @notice This event is fired whenever the admin registers a contract.
     *
     * @param contractKey - Contract key e.g. bytes32('PERMITTED_NFTS').
     * @param contractAddress - Address of the contract.
     */
    event ContractUpdated(bytes32 indexed contractKey, address indexed contractAddress);

    /* *********** */
    /* CONSTRUCTOR */
    /* *********** */

    /**
     * @dev Initializes `contracts` with a batch of permitted contracts
     *
     * @param _admin - Initial admin of this contract.
     * @param _contractKeys - Initial contract keys.
     * @param _contractAddresses - Initial associated contract addresses.
     */
    constructor(
        address _admin,
        string[] memory _contractKeys,
        address[] memory _contractAddresses
    ) Ownable(_admin) {
        _setContracts(_contractKeys, _contractAddresses);
    }

    /* ********* */
    /* FUNCTIONS */
    /* ********* */

    /**
     * @notice Set or update the contract address for the given key.
     * @param _contractKey - New or existing contract key.
     * @param _contractAddress - The associated contract address.
     */
    function setContract(string calldata _contractKey, address _contractAddress) external override onlyOwner {
        _setContract(_contractKey, _contractAddress);
    }

    /**
     * @notice Set or update the contract addresses for the given keys.
     * @param _contractKeys - New or existing contract keys.
     * @param _contractAddresses - The associated contract addresses.
     */
    function setContracts(string[] memory _contractKeys, address[] memory _contractAddresses) external onlyOwner {
        _setContracts(_contractKeys, _contractAddresses);
    }

    /**
     * @notice This function can be called by anyone to lookup the contract address associated with the key.
     * @param  _contractKey - The index to the contract address.
     */
    function getContract(bytes32 _contractKey) external view override returns (address) {
        return contracts[_contractKey];
    }

    /**
     * @notice Set or update the contract address for the given key.
     * @param _contractKey - New or existing contract key.
     * @param _contractAddress - The associated contract address.
     */
    function _setContract(string memory _contractKey, address _contractAddress) internal {
        bytes32 key = ContractKeys.getIdFromStringKey(_contractKey);
        contracts[key] = _contractAddress;

        emit ContractUpdated(key, _contractAddress);
    }

    /**
     * @notice Set or update the contract addresses for the given keys.
     * @param _contractKeys - New or existing contract key.
     * @param _contractAddresses - The associated contract address.
     */
    function _setContracts(string[] memory _contractKeys, address[] memory _contractAddresses) internal {
        require(_contractKeys.length == _contractAddresses.length, "setContracts function information arity mismatch");

        for (uint256 i; i < _contractKeys.length; ++i) {
            _setContract(_contractKeys[i], _contractAddresses[i]);
        }
    }
}

File 2 of 7 : Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 3 of 7 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 4 of 7 : 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;
    }
}

File 5 of 7 : INftfiHub.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.19;

/**
 * @title INftfiHub
 * @author NFTfi
 * @dev NftfiHub interface
 */
interface INftfiHub {
    function setContract(string calldata _contractKey, address _contractAddress) external;

    function getContract(bytes32 _contractKey) external view returns (address);
}

File 6 of 7 : ContractKeys.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.19;

/**
 * @title ContractKeys
 * @author NFTfi
 * @dev Common library for contract keys
 */
library ContractKeys {
    bytes32 public constant PERMITTED_ERC20S = bytes32("PERMITTED_ERC20S");
    bytes32 public constant PERMITTED_NFTS = bytes32("PERMITTED_NFTS");
    bytes32 public constant PERMITTED_PARTNERS = bytes32("PERMITTED_PARTNERS");
    bytes32 public constant NFT_TYPE_REGISTRY = bytes32("NFT_TYPE_REGISTRY");
    bytes32 public constant LOAN_REGISTRY = bytes32("LOAN_REGISTRY");
    bytes32 public constant PERMITTED_SNFT_RECEIVER = bytes32("PERMITTED_SNFT_RECEIVER");

    /**
     * @notice Returns the bytes32 representation of a string
     * @param _key the string key
     * @return id bytes32 representation
     */
    function getIdFromStringKey(string memory _key) external pure returns (bytes32 id) {
        require(bytes(_key).length <= 32, "invalid key");

        // solhint-disable-next-line no-inline-assembly
        assembly {
            id := mload(add(_key, 32))
        }
    }
}

File 7 of 7 : Ownable.sol
// SPDX-License-Identifier: BUSL-1.1

pragma solidity 0.8.19;

import "@openzeppelin/contracts/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.
 *
 * Modified version from openzeppelin/contracts/access/Ownable.sol that allows to
 * initialize the owner using a parameter in the constructor
 */
abstract contract Ownable is Context {
    address private _owner;

    address private _ownerCandidate;

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor(address _initialOwner) {
        _setOwner(_initialOwner);
    }

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

    function acceptTransferOwnership() public virtual {
        require(_ownerCandidate == _msgSender(), "Ownable: not owner candidate");
        _setOwner(_ownerCandidate);
        delete _ownerCandidate;
    }

    function cancelTransferOwnership() public virtual onlyOwner {
        delete _ownerCandidate;
    }

    function rejectTransferOwnership() public virtual {
        require(_ownerCandidate == _msgSender(), "Ownable: not owner candidate");
        delete _ownerCandidate;
    }

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

    /**
     * @dev Sets the owner.
     */
    function _setOwner(address _newOwner) internal {
        address oldOwner = _owner;
        _owner = _newOwner;
        emit OwnershipTransferred(oldOwner, _newOwner);
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {
    "contracts/utils/ContractKeys.sol": {
      "ContractKeys": "0x733ac632056aa272130af63809ff3301c80bd1e7"
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"string[]","name":"_contractKeys","type":"string[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"contractKey","type":"bytes32"},{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"}],"name":"ContractUpdated","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"acceptTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contractKey","type":"bytes32"}],"name":"getContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rejectTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwnerCandidate","type":"address"}],"name":"requestTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractKey","type":"string"},{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_contractKeys","type":"string[]"},{"internalType":"address[]","name":"_contractAddresses","type":"address[]"}],"name":"setContracts","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162000edf38038062000edf83398101604081905262000034916200039d565b82620000408162000066565b506001805460ff60a01b191681556002556200005d8282620000b6565b5050506200057c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051825114620001255760405162461bcd60e51b815260206004820152603060248201527f736574436f6e7472616374732066756e6374696f6e20696e666f726d6174696f60448201526f0dc40c2e4d2e8f240dad2e6dac2e8c6d60831b606482015260840160405180910390fd5b60005b82518110156200018f576200017c8382815181106200014b576200014b620004ef565b6020026020010151838381518110620001685762000168620004ef565b60200260200101516200019460201b60201c565b620001878162000505565b905062000128565b505050565b60405163f99a8ffb60e01b815260009073733ac632056aa272130af63809ff3301c80bd1e79063f99a8ffb90620001d09086906004016200052d565b602060405180830381865af4158015620001ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000214919062000562565b60008181526003602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519293509183917fd45de243cd15102b320d0d75eb12a34864595b07f8853b6b7d487946b292463091a3505050565b80516001600160a01b03811681146200028757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620002cd57620002cd6200028c565b604052919050565b60006001600160401b03821115620002f157620002f16200028c565b5060051b60200190565b60005b8381101562000318578181015183820152602001620002fe565b50506000910152565b600082601f8301126200033357600080fd5b815160206200034c6200034683620002d5565b620002a2565b82815260059290921b840181019181810190868411156200036c57600080fd5b8286015b84811015620003925762000384816200026f565b835291830191830162000370565b509695505050505050565b600080600060608486031215620003b357600080fd5b620003be846200026f565b602085810151919450906001600160401b0380821115620003de57600080fd5b818701915087601f830112620003f357600080fd5b8151620004046200034682620002d5565b81815260059190911b8301840190848101908a8311156200042457600080fd5b8585015b83811015620004ba57805185811115620004425760008081fd5b8601603f81018d13620004555760008081fd5b878101516040878211156200046e576200046e6200028c565b62000482601f8301601f19168b01620002a2565b8281528f82848601011115620004985760008081fd5b620004a9838c8301848701620002fb565b865250505091860191860162000428565b5060408a01519097509450505080831115620004d557600080fd5b5050620004e58682870162000321565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600182016200052657634e487b7160e01b600052601160045260246000fd5b5060010190565b60208152600082518060208401526200054e816040850160208701620002fb565b601f01601f19169190910160400192915050565b6000602082840312156200057557600080fd5b5051919050565b610953806200058c6000396000f3fe608060405234801561001057600080fd5b50600436106100835760003560e01c80633f0ed0df146100885780635c975abb1461009d5780635f992fdd146100bf5780637b371107146100c75780637ca9e0c4146100cf5780638da5cb5b146100e257806392fede00146101025780639d6fa6181461010a578063e16c7d981461011d575b600080fd5b61009b610096366004610574565b610146565b005b600154600160a01b900460ff1660405190151581526020015b60405180910390f35b61009b6101c4565b61009b610200565b61009b6100dd3660046106d2565b61023f565b6100ea61027c565b6040516001600160a01b0390911681526020016100b6565b61009b61028b565b61009b6101183660046107fb565b6102ba565b6100ea61012b36600461081d565b6000908152600360205260409020546001600160a01b031690565b3361014f61027c565b6001600160a01b03161461017e5760405162461bcd60e51b815260040161017590610836565b60405180910390fd5b6101bf83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250610370915050565b505050565b6001546001600160a01b031633146101ee5760405162461bcd60e51b81526004016101759061086b565b600180546001600160a01b0319169055565b6001546001600160a01b0316331461022a5760405162461bcd60e51b81526004016101759061086b565b6001546101ee906001600160a01b0316610446565b3361024861027c565b6001600160a01b03161461026e5760405162461bcd60e51b815260040161017590610836565b6102788282610496565b5050565b6000546001600160a01b031690565b3361029461027c565b6001600160a01b0316146101ee5760405162461bcd60e51b815260040161017590610836565b336102c361027c565b6001600160a01b0316146102e95760405162461bcd60e51b815260040161017590610836565b6001600160a01b03811661034e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610175565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60405163f99a8ffb60e01b815260009073733ac632056aa272130af63809ff3301c80bd1e79063f99a8ffb906103aa9086906004016108a2565b602060405180830381865af41580156103c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103eb91906108f0565b60008181526003602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519293509183917fd45de243cd15102b320d0d75eb12a34864595b07f8853b6b7d487946b292463091a3505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80518251146105005760405162461bcd60e51b815260206004820152603060248201527f736574436f6e7472616374732066756e6374696f6e20696e666f726d6174696f60448201526f0dc40c2e4d2e8f240dad2e6dac2e8c6d60831b6064820152608401610175565b60005b82518110156101bf5761054883828151811061052157610521610909565b602002602001015183838151811061053b5761053b610909565b6020026020010151610370565b6105518161091f565b9050610503565b80356001600160a01b038116811461056f57600080fd5b919050565b60008060006040848603121561058957600080fd5b833567ffffffffffffffff808211156105a157600080fd5b818601915086601f8301126105b557600080fd5b8135818111156105c457600080fd5b8760208285010111156105d657600080fd5b6020928301955093506105ec9186019050610558565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610634576106346105f5565b604052919050565b600067ffffffffffffffff821115610656576106566105f5565b5060051b60200190565b600082601f83011261067157600080fd5b813560206106866106818361063c565b61060b565b82815260059290921b840181019181810190868411156106a557600080fd5b8286015b848110156106c7576106ba81610558565b83529183019183016106a9565b509695505050505050565b60008060408084860312156106e657600080fd5b833567ffffffffffffffff808211156106fe57600080fd5b8186019150601f878184011261071357600080fd5b823560206107236106818361063c565b82815260059290921b8501810191818101908b84111561074257600080fd5b8287015b848110156107cb5780358781111561075e5760008081fd5b8801603f81018e136107705760008081fd5b8481013588811115610784576107846105f5565b610795818901601f1916870161060b565b8181528f8c8385010111156107aa5760008081fd5b818c8401888301376000918101870191909152845250918301918301610746565b5098505088013594505050808311156107e357600080fd5b50506107f185828601610660565b9150509250929050565b60006020828403121561080d57600080fd5b61081682610558565b9392505050565b60006020828403121561082f57600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4f776e61626c653a206e6f74206f776e65722063616e64696461746500000000604082015260600190565b600060208083528351808285015260005b818110156108cf578581018301518582016040015282016108b3565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561090257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161093f57634e487b7160e01b600052601160045260246000fd5b506001019056fea164736f6c6343000813000a000000000000000000000000169ee6762811ab9bc59a609331bc721d9f0cd56c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100835760003560e01c80633f0ed0df146100885780635c975abb1461009d5780635f992fdd146100bf5780637b371107146100c75780637ca9e0c4146100cf5780638da5cb5b146100e257806392fede00146101025780639d6fa6181461010a578063e16c7d981461011d575b600080fd5b61009b610096366004610574565b610146565b005b600154600160a01b900460ff1660405190151581526020015b60405180910390f35b61009b6101c4565b61009b610200565b61009b6100dd3660046106d2565b61023f565b6100ea61027c565b6040516001600160a01b0390911681526020016100b6565b61009b61028b565b61009b6101183660046107fb565b6102ba565b6100ea61012b36600461081d565b6000908152600360205260409020546001600160a01b031690565b3361014f61027c565b6001600160a01b03161461017e5760405162461bcd60e51b815260040161017590610836565b60405180910390fd5b6101bf83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859250610370915050565b505050565b6001546001600160a01b031633146101ee5760405162461bcd60e51b81526004016101759061086b565b600180546001600160a01b0319169055565b6001546001600160a01b0316331461022a5760405162461bcd60e51b81526004016101759061086b565b6001546101ee906001600160a01b0316610446565b3361024861027c565b6001600160a01b03161461026e5760405162461bcd60e51b815260040161017590610836565b6102788282610496565b5050565b6000546001600160a01b031690565b3361029461027c565b6001600160a01b0316146101ee5760405162461bcd60e51b815260040161017590610836565b336102c361027c565b6001600160a01b0316146102e95760405162461bcd60e51b815260040161017590610836565b6001600160a01b03811661034e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610175565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60405163f99a8ffb60e01b815260009073733ac632056aa272130af63809ff3301c80bd1e79063f99a8ffb906103aa9086906004016108a2565b602060405180830381865af41580156103c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103eb91906108f0565b60008181526003602052604080822080546001600160a01b0319166001600160a01b03871690811790915590519293509183917fd45de243cd15102b320d0d75eb12a34864595b07f8853b6b7d487946b292463091a3505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80518251146105005760405162461bcd60e51b815260206004820152603060248201527f736574436f6e7472616374732066756e6374696f6e20696e666f726d6174696f60448201526f0dc40c2e4d2e8f240dad2e6dac2e8c6d60831b6064820152608401610175565b60005b82518110156101bf5761054883828151811061052157610521610909565b602002602001015183838151811061053b5761053b610909565b6020026020010151610370565b6105518161091f565b9050610503565b80356001600160a01b038116811461056f57600080fd5b919050565b60008060006040848603121561058957600080fd5b833567ffffffffffffffff808211156105a157600080fd5b818601915086601f8301126105b557600080fd5b8135818111156105c457600080fd5b8760208285010111156105d657600080fd5b6020928301955093506105ec9186019050610558565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610634576106346105f5565b604052919050565b600067ffffffffffffffff821115610656576106566105f5565b5060051b60200190565b600082601f83011261067157600080fd5b813560206106866106818361063c565b61060b565b82815260059290921b840181019181810190868411156106a557600080fd5b8286015b848110156106c7576106ba81610558565b83529183019183016106a9565b509695505050505050565b60008060408084860312156106e657600080fd5b833567ffffffffffffffff808211156106fe57600080fd5b8186019150601f878184011261071357600080fd5b823560206107236106818361063c565b82815260059290921b8501810191818101908b84111561074257600080fd5b8287015b848110156107cb5780358781111561075e5760008081fd5b8801603f81018e136107705760008081fd5b8481013588811115610784576107846105f5565b610795818901601f1916870161060b565b8181528f8c8385010111156107aa5760008081fd5b818c8401888301376000918101870191909152845250918301918301610746565b5098505088013594505050808311156107e357600080fd5b50506107f185828601610660565b9150509250929050565b60006020828403121561080d57600080fd5b61081682610558565b9392505050565b60006020828403121561082f57600080fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f4f776e61626c653a206e6f74206f776e65722063616e64696461746500000000604082015260600190565b600060208083528351808285015260005b818110156108cf578581018301518582016040015282016108b3565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561090257600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006001820161093f57634e487b7160e01b600052601160045260246000fd5b506001019056fea164736f6c6343000813000a

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

000000000000000000000000169ee6762811ab9bc59a609331bc721d9f0cd56c0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _admin (address): 0x169ee6762811ab9BC59A609331bc721d9f0CD56c

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000169ee6762811ab9bc59a609331bc721d9f0cd56c
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000


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.