Address Contract Verified
Address
0x6fc3a454e9053e67Ce654E19c3A703Ac38ba2b52
Balance
0 ETH
Nonce
1
Code Size
6750 bytes
Creator
0x281302D3...738f at tx 0xa51b34d2...6d4e23
Indexed Transactions
0
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