Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 237 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Purchase To | 19520888 | 300 days ago | IN | 0 ETH | 0.00438656 | ||||
Purchase To | 18978909 | 376 days ago | IN | 0 ETH | 0.00552631 | ||||
Purchase To | 18593284 | 430 days ago | IN | 0 ETH | 0.00420792 | ||||
Purchase To | 18344067 | 465 days ago | IN | 0 ETH | 0.00204052 | ||||
Purchase To | 18344059 | 465 days ago | IN | 0 ETH | 0.00172835 | ||||
Purchase To | 18344051 | 465 days ago | IN | 0 ETH | 0.0016543 | ||||
Update Price Per... | 18323248 | 468 days ago | IN | 0 ETH | 0.00029557 | ||||
Purchase To | 18228398 | 481 days ago | IN | 0 ETH | 0.00353248 | ||||
Purchase To | 18221788 | 482 days ago | IN | 0 ETH | 0.00261046 | ||||
Purchase To | 18221780 | 482 days ago | IN | 0 ETH | 0.00282687 | ||||
Purchase To | 18215646 | 483 days ago | IN | 0 ETH | 0.00230211 | ||||
Purchase To | 18215642 | 483 days ago | IN | 0 ETH | 0.0022982 | ||||
Purchase To | 18215634 | 483 days ago | IN | 0 ETH | 0.0021043 | ||||
Purchase To | 18215623 | 483 days ago | IN | 0 ETH | 0.00226579 | ||||
Purchase To | 18215619 | 483 days ago | IN | 0 ETH | 0.0017909 | ||||
Purchase To | 18215615 | 483 days ago | IN | 0 ETH | 0.00225117 | ||||
Purchase To | 18215611 | 483 days ago | IN | 0 ETH | 0.00183765 | ||||
Purchase To | 18215606 | 483 days ago | IN | 0 ETH | 0.00176486 | ||||
Purchase To | 18215465 | 483 days ago | IN | 0 ETH | 0.00291673 | ||||
Purchase To | 18215455 | 483 days ago | IN | 0 ETH | 0.00250629 | ||||
Purchase To | 18215449 | 483 days ago | IN | 0 ETH | 0.00244007 | ||||
Purchase To | 18215439 | 483 days ago | IN | 0 ETH | 0.00253063 | ||||
Purchase To | 18215435 | 483 days ago | IN | 0 ETH | 0.00255496 | ||||
Purchase To | 18215412 | 483 days ago | IN | 0 ETH | 0.0025787 | ||||
Purchase To | 18215404 | 483 days ago | IN | 0 ETH | 0.00292857 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MinterSetPriceV2
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 25 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. import "../../../interfaces/0.8.x/IGenArt721CoreContractV3.sol"; import "../../../interfaces/0.8.x/IMinterFilterV0.sol"; import "../../../interfaces/0.8.x/IFilteredMinterV0.sol"; import "@openzeppelin-4.5/contracts/security/ReentrancyGuard.sol"; pragma solidity 0.8.17; /** * @title Filtered Minter contract that allows tokens to be minted with ETH. * This is designed to be used with IGenArt721CoreContractV3 contracts. * @author Art Blocks Inc. * @notice Privileged Roles and Ownership: * This contract is designed to be managed, with limited powers. * Privileged roles and abilities are controlled by the project's artist, which * can be modified by the core contract's Admin ACL contract. Both of these * roles hold extensive power and can modify minter details. * Care must be taken to ensure that the admin ACL contract and artist * addresses are secure behind a multi-sig or other access control mechanism. * ---------------------------------------------------------------------------- * The following functions are restricted to a project's artist: * - updatePricePerTokenInWei * ---------------------------------------------------------------------------- * Additional admin and artist privileged roles may be described on other * contracts that this minter integrates with. */ contract MinterSetPriceV2 is ReentrancyGuard, IFilteredMinterV0 { /// Core contract address this minter interacts with address public immutable genArt721CoreAddress; /// This contract handles cores with interface IV3 IGenArt721CoreContractV3 private immutable genArtCoreContract; /// Minter filter address this minter interacts with address public immutable minterFilterAddress; /// Minter filter this minter may interact with. IMinterFilterV0 private immutable minterFilter; /// minterType for this minter string public constant minterType = "MinterSetPriceV2"; uint256 constant ONE_MILLION = 1_000_000; struct ProjectConfig { bool maxHasBeenInvoked; bool priceIsConfigured; uint24 maxInvocations; uint256 pricePerTokenInWei; } mapping(uint256 => ProjectConfig) public projectConfig; modifier onlyArtist(uint256 _projectId) { require( msg.sender == genArtCoreContract.projectIdToArtistAddress(_projectId), "Only Artist" ); _; } /** * @notice Initializes contract to be a Filtered Minter for * `_minterFilter`, integrated with Art Blocks core contract * at address `_genArt721Address`. * @param _genArt721Address Art Blocks core contract address for * which this contract will be a minter. * @param _minterFilter Minter filter for which this will be a * filtered minter. */ constructor(address _genArt721Address, address _minterFilter) ReentrancyGuard() { genArt721CoreAddress = _genArt721Address; genArtCoreContract = IGenArt721CoreContractV3(_genArt721Address); minterFilterAddress = _minterFilter; minterFilter = IMinterFilterV0(_minterFilter); require( minterFilter.genArt721CoreAddress() == _genArt721Address, "Illegal contract pairing" ); } /** * @notice Syncs local maximum invocations of project `_projectId` based on * the value currently defined in the core contract. Only used for gas * optimization of mints after maxInvocations has been reached. * @param _projectId Project ID to set the maximum invocations for. * @dev this enables gas reduction after maxInvocations have been reached - * core contracts shall still enforce a maxInvocation check during mint. * @dev function is intentionally not gated to any specific access control; * it only syncs a local state variable to the core contract's state. */ function setProjectMaxInvocations(uint256 _projectId) external { uint256 maxInvocations; (, maxInvocations, , , , ) = genArtCoreContract.projectStateData( _projectId ); // update storage with results projectConfig[_projectId].maxInvocations = uint24(maxInvocations); } /** * @notice Warning: Disabling purchaseTo is not supported on this minter. * This method exists purely for interface-conformance purposes. */ function togglePurchaseToDisabled(uint256 _projectId) external view onlyArtist(_projectId) { revert("Action not supported"); } /** * @notice projectId => has project reached its maximum number of * invocations? Note that this returns a local cache of the core contract's * state, and may be out of sync with the core contract. This is * intentional, as it only enables gas optimization of mints after a * project's maximum invocations has been reached. A false negative will * only result in a gas cost increase, since the core contract will still * enforce a maxInvocation check during minting. A false positive is not * possible because the V3 core contract only allows maximum invocations * to be reduced, not increased. Based on this rationale, we intentionally * do not do input validation in this method as to whether or not the input * `_projectId` is an existing project ID. */ function projectMaxHasBeenInvoked(uint256 _projectId) external view returns (bool) { return projectConfig[_projectId].maxHasBeenInvoked; } /** * @notice projectId => project's maximum number of invocations. * Optionally synced with core contract value, for gas optimization. * Note that this returns a local cache of the core contract's * state, and may be out of sync with the core contract. This is * intentional, as it only enables gas optimization of mints after a * project's maximum invocations has been reached. * @dev A number greater than the core contract's project max invocations * will only result in a gas cost increase, since the core contract will * still enforce a maxInvocation check during minting. A number less than * the core contract's project max invocations is only possible when the * project's max invocations have not been synced on this minter, since the * V3 core contract only allows maximum invocations to be reduced, not * increased. When this happens, the minter will enable minting, allowing * the core contract to enforce the max invocations check. Based on this * rationale, we intentionally do not do input validation in this method as * to whether or not the input `_projectId` is an existing project ID. */ function projectMaxInvocations(uint256 _projectId) external view returns (uint256) { return uint256(projectConfig[_projectId].maxInvocations); } /** * @notice Updates this minter's price per token of project `_projectId` * to be '_pricePerTokenInWei`, in Wei. * This price supersedes any legacy core contract price per token value. * @dev Note that it is intentionally supported here that the configured * price may be explicitly set to `0`. */ function updatePricePerTokenInWei( uint256 _projectId, uint256 _pricePerTokenInWei ) external onlyArtist(_projectId) { ProjectConfig storage _projectConfig = projectConfig[_projectId]; _projectConfig.pricePerTokenInWei = _pricePerTokenInWei; _projectConfig.priceIsConfigured = true; emit PricePerTokenInWeiUpdated(_projectId, _pricePerTokenInWei); } /** * @notice Purchases a token from project `_projectId`. * @param _projectId Project ID to mint a token on. * @return tokenId Token ID of minted token */ function purchase(uint256 _projectId) external payable returns (uint256 tokenId) { tokenId = purchaseTo_do6(msg.sender, _projectId); return tokenId; } /** * @notice gas-optimized version of purchase(uint256). */ function purchase_H4M(uint256 _projectId) external payable returns (uint256 tokenId) { tokenId = purchaseTo_do6(msg.sender, _projectId); return tokenId; } /** * @notice Purchases a token from project `_projectId` and sets * the token's owner to `_to`. * @param _to Address to be the new token's owner. * @param _projectId Project ID to mint a token on. * @return tokenId Token ID of minted token */ function purchaseTo(address _to, uint256 _projectId) external payable returns (uint256 tokenId) { return purchaseTo_do6(_to, _projectId); } /** * @notice gas-optimized version of purchaseTo(address, uint256). */ function purchaseTo_do6(address _to, uint256 _projectId) public payable nonReentrant returns (uint256 tokenId) { // CHECKS ProjectConfig storage _projectConfig = projectConfig[_projectId]; // Note that `maxHasBeenInvoked` is only checked here to reduce gas // consumption after a project has been fully minted. // `_projectConfig.maxHasBeenInvoked` is locally cached to reduce // gas consumption, but if not in sync with the core contract's value, // the core contract also enforces its own max invocation check during // minting. require( !_projectConfig.maxHasBeenInvoked, "Maximum number of invocations reached" ); // require artist to have configured price of token on this minter require(_projectConfig.priceIsConfigured, "Price not configured"); // load price of token into memory uint256 _pricePerTokenInWei = _projectConfig.pricePerTokenInWei; require( msg.value >= _pricePerTokenInWei, "Must send minimum value to mint!" ); // EFFECTS tokenId = minterFilter.mint(_to, _projectId, msg.sender); // okay if this underflows because if statement will always eval false. // this is only for gas optimization (core enforces maxInvocations). unchecked { if (tokenId % ONE_MILLION == _projectConfig.maxInvocations - 1) { _projectConfig.maxHasBeenInvoked = true; } } // INTERACTIONS _splitFundsETH(_projectId, _pricePerTokenInWei); return tokenId; } /** * @dev splits ETH funds between sender (if refund), foundation, * artist, and artist's additional payee for a token purchased on * project `_projectId`. * @dev possible DoS during splits is acknowledged, and mitigated by * business practices, including end-to-end testing on mainnet, and * admin-accepted artist payment addresses. */ function _splitFundsETH(uint256 _projectId, uint256 _pricePerTokenInWei) internal { if (msg.value > 0) { bool success_; // send refund to sender uint256 refund = msg.value - _pricePerTokenInWei; if (refund > 0) { (success_, ) = msg.sender.call{value: refund}(""); require(success_, "Refund failed"); } // split remaining funds between foundation, artist, and artist's // additional payee ( uint256 artblocksRevenue_, address payable artblocksAddress_, uint256 artistRevenue_, address payable artistAddress_, uint256 additionalPayeePrimaryRevenue_, address payable additionalPayeePrimaryAddress_ ) = genArtCoreContract.getPrimaryRevenueSplits( _projectId, _pricePerTokenInWei ); // Art Blocks payment if (artblocksRevenue_ > 0) { (success_, ) = artblocksAddress_.call{value: artblocksRevenue_}( "" ); require(success_, "Art Blocks payment failed"); } // artist payment if (artistRevenue_ > 0) { (success_, ) = artistAddress_.call{value: artistRevenue_}(""); require(success_, "Artist payment failed"); } // additional payee payment if (additionalPayeePrimaryRevenue_ > 0) { (success_, ) = additionalPayeePrimaryAddress_.call{ value: additionalPayeePrimaryRevenue_ }(""); require(success_, "Additional Payee payment failed"); } } } /** * @notice Gets if price of token is configured, price of minting a * token on project `_projectId`, and currency symbol and address to be * used as payment. Supersedes any core contract price information. * @param _projectId Project ID to get price information for. * @return isConfigured true only if token price has been configured on * this minter * @return tokenPriceInWei current price of token on this minter - invalid * if price has not yet been configured * @return currencySymbol currency symbol for purchases of project on this * minter. This minter always returns "ETH" * @return currencyAddress currency address for purchases of project on * this minter. This minter always returns null address, reserved for ether */ function getPriceInfo(uint256 _projectId) external view returns ( bool isConfigured, uint256 tokenPriceInWei, string memory currencySymbol, address currencyAddress ) { ProjectConfig storage _projectConfig = projectConfig[_projectId]; isConfigured = _projectConfig.priceIsConfigured; tokenPriceInWei = _projectConfig.pricePerTokenInWei; currencySymbol = "ETH"; currencyAddress = address(0); } }
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. pragma solidity ^0.8.0; import "./IAdminACLV0.sol"; /// use the Royalty Registry's IManifold interface for token royalties import "./IManifold.sol"; interface IGenArt721CoreContractV3 is IManifold { /** * @notice Token ID `_tokenId` minted to `_to`. */ event Mint(address indexed _to, uint256 indexed _tokenId); /** * @notice currentMinter updated to `_currentMinter`. * @dev Implemented starting with V3 core */ event MinterUpdated(address indexed _currentMinter); /** * @notice Platform updated on bytes32-encoded field `_field`. */ event PlatformUpdated(bytes32 indexed _field); /** * @notice Project ID `_projectId` updated on bytes32-encoded field * `_update`. */ event ProjectUpdated(uint256 indexed _projectId, bytes32 indexed _update); event ProposedArtistAddressesAndSplits( uint256 indexed _projectId, address _artistAddress, address _additionalPayeePrimarySales, uint256 _additionalPayeePrimarySalesPercentage, address _additionalPayeeSecondarySales, uint256 _additionalPayeeSecondarySalesPercentage ); event AcceptedArtistAddressesAndSplits(uint256 indexed _projectId); // version and type of the core contract // coreVersion is a string of the form "0.x.y" function coreVersion() external view returns (string memory); // coreType is a string of the form "GenArt721CoreV3" function coreType() external view returns (string memory); // owner (pre-V3 was named admin) of contract // this is expected to be an Admin ACL contract for V3 function owner() external view returns (address); // Admin ACL contract for V3, will be at the address owner() function adminACLContract() external returns (IAdminACLV0); // backwards-compatible (pre-V3) admin - equal to owner() function admin() external view returns (address); /** * Function determining if _sender is allowed to call function with * selector _selector on contract `_contract`. Intended to be used with * peripheral contracts such as minters, as well as internally by the * core contract itself. */ function adminACLAllowed( address _sender, address _contract, bytes4 _selector ) external returns (bool); // getter function of public variable function nextProjectId() external view returns (uint256); // getter function of public mapping function tokenIdToProjectId(uint256 tokenId) external view returns (uint256 projectId); // @dev this is not available in V0 function isMintWhitelisted(address minter) external view returns (bool); function projectIdToArtistAddress(uint256 _projectId) external view returns (address payable); function projectIdToAdditionalPayeePrimarySales(uint256 _projectId) external view returns (address payable); function projectIdToAdditionalPayeePrimarySalesPercentage( uint256 _projectId ) external view returns (uint256); // @dev new function in V3 function getPrimaryRevenueSplits(uint256 _projectId, uint256 _price) external view returns ( uint256 artblocksRevenue_, address payable artblocksAddress_, uint256 artistRevenue_, address payable artistAddress_, uint256 additionalPayeePrimaryRevenue_, address payable additionalPayeePrimaryAddress_ ); // @dev new function in V3 function projectStateData(uint256 _projectId) external view returns ( uint256 invocations, uint256 maxInvocations, bool active, bool paused, uint256 completedTimestamp, bool locked ); // @dev Art Blocks primary sales payment address function artblocksPrimarySalesAddress() external view returns (address payable); /** * @notice Backwards-compatible (pre-V3) function returning Art Blocks * primary sales payment address (now called artblocksPrimarySalesAddress). */ function artblocksAddress() external view returns (address payable); // @dev Percentage of primary sales allocated to Art Blocks function artblocksPrimarySalesPercentage() external view returns (uint256); /** * @notice Backwards-compatible (pre-V3) function returning Art Blocks * primary sales percentage (now called artblocksPrimarySalesPercentage). */ function artblocksPercentage() external view returns (uint256); // @dev Art Blocks secondary sales royalties payment address function artblocksSecondarySalesAddress() external view returns (address payable); // @dev Basis points of secondary sales allocated to Art Blocks function artblocksSecondarySalesBPS() external view returns (uint256); // function to set a token's hash (must be guarded) function setTokenHash_8PT(uint256 _tokenId, bytes32 _hash) external; // @dev gas-optimized signature in V3 for `mint` function mint_Ecf( address _to, uint256 _projectId, address _by ) external returns (uint256 tokenId); /** * @notice Backwards-compatible (pre-V3) function that gets artist + * artist's additional payee royalty data for token ID `_tokenId`. * WARNING: Does not include Art Blocks portion of royalties. */ function getRoyaltyData(uint256 _tokenId) external view returns ( address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID ); }
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. pragma solidity ^0.8.0; interface IMinterFilterV0 { /** * @notice Approved minter `_minterAddress`. */ event MinterApproved(address indexed _minterAddress, string _minterType); /** * @notice Revoked approval for minter `_minterAddress` */ event MinterRevoked(address indexed _minterAddress); /** * @notice Minter `_minterAddress` of type `_minterType` * registered for project `_projectId`. */ event ProjectMinterRegistered( uint256 indexed _projectId, address indexed _minterAddress, string _minterType ); /** * @notice Any active minter removed for project `_projectId`. */ event ProjectMinterRemoved(uint256 indexed _projectId); function genArt721CoreAddress() external returns (address); function setMinterForProject(uint256, address) external; function removeMinterForProject(uint256) external; function mint( address _to, uint256 _projectId, address sender ) external returns (uint256); function getMinterForProject(uint256) external view returns (address); function projectHasMinter(uint256) external view returns (bool); }
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. pragma solidity ^0.8.0; interface IFilteredMinterV0 { /** * @notice Price per token in wei updated for project `_projectId` to * `_pricePerTokenInWei`. */ event PricePerTokenInWeiUpdated( uint256 indexed _projectId, uint256 indexed _pricePerTokenInWei ); /** * @notice Currency updated for project `_projectId` to symbol * `_currencySymbol` and address `_currencyAddress`. */ event ProjectCurrencyInfoUpdated( uint256 indexed _projectId, address indexed _currencyAddress, string _currencySymbol ); /// togglePurchaseToDisabled updated event PurchaseToDisabledUpdated( uint256 indexed _projectId, bool _purchaseToDisabled ); // getter function of public variable function minterType() external view returns (string memory); function genArt721CoreAddress() external returns (address); function minterFilterAddress() external returns (address); // Triggers a purchase of a token from the desired project, to the // TX-sending address. function purchase(uint256 _projectId) external payable returns (uint256 tokenId); // Triggers a purchase of a token from the desired project, to the specified // receiving address. function purchaseTo(address _to, uint256 _projectId) external payable returns (uint256 tokenId); // Toggles the ability for `purchaseTo` to be called directly with a // specified receiving address that differs from the TX-sending address. function togglePurchaseToDisabled(uint256 _projectId) external; // Called to make the minter contract aware of the max invocations for a // given project. function setProjectMaxInvocations(uint256 _projectId) external; // Gets if token price is configured, token price in wei, currency symbol, // and currency address, assuming this is project's minter. // Supersedes any defined core price. function getPriceInfo(uint256 _projectId) external view returns ( bool isConfigured, uint256 tokenPriceInWei, string memory currencySymbol, address currencyAddress ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: LGPL-3.0-only // Created By: Art Blocks Inc. pragma solidity ^0.8.0; interface IAdminACLV0 { /** * @notice Token ID `_tokenId` minted to `_to`. * @param previousSuperAdmin The previous superAdmin address. * @param newSuperAdmin The new superAdmin address. * @param genArt721CoreAddressesToUpdate Array of genArt721Core * addresses to update to the new superAdmin, for indexing purposes only. */ event SuperAdminTransferred( address indexed previousSuperAdmin, address indexed newSuperAdmin, address[] genArt721CoreAddressesToUpdate ); /// Type of the Admin ACL contract, e.g. "AdminACLV0" function AdminACLType() external view returns (string memory); /// super admin address function superAdmin() external view returns (address); /** * @notice Calls transferOwnership on other contract from this contract. * This is useful for updating to a new AdminACL contract. * @dev this function should be gated to only superAdmin-like addresses. */ function transferOwnershipOn(address _contract, address _newAdminACL) external; /** * @notice Calls renounceOwnership on other contract from this contract. * @dev this function should be gated to only superAdmin-like addresses. */ function renounceOwnershipOn(address _contract) external; /** * @notice Checks if sender `_sender` is allowed to call function with selector * `_selector` on contract `_contract`. */ function allowed( address _sender, address _contract, bytes4 _selector ) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @dev Royalty Registry interface, used to support the Royalty Registry. /// @dev Source: https://github.com/manifoldxyz/royalty-registry-solidity/blob/main/contracts/specs/IManifold.sol /// @author: manifold.xyz /** * @dev Royalty interface for creator core classes */ interface IManifold { /** * @dev Get royalites of a token. Returns list of receivers and basisPoints * * bytes4(keccak256('getRoyalties(uint256)')) == 0xbb3bafd6 * * => 0xbb3bafd6 = 0xbb3bafd6 */ function getRoyalties(uint256 tokenId) external view returns (address payable[] memory, uint256[] memory); }
{ "optimizer": { "enabled": true, "runs": 25 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_genArt721Address","type":"address"},{"internalType":"address","name":"_minterFilter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_projectId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_pricePerTokenInWei","type":"uint256"}],"name":"PricePerTokenInWeiUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_projectId","type":"uint256"},{"indexed":true,"internalType":"address","name":"_currencyAddress","type":"address"},{"indexed":false,"internalType":"string","name":"_currencySymbol","type":"string"}],"name":"ProjectCurrencyInfoUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_projectId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_purchaseToDisabled","type":"bool"}],"name":"PurchaseToDisabledUpdated","type":"event"},{"inputs":[],"name":"genArt721CoreAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"getPriceInfo","outputs":[{"internalType":"bool","name":"isConfigured","type":"bool"},{"internalType":"uint256","name":"tokenPriceInWei","type":"uint256"},{"internalType":"string","name":"currencySymbol","type":"string"},{"internalType":"address","name":"currencyAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterFilterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minterType","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"projectConfig","outputs":[{"internalType":"bool","name":"maxHasBeenInvoked","type":"bool"},{"internalType":"bool","name":"priceIsConfigured","type":"bool"},{"internalType":"uint24","name":"maxInvocations","type":"uint24"},{"internalType":"uint256","name":"pricePerTokenInWei","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectMaxHasBeenInvoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"projectMaxInvocations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"purchase","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"purchaseTo","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"purchaseTo_do6","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"purchase_H4M","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"setProjectMaxInvocations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"}],"name":"togglePurchaseToDisabled","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_projectId","type":"uint256"},{"internalType":"uint256","name":"_pricePerTokenInWei","type":"uint256"}],"name":"updatePricePerTokenInWei","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6101006040523480156200001257600080fd5b506040516200109d3803806200109d833981016040819052620000359162000147565b600160009081556001600160a01b03808416608081905260a081905290831660c081905260e0819052604080516392a10f8360e01b81529051929391926392a10f83926004808401936020939290839003909101908290875af1158015620000a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000c791906200017f565b6001600160a01b031614620001225760405162461bcd60e51b815260206004820152601860248201527f496c6c6567616c20636f6e74726163742070616972696e670000000000000000604482015260640160405180910390fd5b5050620001a4565b80516001600160a01b03811681146200014257600080fd5b919050565b600080604083850312156200015b57600080fd5b62000166836200012a565b915062000176602084016200012a565b90509250929050565b6000602082840312156200019257600080fd5b6200019d826200012a565b9392505050565b60805160a05160c05160e051610eaa620001f3600039600061051e015260006102f90152600081816105fa015281816106f401528181610817015261096e015260006102300152610eaa6000f3fe6080604052600436106100a95760003560e01c80619987146100ae578061b460146100d457806340d1397e146100e7578063462add461461010957806356690aaf146101495780636cb9b7ff14610181578063774159c6146101a1578063891407c01461020b57806392a10f831461021e578063c71b1b711461026a578063dd85582f146102e7578063e9d1e8ac1461031b578063efef39a1146100d4578063f7bd4b8814610364575b600080fd5b6100c16100bc366004610c21565b610384565b6040519081526020015b60405180910390f35b6100c16100e2366004610c4d565b6105d0565b3480156100f357600080fd5b50610107610102366004610c4d565b6105e2565b005b34801561011557600080fd5b50610139610124366004610c4d565b60009081526001602052604090205460ff1690565b60405190151581526020016100cb565b34801561015557600080fd5b506100c1610164366004610c4d565b60009081526001602052604090205462010000900462ffffff1690565b34801561018d57600080fd5b5061010761019c366004610c66565b6106dc565b3480156101ad57600080fd5b506101fb6101bc366004610c4d565b600090815260016020818152604080842080549301548151808301909252600382526208aa8960eb1b9282019290925261010090920460ff1693909290565b6040516100cb9493929190610cce565b6100c1610219366004610c21565b6107eb565b34801561022a57600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100cb565b34801561027657600080fd5b506102ba610285366004610c4d565b6001602081905260009182526040909120805491015460ff808316926101008104909116916201000090910462ffffff169084565b6040516100cb94939291909315158452911515602084015262ffffff166040830152606082015260800190565b3480156102f357600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561032757600080fd5b506103576040518060400160405280601081526020016f26b4b73a32b929b2ba283934b1b2ab1960811b81525081565b6040516100cb9190610d08565b34801561037057600080fd5b5061010761037f366004610c4d565b6107fe565b60006002600054036103dd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155828152600160205260409020805460ff16156104505760405162461bcd60e51b815260206004820152602560248201527f4d6178696d756d206e756d626572206f6620696e766f636174696f6e732072656044820152641858da195960da1b60648201526084016103d4565b8054610100900460ff1661049d5760405162461bcd60e51b8152602060048201526014602482015273141c9a58d9481b9bdd0818dbdb999a59dd5c995960621b60448201526064016103d4565b6001810154348111156104f25760405162461bcd60e51b815260206004820181905260248201527f4d7573742073656e64206d696e696d756d2076616c756520746f206d696e742160448201526064016103d4565b604051630d4d151360e01b81526001600160a01b038681166004830152602482018690523360448301527f00000000000000000000000000000000000000000000000000000000000000001690630d4d1513906064016020604051808303816000875af1158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b9190610d1b565b825490935060001962ffffff6201000090920482160116620f42408406036105b957815460ff191660011782555b6105c384826108c0565b5050600160005592915050565b60006105dc3383610384565b92915050565b60405163a47d29cb60e01b81526004810182905281907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a47d29cb90602401602060405180830381865afa158015610649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066d9190610d34565b6001600160a01b0316336001600160a01b03161461069d5760405162461bcd60e51b81526004016103d490610d51565b60405162461bcd60e51b81526020600482015260146024820152731058dd1a5bdb881b9bdd081cdd5c1c1bdc9d195960621b60448201526064016103d4565b60405163a47d29cb60e01b81526004810183905282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a47d29cb90602401602060405180830381865afa158015610743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107679190610d34565b6001600160a01b0316336001600160a01b0316146107975760405162461bcd60e51b81526004016103d490610d51565b6000838152600160208190526040808320918201859055815461ff001916610100178255519091849186917f26118a27aca826f829f3bfe21b140b4455c00b434849bd0da50d1e1a9720fb5c91a350505050565b60006107f78383610384565b9392505050565b604051630ea5613f60e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630ea5613f9060240160c060405180830381865afa158015610866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088a9190610d8b565b50505060009485525060016020526040909320805462ffffff909416620100000264ffffff000019909416939093179092555050565b3415610c05576000806108d38334610dea565b905080156109635760405133908290600081818185875af1925050503d806000811461091b576040519150601f19603f3d011682016040523d82523d6000602084013e610920565b606091505b505080925050816109635760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b60448201526064016103d4565b6000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638639415b8b8b6040518363ffffffff1660e01b81526004016109c3929190918252602082015260400190565b60c060405180830381865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190610e0b565b9550955095509550955095506000861115610ab6576040516001600160a01b038616908790600081818185875af1925050503d8060008114610a62576040519150601f19603f3d011682016040523d82523d6000602084013e610a67565b606091505b50508098505087610ab65760405162461bcd60e51b8152602060048201526019602482015278105c9d08109b1bd8dadcc81c185e5b595b9d0819985a5b1959603a1b60448201526064016103d4565b8315610b55576040516001600160a01b038416908590600081818185875af1925050503d8060008114610b05576040519150601f19603f3d011682016040523d82523d6000602084013e610b0a565b606091505b50508098505087610b555760405162461bcd60e51b8152602060048201526015602482015274105c9d1a5cdd081c185e5b595b9d0819985a5b1959605a1b60448201526064016103d4565b8115610bfc576040516001600160a01b038216908390600081818185875af1925050503d8060008114610ba4576040519150601f19603f3d011682016040523d82523d6000602084013e610ba9565b606091505b50508098505087610bfc5760405162461bcd60e51b815260206004820152601f60248201527f4164646974696f6e616c205061796565207061796d656e74206661696c65640060448201526064016103d4565b50505050505050505b5050565b6001600160a01b0381168114610c1e57600080fd5b50565b60008060408385031215610c3457600080fd5b8235610c3f81610c09565b946020939093013593505050565b600060208284031215610c5f57600080fd5b5035919050565b60008060408385031215610c7957600080fd5b50508035926020909101359150565b6000815180845260005b81811015610cae57602081850181015186830182015201610c92565b506000602082860101526020601f19601f83011685010191505092915050565b8415158152836020820152608060408201526000610cef6080830185610c88565b905060018060a01b038316606083015295945050505050565b6020815260006107f76020830184610c88565b600060208284031215610d2d57600080fd5b5051919050565b600060208284031215610d4657600080fd5b81516107f781610c09565b6020808252600b908201526a13db9b1e48105c9d1a5cdd60aa1b604082015260600190565b80518015158114610d8657600080fd5b919050565b60008060008060008060c08789031215610da457600080fd5b8651955060208701519450610dbb60408801610d76565b9350610dc960608801610d76565b925060808701519150610dde60a08801610d76565b90509295509295509295565b818103818111156105dc57634e487b7160e01b600052601160045260246000fd5b60008060008060008060c08789031215610e2457600080fd5b865195506020870151610e3681610c09565b604088015160608901519196509450610e4e81610c09565b608088015160a08901519194509250610e6681610c09565b80915050929550929550929556fea2646970667358221220ad8ca5d52d9e3cb0f46bb5a302403aeb44ef0f0ce0129c24af47b25dbd37e2fa64736f6c63430008110033000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a0000000000000000000000003f4bbde879f9bb0e95aea08ff12f55e171495c8f
Deployed Bytecode
0x6080604052600436106100a95760003560e01c80619987146100ae578061b460146100d457806340d1397e146100e7578063462add461461010957806356690aaf146101495780636cb9b7ff14610181578063774159c6146101a1578063891407c01461020b57806392a10f831461021e578063c71b1b711461026a578063dd85582f146102e7578063e9d1e8ac1461031b578063efef39a1146100d4578063f7bd4b8814610364575b600080fd5b6100c16100bc366004610c21565b610384565b6040519081526020015b60405180910390f35b6100c16100e2366004610c4d565b6105d0565b3480156100f357600080fd5b50610107610102366004610c4d565b6105e2565b005b34801561011557600080fd5b50610139610124366004610c4d565b60009081526001602052604090205460ff1690565b60405190151581526020016100cb565b34801561015557600080fd5b506100c1610164366004610c4d565b60009081526001602052604090205462010000900462ffffff1690565b34801561018d57600080fd5b5061010761019c366004610c66565b6106dc565b3480156101ad57600080fd5b506101fb6101bc366004610c4d565b600090815260016020818152604080842080549301548151808301909252600382526208aa8960eb1b9282019290925261010090920460ff1693909290565b6040516100cb9493929190610cce565b6100c1610219366004610c21565b6107eb565b34801561022a57600080fd5b506102527f000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a81565b6040516001600160a01b0390911681526020016100cb565b34801561027657600080fd5b506102ba610285366004610c4d565b6001602081905260009182526040909120805491015460ff808316926101008104909116916201000090910462ffffff169084565b6040516100cb94939291909315158452911515602084015262ffffff166040830152606082015260800190565b3480156102f357600080fd5b506102527f0000000000000000000000003f4bbde879f9bb0e95aea08ff12f55e171495c8f81565b34801561032757600080fd5b506103576040518060400160405280601081526020016f26b4b73a32b929b2ba283934b1b2ab1960811b81525081565b6040516100cb9190610d08565b34801561037057600080fd5b5061010761037f366004610c4d565b6107fe565b60006002600054036103dd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60026000908155828152600160205260409020805460ff16156104505760405162461bcd60e51b815260206004820152602560248201527f4d6178696d756d206e756d626572206f6620696e766f636174696f6e732072656044820152641858da195960da1b60648201526084016103d4565b8054610100900460ff1661049d5760405162461bcd60e51b8152602060048201526014602482015273141c9a58d9481b9bdd0818dbdb999a59dd5c995960621b60448201526064016103d4565b6001810154348111156104f25760405162461bcd60e51b815260206004820181905260248201527f4d7573742073656e64206d696e696d756d2076616c756520746f206d696e742160448201526064016103d4565b604051630d4d151360e01b81526001600160a01b038681166004830152602482018690523360448301527f0000000000000000000000003f4bbde879f9bb0e95aea08ff12f55e171495c8f1690630d4d1513906064016020604051808303816000875af1158015610567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b9190610d1b565b825490935060001962ffffff6201000090920482160116620f42408406036105b957815460ff191660011782555b6105c384826108c0565b5050600160005592915050565b60006105dc3383610384565b92915050565b60405163a47d29cb60e01b81526004810182905281907f000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a6001600160a01b03169063a47d29cb90602401602060405180830381865afa158015610649573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066d9190610d34565b6001600160a01b0316336001600160a01b03161461069d5760405162461bcd60e51b81526004016103d490610d51565b60405162461bcd60e51b81526020600482015260146024820152731058dd1a5bdb881b9bdd081cdd5c1c1bdc9d195960621b60448201526064016103d4565b60405163a47d29cb60e01b81526004810183905282907f000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a6001600160a01b03169063a47d29cb90602401602060405180830381865afa158015610743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107679190610d34565b6001600160a01b0316336001600160a01b0316146107975760405162461bcd60e51b81526004016103d490610d51565b6000838152600160208190526040808320918201859055815461ff001916610100178255519091849186917f26118a27aca826f829f3bfe21b140b4455c00b434849bd0da50d1e1a9720fb5c91a350505050565b60006107f78383610384565b9392505050565b604051630ea5613f60e01b8152600481018290526000907f000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a6001600160a01b031690630ea5613f9060240160c060405180830381865afa158015610866573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088a9190610d8b565b50505060009485525060016020526040909320805462ffffff909416620100000264ffffff000019909416939093179092555050565b3415610c05576000806108d38334610dea565b905080156109635760405133908290600081818185875af1925050503d806000811461091b576040519150601f19603f3d011682016040523d82523d6000602084013e610920565b606091505b505080925050816109635760405162461bcd60e51b815260206004820152600d60248201526c1499599d5b990819985a5b1959609a1b60448201526064016103d4565b6000806000806000807f000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a6001600160a01b0316638639415b8b8b6040518363ffffffff1660e01b81526004016109c3929190918252602082015260400190565b60c060405180830381865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a049190610e0b565b9550955095509550955095506000861115610ab6576040516001600160a01b038616908790600081818185875af1925050503d8060008114610a62576040519150601f19603f3d011682016040523d82523d6000602084013e610a67565b606091505b50508098505087610ab65760405162461bcd60e51b8152602060048201526019602482015278105c9d08109b1bd8dadcc81c185e5b595b9d0819985a5b1959603a1b60448201526064016103d4565b8315610b55576040516001600160a01b038416908590600081818185875af1925050503d8060008114610b05576040519150601f19603f3d011682016040523d82523d6000602084013e610b0a565b606091505b50508098505087610b555760405162461bcd60e51b8152602060048201526015602482015274105c9d1a5cdd081c185e5b595b9d0819985a5b1959605a1b60448201526064016103d4565b8115610bfc576040516001600160a01b038216908390600081818185875af1925050503d8060008114610ba4576040519150601f19603f3d011682016040523d82523d6000602084013e610ba9565b606091505b50508098505087610bfc5760405162461bcd60e51b815260206004820152601f60248201527f4164646974696f6e616c205061796565207061796d656e74206661696c65640060448201526064016103d4565b50505050505050505b5050565b6001600160a01b0381168114610c1e57600080fd5b50565b60008060408385031215610c3457600080fd5b8235610c3f81610c09565b946020939093013593505050565b600060208284031215610c5f57600080fd5b5035919050565b60008060408385031215610c7957600080fd5b50508035926020909101359150565b6000815180845260005b81811015610cae57602081850181015186830182015201610c92565b506000602082860101526020601f19601f83011685010191505092915050565b8415158152836020820152608060408201526000610cef6080830185610c88565b905060018060a01b038316606083015295945050505050565b6020815260006107f76020830184610c88565b600060208284031215610d2d57600080fd5b5051919050565b600060208284031215610d4657600080fd5b81516107f781610c09565b6020808252600b908201526a13db9b1e48105c9d1a5cdd60aa1b604082015260600190565b80518015158114610d8657600080fd5b919050565b60008060008060008060c08789031215610da457600080fd5b8651955060208701519450610dbb60408801610d76565b9350610dc960608801610d76565b925060808701519150610dde60a08801610d76565b90509295509295509295565b818103818111156105dc57634e487b7160e01b600052601160045260246000fd5b60008060008060008060c08789031215610e2457600080fd5b865195506020870151610e3681610c09565b604088015160608901519196509450610e4e81610c09565b608088015160a08901519194509250610e6681610c09565b80915050929550929550929556fea2646970667358221220ad8ca5d52d9e3cb0f46bb5a302403aeb44ef0f0ce0129c24af47b25dbd37e2fa64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a0000000000000000000000003f4bbde879f9bb0e95aea08ff12f55e171495c8f
-----Decoded View---------------
Arg [0] : _genArt721Address (address): 0x942BC2d3e7a589FE5bd4A5C6eF9727DFd82F5C8a
Arg [1] : _minterFilter (address): 0x3F4bbde879F9BB0E95AEa08fF12F55E171495C8f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000942bc2d3e7a589fe5bd4a5c6ef9727dfd82f5c8a
Arg [1] : 0000000000000000000000003f4bbde879f9bb0e95aea08ff12f55e171495c8f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.