ETH Price: $3,333.84 (-3.79%)
Gas: 2 Gwei

Contract

0xA5c08bD40C717acF009b1c152039910Ac2273389
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint161293422022-12-07 0:29:35596 days ago1670372975IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0015597114.76914848
Mint161293242022-12-07 0:25:59596 days ago1670372759IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0013483812.76805026
Mint161293192022-12-07 0:24:59596 days ago1670372699IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0013479312.76385629
Mint161292872022-12-07 0:18:35596 days ago1670372315IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0017223119.45987221
Mint161292722022-12-07 0:15:35596 days ago1670372135IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0023856822.5904248
Mint161292672022-12-07 0:14:35596 days ago1670372075IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0026292524.89684492
Mint161292562022-12-07 0:12:23596 days ago1670371943IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0014531113.75975124
Mint161292112022-12-07 0:03:23596 days ago1670371403IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0013845513.11061343
Mint161291842022-12-06 23:57:59596 days ago1670371079IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0014084313.33667225
Mint161291462022-12-06 23:50:23596 days ago1670370623IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0016483615.60862525
Mint161290752022-12-06 23:35:35596 days ago1670369735IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0017486216.55798738
Mint161290602022-12-06 23:32:35596 days ago1670369555IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0015781814.94404474
Mint161290432022-12-06 23:29:11596 days ago1670369351IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0017390716.46754386
Mint161290422022-12-06 23:28:59596 days ago1670369339IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0013143614.8506128
Mint161290282022-12-06 23:26:11596 days ago1670369171IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0012628911.95858393
Mint161290252022-12-06 23:25:35596 days ago1670369135IN
0xA5c08bD4...Ac2273389
0.06 ETH0.001257114.20363624
Mint161290242022-12-06 23:25:23596 days ago1670369123IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0015664914.8334009
Mint161290222022-12-06 23:24:59596 days ago1670369099IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0014385313.62168707
Mint161290112022-12-06 23:22:47596 days ago1670368967IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0014016713.27270357
Mint161290002022-12-06 23:20:35596 days ago1670368835IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0015322614.50923312
Mint161289922022-12-06 23:18:59596 days ago1670368739IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0014907514.11620385
Mint161289822022-12-06 23:16:59596 days ago1670368619IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0012280613.87545814
Mint161289742022-12-06 23:15:23596 days ago1670368523IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0015391214.57425717
Mint161289732022-12-06 23:15:11596 days ago1670368511IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0013355315.08971377
Mint161289672022-12-06 23:13:59596 days ago1670368439IN
0xA5c08bD4...Ac2273389
0.06 ETH0.0016838915.945069
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
161293422022-12-07 0:29:35596 days ago1670372975
0xA5c08bD4...Ac2273389
0.06 ETH
161293242022-12-07 0:25:59596 days ago1670372759
0xA5c08bD4...Ac2273389
0.06 ETH
161293192022-12-07 0:24:59596 days ago1670372699
0xA5c08bD4...Ac2273389
0.06 ETH
161292872022-12-07 0:18:35596 days ago1670372315
0xA5c08bD4...Ac2273389
0.06 ETH
161292722022-12-07 0:15:35596 days ago1670372135
0xA5c08bD4...Ac2273389
0.06 ETH
161292672022-12-07 0:14:35596 days ago1670372075
0xA5c08bD4...Ac2273389
0.06 ETH
161292562022-12-07 0:12:23596 days ago1670371943
0xA5c08bD4...Ac2273389
0.06 ETH
161292112022-12-07 0:03:23596 days ago1670371403
0xA5c08bD4...Ac2273389
0.06 ETH
161291842022-12-06 23:57:59596 days ago1670371079
0xA5c08bD4...Ac2273389
0.06 ETH
161291462022-12-06 23:50:23596 days ago1670370623
0xA5c08bD4...Ac2273389
0.06 ETH
161290752022-12-06 23:35:35596 days ago1670369735
0xA5c08bD4...Ac2273389
0.06 ETH
161290602022-12-06 23:32:35596 days ago1670369555
0xA5c08bD4...Ac2273389
0.06 ETH
161290432022-12-06 23:29:11596 days ago1670369351
0xA5c08bD4...Ac2273389
0.06 ETH
161290422022-12-06 23:28:59596 days ago1670369339
0xA5c08bD4...Ac2273389
0.06 ETH
161290282022-12-06 23:26:11596 days ago1670369171
0xA5c08bD4...Ac2273389
0.06 ETH
161290252022-12-06 23:25:35596 days ago1670369135
0xA5c08bD4...Ac2273389
0.06 ETH
161290242022-12-06 23:25:23596 days ago1670369123
0xA5c08bD4...Ac2273389
0.06 ETH
161290222022-12-06 23:24:59596 days ago1670369099
0xA5c08bD4...Ac2273389
0.06 ETH
161290112022-12-06 23:22:47596 days ago1670368967
0xA5c08bD4...Ac2273389
0.06 ETH
161290002022-12-06 23:20:35596 days ago1670368835
0xA5c08bD4...Ac2273389
0.06 ETH
161289922022-12-06 23:18:59596 days ago1670368739
0xA5c08bD4...Ac2273389
0.06 ETH
161289822022-12-06 23:16:59596 days ago1670368619
0xA5c08bD4...Ac2273389
0.06 ETH
161289742022-12-06 23:15:23596 days ago1670368523
0xA5c08bD4...Ac2273389
0.06 ETH
161289732022-12-06 23:15:11596 days ago1670368511
0xA5c08bD4...Ac2273389
0.06 ETH
161289672022-12-06 23:13:59596 days ago1670368439
0xA5c08bD4...Ac2273389
0.06 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DropEngine

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : DropEngine.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

/*

███╗   ███╗███████╗████████╗ █████╗ ██╗      █████╗ ██████╗ ███████╗██╗
████╗ ████║██╔════╝╚══██╔══╝██╔══██╗██║     ██╔══██╗██╔══██╗██╔════╝██║
██╔████╔██║█████╗     ██║   ███████║██║     ███████║██████╔╝█████╗  ██║
██║╚██╔╝██║██╔══╝     ██║   ██╔══██║██║     ██╔══██║██╔══██╗██╔══╝  ██║
██║ ╚═╝ ██║███████╗   ██║   ██║  ██║███████╗██║  ██║██████╔╝███████╗███████╗
╚═╝     ╚═╝╚══════╝   ╚═╝   ╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═════╝ ╚══════╝╚══════╝


Deployed by Metalabel with 💖 as a permanent application on the Ethereum blockchain.

Metalabel is a growing universe of tools, knowledge, and resources for
metalabels and cultural collectives.

Our purpose is to establish the metalabel as key infrastructure for creative
collectives and to inspire a new culture of creative collaboration and mutual
support.

OUR SQUAD

Anna Bulbrook (Curator)
Austin Robey (Community)
Brandon Valosek (Engineer)
Ilya Yudanov (Designer)
Lauren Dorman (Engineer)
Rob Kalin (Board)
Yancey Strickler (Director)

https://metalabel.xyz

*/

import {ICollection} from "../interfaces/ICollection.sol";
import {IEngine, SequenceData} from "../interfaces/IEngine.sol";
import {LibString} from "@metalabel/solmate/src/utils/LibString.sol";

/// @notice Data stored engine-side for each drop.
/// @dev Fits in a single storage slot. Price stored as uint80 means max price
/// per record is (2^80-1)/1e18 = 1,208,925 ETH. Royalty percentage is stored as
/// basis points, 5% = 500, max value of 100% = 10000 fits within 2byte int
struct DropData {
    uint80 price;
    uint16 royaltyBps;
    address payable revenueRecipient;
    // no bytes left
}

/// @notice Engine that implements a multi-NFT drop. In a given sequence:
/// - Token data stores edition number on mint (immutable)
/// - Token URIs are derived from as single base URI + edition number
/// - All tokens are the same price
/// - Primary sales and royalties go to the same revenue recipient
contract DropEngine is IEngine {
    // ---
    // Errors
    // ---

    /// @notice Invalid msg.value on purchase
    error IncorrectPaymentAmount();

    /// @notice If price or recipient is zero, they both have to be zero
    error InvalidPriceOrRecipient();

    /// @notice A permissioned mint or attempt to remove the mint authority was
    /// sent from an invalid msg.sender
    error NotMintAuthority();

    /// @notice A public mint was attempted for a sequence that currently has a
    /// mint authority set. Public mint opens after the mint authority is
    /// removed
    error PublicMintNotActive();

    /// @notice Public mints must come from an EOA and not a smart contract
    error MinterMustBeEOA();

    // ---
    // Events
    // ---

    /// @notice A new drop was created.
    /// @dev The collection already emits a SequenceCreated event, we're
    /// emitting the additonal engine-specific data here.
    event DropCreated(
        address collection,
        uint16 sequenceId,
        uint80 price,
        uint16 royaltyBps,
        address recipient,
        string uriPrefix,
        address mintAuthority
    );

    /// @notice The permissioned mint authority for a sequence was removed.
    event PublicMintEnabled(address collection, uint16 sequenceId);

    // ---
    // Storage
    // ---

    /// @notice Drop data for a given collection + sequence ID.
    mapping(address => mapping(uint16 => DropData)) public drops;

    /// @notice Token URI prefix for a given collection + sequence ID
    /// @dev storing separately from DropData structure to save gas during
    /// storage reads on mint.
    mapping(address => mapping(uint16 => string)) public baseTokenURIs;

    /// @notice If set for a given collection / sequence, only this address can
    /// mint.
    mapping(address => mapping(uint16 => address)) public mintAuthorities;

    // ---
    // Mint functionality
    // ---

    /// @notice Mint a new record.
    function mint(ICollection collection, uint16 sequenceId)
        external
        payable
        returns (uint256 tokenId)
    {
        if (msg.sender != tx.origin) revert MinterMustBeEOA();

        DropData storage drop = drops[address(collection)][sequenceId];
        if (msg.value != drop.price) revert IncorrectPaymentAmount();

        // Check if this sequence is permissioned -- so long as their is a mint
        // authority, public mint is not active
        if (mintAuthorities[address(collection)][sequenceId] != address(0)) {
            revert PublicMintNotActive();
        }

        // Immediately forward payment to the recipient. revenueRecipient could
        // be a malicious contract but transfer has a 2300 gas limit
        if (drop.price > 0) {
            drop.revenueRecipient.transfer(msg.value);
        }

        // Collection enforces max mint supply and mint window, so we're not
        // checking that here

        // If collection is a malicious contract, that does not impact any state
        // in the engine.  If it's a valid protocol-deployed collection, then it
        // will work as expected.
        tokenId = collection.mintRecord(msg.sender, sequenceId);
    }

    // ---
    // Permissioned functionality
    // ---

    /// @notice Mint a new record to a specific address, only callable by the
    /// permissioned mint authority for the sequence.
    function permissionedMint(
        ICollection collection,
        uint16 sequenceId,
        address to
    ) external returns (uint256 tokenId) {
        // Ensure msg.sender is the permissioned mint authority
        if (mintAuthorities[address(collection)][sequenceId] != msg.sender) {
            revert NotMintAuthority();
        }

        // Not loading drop data here or sending ETH, permissioned mints are
        // free. Max supply and mint window are still enforced by the downstream
        // collection.

        tokenId = collection.mintRecord(to, sequenceId);
    }

    /// @notice Permanently remove the mint authority for a given sequence.
    function clearMintAuthority(ICollection collection, uint16 sequenceId)
        external
    {
        if (mintAuthorities[address(collection)][sequenceId] != msg.sender) {
            revert NotMintAuthority();
        }

        delete mintAuthorities[address(collection)][sequenceId];
        emit PublicMintEnabled(address(collection), sequenceId);
    }

    // ---
    // IEngine setup
    // ---

    /// @inheritdoc IEngine
    /// @dev There is no access control on this function, we infer the
    /// collection from msg.sender, and use that to key the stored data. If
    /// somebody calls this function with bogus info (instead of it getting
    /// called via the collection), it just wastes storage but does not impact
    /// contract functionality
    function configureSequence(
        uint16 sequenceId,
        SequenceData calldata, /* sequenceData */
        bytes calldata engineData
    ) external {
        (
            uint80 price,
            uint16 royaltyBps,
            address payable recipient,
            string memory uriPrefix,
            address mintAuthority
        ) = abi.decode(engineData, (uint80, uint16, address, string, address));

        // Ensure that if a price is set, a recipient is set, and vice versa
        if ((price == 0) != (recipient == address(0))) {
            revert InvalidPriceOrRecipient();
        }

        // Set the permissioned mint authority if provided
        if (mintAuthority != address(0)) {
            mintAuthorities[msg.sender][sequenceId] = mintAuthority;
        }

        // Write engine data (passed through from the collection when the
        // collection admin calls `configureSequence`) to a struct in the engine
        // with all the needed info.
        drops[msg.sender][sequenceId] = DropData({
            price: price,
            royaltyBps: royaltyBps,
            revenueRecipient: recipient
        });
        baseTokenURIs[msg.sender][sequenceId] = uriPrefix;
        emit DropCreated(
            msg.sender,
            sequenceId,
            price,
            royaltyBps,
            recipient,
            uriPrefix,
            mintAuthority
        );
    }

    // ---
    // IEngine views
    // ---

    /// @inheritdoc IEngine
    /// @dev Token URI is derived from the base URI + edition number. Edition
    /// number is written to immutable token data on mint.
    function getTokenURI(address collection, uint256 tokenId)
        external
        view
        override
        returns (string memory)
    {
        uint16 sequenceId = ICollection(collection).tokenSequenceId(tokenId);
        uint80 editionNumber = ICollection(collection).tokenMintData(tokenId);

        return
            string(
                abi.encodePacked(
                    baseTokenURIs[collection][sequenceId],
                    LibString.toString(editionNumber),
                    ".json"
                )
            );
    }

    /// @inheritdoc IEngine
    /// @dev Royalty bps and recipient is per-sequence.
    function getRoyaltyInfo(
        address collection,
        uint256 tokenId,
        uint256 salePrice
    ) external view override returns (address, uint256) {
        uint16 sequenceId = ICollection(collection).tokenSequenceId(tokenId);
        DropData memory drop = drops[collection][sequenceId];
        return (drop.revenueRecipient, (salePrice * drop.royaltyBps) / 10000);
    }
}

File 2 of 4 : LibString.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;

/// @notice Efficient library for creating string representations of integers.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/LibString.sol)
/// @author Modified from Solady (https://github.com/Vectorized/solady/blob/main/src/utils/LibString.sol)
library LibString {
    function toString(uint256 value) internal pure returns (string memory str) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), but we allocate 160 bytes
            // to keep the free memory pointer word aligned. We'll need 1 word for the length, 1 word for the
            // trailing zeros padding, and 3 other words for a max of 78 digits. In total: 5 * 32 = 160 bytes.
            let newFreeMemoryPointer := add(mload(0x40), 160)

            // Update the free memory pointer to avoid overriding our string.
            mstore(0x40, newFreeMemoryPointer)

            // Assign str to the end of the zone of newly allocated memory.
            str := sub(newFreeMemoryPointer, 32)

            // Clean the last word of memory it may not be overwritten.
            mstore(str, 0)

            // Cache the end of the memory to calculate the length later.
            let end := str

            // We write the string from rightmost digit to leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // prettier-ignore
            for { let temp := value } 1 {} {
                // Move the pointer 1 byte to the left.
                str := sub(str, 1)

                // Write the character to the pointer.
                // The ASCII index of the '0' character is 48.
                mstore8(str, add(48, mod(temp, 10)))

                // Keep dividing temp until zero.
                temp := div(temp, 10)

                 // prettier-ignore
                if iszero(temp) { break }
            }

            // Compute and cache the final total length of the string.
            let length := sub(end, str)

            // Move the pointer 32 bytes leftwards to make room for the length.
            str := sub(str, 32)

            // Store the string's length at the start of memory allocated for our string.
            mstore(str, length)
        }
    }
}

File 3 of 4 : ICollection.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

/// @notice Collections are ERC721 contracts that contain records.
interface ICollection {
    /// @notice Mint a new record with custom immutable token data. Only
    /// callable by the sequence-specific engine.
    function mintRecord(
        address to,
        uint16 sequenceId,
        uint80 tokenData
    ) external returns (uint256 tokenId);

    /// @notice Mint a new record with the edition number of the seqeuence
    /// written to the immutable token data. Only callable by the
    /// sequence-specific engine.
    function mintRecord(address to, uint16 sequenceId)
        external
        returns (uint256 tokenId);

    /// @notice Get the sequence ID for a given token.
    function tokenSequenceId(uint256 tokenId)
        external
        view
        returns (uint16 sequenceId);

    /// @notice Get the immutable mint data for a given token.
    function tokenMintData(uint256 tokenId) external view returns (uint80 data);
}

File 4 of 4 : IEngine.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

/// @notice Data stored in the collection for each sequence.
/// @dev We could use smaller ints for timestamps and supply, but we'd still be
/// stuck with a 2-word storage layout. engine + dropNodeId is 28 bytes, leaving
/// us with only 4 bytes for the remaining parameters.
struct SequenceData {
    uint64 sealedBeforeTimestamp;
    uint64 sealedAfterTimestamp;
    uint64 maxSupply;
    uint64 minted;
    IEngine engine;
    uint64 dropNodeId;
    // 4 bytes remaining
}

/// @notice An engine contract implements record minting mechanics, tokenURI
/// computation, and royalty computation.
interface IEngine {
    /// @notice Called by the collection when a new sequence is configured.
    /// @dev An arbitrary bytes buffer engineData is forwarded from the
    /// collection that can be used to pass setup and configuration data
    function configureSequence(
        uint16 sequenceId,
        SequenceData calldata sequence,
        bytes calldata engineData
    ) external;

    /// @notice Called by the collection to resolve tokenURI.
    function getTokenURI(address collection, uint256 tokenId)
        external
        view
        returns (string memory);

    /// @notice Called by the collection to resolve royalties.
    function getRoyaltyInfo(
        address collection,
        uint256 tokenId,
        uint256 salePrice
    ) external view returns (address receiver, uint256 royaltyAmount);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"IncorrectPaymentAmount","type":"error"},{"inputs":[],"name":"InvalidPriceOrRecipient","type":"error"},{"inputs":[],"name":"MinterMustBeEOA","type":"error"},{"inputs":[],"name":"NotMintAuthority","type":"error"},{"inputs":[],"name":"PublicMintNotActive","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint16","name":"sequenceId","type":"uint16"},{"indexed":false,"internalType":"uint80","name":"price","type":"uint80"},{"indexed":false,"internalType":"uint16","name":"royaltyBps","type":"uint16"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"string","name":"uriPrefix","type":"string"},{"indexed":false,"internalType":"address","name":"mintAuthority","type":"address"}],"name":"DropCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"uint16","name":"sequenceId","type":"uint16"}],"name":"PublicMintEnabled","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"baseTokenURIs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ICollection","name":"collection","type":"address"},{"internalType":"uint16","name":"sequenceId","type":"uint16"}],"name":"clearMintAuthority","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sequenceId","type":"uint16"},{"components":[{"internalType":"uint64","name":"sealedBeforeTimestamp","type":"uint64"},{"internalType":"uint64","name":"sealedAfterTimestamp","type":"uint64"},{"internalType":"uint64","name":"maxSupply","type":"uint64"},{"internalType":"uint64","name":"minted","type":"uint64"},{"internalType":"contract IEngine","name":"engine","type":"address"},{"internalType":"uint64","name":"dropNodeId","type":"uint64"}],"internalType":"struct SequenceData","name":"","type":"tuple"},{"internalType":"bytes","name":"engineData","type":"bytes"}],"name":"configureSequence","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"drops","outputs":[{"internalType":"uint80","name":"price","type":"uint80"},{"internalType":"uint16","name":"royaltyBps","type":"uint16"},{"internalType":"address payable","name":"revenueRecipient","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"salePrice","type":"uint256"}],"name":"getRoyaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ICollection","name":"collection","type":"address"},{"internalType":"uint16","name":"sequenceId","type":"uint16"}],"name":"mint","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint16","name":"","type":"uint16"}],"name":"mintAuthorities","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract ICollection","name":"collection","type":"address"},{"internalType":"uint16","name":"sequenceId","type":"uint16"},{"internalType":"address","name":"to","type":"address"}],"name":"permissionedMint","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506110e0806100206000396000f3fe6080604052600436106100865760003560e01c80639b46c29f116100595780639b46c29f14610142578063ad0be4bd14610162578063e4d76a4814610183578063f2c565db146101a3578063f746f01f146101fc57600080fd5b80630b63fd621461008b5780630d8e8f90146100c157806322a5c8d0146100e357806336de974214610103575b600080fd5b34801561009757600080fd5b506100ab6100a6366004610b55565b610289565b6040516100b89190610bdd565b60405180910390f35b3480156100cd57600080fd5b506100e16100dc366004610c07565b6103cd565b005b3480156100ef57600080fd5b506100e16100fe366004610c40565b610489565b34801561010f57600080fd5b5061012361011e366004610cdd565b6106b1565b604080516001600160a01b0390931683526020830191909152016100b8565b34801561014e57600080fd5b506100ab61015d366004610c07565b6107af565b610175610170366004610c07565b610854565b6040519081526020016100b8565b34801561018f57600080fd5b5061017561019e366004610d12565b6109dd565b3480156101af57600080fd5b506101e46101be366004610c07565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b34801561020857600080fd5b50610258610217366004610c07565b60006020818152928152604080822090935290815220546001600160501b03811690600160501b810461ffff1690600160601b90046001600160a01b031683565b604080516001600160501b03909416845261ffff90921660208401526001600160a01b0316908201526060016100b8565b6040516305b5acb960e31b8152600481018290526060906000906001600160a01b03851690632dad65c890602401602060405180830381865afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610d5d565b604051633aa9eee560e21b8152600481018590529091506000906001600160a01b0386169063eaa7bb9490602401602060405180830381865afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610d8f565b6001600160a01b038616600090815260016020908152604080832061ffff8716845290915290209091506103a36001600160501b038316610a60565b6040516020016103b4929190610e02565b6040516020818303038152906040529250505092915050565b6001600160a01b03828116600090815260026020908152604080832061ffff8616845290915290205416331461041657604051637d77780760e11b815260040160405180910390fd5b6001600160a01b038216600081815260026020908152604080832061ffff86168085529083529281902080546001600160a01b03191690558051938452908301919091527fd21d15ebf75782a96add78aa6745d2dc2352e69cf349b247a28670d680fe0fa9910160405180910390a15050565b60008080808061049b86880188610ee2565b9398509196509450925090506001600160501b038516156001600160a01b03841615146104db5760405163f1c970d160e01b815260040160405180910390fd5b6001600160a01b038116156105225733600090815260026020908152604080832061ffff8d168452909152902080546001600160a01b0319166001600160a01b0383161790555b6040518060600160405280866001600160501b031681526020018561ffff168152602001846001600160a01b0316815250600080336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a8154816001600160501b0302191690836001600160501b03160217905550602082015181600001600a6101000a81548161ffff021916908361ffff160217905550604082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050508160016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff1681526020019081526020016000209080519060200190610662929190610aa4565b507f7357c827c27a97719fc1ea5d2ca7683516ccb10a2688dffd1e0519d18ff0bdfa338a878787878760405161069e9796959493929190610fdc565b60405180910390a1505050505050505050565b6000806000856001600160a01b0316632dad65c8866040518263ffffffff1660e01b81526004016106e491815260200190565b602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190610d5d565b6001600160a01b0380881660009081526020818152604080832061ffff808716855290835292819020815160608101835290546001600160501b0381168252600160501b8104909416928101839052600160601b90930490931692820183905292935091612710906107979088611042565b6107a1919061106f565b935093505050935093915050565b6001602090815260009283526040808420909152908252902080546107d390610dac565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90610dac565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b505050505081565b6000333214610876576040516378005e7b60e11b815260040160405180910390fd5b6001600160a01b03831660009081526020818152604080832061ffff86168452909152902080546001600160501b031634146108c557604051636992e1ff60e01b815260040160405180910390fd5b6001600160a01b03848116600090815260026020908152604080832061ffff88168452909152902054161561090d5760405163cd967e3560e01b815260040160405180910390fd5b80546001600160501b0316156109605780546040516001600160a01b03600160601b90920491909116903480156108fc02916000818181858888f1935050505015801561095e573d6000803e3d6000fd5b505b604051636342747b60e01b815233600482015261ffff841660248201526001600160a01b03851690636342747b906044015b6020604051808303816000875af11580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190611091565b949350505050565b6001600160a01b03838116600090815260026020908152604080832061ffff871684529091528120549091163314610a2857604051637d77780760e11b815260040160405180910390fd5b604051636342747b60e01b81526001600160a01b03838116600483015261ffff85166024830152851690636342747b90604401610992565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480610a7a5750819003601f19909101908152919050565b828054610ab090610dac565b90600052602060002090601f016020900481019282610ad25760008555610b18565b82601f10610aeb57805160ff1916838001178555610b18565b82800160010185558215610b18579182015b82811115610b18578251825591602001919060010190610afd565b50610b24929150610b28565b5090565b5b80821115610b245760008155600101610b29565b6001600160a01b0381168114610b5257600080fd5b50565b60008060408385031215610b6857600080fd5b8235610b7381610b3d565b946020939093013593505050565b60005b83811015610b9c578181015183820152602001610b84565b83811115610bab576000848401525b50505050565b60008151808452610bc9816020860160208601610b81565b601f01601f19169290920160200192915050565b602081526000610bf06020830184610bb1565b9392505050565b61ffff81168114610b5257600080fd5b60008060408385031215610c1a57600080fd5b8235610c2581610b3d565b91506020830135610c3581610bf7565b809150509250929050565b600080600080848603610100811215610c5857600080fd5b8535610c6381610bf7565b945060c0601f1982011215610c7757600080fd5b5060208501925060e085013567ffffffffffffffff80821115610c9957600080fd5b818701915087601f830112610cad57600080fd5b813581811115610cbc57600080fd5b886020828501011115610cce57600080fd5b95989497505060200194505050565b600080600060608486031215610cf257600080fd5b8335610cfd81610b3d565b95602085013595506040909401359392505050565b600080600060608486031215610d2757600080fd5b8335610d3281610b3d565b92506020840135610d4281610bf7565b91506040840135610d5281610b3d565b809150509250925092565b600060208284031215610d6f57600080fd5b8151610bf081610bf7565b6001600160501b0381168114610b5257600080fd5b600060208284031215610da157600080fd5b8151610bf081610d7a565b600181811c90821680610dc057607f821691505b602082108103610de057634e487b7160e01b600052602260045260246000fd5b50919050565b60008151610df8818560208601610b81565b9290920192915050565b600080845481600182811c915080831680610e1e57607f831692505b60208084108203610e3d57634e487b7160e01b86526022600452602486fd5b818015610e515760018114610e6257610e8f565b60ff19861689528489019650610e8f565b60008b81526020902060005b86811015610e875781548b820152908501908301610e6e565b505084890196505b505050505050610eb3610ea28286610de6565b64173539b7b760d91b815260050190565b95945050505050565b8035610ec781610b3d565b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215610efa57600080fd5b8535610f0581610d7a565b94506020860135610f1581610bf7565b93506040860135610f2581610b3d565b9250606086013567ffffffffffffffff80821115610f4257600080fd5b818801915088601f830112610f5657600080fd5b813581811115610f6857610f68610ecc565b604051601f8201601f19908116603f01168101908382118183101715610f9057610f90610ecc565b816040528281528b6020848701011115610fa957600080fd5b826020860160208301376000602084830101528096505050505050610fd060808701610ebc565b90509295509295909350565b6001600160a01b03888116825261ffff88811660208401526001600160501b038816604084015286166060830152848116608083015260e060a083018190526000919061102b90840186610bb1565b915080841660c08401525098975050505050505050565b600081600019048311821515161561106a57634e487b7160e01b600052601160045260246000fd5b500290565b60008261108c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156110a357600080fd5b505191905056fea2646970667358221220214cc50180946cdebbcccaae84c951ee364e24cc9832824fa0227131169d999164736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106100865760003560e01c80639b46c29f116100595780639b46c29f14610142578063ad0be4bd14610162578063e4d76a4814610183578063f2c565db146101a3578063f746f01f146101fc57600080fd5b80630b63fd621461008b5780630d8e8f90146100c157806322a5c8d0146100e357806336de974214610103575b600080fd5b34801561009757600080fd5b506100ab6100a6366004610b55565b610289565b6040516100b89190610bdd565b60405180910390f35b3480156100cd57600080fd5b506100e16100dc366004610c07565b6103cd565b005b3480156100ef57600080fd5b506100e16100fe366004610c40565b610489565b34801561010f57600080fd5b5061012361011e366004610cdd565b6106b1565b604080516001600160a01b0390931683526020830191909152016100b8565b34801561014e57600080fd5b506100ab61015d366004610c07565b6107af565b610175610170366004610c07565b610854565b6040519081526020016100b8565b34801561018f57600080fd5b5061017561019e366004610d12565b6109dd565b3480156101af57600080fd5b506101e46101be366004610c07565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6040516001600160a01b0390911681526020016100b8565b34801561020857600080fd5b50610258610217366004610c07565b60006020818152928152604080822090935290815220546001600160501b03811690600160501b810461ffff1690600160601b90046001600160a01b031683565b604080516001600160501b03909416845261ffff90921660208401526001600160a01b0316908201526060016100b8565b6040516305b5acb960e31b8152600481018290526060906000906001600160a01b03851690632dad65c890602401602060405180830381865afa1580156102d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f89190610d5d565b604051633aa9eee560e21b8152600481018590529091506000906001600160a01b0386169063eaa7bb9490602401602060405180830381865afa158015610343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103679190610d8f565b6001600160a01b038616600090815260016020908152604080832061ffff8716845290915290209091506103a36001600160501b038316610a60565b6040516020016103b4929190610e02565b6040516020818303038152906040529250505092915050565b6001600160a01b03828116600090815260026020908152604080832061ffff8616845290915290205416331461041657604051637d77780760e11b815260040160405180910390fd5b6001600160a01b038216600081815260026020908152604080832061ffff86168085529083529281902080546001600160a01b03191690558051938452908301919091527fd21d15ebf75782a96add78aa6745d2dc2352e69cf349b247a28670d680fe0fa9910160405180910390a15050565b60008080808061049b86880188610ee2565b9398509196509450925090506001600160501b038516156001600160a01b03841615146104db5760405163f1c970d160e01b815260040160405180910390fd5b6001600160a01b038116156105225733600090815260026020908152604080832061ffff8d168452909152902080546001600160a01b0319166001600160a01b0383161790555b6040518060600160405280866001600160501b031681526020018561ffff168152602001846001600160a01b0316815250600080336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff16815260200190815260200160002060008201518160000160006101000a8154816001600160501b0302191690836001600160501b03160217905550602082015181600001600a6101000a81548161ffff021916908361ffff160217905550604082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b031602179055509050508160016000336001600160a01b03166001600160a01b0316815260200190815260200160002060008b61ffff1661ffff1681526020019081526020016000209080519060200190610662929190610aa4565b507f7357c827c27a97719fc1ea5d2ca7683516ccb10a2688dffd1e0519d18ff0bdfa338a878787878760405161069e9796959493929190610fdc565b60405180910390a1505050505050505050565b6000806000856001600160a01b0316632dad65c8866040518263ffffffff1660e01b81526004016106e491815260200190565b602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190610d5d565b6001600160a01b0380881660009081526020818152604080832061ffff808716855290835292819020815160608101835290546001600160501b0381168252600160501b8104909416928101839052600160601b90930490931692820183905292935091612710906107979088611042565b6107a1919061106f565b935093505050935093915050565b6001602090815260009283526040808420909152908252902080546107d390610dac565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff90610dac565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b505050505081565b6000333214610876576040516378005e7b60e11b815260040160405180910390fd5b6001600160a01b03831660009081526020818152604080832061ffff86168452909152902080546001600160501b031634146108c557604051636992e1ff60e01b815260040160405180910390fd5b6001600160a01b03848116600090815260026020908152604080832061ffff88168452909152902054161561090d5760405163cd967e3560e01b815260040160405180910390fd5b80546001600160501b0316156109605780546040516001600160a01b03600160601b90920491909116903480156108fc02916000818181858888f1935050505015801561095e573d6000803e3d6000fd5b505b604051636342747b60e01b815233600482015261ffff841660248201526001600160a01b03851690636342747b906044015b6020604051808303816000875af11580156109b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d59190611091565b949350505050565b6001600160a01b03838116600090815260026020908152604080832061ffff871684529091528120549091163314610a2857604051637d77780760e11b815260040160405180910390fd5b604051636342747b60e01b81526001600160a01b03838116600483015261ffff85166024830152851690636342747b90604401610992565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a900480610a7a5750819003601f19909101908152919050565b828054610ab090610dac565b90600052602060002090601f016020900481019282610ad25760008555610b18565b82601f10610aeb57805160ff1916838001178555610b18565b82800160010185558215610b18579182015b82811115610b18578251825591602001919060010190610afd565b50610b24929150610b28565b5090565b5b80821115610b245760008155600101610b29565b6001600160a01b0381168114610b5257600080fd5b50565b60008060408385031215610b6857600080fd5b8235610b7381610b3d565b946020939093013593505050565b60005b83811015610b9c578181015183820152602001610b84565b83811115610bab576000848401525b50505050565b60008151808452610bc9816020860160208601610b81565b601f01601f19169290920160200192915050565b602081526000610bf06020830184610bb1565b9392505050565b61ffff81168114610b5257600080fd5b60008060408385031215610c1a57600080fd5b8235610c2581610b3d565b91506020830135610c3581610bf7565b809150509250929050565b600080600080848603610100811215610c5857600080fd5b8535610c6381610bf7565b945060c0601f1982011215610c7757600080fd5b5060208501925060e085013567ffffffffffffffff80821115610c9957600080fd5b818701915087601f830112610cad57600080fd5b813581811115610cbc57600080fd5b886020828501011115610cce57600080fd5b95989497505060200194505050565b600080600060608486031215610cf257600080fd5b8335610cfd81610b3d565b95602085013595506040909401359392505050565b600080600060608486031215610d2757600080fd5b8335610d3281610b3d565b92506020840135610d4281610bf7565b91506040840135610d5281610b3d565b809150509250925092565b600060208284031215610d6f57600080fd5b8151610bf081610bf7565b6001600160501b0381168114610b5257600080fd5b600060208284031215610da157600080fd5b8151610bf081610d7a565b600181811c90821680610dc057607f821691505b602082108103610de057634e487b7160e01b600052602260045260246000fd5b50919050565b60008151610df8818560208601610b81565b9290920192915050565b600080845481600182811c915080831680610e1e57607f831692505b60208084108203610e3d57634e487b7160e01b86526022600452602486fd5b818015610e515760018114610e6257610e8f565b60ff19861689528489019650610e8f565b60008b81526020902060005b86811015610e875781548b820152908501908301610e6e565b505084890196505b505050505050610eb3610ea28286610de6565b64173539b7b760d91b815260050190565b95945050505050565b8035610ec781610b3d565b919050565b634e487b7160e01b600052604160045260246000fd5b600080600080600060a08688031215610efa57600080fd5b8535610f0581610d7a565b94506020860135610f1581610bf7565b93506040860135610f2581610b3d565b9250606086013567ffffffffffffffff80821115610f4257600080fd5b818801915088601f830112610f5657600080fd5b813581811115610f6857610f68610ecc565b604051601f8201601f19908116603f01168101908382118183101715610f9057610f90610ecc565b816040528281528b6020848701011115610fa957600080fd5b826020860160208301376000602084830101528096505050505050610fd060808701610ebc565b90509295509295909350565b6001600160a01b03888116825261ffff88811660208401526001600160501b038816604084015286166060830152848116608083015260e060a083018190526000919061102b90840186610bb1565b915080841660c08401525098975050505050505050565b600081600019048311821515161561106a57634e487b7160e01b600052601160045260246000fd5b500290565b60008261108c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156110a357600080fd5b505191905056fea2646970667358221220214cc50180946cdebbcccaae84c951ee364e24cc9832824fa0227131169d999164736f6c634300080d0033

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.