Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 235 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint One | 17666675 | 969 days ago | IN | 0 ETH | 0.00348011 | ||||
| Mint One | 17578897 | 982 days ago | IN | 0 ETH | 0.00731535 | ||||
| Mint One | 17557637 | 985 days ago | IN | 0 ETH | 0.00291039 | ||||
| Mint One | 17557634 | 985 days ago | IN | 0 ETH | 0.00300165 | ||||
| Mint One | 17557608 | 985 days ago | IN | 0 ETH | 0.00319188 | ||||
| Mint One | 17557607 | 985 days ago | IN | 0 ETH | 0.0032659 | ||||
| Mint One | 17557598 | 985 days ago | IN | 0 ETH | 0.00289116 | ||||
| Mint One | 17557505 | 985 days ago | IN | 0 ETH | 0.00297756 | ||||
| Mint One | 17557504 | 985 days ago | IN | 0 ETH | 0.00278699 | ||||
| Mint One | 17557403 | 985 days ago | IN | 0 ETH | 0.0036794 | ||||
| Mint One | 17537555 | 988 days ago | IN | 0 ETH | 0.00310422 | ||||
| Mint One | 17536872 | 988 days ago | IN | 0 ETH | 0.00354885 | ||||
| Mint One | 17535862 | 988 days ago | IN | 0 ETH | 0.00441219 | ||||
| Mint One | 17527131 | 989 days ago | IN | 0 ETH | 0.00322837 | ||||
| Mint One | 17498396 | 993 days ago | IN | 0 ETH | 0.00317752 | ||||
| Mint One | 17469494 | 997 days ago | IN | 0 ETH | 0.00313647 | ||||
| Mint One | 17466584 | 998 days ago | IN | 0 ETH | 0.00353036 | ||||
| Mint One | 17457682 | 999 days ago | IN | 0 ETH | 0.00331586 | ||||
| Mint One | 17411450 | 1005 days ago | IN | 0 ETH | 0.00538388 | ||||
| Mint One | 17408504 | 1006 days ago | IN | 0 ETH | 0.00613204 | ||||
| Mint One | 17374123 | 1011 days ago | IN | 0 ETH | 0.00891182 | ||||
| Mint One | 17331889 | 1017 days ago | IN | 0 ETH | 0.00663506 | ||||
| Mint One | 17331574 | 1017 days ago | IN | 0 ETH | 0.00778256 | ||||
| Mint One | 17330678 | 1017 days ago | IN | 0 ETH | 0.01362839 | ||||
| Mint One | 17330222 | 1017 days ago | IN | 0 ETH | 0.01260311 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EclipseMinterFree
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Eclipse} from "../app/Eclipse.sol";
import {IEclipseERC721} from "../interface/IEclipseERC721.sol";
import {IEclipseMintGate} from "../interface/IEclipseMintGate.sol";
import {IEclipsePaymentSplitter} from "../interface/IEclipsePaymentSplitter.sol";
import {EclipseMinterBase, GateParams} from "./EclipseMinterBase.sol";
/**
* @dev Eclipse Free Minter
* Admin for collections deployed on {Eclipse}
*/
contract EclipseMinterFree is EclipseMinterBase {
struct FreeParams {
address artist;
uint48 startTime;
uint48 endTime;
uint24 maxSupply;
GateParams gate;
}
event PricingSet(
address collection,
CollectionMintParams mint,
uint8 index
);
constructor(address eclipse_) EclipseMinterBase(eclipse_) {}
/**
* @dev Set pricing for collection
* @param collection contract address of the collection
* @param data `FixedPriceParams` struct
*/
function setPricing(
address collection,
address sender,
bytes memory data
) external override onlyAdmin {
FreeParams memory params = abi.decode(data, (FreeParams));
CollectionMintParams[] storage col = collections[collection];
address artist = params.artist;
uint48 startTime = params.startTime;
uint48 endTime = params.endTime;
uint24 maxSupply = params.maxSupply;
uint8 index = uint8(col.length);
uint8 gateType = params.gate.gateType;
address gateAddress = Eclipse(eclipse).gateTypes(gateType);
checkParams(artist, sender, startTime, endTime, maxSupply);
IEclipseMintGate(gateAddress).addGateForCollection(
collection,
address(this),
index,
params.gate.gateCalldata
);
CollectionMintParams memory mintParams = CollectionMintParams(
artist,
startTime,
endTime,
maxSupply,
gateAddress,
gateType
);
col.push(mintParams);
emit PricingSet(collection, mintParams, index);
}
function checkParams(
address artist,
address sender,
uint48 startTime,
uint48 endTime,
uint24 maxSupply
) internal view {
require(sender == artist, "invalid collection");
require(startTime > block.timestamp, "startTime too early");
if (endTime != 0) {
require(endTime > startTime, "endTime must be greater startTime");
}
require(maxSupply > 0, "maxSupply must be greater 0");
}
/**
* @dev Get price for collection
*/
function getPrice(address, uint8) public pure override returns (uint256) {
return 0;
}
/**
* @dev Mint a token
* @param collection contract address of the collection
*/
function mintOne(
address collection,
uint8 index
) external payable override {
_checkState(collection, index);
address user = _msgSender();
address minter = address(this);
address gate = collections[collection][index].gateAddress;
_getAllowedMintsAndUpdate(collection, index, minter, gate, user, 1);
IEclipseERC721(collection).mintOne(user);
}
/**
* @dev Mint a token
* @param collection contract address of the collection
* @param amount amount of tokens to mint
*/
function mint(
address collection,
uint8 index,
uint24 amount
) external payable override {
_checkState(collection, index);
address user = _msgSender();
address minter = address(this);
address gate = collections[collection][index].gateAddress;
uint24 allowedMints = _getAllowedMintsAndUpdate(
collection,
index,
minter,
gate,
user,
amount
);
IEclipseERC721(collection).mint(user, allowedMints);
}
/**
* @dev Get collection pricing object
*/
function getCollectionPricing(address) external pure returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {EclipseAccess} from "../access/EclipseAccess.sol";
import {EclipseCollectionFactory, CollectionParams} from "../factory/EclipseCollectionFactory.sol";
import {EclipsePaymentSplitterFactory} from "../factory/EclipsePaymentSplitterFactory.sol";
import {IEclipseERC721} from "../interface/IEclipseERC721.sol";
import {IEclipseMinter} from "../interface/IEclipseMinter.sol";
import {EclipseStorage, Collection, Artist} from "../storage/EclipseStorage.sol";
/**
* @dev Eclipse
* Admin of {EclipseCollectionFactory} and {EclipsePaymentSplitterFactory}
*/
struct CreateCollectionParams {
string name;
string symbol;
string script;
uint8 collectionType;
uint24 maxSupply;
uint8 erc721Index;
uint8[] pricingMode;
bytes[] pricingData;
address[] payeesMint;
address[] payeesRoyalties;
uint24[] sharesMint;
uint24[] sharesRoyalties;
}
struct PricingParams {
uint8 mode;
bytes data;
}
struct CollectionInfo {
string name;
string symbol;
Collection collection;
Artist artist;
}
contract Eclipse is EclipseAccess {
address public collectionFactory;
address public paymentSplitterFactory;
address public platformPayoutAddress;
mapping(uint8 => address) public minters;
mapping(uint8 => address) public gateTypes;
EclipseStorage public store;
constructor(
address collectionFactory_,
address paymentSplitterFactory_,
address store_,
address platformPayoutAddress_
) {
collectionFactory = collectionFactory_;
paymentSplitterFactory = paymentSplitterFactory_;
platformPayoutAddress = platformPayoutAddress_;
store = EclipseStorage(store_);
}
/**
* @dev Throws if called by any account other than the artist
*/
modifier onlyArtist(address collection) {
address artist = store.getCollection(collection).artist;
require(
_msgSender() == artist,
"EclipseAccess: caller is not the artist"
);
_;
}
/**
* @dev Internal functtion to close the ERC721 implementation contract
*/
function _cloneCollection(
CollectionParams memory params
) internal returns (address instance, uint256 id) {
return
EclipseCollectionFactory(collectionFactory).cloneCollectionContract(
params
);
}
/**
* @dev Internal functtion to create the collection and risgister to minter
*/
function _createCollection(
CollectionParams memory params
) internal returns (address instance, uint256 id) {
(instance, id) = _cloneCollection(params);
store.setCollection(
Collection(
id,
params.artist,
instance,
params.maxSupply,
params.script,
params.paymentSplitter
)
);
}
/**
* @dev Clones an ERC721 implementation contract
* @param params params
* @dev name name of collection
* @dev symbol ERC721 symbol for collection
* @dev script single html as string
* @dev maxSupply max token supply
* @dev erc721Index ERC721 implementation index
* @dev pricingMode minter index
* @dev pricingData calldata for `setPricing` function
* @dev payeesMint address list of payees of mint proceeds
* @dev payeesRoyalties address list of payees of royalties
* @dev sharesMint list of shares for mint proceeds
* @dev sharesRoyalties list of shares for royalties
* Note payee and shares indices must be in respective order
*/
function createCollection(CreateCollectionParams calldata params) external {
uint24 maxSupply = params.maxSupply;
require(maxSupply <= 1_000_000, "maxSupply too big");
address artist = _msgSender();
_createArtist(artist);
address paymentSplitter = EclipsePaymentSplitterFactory(
paymentSplitterFactory
).clone(
owner(),
platformPayoutAddress,
artist,
params.payeesMint,
params.payeesRoyalties,
params.sharesMint,
params.sharesRoyalties
);
address instance = EclipseCollectionFactory(collectionFactory)
.predictDeterministicAddress(params.erc721Index);
bytes[] memory pricingData = params.pricingData;
uint8[] memory pricingMode = params.pricingMode;
address[] memory collectionMinters = new address[](pricingMode.length);
for (uint8 i; i < pricingMode.length; i++) {
address minter = minters[pricingMode[i]];
collectionMinters[i] = minter;
_addMinterToCollection(instance, artist, minter, pricingData[i]);
}
_createCollection(
CollectionParams(
artist,
params.name,
params.symbol,
params.script,
params.collectionType,
maxSupply,
address(this),
params.erc721Index,
collectionMinters,
paymentSplitter
)
);
}
/**
* @dev Internal helper method to create artist
* @param artist address of artist
*/
function _createArtist(address artist) internal {
if (store.getArtist(artist).wallet != address(0)) return;
address[] memory collections_;
store.setArtist(Artist(artist, collections_));
}
/**
* @dev Internal helper method to add minter to collection
*/
function _addMinterToCollection(
address collection,
address sender,
address minter,
bytes memory pricingData
) internal {
IEclipseMinter(minter).setPricing(collection, sender, pricingData);
}
/**
* @dev Set the {EclipseCollectionFactory} contract address
*/
function setCollectionFactory(address factory) external onlyAdmin {
collectionFactory = factory;
}
/**
* @dev Set the {EclipsePaymentSplitterFactory} contract address
*/
function setPaymentSplitterFactory(address factory) external onlyAdmin {
paymentSplitterFactory = factory;
}
/**
* @dev Set the {EclipsePaymentSplitterFactory} contract address
*/
function enableMinterForCollection(
address collection,
uint8 pricingMode,
bytes memory pricingData,
bool enable
) external onlyArtist(collection) {
address minter = minters[pricingMode];
if (enable) {
_addMinterToCollection(
collection,
_msgSender(),
minter,
pricingData
);
}
IEclipseERC721(collection).setMinter(minter, enable);
}
/**
* @dev Add a minter contract and map by index
*/
function addMinter(uint8 index, address minter) external onlyAdmin {
minters[index] = minter;
}
/**
* @dev Add a gatre contract and map by index
*/
function addGate(uint8 index, address gate) external onlyAdmin {
gateTypes[index] = gate;
}
/**
* @dev Get collection info
* @param collection contract address of the collection
*/
function getCollectionInfo(
address collection
) external view returns (CollectionInfo memory info) {
(
string memory name,
string memory symbol,
address artist,
,
,
) = IEclipseERC721(collection).getInfo();
Artist memory artist_ = store.getArtist(artist);
info = CollectionInfo(
name,
symbol,
store.getCollection(collection),
artist_
);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {EclipseAccess} from "../access/EclipseAccess.sol";
import {Eclipse} from "../app/Eclipse.sol";
import {IEclipseMinter} from "../interface/IEclipseMinter.sol";
import {IEclipseMintGate, UserMint} from "../interface/IEclipseMintGate.sol";
/**
* @dev Eclipse base minter
*/
struct GateParams {
uint8 gateType;
bytes gateCalldata;
}
abstract contract EclipseMinterBase is EclipseAccess, IEclipseMinter {
struct CollectionMintParams {
address artist;
uint48 startTime;
uint48 endTime;
uint24 maxSupply;
address gateAddress;
uint8 gateType;
}
struct CollectionState {
CollectionMintParams params;
uint24 available;
uint24 minted;
}
Eclipse public eclipse;
mapping(address => CollectionMintParams[]) public collections;
constructor(address eclipse_) EclipseAccess() {
eclipse = Eclipse(eclipse_);
}
/**
* @dev Set the {Eclipse} contract address
*/
function setEclipse(address eclipse_) external onlyAdmin {
eclipse = Eclipse(eclipse_);
}
function _getAvailableSupply(
address collection,
uint8 index
) internal view returns (uint24 available, uint24 minted) {
address gateAddress = collections[collection][index].gateAddress;
IEclipseMintGate gate = IEclipseMintGate(gateAddress);
uint24 totalMinted = gate.getTotalMinted(
collection,
address(this),
index
);
return (
collections[collection][index].maxSupply - totalMinted,
totalMinted
);
}
function getAllowedMintsForUser(
address collection,
uint8 index,
address user
) external view override returns (UserMint memory) {
address gateAddress = collections[collection][index].gateAddress;
IEclipseMintGate gate = IEclipseMintGate(gateAddress);
return gate.getUserMint(collection, address(this), index, user);
}
function getAvailableSupply(
address collection,
uint8 index
) external view override returns (uint24 available, uint24 minted) {
return _getAvailableSupply(collection, index);
}
function getCollectionState(
address collection
) external view returns (CollectionState[] memory) {
CollectionMintParams[] memory params = collections[collection];
CollectionState[] memory returnArr = new CollectionState[](
params.length
);
for (uint8 i; i < params.length; i++) {
(uint24 available, uint24 minted) = _getAvailableSupply(
collection,
i
);
returnArr[i] = CollectionState(params[i], available, minted);
}
return returnArr;
}
/**
* @dev Helper function to check for mint price and start date
*/
function _checkState(
address collection,
uint8 index
) internal view virtual {
uint256 timestamp = block.timestamp;
uint256 startTime = collections[collection][index].startTime;
uint256 endTime = collections[collection][index].endTime;
require(
startTime != 0 && startTime <= timestamp,
"mint not started yet"
);
if (endTime != 0) {
require(timestamp <= endTime, "mint ended");
}
}
/**
* @dev Helper function to check for available mints for sender
*/
function _getAllowedMints(
address collection,
uint8 index,
address minter,
address gateAddress,
address sender,
uint24 amount
) internal view returns (uint24) {
IEclipseMintGate gate = IEclipseMintGate(gateAddress);
uint24 allowedMints = gate.getAllowedMints(
collection,
minter,
index,
sender
);
require(allowedMints > 0, "no mints available");
uint24 minted = gate.getTotalMinted(collection, minter, index);
uint24 availableSupply = collections[collection][index].maxSupply -
minted;
require(availableSupply > 0, "sold out");
uint24 mints = amount > allowedMints ? allowedMints : amount;
return mints > availableSupply ? availableSupply : mints;
}
/**
* @dev Helper function to check for available mints for sender
*/
function _getAllowedMintsAndUpdate(
address collection,
uint8 index,
address minter,
address gateAddress,
address sender,
uint24 amount
) internal returns (uint24) {
IEclipseMintGate gate = IEclipseMintGate(gateAddress);
uint24 minted = _getAllowedMints(
collection,
index,
minter,
gateAddress,
sender,
amount
);
gate.update(collection, minter, index, sender, minted);
return minted;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
struct UserMint {
uint24 allowed;
uint24 minted;
}
interface IEclipseMintGate {
function getAllowedMints(
address collection,
address minterContract,
uint8 index,
address user
) external view returns (uint24);
function update(
address collection,
address minterContract,
uint8 index,
address user,
uint24 amount
) external;
function isUserAllowed(
address collection,
address minterContract,
uint8 index,
address user
) external view returns (bool);
function addGateForCollection(
address collection,
address minterContract,
uint8 index,
bytes memory data
) external;
function getTotalMinted(
address collection,
address minterContract,
uint8 index
) external view returns (uint24);
function getUserMint(
address collection,
address minterContract,
uint8 index,
address user
) external view returns (UserMint memory);
}// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import {IERC2981Upgradeable} from "@openzeppelin/contracts-upgradeable/interfaces/IERC2981Upgradeable.sol";
import {IERC721EnumerableUpgradeable} from "@openzeppelin/contracts-upgradeable/interfaces/IERC721EnumerableUpgradeable.sol";
import {IERC721MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/interfaces/IERC721MetadataUpgradeable.sol";
interface IEclipseERC721 is
IERC721MetadataUpgradeable,
IERC2981Upgradeable,
IERC721EnumerableUpgradeable
{
function initialize(
string memory name,
string memory symbol,
string memory uri,
uint256 id,
uint24 maxSupply,
address admin,
address contractAdmin,
address artist,
address[] memory minters,
address paymentSplitter
) external;
function getTokensByOwner(
address _owner
) external view returns (uint256[] memory);
function getInfo()
external
view
returns (
string memory name,
string memory symbol,
address artist,
uint256 id,
uint24 maxSupply,
uint256 totalSupply
);
function mint(address to, uint24 amount) external;
function mintOne(address to) external;
function setMinter(address minter, bool enable) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IEclipsePaymentSplitter {
function splitPayment() external payable;
function getTotalShares() external view returns (uint256);
function getTotalRoyaltyShares() external view returns (uint256);
function release(address account) external;
function updatePayee(
uint8 paymentType,
uint8 payeeIndex,
address newPayee
) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
/**
* @dev This implements access control for owner and admins
*/
abstract contract EclipseAccess is Ownable {
mapping(address => bool) public admins;
address public eclipseAdmin;
constructor() Ownable() {
eclipseAdmin = _msgSender();
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyAdmin() {
address sender = _msgSender();
require(
owner() == sender || admins[sender],
"EclipseAccess: caller is not the owner nor admin"
);
_;
}
/**
* @dev Throws if called by any account other than the Eclipse admin.
*/
modifier onlyEclipseAdmin() {
address sender = _msgSender();
require(
eclipseAdmin == sender,
"EclipseAccess: caller is not eclipse admin"
);
_;
}
function setEclipseAdmin(address admin) public onlyEclipseAdmin {
eclipseAdmin = admin;
}
function setAdminAccess(
address admin,
bool access
) public onlyEclipseAdmin {
admins[admin] = access;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {EclipseAccess} from "../access/EclipseAccess.sol";
/**
* Eclipse {EclipsePaymentSplitter} contract factory
*/
contract EclipsePaymentSplitterFactory is EclipseAccess {
struct Payment {
address[] payees;
uint24[] shares;
}
address public implementation;
event Created(
address contractAddress,
address artist,
address[] payeesMint,
address[] payeesRoyalties,
uint24[] sharesMint,
uint24[] sharesRoyalties
);
constructor(address implementation_) EclipseAccess() {
implementation = implementation_;
}
/**
* @dev Intenal helper method to create initializer
*/
function _createInitializer(
address owner,
address platformPayout,
address[] memory payeesMint,
address[] memory payeesRoyalties,
uint24[] memory sharesMint,
uint24[] memory sharesRoyalties
) internal pure returns (bytes memory) {
return
abi.encodeWithSignature(
"initialize(address,address,address[],address[],uint24[],uint24[])",
owner,
platformPayout,
payeesMint,
payeesRoyalties,
sharesMint,
sharesRoyalties
);
}
/**
* @dev Cone a {PaymentSplitter} implementation contract
*/
function clone(
address owner,
address platformPayout,
address artist,
address[] memory payeesMint,
address[] memory payeesRoyalties,
uint24[] memory sharesMint,
uint24[] memory sharesRoyalties
) external onlyAdmin returns (address) {
bytes memory initializer = _createInitializer(
owner,
platformPayout,
payeesMint,
payeesRoyalties,
sharesMint,
sharesRoyalties
);
address instance = Clones.clone(implementation);
Address.functionCall(instance, initializer);
emit Created(
instance,
artist,
payeesMint,
payeesRoyalties,
sharesMint,
sharesRoyalties
);
return instance;
}
/**
* @dev Set the {EclipsePaymentSplitter} implementation
*/
function setImplementation(address implementation_) external onlyAdmin {
implementation = implementation_;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {EclipseAccess} from "../access/EclipseAccess.sol";
import {EclipseCollectionFactory} from "../factory/EclipseCollectionFactory.sol";
import {EclipsePaymentSplitterFactory} from "../factory/EclipsePaymentSplitterFactory.sol";
import {IEclipseERC721} from "../interface/IEclipseERC721.sol";
import {IEclipseMinter} from "../interface/IEclipseMinter.sol";
/**
* @dev Eclipse
* Admin of {EclipseCollectionFactory} and {EclipsePaymentSplitterFactory}
*/
struct Collection {
uint256 id;
address artist;
address contractAddress;
uint256 maxSupply;
string script;
address paymentSplitter;
}
struct Artist {
address wallet;
address[] collections;
}
contract EclipseStorage is EclipseAccess {
mapping(address => Collection) public collections;
mapping(address => Artist) public artists;
event ScriptUpdated(address collection, string script);
/**
* @dev Helper function to get {PaymentSplitter} of artist
*/
function getPaymentSplitterForCollection(
address collection
) external view returns (address) {
return collections[collection].paymentSplitter;
}
/**
* @dev Update script of collection
* @param collection contract address of the collection
* @param script single html as string
*/
function updateScript(address collection, string memory script) external {
require(collections[collection].artist == _msgSender(), "not allowed");
collections[collection].script = script;
emit ScriptUpdated(collection, script);
}
/**
* @dev set collection
* @param collection contract object
*/
function setCollection(Collection calldata collection) external onlyAdmin {
collections[collection.contractAddress] = collection;
artists[collection.artist].collections.push(collection.contractAddress);
}
/**
* @dev set collection
* @param artist artist object
*/
function setArtist(Artist calldata artist) external onlyAdmin {
artists[artist.wallet] = artist;
}
/**
* @dev Get artist struct
* @param artist adress of artist
*/
function getArtist(address artist) external view returns (Artist memory) {
return artists[artist];
}
/**
* @dev Get collection struct
* @param collection collection address
*/
function getCollection(
address collection
) external view returns (Collection memory) {
return collections[collection];
}
/**
* @dev Get artist of collection
* @param collection collection address
*/
function getArtistOfCollection(
address collection
) external view returns (address) {
return collections[collection].artist;
}
/**
* @dev Update payment splitter for collection
* @param paymentSplitter address of new payment splitter
*/
function setPaymentSplitter(
address collection,
address paymentSplitter
) external onlyAdmin {
collections[collection].paymentSplitter = paymentSplitter;
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
import {EclipseAccess} from "../access/EclipseAccess.sol";
import {IEclipseMinter} from "../interface/IEclipseMinter.sol";
/**
* Eclipse ERC721 contract factory
*/
struct CollectionParams {
address artist;
string name;
string symbol;
string script;
uint8 collectionType;
uint24 maxSupply;
address contractAdmin;
uint8 erc721Index;
address[] minters;
address paymentSplitter;
}
struct CollectionEvent {
uint256 id;
address contractAddress;
uint8 collectionType;
address artist;
string name;
string symbol;
string script;
uint24 maxSupply;
address implementation;
address paymentSplitter;
}
struct CollectionType {
string name;
uint256 prefix;
uint256 lastId;
}
struct InitializerParams {
uint256 id;
address artist;
string name;
string symbol;
uint24 maxSupply;
address contractAdmin;
address[] minters;
address paymentSplitter;
}
contract EclipseCollectionFactory is EclipseAccess {
mapping(uint8 => address) public erc721Implementations;
mapping(uint8 => CollectionType) public collectionTypes;
address public paymentSplitterImplementation;
string public uri;
event Created(CollectionEvent collection);
constructor(string memory uri_) EclipseAccess() {
uri = uri_;
uint256 chain;
assembly {
chain := chainid()
}
collectionTypes[0] = CollectionType(
"js",
chain * 1_000_000_000 + 100_000_000,
0
);
}
/**
* @dev Get next collection id
*/
function _getNextCollectionId(
uint8 collectionType
) internal returns (uint256) {
CollectionType storage obj = collectionTypes[collectionType];
require(obj.prefix != 0, "invalid collectionType");
obj.lastId += 1;
uint256 id = obj.prefix + obj.lastId;
return id;
}
/**
* @dev Create initializer for clone
* Note The method signature is created on chain to prevent malicious initialization args
*/
function _createInitializer(
InitializerParams memory params
) internal view returns (bytes memory) {
return
abi.encodeWithSignature(
"initialize(string,string,string,uint256,uint24,address,address,address,address[],address)",
params.name,
params.symbol,
uri,
params.id,
params.maxSupply,
eclipseAdmin,
params.contractAdmin,
params.artist,
params.minters,
params.paymentSplitter
);
}
/**
* @dev Cone an implementation contract
*/
function cloneCollectionContract(
CollectionParams memory params
) external onlyAdmin returns (address, uint256) {
address implementation = erc721Implementations[params.erc721Index];
require(implementation != address(0), "invalid erc721Index");
uint24 maxSupply = params.maxSupply;
require(maxSupply <= 99_999, "maxSupply must not be greater 99.999");
uint8 collectionType = params.collectionType;
uint256 id = _getNextCollectionId(collectionType);
address paymentSplitter = params.paymentSplitter;
address artist = params.artist;
address contractAdmin = params.contractAdmin;
address[] memory minters = params.minters;
string memory symbol = params.symbol;
string memory name = params.name;
string memory script = params.script;
bytes memory initializer = _createInitializer(
InitializerParams(
id,
artist,
name,
symbol,
maxSupply,
contractAdmin,
minters,
paymentSplitter
)
);
address instance = Clones.cloneDeterministic(
implementation,
bytes32(block.number)
);
Address.functionCall(instance, initializer);
emit Created(
CollectionEvent(
id,
instance,
collectionType,
artist,
name,
symbol,
script,
maxSupply,
implementation,
paymentSplitter
)
);
return (instance, id);
}
/**
* @dev Add an ERC721 implementation contract and map by index
*/
function addErc721Implementation(
uint8 index,
address implementation
) external onlyAdmin {
erc721Implementations[index] = implementation;
}
/**
* @dev Add a collectionType and map by index
*/
function addCollectionType(
uint8 index,
string memory name,
uint256 prefix,
uint256 lastId
) external onlyAdmin {
collectionTypes[index] = CollectionType(name, prefix, lastId);
}
/**
* @dev Sets the base tokenURI for collections
*/
function setUri(string memory uri_) external onlyAdmin {
uri = uri_;
}
/**
* @dev Predict contract address for new collection
*/
function predictDeterministicAddress(
uint8 erc721Index
) external view returns (address) {
return
Clones.predictDeterministicAddress(
erc721Implementations[erc721Index],
bytes32(block.number),
address(this)
);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import {UserMint} from "./IEclipseMintGate.sol";
interface IEclipseMinter {
function mintOne(address collection, uint8 index) external payable;
function mint(
address collection,
uint8 index,
uint24 amount
) external payable;
function getPrice(
address collection,
uint8 index
) external view returns (uint256);
function getAllowedMintsForUser(
address collection,
uint8 index,
address user
) external view returns (UserMint memory);
function setPricing(
address collection,
address sender,
bytes memory data
) external;
function getAvailableSupply(
address collection,
uint8 index
) external view returns (uint24 available, uint24 minted);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../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.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// 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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (proxy/Clones.sol)
pragma solidity ^0.8.0;
/**
* @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
* deploying minimal proxy contracts, also known as "clones".
*
* > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
* > a minimal bytecode implementation that delegates all calls to a known, fixed address.
*
* The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
* (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
* deterministic method.
*
* _Available since v3.4._
*/
library Clones {
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
*
* This function uses the create opcode, which should never revert.
*/
function clone(address implementation) internal returns (address instance) {
/// @solidity memory-safe-assembly
assembly {
let ptr := mload(0x40)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
instance := create(0, ptr, 0x37)
}
require(instance != address(0), "ERC1167: create failed");
}
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
*
* This function uses the create2 opcode and a `salt` to deterministically deploy
* the clone. Using the same `implementation` and `salt` multiple time will revert, since
* the clones cannot be deployed twice at the same address.
*/
function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
/// @solidity memory-safe-assembly
assembly {
let ptr := mload(0x40)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)
instance := create2(0, ptr, 0x37, salt)
}
require(instance != address(0), "ERC1167: create2 failed");
}
/**
* @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
*/
function predictDeterministicAddress(
address implementation,
bytes32 salt,
address deployer
) internal pure returns (address predicted) {
/// @solidity memory-safe-assembly
assembly {
let ptr := mload(0x40)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)
mstore(add(ptr, 0x14), shl(0x60, implementation))
mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)
mstore(add(ptr, 0x38), shl(0x60, deployer))
mstore(add(ptr, 0x4c), salt)
mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))
predicted := keccak256(add(ptr, 0x37), 0x55)
}
}
/**
* @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
*/
function predictDeterministicAddress(address implementation, bytes32 salt)
internal
view
returns (address predicted)
{
return predictDeterministicAddress(implementation, salt, address(this));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)
pragma solidity ^0.8.0;
import "../utils/introspection/IERC165Upgradeable.sol";
/**
* @dev Interface for the NFT Royalty Standard.
*
* A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
* support for royalty payments across all NFT marketplaces and ecosystem participants.
*
* _Available since v4.5._
*/
interface IERC2981Upgradeable is IERC165Upgradeable {
/**
* @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
*/
function royaltyInfo(uint256 tokenId, uint256 salePrice)
external
view
returns (address receiver, uint256 royaltyAmount);
}// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../token/ERC721/extensions/IERC721MetadataUpgradeable.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../token/ERC721/extensions/IERC721EnumerableUpgradeable.sol";
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165Upgradeable {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC721Upgradeable.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721MetadataUpgradeable is IERC721Upgradeable {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0-rc.1) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165Upgradeable.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721Upgradeable is IERC165Upgradeable {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
import "../IERC721Upgradeable.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721EnumerableUpgradeable is IERC721Upgradeable {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"eclipse_","type":"address"}],"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":"address","name":"collection","type":"address"},{"components":[{"internalType":"address","name":"artist","type":"address"},{"internalType":"uint48","name":"startTime","type":"uint48"},{"internalType":"uint48","name":"endTime","type":"uint48"},{"internalType":"uint24","name":"maxSupply","type":"uint24"},{"internalType":"address","name":"gateAddress","type":"address"},{"internalType":"uint8","name":"gateType","type":"uint8"}],"indexed":false,"internalType":"struct EclipseMinterBase.CollectionMintParams","name":"mint","type":"tuple"},{"indexed":false,"internalType":"uint8","name":"index","type":"uint8"}],"name":"PricingSet","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"collections","outputs":[{"internalType":"address","name":"artist","type":"address"},{"internalType":"uint48","name":"startTime","type":"uint48"},{"internalType":"uint48","name":"endTime","type":"uint48"},{"internalType":"uint24","name":"maxSupply","type":"uint24"},{"internalType":"address","name":"gateAddress","type":"address"},{"internalType":"uint8","name":"gateType","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eclipse","outputs":[{"internalType":"contract Eclipse","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eclipseAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"},{"internalType":"address","name":"user","type":"address"}],"name":"getAllowedMintsForUser","outputs":[{"components":[{"internalType":"uint24","name":"allowed","type":"uint24"},{"internalType":"uint24","name":"minted","type":"uint24"}],"internalType":"struct UserMint","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"getAvailableSupply","outputs":[{"internalType":"uint24","name":"available","type":"uint24"},{"internalType":"uint24","name":"minted","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"getCollectionPricing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"getCollectionState","outputs":[{"components":[{"components":[{"internalType":"address","name":"artist","type":"address"},{"internalType":"uint48","name":"startTime","type":"uint48"},{"internalType":"uint48","name":"endTime","type":"uint48"},{"internalType":"uint24","name":"maxSupply","type":"uint24"},{"internalType":"address","name":"gateAddress","type":"address"},{"internalType":"uint8","name":"gateType","type":"uint8"}],"internalType":"struct EclipseMinterBase.CollectionMintParams","name":"params","type":"tuple"},{"internalType":"uint24","name":"available","type":"uint24"},{"internalType":"uint24","name":"minted","type":"uint24"}],"internalType":"struct EclipseMinterBase.CollectionState[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"},{"internalType":"uint24","name":"amount","type":"uint24"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint8","name":"index","type":"uint8"}],"name":"mintOne","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bool","name":"access","type":"bool"}],"name":"setAdminAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"eclipse_","type":"address"}],"name":"setEclipse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"setEclipseAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setPricing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162003695380380620036958339818101604052810190620000379190620001d4565b80620000586200004c620000f160201b60201c565b620000f960201b60201c565b62000068620000f160201b60201c565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200024e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620001ce8162000234565b92915050565b600060208284031215620001e757600080fd5b6000620001f784828501620001bd565b91505092915050565b60006200020d8262000214565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6200023f8162000200565b81146200024b57600080fd5b50565b613437806200025e6000396000f3fe6080604052600436106101095760003560e01c806359c0704011610095578063b2bf2b8f11610064578063b2bf2b8f1461039c578063c06bcf16146103c5578063e741314a146103ee578063f2fde38b1461040a578063f65a0b3e1461043357610109565b806359c07040146102f4578063715018a6146103315780638da5cb5b14610348578063a1ad3e921461037357610109565b8063318f262a116100dc578063318f262a146101d05780633ef8faad1461020d5780633f1fe2f81461024a578063429b62e51461027557806349a764cd146102b257610109565b80630553d86d1461010e5780630609d56614610139578063067ddd1e146101555780632e59c54e14610192575b600080fd5b34801561011a57600080fd5b5061012361045c565b6040516101309190612c48565b60405180910390f35b610153600480360381019061014e91906124d0565b610482565b005b34801561016157600080fd5b5061017c60048036038101906101779190612481565b6105d5565b6040516101899190612de3565b60405180910390f35b34801561019e57600080fd5b506101b960048036038101906101b49190612445565b61072b565b6040516101c7929190612dfe565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190612314565b610743565b6040516102049190612e27565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190612445565b61074a565b6040516102419190612e27565b60405180910390f35b34801561025657600080fd5b5061025f610752565b60405161026c9190612a13565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612314565b610778565b6040516102a99190612c2d565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612409565b610798565b6040516102eb96959493929190612baa565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612314565b610871565b6040516103289190612c0b565b60405180910390f35b34801561033d57600080fd5b50610346610bbe565b005b34801561035457600080fd5b5061035d610bd2565b60405161036a9190612a13565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190612366565b610bfb565b005b3480156103a857600080fd5b506103c360048036038101906103be9190612314565b6110b1565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612314565b6111cb565b005b61040860048036038101906104039190612445565b6112ac565b005b34801561041657600080fd5b50610431600480360381019061042c9190612314565b6113f9565b005b34801561043f57600080fd5b5061045a600480360381019061045591906123cd565b61147d565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61048c8383611575565b6000610496611771565b905060003090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208560ff1681548110610519577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061055d87878585888a611779565b90508673ffffffffffffffffffffffffffffffffffffffff16637737039785836040518363ffffffff1660e01b815260040161059a929190612b81565b600060405180830381600087803b1580156105b457600080fd5b505af11580156105c8573d6000803e3d6000fd5b5050505050505050505050565b6105dd611f68565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff1681548110610659577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166316400bcd873088886040518563ffffffff1660e01b81526004016106d19493929190612a65565b604080518083038186803b1580156106e857600080fd5b505afa1580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107209190612560565b925050509392505050565b6000806107388484611813565b915091509250929050565b6000919050565b600092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b600460205281600052604060002081815481106107b457600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900465ffffffffffff169080600001601a9054906101000a900465ffffffffffff16908060010160009054906101000a900462ffffff16908060010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160179054906101000a900460ff16905086565b60606000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a4a57838290600052602060002090600202016040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160008201601a9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016001820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160179054906101000a900460ff1660ff1660ff1681525050815260200190600101906108d4565b5050505090506000815167ffffffffffffffff811115610a93577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610acc57816020015b610ab9611f8c565b815260200190600190039081610ab15790505b50905060005b82518160ff161015610bb357600080610aeb8784611813565b915091506040518060600160405280868560ff1681518110610b36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020018362ffffff1681526020018262ffffff16815250848460ff1681518110610b93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018190525050508080610bab9061305a565b915050610ad2565b508092505050919050565b610bc6611a11565b610bd06000611a8f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c05611771565b90508073ffffffffffffffffffffffffffffffffffffffff16610c26610bd2565b73ffffffffffffffffffffffffffffffffffffffff161480610c915750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790612da3565b60405180910390fd5b600082806020019051810190610ce6919061251f565b90506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600001519050600083602001519050600084604001519050600085606001519050600085805490509050600087608001516000015190506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8b5561f836040518263ffffffff1660e01b8152600401610dc29190612e42565b60206040518083038186803b158015610dda57600080fd5b505afa158015610dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e12919061233d565b9050610e21878d888888611b53565b8073ffffffffffffffffffffffffffffffffffffffff1663dbe978da8e30868d60800151602001516040518563ffffffff1660e01b8152600401610e689493929190612afd565b600060405180830381600087803b158015610e8257600080fd5b505af1158015610e96573d6000803e3d6000fd5b5050505060006040518060c001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018865ffffffffffff1681526020018765ffffffffffff1681526020018662ffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1681525090508881908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160010160006101000a81548162ffffff021916908362ffffff16021790555060808201518160010160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160176101000a81548160ff021916908360ff16021790555050507fe1103dfa4fbd359d608c216ee73adc572758f03ecc6e04c797844ee95d65d4d58e828660405161109993929190612b49565b60405180910390a15050505050505050505050505050565b60006110bb611771565b90508073ffffffffffffffffffffffffffffffffffffffff166110dc610bd2565b73ffffffffffffffffffffffffffffffffffffffff1614806111475750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612da3565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006111d5611771565b90508073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90612dc3565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6112b68282611575565b60006112c0611771565b905060003090506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff1681548110611343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061138685858484876001611779565b508473ffffffffffffffffffffffffffffffffffffffff1663fa695a97846040518263ffffffff1660e01b81526004016113c09190612a13565b600060405180830381600087803b1580156113da57600080fd5b505af11580156113ee573d6000803e3d6000fd5b505050505050505050565b611401611a11565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890612c63565b60405180910390fd5b61147a81611a8f565b50565b6000611487611771565b90508073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090612dc3565b60405180910390fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60004290506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff16815481106115f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160000160149054906101000a900465ffffffffffff1665ffffffffffff1690506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff16815481106116a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060020201600001601a9054906101000a900465ffffffffffff1665ffffffffffff169050600082141580156116df5750828211155b61171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590612d43565b60405180910390fd5b6000811461176a5780831115611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090612d03565b60405180910390fd5b5b5050505050565b600033905090565b600080849050600061178f898989898989611cbd565b90508173ffffffffffffffffffffffffffffffffffffffff16635c54cd058a898b89866040518663ffffffff1660e01b81526004016117d2959493929190612aaa565b600060405180830381600087803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b5050505080925050509695505050505050565b6000806000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff1681548110611892577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060008173ffffffffffffffffffffffffffffffffffffffff1663def040938830896040518463ffffffff1660e01b815260040161190a93929190612a2e565b60206040518083038186803b15801561192257600080fd5b505afa158015611936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195a9190612589565b905080600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208760ff16815481106119d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900462ffffff16611a029190612f19565b81945094505050509250929050565b611a19611771565b73ffffffffffffffffffffffffffffffffffffffff16611a37610bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490612d23565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890612d63565b60405180910390fd5b428365ffffffffffff1611611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290612d83565b60405180910390fd5b60008265ffffffffffff1614611c6e578265ffffffffffff168265ffffffffffff1611611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612c83565b60405180910390fd5b5b60008162ffffff1611611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90612ce3565b60405180910390fd5b5050505050565b60008084905060008173ffffffffffffffffffffffffffffffffffffffff1663ccb56e178a898b896040518563ffffffff1660e01b8152600401611d049493929190612a65565b60206040518083038186803b158015611d1c57600080fd5b505afa158015611d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d549190612589565b905060008162ffffff1611611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590612ca3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663def040938b8a8c6040518463ffffffff1660e01b8152600401611ddd93929190612a2e565b60206040518083038186803b158015611df557600080fd5b505afa158015611e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2d9190612589565b9050600081600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208b60ff1681548110611eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900462ffffff16611ed79190612f19565b905060008162ffffff1611611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890612cc3565b60405180910390fd5b60008362ffffff168762ffffff1611611f3a5786611f3c565b835b90508162ffffff168162ffffff1611611f555780611f57565b815b955050505050509695505050505050565b6040518060400160405280600062ffffff168152602001600062ffffff1681525090565b6040518060600160405280611f9f611fbd565b8152602001600062ffffff168152602001600062ffffff1681525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff168152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff1681525090565b600061204a61204584612e82565b612e5d565b90508281526020810184848401111561206257600080fd5b61206d848285612fe7565b509392505050565b600061208861208384612e82565b612e5d565b9050828152602081018484840111156120a057600080fd5b6120ab848285612ff6565b509392505050565b6000813590506120c281613377565b92915050565b6000815190506120d781613377565b92915050565b6000813590506120ec8161338e565b92915050565b600082601f83011261210357600080fd5b8135612113848260208601612037565b91505092915050565b600082601f83011261212d57600080fd5b815161213d848260208601612075565b91505092915050565b600060a0828403121561215857600080fd5b61216260a0612e5d565b90506000612172848285016120c8565b6000830152506020612186848285016122d5565b602083015250604061219a848285016122d5565b60408301525060606121ae848285016122ab565b606083015250608082015167ffffffffffffffff8111156121ce57600080fd5b6121da848285016121e6565b60808301525092915050565b6000604082840312156121f857600080fd5b6122026040612e5d565b90506000612212848285016122ff565b600083015250602082015167ffffffffffffffff81111561223257600080fd5b61223e8482850161211c565b60208301525092915050565b60006040828403121561225c57600080fd5b6122666040612e5d565b90506000612276848285016122ab565b600083015250602061228a848285016122ab565b60208301525092915050565b6000813590506122a5816133a5565b92915050565b6000815190506122ba816133a5565b92915050565b6000813590506122cf816133bc565b92915050565b6000815190506122e4816133d3565b92915050565b6000813590506122f9816133ea565b92915050565b60008151905061230e816133ea565b92915050565b60006020828403121561232657600080fd5b6000612334848285016120b3565b91505092915050565b60006020828403121561234f57600080fd5b600061235d848285016120c8565b91505092915050565b60008060006060848603121561237b57600080fd5b6000612389868287016120b3565b935050602061239a868287016120b3565b925050604084013567ffffffffffffffff8111156123b757600080fd5b6123c3868287016120f2565b9150509250925092565b600080604083850312156123e057600080fd5b60006123ee858286016120b3565b92505060206123ff858286016120dd565b9150509250929050565b6000806040838503121561241c57600080fd5b600061242a858286016120b3565b925050602061243b858286016122c0565b9150509250929050565b6000806040838503121561245857600080fd5b6000612466858286016120b3565b9250506020612477858286016122ea565b9150509250929050565b60008060006060848603121561249657600080fd5b60006124a4868287016120b3565b93505060206124b5868287016122ea565b92505060406124c6868287016120b3565b9150509250925092565b6000806000606084860312156124e557600080fd5b60006124f3868287016120b3565b9350506020612504868287016122ea565b925050604061251586828701612296565b9150509250925092565b60006020828403121561253157600080fd5b600082015167ffffffffffffffff81111561254b57600080fd5b61255784828501612146565b91505092915050565b60006040828403121561257257600080fd5b60006125808482850161224a565b91505092915050565b60006020828403121561259b57600080fd5b60006125a9848285016122ab565b91505092915050565b60006125be8383612938565b6101008301905092915050565b6125d481612f4d565b82525050565b6125e381612f4d565b82525050565b60006125f482612ec3565b6125fe8185612ee6565b935061260983612eb3565b8060005b8381101561263a57815161262188826125b2565b975061262c83612ed9565b92505060018101905061260d565b5085935050505092915050565b61265081612f5f565b82525050565b600061266182612ece565b61266b8185612ef7565b935061267b818560208601612ff6565b612684816130e2565b840191505092915050565b61269881612fc3565b82525050565b60006126ab602683612f08565b91506126b6826130f3565b604082019050919050565b60006126ce602183612f08565b91506126d982613142565b604082019050919050565b60006126f1601283612f08565b91506126fc82613191565b602082019050919050565b6000612714600883612f08565b915061271f826131ba565b602082019050919050565b6000612737601b83612f08565b9150612742826131e3565b602082019050919050565b600061275a600a83612f08565b91506127658261320c565b602082019050919050565b600061277d602083612f08565b915061278882613235565b602082019050919050565b60006127a0601483612f08565b91506127ab8261325e565b602082019050919050565b60006127c3601283612f08565b91506127ce82613287565b602082019050919050565b60006127e6601383612f08565b91506127f1826132b0565b602082019050919050565b6000612809603083612f08565b9150612814826132d9565b604082019050919050565b600061282c602a83612f08565b915061283782613328565b604082019050919050565b60c08201600082015161285860008501826125cb565b50602082015161286b60208501826129d7565b50604082015161287e60408501826129d7565b50606082015161289160608501826129aa565b5060808201516128a460808501826125cb565b5060a08201516128b760a08501826129f5565b50505050565b60c0820160008201516128d360008501826125cb565b5060208201516128e660208501826129d7565b5060408201516128f960408501826129d7565b50606082015161290c60608501826129aa565b50608082015161291f60808501826125cb565b5060a082015161293260a08501826129f5565b50505050565b6101008201600082015161294f6000850182612842565b50602082015161296260c08501826129aa565b50604082015161297560e08501826129aa565b50505050565b60408201600082015161299160008501826129aa565b5060208201516129a460208501826129aa565b50505050565b6129b381612f8b565b82525050565b6129c281612f8b565b82525050565b6129d181612f9a565b82525050565b6129e081612fa4565b82525050565b6129ef81612fa4565b82525050565b6129fe81612fb6565b82525050565b612a0d81612fb6565b82525050565b6000602082019050612a2860008301846125da565b92915050565b6000606082019050612a4360008301866125da565b612a5060208301856125da565b612a5d6040830184612a04565b949350505050565b6000608082019050612a7a60008301876125da565b612a8760208301866125da565b612a946040830185612a04565b612aa160608301846125da565b95945050505050565b600060a082019050612abf60008301886125da565b612acc60208301876125da565b612ad96040830186612a04565b612ae660608301856125da565b612af360808301846129b9565b9695505050505050565b6000608082019050612b1260008301876125da565b612b1f60208301866125da565b612b2c6040830185612a04565b8181036060830152612b3e8184612656565b905095945050505050565b600061010082019050612b5f60008301866125da565b612b6c60208301856128bd565b612b7960e0830184612a04565b949350505050565b6000604082019050612b9660008301856125da565b612ba360208301846129b9565b9392505050565b600060c082019050612bbf60008301896125da565b612bcc60208301886129e6565b612bd960408301876129e6565b612be660608301866129b9565b612bf360808301856125da565b612c0060a0830184612a04565b979650505050505050565b60006020820190508181036000830152612c2581846125e9565b905092915050565b6000602082019050612c426000830184612647565b92915050565b6000602082019050612c5d600083018461268f565b92915050565b60006020820190508181036000830152612c7c8161269e565b9050919050565b60006020820190508181036000830152612c9c816126c1565b9050919050565b60006020820190508181036000830152612cbc816126e4565b9050919050565b60006020820190508181036000830152612cdc81612707565b9050919050565b60006020820190508181036000830152612cfc8161272a565b9050919050565b60006020820190508181036000830152612d1c8161274d565b9050919050565b60006020820190508181036000830152612d3c81612770565b9050919050565b60006020820190508181036000830152612d5c81612793565b9050919050565b60006020820190508181036000830152612d7c816127b6565b9050919050565b60006020820190508181036000830152612d9c816127d9565b9050919050565b60006020820190508181036000830152612dbc816127fc565b9050919050565b60006020820190508181036000830152612ddc8161281f565b9050919050565b6000604082019050612df8600083018461297b565b92915050565b6000604082019050612e1360008301856129b9565b612e2060208301846129b9565b9392505050565b6000602082019050612e3c60008301846129c8565b92915050565b6000602082019050612e576000830184612a04565b92915050565b6000612e67612e78565b9050612e738282613029565b919050565b6000604051905090565b600067ffffffffffffffff821115612e9d57612e9c6130b3565b5b612ea6826130e2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f2482612f8b565b9150612f2f83612f8b565b925082821015612f4257612f41613084565b5b828203905092915050565b6000612f5882612f6b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600065ffffffffffff82169050919050565b600060ff82169050919050565b6000612fce82612fd5565b9050919050565b6000612fe082612f6b565b9050919050565b82818337600083830152505050565b60005b83811015613014578082015181840152602081019050612ff9565b83811115613023576000848401525b50505050565b613032826130e2565b810181811067ffffffffffffffff82111715613051576130506130b3565b5b80604052505050565b600061306582612fb6565b915060ff82141561307957613078613084565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f656e6454696d65206d757374206265206772656174657220737461727454696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f206d696e747320617661696c61626c650000000000000000000000000000600082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f6d6178537570706c79206d757374206265206772656174657220300000000000600082015250565b7f6d696e7420656e64656400000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6d696e74206e6f74207374617274656420796574000000000000000000000000600082015250565b7f696e76616c696420636f6c6c656374696f6e0000000000000000000000000000600082015250565b7f737461727454696d6520746f6f206561726c7900000000000000000000000000600082015250565b7f45636c697073654163636573733a2063616c6c6572206973206e6f742074686560008201527f206f776e6572206e6f722061646d696e00000000000000000000000000000000602082015250565b7f45636c697073654163636573733a2063616c6c6572206973206e6f742065636c60008201527f697073652061646d696e00000000000000000000000000000000000000000000602082015250565b61338081612f4d565b811461338b57600080fd5b50565b61339781612f5f565b81146133a257600080fd5b50565b6133ae81612f8b565b81146133b957600080fd5b50565b6133c581612f9a565b81146133d057600080fd5b50565b6133dc81612fa4565b81146133e757600080fd5b50565b6133f381612fb6565b81146133fe57600080fd5b5056fea2646970667358221220a9b24212727fbc60fb83ff70ced940b57c0100685bccd0a29abfeab18e4e680664736f6c6343000804003300000000000000000000000071aa097b3b9dab88a4b755daf6bb581ca0aed4ca
Deployed Bytecode
0x6080604052600436106101095760003560e01c806359c0704011610095578063b2bf2b8f11610064578063b2bf2b8f1461039c578063c06bcf16146103c5578063e741314a146103ee578063f2fde38b1461040a578063f65a0b3e1461043357610109565b806359c07040146102f4578063715018a6146103315780638da5cb5b14610348578063a1ad3e921461037357610109565b8063318f262a116100dc578063318f262a146101d05780633ef8faad1461020d5780633f1fe2f81461024a578063429b62e51461027557806349a764cd146102b257610109565b80630553d86d1461010e5780630609d56614610139578063067ddd1e146101555780632e59c54e14610192575b600080fd5b34801561011a57600080fd5b5061012361045c565b6040516101309190612c48565b60405180910390f35b610153600480360381019061014e91906124d0565b610482565b005b34801561016157600080fd5b5061017c60048036038101906101779190612481565b6105d5565b6040516101899190612de3565b60405180910390f35b34801561019e57600080fd5b506101b960048036038101906101b49190612445565b61072b565b6040516101c7929190612dfe565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190612314565b610743565b6040516102049190612e27565b60405180910390f35b34801561021957600080fd5b50610234600480360381019061022f9190612445565b61074a565b6040516102419190612e27565b60405180910390f35b34801561025657600080fd5b5061025f610752565b60405161026c9190612a13565b60405180910390f35b34801561028157600080fd5b5061029c60048036038101906102979190612314565b610778565b6040516102a99190612c2d565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612409565b610798565b6040516102eb96959493929190612baa565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612314565b610871565b6040516103289190612c0b565b60405180910390f35b34801561033d57600080fd5b50610346610bbe565b005b34801561035457600080fd5b5061035d610bd2565b60405161036a9190612a13565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190612366565b610bfb565b005b3480156103a857600080fd5b506103c360048036038101906103be9190612314565b6110b1565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612314565b6111cb565b005b61040860048036038101906104039190612445565b6112ac565b005b34801561041657600080fd5b50610431600480360381019061042c9190612314565b6113f9565b005b34801561043f57600080fd5b5061045a600480360381019061045591906123cd565b61147d565b005b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61048c8383611575565b6000610496611771565b905060003090506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208560ff1681548110610519577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600061055d87878585888a611779565b90508673ffffffffffffffffffffffffffffffffffffffff16637737039785836040518363ffffffff1660e01b815260040161059a929190612b81565b600060405180830381600087803b1580156105b457600080fd5b505af11580156105c8573d6000803e3d6000fd5b5050505050505050505050565b6105dd611f68565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff1681548110610659577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166316400bcd873088886040518563ffffffff1660e01b81526004016106d19493929190612a65565b604080518083038186803b1580156106e857600080fd5b505afa1580156106fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107209190612560565b925050509392505050565b6000806107388484611813565b915091509250929050565b6000919050565b600092915050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915054906101000a900460ff1681565b600460205281600052604060002081815481106107b457600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900465ffffffffffff169080600001601a9054906101000a900465ffffffffffff16908060010160009054906101000a900462ffffff16908060010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160179054906101000a900460ff16905086565b60606000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610a4a57838290600052602060002090600202016040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff16815260200160008201601a9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020016001820160009054906101000a900462ffffff1662ffffff1662ffffff1681526020016001820160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160179054906101000a900460ff1660ff1660ff1681525050815260200190600101906108d4565b5050505090506000815167ffffffffffffffff811115610a93577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610acc57816020015b610ab9611f8c565b815260200190600190039081610ab15790505b50905060005b82518160ff161015610bb357600080610aeb8784611813565b915091506040518060600160405280868560ff1681518110610b36577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015181526020018362ffffff1681526020018262ffffff16815250848460ff1681518110610b93577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018190525050508080610bab9061305a565b915050610ad2565b508092505050919050565b610bc6611a11565b610bd06000611a8f565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000610c05611771565b90508073ffffffffffffffffffffffffffffffffffffffff16610c26610bd2565b73ffffffffffffffffffffffffffffffffffffffff161480610c915750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790612da3565b60405180910390fd5b600082806020019051810190610ce6919061251f565b90506000600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600082600001519050600083602001519050600084604001519050600085606001519050600085805490509050600087608001516000015190506000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8b5561f836040518263ffffffff1660e01b8152600401610dc29190612e42565b60206040518083038186803b158015610dda57600080fd5b505afa158015610dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e12919061233d565b9050610e21878d888888611b53565b8073ffffffffffffffffffffffffffffffffffffffff1663dbe978da8e30868d60800151602001516040518563ffffffff1660e01b8152600401610e689493929190612afd565b600060405180830381600087803b158015610e8257600080fd5b505af1158015610e96573d6000803e3d6000fd5b5050505060006040518060c001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018865ffffffffffff1681526020018765ffffffffffff1681526020018662ffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1681525090508881908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001601a6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160010160006101000a81548162ffffff021916908362ffffff16021790555060808201518160010160036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160176101000a81548160ff021916908360ff16021790555050507fe1103dfa4fbd359d608c216ee73adc572758f03ecc6e04c797844ee95d65d4d58e828660405161109993929190612b49565b60405180910390a15050505050505050505050505050565b60006110bb611771565b90508073ffffffffffffffffffffffffffffffffffffffff166110dc610bd2565b73ffffffffffffffffffffffffffffffffffffffff1614806111475750600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117d90612da3565b60405180910390fd5b81600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60006111d5611771565b90508073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90612dc3565b60405180910390fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6112b68282611575565b60006112c0611771565b905060003090506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff1681548110611343577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905061138685858484876001611779565b508473ffffffffffffffffffffffffffffffffffffffff1663fa695a97846040518263ffffffff1660e01b81526004016113c09190612a13565b600060405180830381600087803b1580156113da57600080fd5b505af11580156113ee573d6000803e3d6000fd5b505050505050505050565b611401611a11565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890612c63565b60405180910390fd5b61147a81611a8f565b50565b6000611487611771565b90508073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090612dc3565b60405180910390fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60004290506000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208360ff16815481106115f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160000160149054906101000a900465ffffffffffff1665ffffffffffff1690506000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff16815481106116a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000209060020201600001601a9054906101000a900465ffffffffffff1665ffffffffffff169050600082141580156116df5750828211155b61171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590612d43565b60405180910390fd5b6000811461176a5780831115611769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176090612d03565b60405180910390fd5b5b5050505050565b600033905090565b600080849050600061178f898989898989611cbd565b90508173ffffffffffffffffffffffffffffffffffffffff16635c54cd058a898b89866040518663ffffffff1660e01b81526004016117d2959493929190612aaa565b600060405180830381600087803b1580156117ec57600080fd5b505af1158015611800573d6000803e3d6000fd5b5050505080925050509695505050505050565b6000806000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208460ff1681548110611892577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160039054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600081905060008173ffffffffffffffffffffffffffffffffffffffff1663def040938830896040518463ffffffff1660e01b815260040161190a93929190612a2e565b60206040518083038186803b15801561192257600080fd5b505afa158015611936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195a9190612589565b905080600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208760ff16815481106119d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900462ffffff16611a029190612f19565b81945094505050509250929050565b611a19611771565b73ffffffffffffffffffffffffffffffffffffffff16611a37610bd2565b73ffffffffffffffffffffffffffffffffffffffff1614611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490612d23565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb890612d63565b60405180910390fd5b428365ffffffffffff1611611c0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0290612d83565b60405180910390fd5b60008265ffffffffffff1614611c6e578265ffffffffffff168265ffffffffffff1611611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612c83565b60405180910390fd5b5b60008162ffffff1611611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90612ce3565b60405180910390fd5b5050505050565b60008084905060008173ffffffffffffffffffffffffffffffffffffffff1663ccb56e178a898b896040518563ffffffff1660e01b8152600401611d049493929190612a65565b60206040518083038186803b158015611d1c57600080fd5b505afa158015611d30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d549190612589565b905060008162ffffff1611611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590612ca3565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663def040938b8a8c6040518463ffffffff1660e01b8152600401611ddd93929190612a2e565b60206040518083038186803b158015611df557600080fd5b505afa158015611e09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2d9190612589565b9050600081600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208b60ff1681548110611eac577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906002020160010160009054906101000a900462ffffff16611ed79190612f19565b905060008162ffffff1611611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890612cc3565b60405180910390fd5b60008362ffffff168762ffffff1611611f3a5786611f3c565b835b90508162ffffff168162ffffff1611611f555780611f57565b815b955050505050509695505050505050565b6040518060400160405280600062ffffff168152602001600062ffffff1681525090565b6040518060600160405280611f9f611fbd565b8152602001600062ffffff168152602001600062ffffff1681525090565b6040518060c00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600065ffffffffffff168152602001600065ffffffffffff168152602001600062ffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff1681525090565b600061204a61204584612e82565b612e5d565b90508281526020810184848401111561206257600080fd5b61206d848285612fe7565b509392505050565b600061208861208384612e82565b612e5d565b9050828152602081018484840111156120a057600080fd5b6120ab848285612ff6565b509392505050565b6000813590506120c281613377565b92915050565b6000815190506120d781613377565b92915050565b6000813590506120ec8161338e565b92915050565b600082601f83011261210357600080fd5b8135612113848260208601612037565b91505092915050565b600082601f83011261212d57600080fd5b815161213d848260208601612075565b91505092915050565b600060a0828403121561215857600080fd5b61216260a0612e5d565b90506000612172848285016120c8565b6000830152506020612186848285016122d5565b602083015250604061219a848285016122d5565b60408301525060606121ae848285016122ab565b606083015250608082015167ffffffffffffffff8111156121ce57600080fd5b6121da848285016121e6565b60808301525092915050565b6000604082840312156121f857600080fd5b6122026040612e5d565b90506000612212848285016122ff565b600083015250602082015167ffffffffffffffff81111561223257600080fd5b61223e8482850161211c565b60208301525092915050565b60006040828403121561225c57600080fd5b6122666040612e5d565b90506000612276848285016122ab565b600083015250602061228a848285016122ab565b60208301525092915050565b6000813590506122a5816133a5565b92915050565b6000815190506122ba816133a5565b92915050565b6000813590506122cf816133bc565b92915050565b6000815190506122e4816133d3565b92915050565b6000813590506122f9816133ea565b92915050565b60008151905061230e816133ea565b92915050565b60006020828403121561232657600080fd5b6000612334848285016120b3565b91505092915050565b60006020828403121561234f57600080fd5b600061235d848285016120c8565b91505092915050565b60008060006060848603121561237b57600080fd5b6000612389868287016120b3565b935050602061239a868287016120b3565b925050604084013567ffffffffffffffff8111156123b757600080fd5b6123c3868287016120f2565b9150509250925092565b600080604083850312156123e057600080fd5b60006123ee858286016120b3565b92505060206123ff858286016120dd565b9150509250929050565b6000806040838503121561241c57600080fd5b600061242a858286016120b3565b925050602061243b858286016122c0565b9150509250929050565b6000806040838503121561245857600080fd5b6000612466858286016120b3565b9250506020612477858286016122ea565b9150509250929050565b60008060006060848603121561249657600080fd5b60006124a4868287016120b3565b93505060206124b5868287016122ea565b92505060406124c6868287016120b3565b9150509250925092565b6000806000606084860312156124e557600080fd5b60006124f3868287016120b3565b9350506020612504868287016122ea565b925050604061251586828701612296565b9150509250925092565b60006020828403121561253157600080fd5b600082015167ffffffffffffffff81111561254b57600080fd5b61255784828501612146565b91505092915050565b60006040828403121561257257600080fd5b60006125808482850161224a565b91505092915050565b60006020828403121561259b57600080fd5b60006125a9848285016122ab565b91505092915050565b60006125be8383612938565b6101008301905092915050565b6125d481612f4d565b82525050565b6125e381612f4d565b82525050565b60006125f482612ec3565b6125fe8185612ee6565b935061260983612eb3565b8060005b8381101561263a57815161262188826125b2565b975061262c83612ed9565b92505060018101905061260d565b5085935050505092915050565b61265081612f5f565b82525050565b600061266182612ece565b61266b8185612ef7565b935061267b818560208601612ff6565b612684816130e2565b840191505092915050565b61269881612fc3565b82525050565b60006126ab602683612f08565b91506126b6826130f3565b604082019050919050565b60006126ce602183612f08565b91506126d982613142565b604082019050919050565b60006126f1601283612f08565b91506126fc82613191565b602082019050919050565b6000612714600883612f08565b915061271f826131ba565b602082019050919050565b6000612737601b83612f08565b9150612742826131e3565b602082019050919050565b600061275a600a83612f08565b91506127658261320c565b602082019050919050565b600061277d602083612f08565b915061278882613235565b602082019050919050565b60006127a0601483612f08565b91506127ab8261325e565b602082019050919050565b60006127c3601283612f08565b91506127ce82613287565b602082019050919050565b60006127e6601383612f08565b91506127f1826132b0565b602082019050919050565b6000612809603083612f08565b9150612814826132d9565b604082019050919050565b600061282c602a83612f08565b915061283782613328565b604082019050919050565b60c08201600082015161285860008501826125cb565b50602082015161286b60208501826129d7565b50604082015161287e60408501826129d7565b50606082015161289160608501826129aa565b5060808201516128a460808501826125cb565b5060a08201516128b760a08501826129f5565b50505050565b60c0820160008201516128d360008501826125cb565b5060208201516128e660208501826129d7565b5060408201516128f960408501826129d7565b50606082015161290c60608501826129aa565b50608082015161291f60808501826125cb565b5060a082015161293260a08501826129f5565b50505050565b6101008201600082015161294f6000850182612842565b50602082015161296260c08501826129aa565b50604082015161297560e08501826129aa565b50505050565b60408201600082015161299160008501826129aa565b5060208201516129a460208501826129aa565b50505050565b6129b381612f8b565b82525050565b6129c281612f8b565b82525050565b6129d181612f9a565b82525050565b6129e081612fa4565b82525050565b6129ef81612fa4565b82525050565b6129fe81612fb6565b82525050565b612a0d81612fb6565b82525050565b6000602082019050612a2860008301846125da565b92915050565b6000606082019050612a4360008301866125da565b612a5060208301856125da565b612a5d6040830184612a04565b949350505050565b6000608082019050612a7a60008301876125da565b612a8760208301866125da565b612a946040830185612a04565b612aa160608301846125da565b95945050505050565b600060a082019050612abf60008301886125da565b612acc60208301876125da565b612ad96040830186612a04565b612ae660608301856125da565b612af360808301846129b9565b9695505050505050565b6000608082019050612b1260008301876125da565b612b1f60208301866125da565b612b2c6040830185612a04565b8181036060830152612b3e8184612656565b905095945050505050565b600061010082019050612b5f60008301866125da565b612b6c60208301856128bd565b612b7960e0830184612a04565b949350505050565b6000604082019050612b9660008301856125da565b612ba360208301846129b9565b9392505050565b600060c082019050612bbf60008301896125da565b612bcc60208301886129e6565b612bd960408301876129e6565b612be660608301866129b9565b612bf360808301856125da565b612c0060a0830184612a04565b979650505050505050565b60006020820190508181036000830152612c2581846125e9565b905092915050565b6000602082019050612c426000830184612647565b92915050565b6000602082019050612c5d600083018461268f565b92915050565b60006020820190508181036000830152612c7c8161269e565b9050919050565b60006020820190508181036000830152612c9c816126c1565b9050919050565b60006020820190508181036000830152612cbc816126e4565b9050919050565b60006020820190508181036000830152612cdc81612707565b9050919050565b60006020820190508181036000830152612cfc8161272a565b9050919050565b60006020820190508181036000830152612d1c8161274d565b9050919050565b60006020820190508181036000830152612d3c81612770565b9050919050565b60006020820190508181036000830152612d5c81612793565b9050919050565b60006020820190508181036000830152612d7c816127b6565b9050919050565b60006020820190508181036000830152612d9c816127d9565b9050919050565b60006020820190508181036000830152612dbc816127fc565b9050919050565b60006020820190508181036000830152612ddc8161281f565b9050919050565b6000604082019050612df8600083018461297b565b92915050565b6000604082019050612e1360008301856129b9565b612e2060208301846129b9565b9392505050565b6000602082019050612e3c60008301846129c8565b92915050565b6000602082019050612e576000830184612a04565b92915050565b6000612e67612e78565b9050612e738282613029565b919050565b6000604051905090565b600067ffffffffffffffff821115612e9d57612e9c6130b3565b5b612ea6826130e2565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612f2482612f8b565b9150612f2f83612f8b565b925082821015612f4257612f41613084565b5b828203905092915050565b6000612f5882612f6b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062ffffff82169050919050565b6000819050919050565b600065ffffffffffff82169050919050565b600060ff82169050919050565b6000612fce82612fd5565b9050919050565b6000612fe082612f6b565b9050919050565b82818337600083830152505050565b60005b83811015613014578082015181840152602081019050612ff9565b83811115613023576000848401525b50505050565b613032826130e2565b810181811067ffffffffffffffff82111715613051576130506130b3565b5b80604052505050565b600061306582612fb6565b915060ff82141561307957613078613084565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f656e6454696d65206d757374206265206772656174657220737461727454696d60008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f206d696e747320617661696c61626c650000000000000000000000000000600082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f6d6178537570706c79206d757374206265206772656174657220300000000000600082015250565b7f6d696e7420656e64656400000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f6d696e74206e6f74207374617274656420796574000000000000000000000000600082015250565b7f696e76616c696420636f6c6c656374696f6e0000000000000000000000000000600082015250565b7f737461727454696d6520746f6f206561726c7900000000000000000000000000600082015250565b7f45636c697073654163636573733a2063616c6c6572206973206e6f742074686560008201527f206f776e6572206e6f722061646d696e00000000000000000000000000000000602082015250565b7f45636c697073654163636573733a2063616c6c6572206973206e6f742065636c60008201527f697073652061646d696e00000000000000000000000000000000000000000000602082015250565b61338081612f4d565b811461338b57600080fd5b50565b61339781612f5f565b81146133a257600080fd5b50565b6133ae81612f8b565b81146133b957600080fd5b50565b6133c581612f9a565b81146133d057600080fd5b50565b6133dc81612fa4565b81146133e757600080fd5b50565b6133f381612fb6565b81146133fe57600080fd5b5056fea2646970667358221220a9b24212727fbc60fb83ff70ced940b57c0100685bccd0a29abfeab18e4e680664736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000071aa097b3b9dab88a4b755daf6bb581ca0aed4ca
-----Decoded View---------------
Arg [0] : eclipse_ (address): 0x71AA097B3B9dab88a4b755dAF6bb581Ca0aeD4CA
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000071aa097b3b9dab88a4b755daf6bb581ca0aed4ca
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.