编译器
0.8.17+commit.8df45f5f
文件 1 的 3:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 2 的 3:FuturisticKidMinter.sol
pragma solidity 0.8.17;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
interface IERC721 {
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
function ownerOf(uint256 tokenId) external view returns (address owner);
function mint(address to) external;
}
contract FuturisticKidMinter is Context, Ownable {
address constant private _burnerAddress = 0x000000000000000000000000000000000000dEaD;
IERC721 public immutable futuristicKids;
IERC721 public immutable passes;
IERC721 public immutable kids;
uint256 public immutable startTime;
bool public openMint = false;
constructor(
address futuristicKidsAddress,
address passesAddress,
address kidsAddress,
uint256 startTime_
) {
futuristicKids = IERC721(futuristicKidsAddress);
passes = IERC721(passesAddress);
kids = IERC721(kidsAddress);
startTime = startTime_;
}
function mint(uint256 kidId, uint256 passId) public {
require(this.isMintOpen(), "Claiming has not started");
require(kids.ownerOf(kidId) == _msgSender(), "Sender should own the kid");
require(passes.ownerOf(passId) == _msgSender(), "Sender should own the pass");
kids.safeTransferFrom(_msgSender(), _burnerAddress, kidId);
passes.safeTransferFrom(_msgSender(), _burnerAddress, passId);
futuristicKids.mint(_msgSender());
}
function setOpenMint(bool openMint_) public onlyOwner {
openMint = openMint_;
}
function isMintOpen() public view returns (bool) {
return block.timestamp >= startTime || openMint;
}
}
文件 3 的 3:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
{
"compilationTarget": {
"contracts/FuturisticKidMinter.sol": "FuturisticKidMinter"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"futuristicKidsAddress","type":"address"},{"internalType":"address","name":"passesAddress","type":"address"},{"internalType":"address","name":"kidsAddress","type":"address"},{"internalType":"uint256","name":"startTime_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"futuristicKids","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kids","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"kidId","type":"uint256"},{"internalType":"uint256","name":"passId","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"passes","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"openMint_","type":"bool"}],"name":"setOpenMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]