Cryo Explorer Ethereum Mainnet

Address Contract Verified

Address 0x6fc3a454e9053e67Ce654E19c3A703Ac38ba2b52
Balance 0 ETH
Nonce 1
Code Size 6750 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

6750 bytes
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80638da5cb5b116100715780638da5cb5b146100ee578063a3f9bc411461010d578063a584984a14610120578063b3ef283914610133578063bafe490f14610146578063f2fde38b1461014e57600080fd5b806306a4f63f146100ae5780636d1fc5c1146100b8578063715018a6146100cb5780637e3f3fd6146100d35780638d83180b146100e6575b600080fd5b6100b6610161565b005b6100b66100c63660046118c6565b61054e565b6100b6610721565b6100b66100e1366004611914565b610786565b6100b6610a4d565b600054604080516001600160a01b039092168252519081900360200190f35b6100b661011b3660046118c6565b610d99565b6100b661012e366004611914565b610f35565b6100b6610141366004611914565b6111fd565b6100b66113a9565b6100b661015c366004611885565b611789565b6001546040516370a0823160e01b815233600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b1580156101a957600080fd5b505afa1580156101bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e1919061192d565b90505b8082101561054a57600154604051632f745c5960e01b8152336004820152602481018490526000916001600160a01b031690632f745c599060440160206040518083038186803b15801561023757600080fd5b505afa15801561024b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026f919061192d565b6001546040516331a9108f60e11b8152600481018390529192506001600160a01b031690636352211e9060240160206040518083038186803b1580156102b457600080fd5b505afa1580156102c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ec91906118a9565b6001600160a01b0316336001600160a01b0316146103255760405162461bcd60e51b815260040161031c9061196a565b60405180910390fd5b60035460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b15801561036957600080fd5b505afa15801561037d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a191906118f2565b6103bd5760405162461bcd60e51b815260040161031c906119be565b6003546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561040157600080fd5b505afa158015610415573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043991906118a9565b6001600160a01b0316336001600160a01b031614610537576003546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561049657600080fd5b505afa1580156104aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ce91906118a9565b6003546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd9061050390849033908790600401611946565b600060405180830381600087803b15801561051d57600080fd5b505af1158015610531573d6000803e3d6000fd5b50505050505b82610541816119ea565b935050506101e4565b5050565b6003546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561059257600080fd5b505afa1580156105a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ca91906118a9565b6001600160a01b0316336001600160a01b03161461061f5760405162461bcd60e51b815260206004820152601260248201527132b93937b91021a7a6a4a1a99737bbb732b960711b604482015260640161031c565b60035460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b15801561066357600080fd5b505afa158015610677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069b91906118f2565b6106b75760405162461bcd60e51b815260040161031c906119be565b6003546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906106eb90339086908690600401611946565b600060405180830381600087803b15801561070557600080fd5b505af1158015610719573d6000803e3d6000fd5b505050505050565b336107346000546001600160a01b031690565b6001600160a01b03161461077a5760405162461bcd60e51b815260206004820152600d60248201526c6572726f72206f776e6572282960981b604482015260640161031c565b6107846000611835565b565b60025460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b1580156107ca57600080fd5b505afa1580156107de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080291906118f2565b61081e5760405162461bcd60e51b815260040161031c90611993565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561086257600080fd5b505afa158015610876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089a91906118a9565b6001600160a01b0316336001600160a01b031614156108ef5760405162461bcd60e51b815260206004820152601160248201527032b93937b910232920a6a29737bbb732b960791b604482015260640161031c565b6001546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561093357600080fd5b505afa158015610947573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096b91906118a9565b6001600160a01b0316336001600160a01b03161461099b5760405162461bcd60e51b815260040161031c9061196a565b6002546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b1580156109e057600080fd5b505afa1580156109f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1891906118a9565b6002546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd906106eb90849033908790600401611946565b6001546040516370a0823160e01b815233600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b158015610a9557600080fd5b505afa158015610aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acd919061192d565b90505b8082101561054a57600154604051632f745c5960e01b8152336004820152602481018490526000916001600160a01b031690632f745c599060440160206040518083038186803b158015610b2357600080fd5b505afa158015610b37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5b919061192d565b60025460405163275de49560e11b8152600481018390529192506001600160a01b031690634ebbc92a9060240160206040518083038186803b158015610ba057600080fd5b505afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd891906118f2565b610d865760025460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b158015610c2057600080fd5b505afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906118f2565b15610c755760405162461bcd60e51b815260040161031c90611993565b6001546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610cb957600080fd5b505afa158015610ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf191906118a9565b6001600160a01b0316336001600160a01b031614610d215760405162461bcd60e51b815260040161031c9061196a565b60025460405163557bb74760e11b8152336004820152602481018390526001600160a01b039091169063aaf76e8e90604401600060405180830381600087803b158015610d6d57600080fd5b505af1158015610d81573d6000803e3d6000fd5b505050505b82610d90816119ea565b93505050610ad0565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b158015610ddd57600080fd5b505afa158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1591906118a9565b6001600160a01b0316336001600160a01b031614610e695760405162461bcd60e51b815260206004820152601160248201527032b93937b910232920a6a29737bbb732b960791b604482015260640161031c565b60025460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b158015610ead57600080fd5b505afa158015610ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee591906118f2565b610f015760405162461bcd60e51b815260040161031c90611993565b6002546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906106eb90339086908690600401611946565b60035460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b158015610f7957600080fd5b505afa158015610f8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb191906118f2565b610fcd5760405162461bcd60e51b815260040161031c906119be565b6003546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561101157600080fd5b505afa158015611025573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104991906118a9565b6001600160a01b0316336001600160a01b0316141561109f5760405162461bcd60e51b815260206004820152601260248201527132b93937b91021a7a6a4a1a99737bbb732b960711b604482015260640161031c565b6001546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156110e357600080fd5b505afa1580156110f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111b91906118a9565b6001600160a01b0316336001600160a01b03161461114b5760405162461bcd60e51b815260040161031c9061196a565b6003546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b15801561119057600080fd5b505afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c891906118a9565b6003546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd906106eb90849033908790600401611946565b60025460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127991906118f2565b156112965760405162461bcd60e51b815260040161031c90611993565b6001546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b1580156112da57600080fd5b505afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131291906118a9565b6001600160a01b0316336001600160a01b0316146113425760405162461bcd60e51b815260040161031c9061196a565b60025460405163557bb74760e11b8152336004820152602481018390526001600160a01b039091169063aaf76e8e90604401600060405180830381600087803b15801561138e57600080fd5b505af11580156113a2573d6000803e3d6000fd5b5050505050565b6001546040516370a0823160e01b815233600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b1580156113f157600080fd5b505afa158015611405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611429919061192d565b90505b8082101561054a57600154604051632f745c5960e01b8152336004820152602481018490526000916001600160a01b031690632f745c599060440160206040518083038186803b15801561147f57600080fd5b505afa158015611493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b7919061192d565b6001546040516331a9108f60e11b8152600481018390529192506001600160a01b031690636352211e9060240160206040518083038186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153491906118a9565b6001600160a01b0316336001600160a01b0316146115645760405162461bcd60e51b815260040161031c9061196a565b60025460405163275de49560e11b8152600481018390526001600160a01b0390911690634ebbc92a9060240160206040518083038186803b1580156115a857600080fd5b505afa1580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e091906118f2565b6115fc5760405162461bcd60e51b815260040161031c90611993565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e9060240160206040518083038186803b15801561164057600080fd5b505afa158015611654573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167891906118a9565b6001600160a01b0316336001600160a01b031614611776576002546040516331a9108f60e11b8152600481018390526000916001600160a01b031690636352211e9060240160206040518083038186803b1580156116d557600080fd5b505afa1580156116e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170d91906118a9565b6002546040516323b872dd60e01b81529192506001600160a01b0316906323b872dd9061174290849033908790600401611946565b600060405180830381600087803b15801561175c57600080fd5b505af1158015611770573d6000803e3d6000fd5b50505050505b82611780816119ea565b9350505061142c565b3361179c6000546001600160a01b031690565b6001600160a01b0316146117e25760405162461bcd60e51b815260206004820152600d60248201526c6572726f72206f776e6572282960981b604482015260640161031c565b6001600160a01b0381166118295760405162461bcd60e51b815260206004820152600e60248201526d32b93937b9103732bba7bbb732b960911b604482015260640161031c565b61183281611835565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561189757600080fd5b81356118a281611a13565b9392505050565b6000602082840312156118bb57600080fd5b81516118a281611a13565b600080604083850312156118d957600080fd5b82356118e481611a13565b946020939093013593505050565b60006020828403121561190457600080fd5b815180151581146118a257600080fd5b60006020828403121561192657600080fd5b5035919050565b60006020828403121561193f57600080fd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252600f908201526e32b93937b9101827189737bbb732b960891b604082015260600190565b602080825260119082015270195c9c9bdc8811949053514b995e1a5cdd607a1b604082015260600190565b602080825260129082015271195c9c9bdc8810d3d35250d4cb995e1a5cdd60721b604082015260600190565b6000600019821415611a0c57634e487b7160e01b600052601160045260246000fd5b5060010190565b6001600160a01b038116811461183257600080fdfea2646970667358221220021751a4b814b3b0d67a6bf696b53ac96e1c3a020b6bfa29c1aa1269e1c670b964736f6c63430008050033

Verified Source Code Full Match

Compiler: v0.8.5+commit.a4f2e591 EVM: berlin Optimization: Yes (200 runs)
Nanohub.sol 116 lines
//SPDX-License-Identifier: MIT
pragma solidity ^0.8;

import "./Ownable.sol";

interface INFT {
  function mintFRAME(address to, uint tokenId) external;
  function exist(uint tokenId) external view returns (bool);
  function ownerOf(uint tokenId) external view returns (address);
  function transferFrom(address from, address to, uint id) external;
  function balanceOf(address owner) external view returns (uint256);
  function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
}

/// @author jolan.eth
contract NANOHUB is Ownable {
  INFT _0N1;
  INFT _FRAME;
  INFT _COMICS;

  constructor(address ONI, address FRAME, address COMICS) {
    _0N1 = INFT(ONI);
    _FRAME = INFT(FRAME);
    _COMICS = INFT(COMICS);
  }

  function mintFRAME(uint tokenId)
  public {
    require(!_FRAME.exist(tokenId), "error FRAME.exist");
    require(msg.sender == _0N1.ownerOf(tokenId), "error 0N1.owner");
    _FRAME.mintFRAME(msg.sender, tokenId);
  }

  function batchMintFRAME()
  public {
    uint i = 0;
    uint balance = _0N1.balanceOf(msg.sender);
    while (i < balance) {
      uint tokenId = _0N1.tokenOfOwnerByIndex(msg.sender, i);
      if (!_FRAME.exist(tokenId)) {
        require(!_FRAME.exist(tokenId), "error FRAME.exist");
        require(msg.sender == _0N1.ownerOf(tokenId), "error 0N1.owner");
        _FRAME.mintFRAME(msg.sender, tokenId);
      }
      i++;
    }
  }

  function recallFRAME(uint tokenId)
  public {
    require(_FRAME.exist(tokenId), "error FRAME.exist");
    require(msg.sender != _FRAME.ownerOf(tokenId), "error FRAME.owner");
    require(msg.sender == _0N1.ownerOf(tokenId), "error 0N1.owner");

    address frameOwner = _FRAME.ownerOf(tokenId);
    _FRAME.transferFrom(frameOwner, msg.sender, tokenId);
  }

  function batchRecallFRAME()
  public {
    uint i = 0;
    uint balance = _0N1.balanceOf(msg.sender);
    while (i < balance) {
      uint tokenId = _0N1.tokenOfOwnerByIndex(msg.sender, i);
      require(msg.sender == _0N1.ownerOf(tokenId), "error 0N1.owner");
      require(_FRAME.exist(tokenId), "error FRAME.exist");
      if (msg.sender != _FRAME.ownerOf(tokenId)) {
        address frameOwner = _FRAME.ownerOf(tokenId);
        _FRAME.transferFrom(frameOwner, msg.sender, tokenId);
      }
      i++;
    }
  }

  function transferFRAME(address to, uint tokenId)
  public {
    require(msg.sender == _FRAME.ownerOf(tokenId), "error FRAME.owner");
    require(_FRAME.exist(tokenId), "error FRAME.exist");

    _FRAME.transferFrom(msg.sender, to, tokenId);
  }

  function recallCOMICS(uint tokenId)
  public {
    require(_COMICS.exist(tokenId), "error COMICS.exist");
    require(msg.sender != _COMICS.ownerOf(tokenId), "error COMICS.owner");
    require(msg.sender == _0N1.ownerOf(tokenId), "error 0N1.owner");

    address comicsOwner = _COMICS.ownerOf(tokenId);
    _COMICS.transferFrom(comicsOwner, msg.sender, tokenId);
  }

  function batchRecallCOMICS()
  public {
    uint i = 0;
    uint balance = _0N1.balanceOf(msg.sender);
    while (i < balance) {
      uint tokenId = _0N1.tokenOfOwnerByIndex(msg.sender, i);
      require(msg.sender == _0N1.ownerOf(tokenId), "error 0N1.owner");
      require(_COMICS.exist(tokenId), "error COMICS.exist");
      if (msg.sender != _COMICS.ownerOf(tokenId)) {
        address comicsOwner = _COMICS.ownerOf(tokenId);
        _COMICS.transferFrom(comicsOwner, msg.sender, tokenId);
      }
      i++;
    }
  }

  function transferCOMICS(address to, uint tokenId)
  public {
    require(msg.sender == _COMICS.ownerOf(tokenId), "error COMICS.owner");
    require(_COMICS.exist(tokenId), "error COMICS.exist");

    _COMICS.transferFrom(msg.sender, to, tokenId);
  }
}
Ownable.sol 34 lines
//SPDX-License-Identifier: MIT
pragma solidity ^0.8;

abstract contract Ownable {
    address private _owner;
    
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    modifier onlyOwner() {
        require(owner() == msg.sender, "error owner()");
        _;
    }

    constructor() { _transferOwnership(msg.sender); }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "error newOwner");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Read Contract

owner 0x8da5cb5b → address

Write Contract 10 functions

These functions modify contract state and require a wallet transaction to execute.

batchMintFRAME 0x8d83180b
No parameters
batchRecallCOMICS 0x06a4f63f
No parameters
batchRecallFRAME 0xbafe490f
No parameters
mintFRAME 0xb3ef2839
uint256 tokenId
recallCOMICS 0xa584984a
uint256 tokenId
recallFRAME 0x7e3f3fd6
uint256 tokenId
renounceOwnership 0x715018a6
No parameters
transferCOMICS 0x6d1fc5c1
address to
uint256 tokenId
transferFRAME 0xa3f9bc41
address to
uint256 tokenId
transferOwnership 0xf2fde38b
address newOwner

Recent Transactions

No transactions found for this address