编译器
0.8.17+commit.8df45f5f
文件 1 的 62:AccessControl.sol
文件 2 的 62:AccessControlEnumerable.sol
文件 3 的 62:AccessControlPausable.sol
文件 5 的 62:BaseSellable.sol
文件 6 的 62:BaseTokenURI.sol
文件 7 的 62:BytecodeStorage.sol
文件 8 的 62:Bytes32Strings.sol
文件 11 的 62:DefaultOperatorFilterer.sol
文件 17 的 62:ERC721ACommon.sol
文件 18 的 62:ERC721_PackedHashSeed.sol
文件 19 的 62:EntropyOracle.sol
文件 20 的 62:EntropyOracleV2.sol
文件 21 的 62:EnumerableSet.sol
文件 22 的 62:EvolvingPixels.sol
pragma solidity >=0.8.17;
import {Strings} from "openzeppelin-contracts/utils/Strings.sol";
import {IERC721Metadata} from "openzeppelin-contracts/token/ERC721/extensions/IERC721Metadata.sol";
import {GenArt721CoreV3_Engine_Flex_PROOF} from "artblocks-contracts/GenArt721CoreV3_Engine_Flex_PROOF.sol";
import {AccessControlEnumerable, ERC721ACommon} from "ethier/erc721/ERC721ACommon.sol";
import {ERC721A, BaseTokenURI, ERC721ACommonBaseTokenURI} from "ethier/erc721/BaseTokenURI.sol";
import {OperatorFilterOS} from "ethier/erc721/OperatorFilterOS.sol";
import {ERC4906} from "ethier/erc721/ERC4906.sol";
import {SellableERC721ACommon} from "proof/sellers/sellable/SellableERC721ACommon.sol";
import {Seller} from "proof/sellers/base/Seller.sol";
import {IEntropyOracleV2} from "proof/entropy/IEntropyOracleV2.sol";
import {artblocksTokenID} from "proof/artblocks/TokenIDMapping.sol";
import {IGenArt721CoreContractV3_Mintable} from "proof/artblocks/IGenArt721CoreContractV3_Mintable.sol";
import {SettablePrimaryRevenueForwarder} from "./PrimaryRevenueForwarder.sol";
import {ProjectsConfig} from "./ProjectsConfig.sol";
import {TokenInfoManager} from "./TokenInfoManager.sol";
import {Randomiser} from "./Randomiser.sol";
contract EvolvingPixels is
SellableERC721ACommon,
SettablePrimaryRevenueForwarder,
TokenInfoManager,
ERC721ACommonBaseTokenURI,
OperatorFilterOS,
Randomiser,
ProjectsConfig
{
error ExceedingMaxTotalSupply(uint256 num, uint256 numLeft);
error DontGetGreedy();
enum Stage {
Closed,
TokenGated,
SignatureGated,
Public
}
GenArt721CoreV3_Engine_Flex_PROOF public immutable flex;
IGenArt721CoreContractV3_Mintable public immutable flexMintGateway;
Stage public stage;
bool internal _reserveMinted;
uint8[_NUM_PROJECTS] public numPurchasedPerProject;
mapping(Stage => Seller) public stageSellers;
struct ConstructorParams {
address admin;
address steerer;
address payable primaryReceiver;
address payable secondaryReceiver;
string baseTokenURI;
IEntropyOracleV2 entropyOracle;
GenArt721CoreV3_Engine_Flex_PROOF flex;
IGenArt721CoreContractV3_Mintable flexMintGateway;
}
constructor(ConstructorParams memory params)
ERC721ACommon(
params.admin,
params.steerer,
"PROOF Curated: Evolving Pixels",
"EVOPIX",
params.secondaryReceiver,
750
)
BaseTokenURI(params.baseTokenURI)
Randomiser(params.entropyOracle)
{
flex = params.flex;
flexMintGateway = params.flexMintGateway;
_setPrimaryReceiver(params.primaryReceiver);
assert(maxTotalSupply == 891);
}
function _handleSale(address to, uint64 num, bytes calldata data) internal virtual override {
if (num + _totalMinted() > maxTotalSupply) {
revert ExceedingMaxTotalSupply(num, maxTotalSupply - _totalMinted());
}
_forwardRevenue(msg.value);
_commitAndRequestEntropy(_nextTokenId(), num);
SellableERC721ACommon._handleSale(to, num, data);
}
function _assignProject(uint256 tokenId, uint8 projectId) internal virtual override {
uint8 edition = numPurchasedPerProject[projectId]++;
if (_isLongformProject(projectId)) {
flexMintGateway.mint_Ecf(address(this), _artblocksProjectId(projectId), address(this));
}
_setTokenInfo(tokenId, projectId, edition);
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
TokenInfo memory info = _tokenInfo(tokenId);
if (!info.revealed) {
return string.concat(_baseURI(), "placeholder/", Strings.toString(tokenId));
}
if (_projectType(info.projectId) == ProjectType.Curated) {
return string.concat(_baseURI(), "curated/", Strings.toString(tokenId));
}
return flex.tokenURI(artblocksTokenID(_artblocksProjectId(info.projectId), info.edition));
}
function tokenIdsByProjectId(uint8 projectId) external view returns (uint256[] memory) {
uint256[] memory tokenIds = new uint256[](numPurchasedPerProject[projectId]);
uint256 cursor;
uint256 num = totalSupply();
for (uint256 i = 0; i < num; ++i) {
if (_tokenInfo(i).projectId == projectId) {
tokenIds[cursor++] = i;
}
}
return tokenIds;
}
function ownerMint(address to) external onlyRole(DEFAULT_STEERING_ROLE) {
if (_reserveMinted) {
revert DontGetGreedy();
}
_reserveMinted = true;
uint256 tokenId = _nextTokenId();
_mint(to, _NUM_PROJECTS);
for (uint8 projectId = 0; projectId < _NUM_PROJECTS; ++projectId) {
_assignProject(tokenId, projectId);
++tokenId;
}
}
function setStageSeller(Stage stage_, Seller seller) external onlyRole(DEFAULT_STEERING_ROLE) {
stageSellers[stage_] = seller;
}
function setEntropyOracle(IEntropyOracleV2 newOracle) external onlyRole(DEFAULT_STEERING_ROLE) {
entropyOracle = newOracle;
}
function setStage(Stage stage_) external onlyRole(DEFAULT_STEERING_ROLE) {
_setStage(stage_);
}
function _setStage(Stage stage_) internal {
stage = stage_;
_revokeAllSellers();
address seller = address(stageSellers[stage_]);
if (seller != address(0)) {
_grantRole(AUTHORISED_SELLER_ROLE, seller);
}
}
function _isLongformToken(uint256 tokenId) internal view virtual returns (bool) {
return _isLongformProject(_tokenInfo(tokenId).projectId);
}
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(ERC4906, ERC721ACommon, AccessControlEnumerable, ERC721ACommonBaseTokenURI, SellableERC721ACommon)
returns (bool)
{
return ERC721ACommonBaseTokenURI.supportsInterface(interfaceId) || ERC4906.supportsInterface(interfaceId);
}
function _baseURI() internal view virtual override(ERC721A, ERC721ACommonBaseTokenURI) returns (string memory) {
return ERC721ACommonBaseTokenURI._baseURI();
}
function setApprovalForAll(address operator, bool approved) public virtual override(ERC721A, OperatorFilterOS) {
ERC721A.setApprovalForAll(operator, approved);
}
function approve(address operator, uint256 tokenId) public payable virtual override(ERC721A, OperatorFilterOS) {
if (_isLongformToken(tokenId)) {
ERC721A.approve(operator, tokenId);
} else {
OperatorFilterOS.approve(operator, tokenId);
}
}
function transferFrom(address from, address to, uint256 tokenId)
public
payable
virtual
override(ERC721A, OperatorFilterOS)
{
if (_isLongformToken(tokenId)) {
ERC721A.transferFrom(from, to, tokenId);
} else {
OperatorFilterOS.transferFrom(from, to, tokenId);
}
}
function safeTransferFrom(address from, address to, uint256 tokenId)
public
payable
virtual
override(ERC721A, OperatorFilterOS)
{
if (_isLongformToken(tokenId)) {
ERC721A.safeTransferFrom(from, to, tokenId);
} else {
OperatorFilterOS.safeTransferFrom(from, to, tokenId);
}
}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
public
payable
virtual
override(ERC721A, OperatorFilterOS)
{
if (_isLongformToken(tokenId)) {
ERC721A.safeTransferFrom(from, to, tokenId, data);
} else {
OperatorFilterOS.safeTransferFrom(from, to, tokenId, data);
}
}
function _projectSizes() internal pure virtual override(ProjectsConfig, Randomiser) returns (uint256[] memory) {
return ProjectsConfig._projectSizes();
}
}
文件 23 的 62:GenArt721CoreV3_Engine_Flex_PROOF.sol
文件 24 的 62:IAccessControl.sol
文件 25 的 62:IAccessControlEnumerable.sol
文件 26 的 62:IAdminACLV0.sol
文件 27 的 62:IDependencyRegistryCompatibleV0.sol
文件 32 的 62:IERC721Metadata.sol
文件 33 的 62:IERC721Receiver.sol
文件 34 的 62:IEngineRegistryV0.sol
文件 35 的 62:IEntropyOracle.sol
文件 36 的 62:IEntropyOracleV2.sol
文件 37 的 62:IGenArt721CoreContractV3_Base.sol
文件 38 的 62:IGenArt721CoreContractV3_Engine.sol
文件 39 的 62:IGenArt721CoreContractV3_Engine_Flex.sol
文件 40 的 62:IGenArt721CoreContractV3_Mintable.sol
文件 42 的 62:IOperatorFilterRegistry.sol
文件 43 的 62:IRandomizerV2.sol
文件 46 的 62:NextShuffler.sol
文件 47 的 62:OperatorFilterOS.sol
文件 48 的 62:OperatorFilterer.sol
文件 52 的 62:PrimaryRevenueForwarder.sol
pragma solidity >=0.8.17;
import {Address} from "openzeppelin-contracts/utils/Address.sol";
import {AccessControlEnumerable} from "ethier/erc721/ERC721ACommon.sol";
contract PrimaryRevenueForwarder {
using Address for address payable;
address payable private _primaryReceiver;
function _setPrimaryReceiver(address payable newReceiver) internal {
_primaryReceiver = newReceiver;
}
function primaryReceiver() public view returns (address payable) {
return _primaryReceiver;
}
function _forwardRevenue(uint256 value) internal {
_primaryReceiver.sendValue(value);
}
}
contract SettablePrimaryRevenueForwarder is PrimaryRevenueForwarder, AccessControlEnumerable {
function setPrimaryReceiver(address payable newReceiver) external onlyRole(DEFAULT_STEERING_ROLE) {
_setPrimaryReceiver(newReceiver);
}
}
文件 53 的 62:ProjectsConfig.sol
pragma solidity >=0.8.17;
contract ProjectsConfig {
uint8 internal constant _NUM_LONGFORM_PROJECTS = 4;
uint8 internal constant _NUM_CURATED_PROJECTS = 6;
uint8 public constant _NUM_PROJECTS = _NUM_LONGFORM_PROJECTS + _NUM_CURATED_PROJECTS;
function artblocksProjectIds() external pure returns (uint8[_NUM_LONGFORM_PROJECTS] memory) {
return _artblocksProjectIds();
}
function projectSizes() external pure virtual returns (uint256[] memory) {
return _projectSizes();
}
function _artblocksProjectIds() internal pure virtual returns (uint8[_NUM_LONGFORM_PROJECTS] memory) {
return [1, 3, 2, 4];
}
function _projectSizes() internal pure virtual returns (uint256[] memory) {
uint256[] memory sizes = new uint256[](_NUM_PROJECTS);
sizes[0] = 100;
sizes[1] = 19;
sizes[2] = 150;
sizes[3] = 100;
sizes[4] = 150;
sizes[5] = 75;
sizes[6] = 32;
sizes[7] = 101;
sizes[8] = 64;
sizes[9] = 100;
return sizes;
}
enum ProjectType {
Longform,
Curated
}
function _projectType(uint8 projectId) internal pure returns (ProjectType) {
if (projectId < _NUM_LONGFORM_PROJECTS) return ProjectType.Longform;
return ProjectType.Curated;
}
function _isLongformProject(uint8 projectId) internal pure virtual returns (bool) {
return _projectType(projectId) == ProjectType.Longform;
}
function _artblocksProjectId(uint8 projectId) internal pure returns (uint256) {
assert(_isLongformProject(projectId));
return _artblocksProjectIds()[projectId];
}
}
文件 54 的 62:PurchaseExecuter.sol
文件 55 的 62:Randomiser.sol
pragma solidity >=0.8.17;
import {SafeCast} from "openzeppelin-contracts/utils/math/SafeCast.sol";
import {Math} from "openzeppelin-contracts/utils/math/Math.sol";
import {NextShuffler} from "ethier/random/NextShuffler.sol";
import {PRNG} from "ethier/random/PRNG.sol";
import {ERC4906} from "ethier/erc721/ERC4906.sol";
import {IEntropyConsumer, IEntropyOracleV2} from "proof/entropy/EntropyOracleV2.sol";
import {TokenInfoManager} from "./TokenInfoManager.sol";
abstract contract Randomiser is ERC4906, IEntropyConsumer, TokenInfoManager {
using NextShuffler for NextShuffler.State;
using PRNG for PRNG.Source;
error CallerNotOracle();
struct RevealBatch {
bool revealed;
uint64 start;
uint64 end;
}
uint256 internal constant _MAX_TOKENS_PER_ENTROPY_CALLBACK = 50;
uint64 public immutable maxTotalSupply;
IEntropyOracleV2 public entropyOracle;
NextShuffler.State internal _shuffler;
mapping(uint256 => mapping(uint96 => RevealBatch)) internal _batches;
mapping(uint256 => uint96) internal _currentCallbackId;
constructor(IEntropyOracleV2 oracle) {
entropyOracle = oracle;
uint64 total;
uint256[] memory sizes = _projectSizes();
for (uint256 i = 0; i < sizes.length; ++i) {
total += uint64(sizes[i]);
}
maxTotalSupply = total;
_shuffler.init(total);
}
function _commitAndRequestEntropy(uint256 tokenId, uint256 num) internal {
if (num == 0) {
return;
}
uint256 entropyBlockNumber = block.number;
uint96 callbackId = _currentCallbackId[entropyBlockNumber];
RevealBatch memory batch = _batches[entropyBlockNumber][callbackId];
assert(!batch.revealed);
uint256 batchSize = batch.end - batch.start;
if (batchSize == 0) {
batch.start = SafeCast.toUint64(tokenId);
entropyOracle.requestEntropyWithCallback(entropyBlockNumber, callbackId);
}
uint256 batchSizeLeft = _MAX_TOKENS_PER_ENTROPY_CALLBACK - batchSize;
uint256 numThisBatch = Math.min(num, batchSizeLeft);
batch.end = SafeCast.toUint64(tokenId + numThisBatch);
_batches[entropyBlockNumber][callbackId] = batch;
if (numThisBatch == batchSizeLeft) {
++_currentCallbackId[entropyBlockNumber];
}
_commitAndRequestEntropy(tokenId + numThisBatch, num - numThisBatch);
}
function consumeEntropy(uint256 blockNumber, uint96 callbackId, bytes32 entropy) external {
if (msg.sender != address(entropyOracle)) {
revert CallerNotOracle();
}
RevealBatch storage $batch = _batches[blockNumber][callbackId];
RevealBatch memory batch = $batch;
assert(!batch.revealed);
$batch.revealed = true;
_refreshMetadata(batch.start, batch.end);
uint256[] memory sizes = _projectSizes();
PRNG.Source rng = PRNG.newSource(keccak256(abi.encode(entropy, batch)));
uint256 end = batch.end;
for (uint256 tokenId = batch.start; tokenId < end; ++tokenId) {
uint256 randIdx = _shuffler.next(rng);
uint8 projectId = _findProjectId(randIdx, sizes);
_assignProject(tokenId, projectId);
}
}
function _findProjectId(uint256 index, uint256[] memory projectSizes) internal pure returns (uint8) {
uint8 projectId = 0;
while (index >= projectSizes[projectId]) {
index -= projectSizes[projectId];
++projectId;
}
return projectId;
}
function _assignProject(uint256 tokenId, uint8 projectId) internal virtual;
function _projectSizes() internal pure virtual returns (uint256[] memory);
}
文件 56 的 62:ReentrancyGuard.sol
文件 58 的 62:SellableERC721ACommon.sol
文件 61 的 62:TokenIDMapping.sol
文件 62 的 62:TokenInfoManager.sol
pragma solidity >=0.8.17;
contract TokenInfoManager {
struct InternalTokenInfo {
uint8 projectId;
uint8 edition;
}
struct TokenInfo {
bool revealed;
uint8 projectId;
uint8 edition;
}
uint256 internal constant _NUM_MAX_TOKEN_INFO = (1 << 32);
InternalTokenInfo[_NUM_MAX_TOKEN_INFO] private _infos;
function tokenInfos(uint256[] calldata tokenIds) external view returns (TokenInfo[] memory) {
TokenInfo[] memory infos = new TokenInfo[](tokenIds.length);
for (uint256 i = 0; i < tokenIds.length; ++i) {
infos[i] = _tokenInfo(tokenIds[i]);
}
return infos;
}
function _tokenInfo(uint256 tokenId) internal view returns (TokenInfo memory) {
InternalTokenInfo memory info = _infos[tokenId];
if (info.projectId == 0) {
return TokenInfo({revealed: false, projectId: 0, edition: 0});
}
return TokenInfo({revealed: true, projectId: info.projectId - 1, edition: info.edition});
}
function _setTokenInfo(uint256 tokenId, uint8 projectId, uint8 edition) internal {
_infos[tokenId].projectId = projectId + 1;
_infos[tokenId].edition = edition;
}
}
{
"compilationTarget": {
"src/EvolvingPixels.sol": "EvolvingPixels"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 9999
},
"remappings": [
":@divergencetech/ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/",
":@divergencetech/ethier/=/home/dave/proof/proof-seller/contracts/entropy/../../bazel-proof/external/ethier_0-54-0/",
":@openzeppelin-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/",
":@openzeppelin-4.7/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/",
":@openzeppelin/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/",
":ERC721A/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/contracts/",
":ERC721A_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/",
":artblocks-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/contracts/",
":artblocks-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/artblocks-contracts_fa1dc466/",
":artblocks/=/home/dave/proof/proof-seller/contracts/artblocks/src/",
":constants/=../../constants/src/",
":delegate/=../../delegate/",
":delegation-registry/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/src/",
":delegation-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/delegation-registry_2d1a158b/",
":demo/=/home/dave/proof/proof-seller/contracts/artblocks/../../demo/",
":ds-test/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/src/",
":ds-test_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ds-test_013e6c64/",
":entropy/=/home/dave/proof/proof-seller/contracts/entropy/",
":erc/=../../erc/",
":erc721a/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ERC721A_4-2-3/",
":ethier/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/contracts/",
":ethier_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/ethier_0-55-0/",
":forge-std/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/forge-std_1-4-0/src/",
":forge-std_root/=/home/dave/proof/proof-seller/contracts/entropy/../../bazel-proof/external/forge-std_1-4-0/",
":openzeppelin-contracts-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/contracts/",
":openzeppelin-contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/",
":openzeppelin-contracts/contracts/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/contracts/",
":openzeppelin-contracts_root-4-7-0/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-7-0_exact_remap/",
":openzeppelin-contracts_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/openzeppelin-contracts_4-8-1/",
":operator-filter-registry/src/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/src/",
":operator-filter-registry_root/=/home/dave/.cache/bazel/_bazel_dave/b9a57168317213f9241a484d2ee2d038/external/operator-filter-registry_1-4-1/",
":projects/=/home/dave/proof/proof-seller/contracts/artblocks/../../projects/",
":proof/artblocks/=/home/dave/proof/proof-seller/contracts/artblocks/src/",
":proof/constants/=/home/dave/proof/proof-seller/contracts/constants/src/",
":proof/entropy/=/home/dave/proof/proof-seller/contracts/entropy/",
":proof/sellers/=/home/dave/proof/proof-seller/contracts/sellers/src/",
":sellers/=/home/dave/proof/proof-seller/contracts/sellers/src/"
]
}
[{"inputs":[{"components":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"address","name":"steerer","type":"address"},{"internalType":"address payable","name":"primaryReceiver","type":"address"},{"internalType":"address payable","name":"secondaryReceiver","type":"address"},{"internalType":"string","name":"baseTokenURI","type":"string"},{"internalType":"contract IEntropyOracleV2","name":"entropyOracle","type":"address"},{"internalType":"contract GenArt721CoreV3_Engine_Flex_PROOF","name":"flex","type":"address"},{"internalType":"contract IGenArt721CoreContractV3_Mintable","name":"flexMintGateway","type":"address"}],"internalType":"struct EvolvingPixels.ConstructorParams","name":"params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"CallerNotOracle","type":"error"},{"inputs":[],"name":"DontGetGreedy","type":"error"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"numLeft","type":"uint256"}],"name":"ExceedingMaxTotalSupply","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"AUTHORISED_SELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_STEERING_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_NUM_PROJECTS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"artblocksProjectIds","outputs":[{"internalType":"uint8[4]","name":"","type":"uint8[4]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"cdata","type":"bytes"}],"name":"callOperatorFilterRegistry","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint96","name":"callbackId","type":"uint96"},{"internalType":"bytes32","name":"entropy","type":"bytes32"}],"name":"consumeEntropy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emitMetadataUpdateForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"entropyOracle","outputs":[{"internalType":"contract IEntropyOracleV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flex","outputs":[{"internalType":"contract GenArt721CoreV3_Engine_Flex_PROOF","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flexMintGateway","outputs":[{"internalType":"contract IGenArt721CoreContractV3_Mintable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint64","name":"num","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"handleSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockSellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"numPurchasedPerProject","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"primaryReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectSizes","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"basisPoints","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IEntropyOracleV2","name":"newOracle","type":"address"}],"name":"setEntropyOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newReceiver","type":"address"}],"name":"setPrimaryReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum EvolvingPixels.Stage","name":"stage_","type":"uint8"}],"name":"setStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum EvolvingPixels.Stage","name":"stage_","type":"uint8"},{"internalType":"contract Seller","name":"seller","type":"address"}],"name":"setStageSeller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stage","outputs":[{"internalType":"enum EvolvingPixels.Stage","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum EvolvingPixels.Stage","name":"","type":"uint8"}],"name":"stageSellers","outputs":[{"internalType":"contract Seller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"projectId","type":"uint8"}],"name":"tokenIdsByProjectId","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"tokenInfos","outputs":[{"components":[{"internalType":"bool","name":"revealed","type":"bool"},{"internalType":"uint8","name":"projectId","type":"uint8"},{"internalType":"uint8","name":"edition","type":"uint8"}],"internalType":"struct TokenInfoManager.TokenInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]