编译器
0.8.12+commit.f00d7308
文件 1 的 6: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 的 6:IAzimuth.sol
pragma solidity ^0.8.11;
interface IAzimuth {
function owner() external returns (address);
function isSpawnProxy(uint32, address) external returns (bool);
function hasBeenLinked(uint32) external returns (bool);
function getPrefix(uint32) external returns (uint16);
function getOwner(uint32) view external returns (address);
function canTransfer(uint32, address) view external returns (bool);
function isOwner(uint32, address) view external returns (bool);
function getKeyRevisionNumber(uint32 _point) view external returns(uint32);
function getSpawnCount(uint32 _point) view external returns(uint32);
}
文件 3 的 6:IERC721.sol
pragma solidity ^0.8.11;
interface IERC721Partial {
function transferFrom(address from, address to, uint256 tokenId) external;
}
文件 4 的 6:IEcliptic.sol
pragma solidity ^0.8.11;
interface IEcliptic {
function isApprovedForAll(address, address) external returns (bool);
function transferFrom(address, address, uint256) external;
function spawn(uint32, address) external;
function transferPoint(uint32, address, bool) external;
}
文件 5 的 6: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() {
_setOwner(_msgSender());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 6 的 6:SpawnSale2.sol
pragma solidity ^0.8.12;
import "./interface/IAzimuth.sol";
import "./interface/IEcliptic.sol";
import "./interface/IERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Context.sol";
contract UrbitexSpawnSale_v2 is Context, Ownable
{
event SpawnedPurchase(
uint32[] _points
);
IAzimuth public azimuth;
uint256 public price;
constructor(IAzimuth _azimuth, uint256 _price)
{
azimuth = _azimuth;
setPrice(_price);
}
function purchase(uint32[] calldata _points)
external
payable
{
require (msg.value == price*_points.length);
IEcliptic ecliptic = IEcliptic(azimuth.owner());
for (uint32 index; index < _points.length; index++) {
ecliptic.spawn(_points[index], address(this));
ecliptic.transferPoint(_points[index], _msgSender(), false);
}
emit SpawnedPurchase(_points);
}
function setPrice(uint256 _price) public onlyOwner {
require(0 < _price);
price = _price;
}
function withdraw(address payable _target) external onlyOwner {
require(address(0) != _target);
_target.transfer(address(this).balance);
}
function close(address payable _target) external onlyOwner {
require(address(0) != _target);
selfdestruct(_target);
}
}
{
"compilationTarget": {
"contracts/SpawnSale2.sol": "UrbitexSpawnSale_v2"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 100000
},
"remappings": []
}
[{"inputs":[{"internalType":"contract IAzimuth","name":"_azimuth","type":"address"},{"internalType":"uint256","name":"_price","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[]","name":"_points","type":"uint32[]"}],"name":"SpawnedPurchase","type":"event"},{"inputs":[],"name":"azimuth","outputs":[{"internalType":"contract IAzimuth","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_target","type":"address"}],"name":"close","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32[]","name":"_points","type":"uint32[]"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_target","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]