APE Price: $1.14 (+7.43%)

Contract

0xebD1b99336cdDEFea2380566186F849c38a100Ce

Overview

APE Balance

Apechain LogoApechain LogoApechain Logo0 APE

APE Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x6080806016549982024-10-25 4:01:562 days ago1729828916IN
 Create: CreatorFixedPriceSaleStrategy
0 APE0.018097925.42069

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CreatorFixedPriceSaleStrategy

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 11 : CreatorFixedPriceSaleStrategy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { IMinter1155 } from "../../interfaces/IMinter1155.sol";
import { ICreatorCommands } from "../../interfaces/ICreatorCommands.sol";
import { SaleStrategy } from "../SaleStrategy.sol";
import { SaleCommandHelper } from "../utils/SaleCommandHelper.sol";
import { LimitedMintPerAddress } from "../utils/LimitedMintPerAddress.sol";

/// @title CreatorFixedPriceSaleStrategy
/// @notice A sale strategy for Creator that allows for fixed price sales over a given time period
contract CreatorFixedPriceSaleStrategy is SaleStrategy, LimitedMintPerAddress {
    struct SalesConfig {
        /// @notice Unix timestamp for the sale start
        uint64 saleStart;
        /// @notice Unix timestamp for the sale end
        uint64 saleEnd;
        /// @notice Max tokens that can be minted for an address, 0 if unlimited
        uint64 maxTokensPerAddress;
        /// @notice Price per token in eth wei
        uint96 pricePerToken;
        /// @notice Funds recipient (0 if no different funds recipient than the contract global)
        address fundsRecipient;
    }

    // target -> tokenId -> settings
    mapping(address => mapping(uint256 => SalesConfig)) internal salesConfigs;

    using SaleCommandHelper for ICreatorCommands.CommandSet;

    /// @notice The name of the sale strategy
    function contractName() external pure override returns (string memory) {
        return "Fixed Price Sale Strategy";
    }

    /// @notice The version of the sale strategy
    function contractVersion() external pure override returns (string memory) {
        return "1";
    }

    error WrongValueSent();
    error SaleEnded();
    error SaleHasNotStarted();

    event SaleSet(address indexed mediaContract, uint256 indexed tokenId, SalesConfig salesConfig);
    event MintComment(
        address indexed sender, address indexed tokenContract, uint256 indexed tokenId, uint256 quantity, string comment
    );

    /// @notice Compiles and returns the commands needed to mint a token using this sales strategy
    /// @param tokenId The token ID to mint
    /// @param quantity The quantity of tokens to mint
    /// @param ethValueSent The amount of ETH sent with the transaction
    /// @param minterArguments The arguments passed to the minter, which should be the address to mint to
    function requestMint(
        address,
        uint256 tokenId,
        uint256 quantity,
        uint256 ethValueSent,
        bytes calldata minterArguments
    )
        external
        returns (ICreatorCommands.CommandSet memory commands)
    {
        address mintTo;
        string memory comment = "";
        if (minterArguments.length == 32) {
            mintTo = abi.decode(minterArguments, (address));
        } else {
            (mintTo, comment) = abi.decode(minterArguments, (address, string));
        }

        SalesConfig storage config = salesConfigs[msg.sender][tokenId];

        // If sales config does not exist this first check will always fail.

        // Check sale end
        if (block.timestamp > config.saleEnd) {
            revert SaleEnded();
        }

        // Check sale start
        if (block.timestamp < config.saleStart) {
            revert SaleHasNotStarted();
        }

        // Check value sent
        if (config.pricePerToken * quantity != ethValueSent) {
            revert WrongValueSent();
        }

        // Check minted per address limit
        if (config.maxTokensPerAddress > 0) {
            _requireMintNotOverLimitAndUpdate(config.maxTokensPerAddress, quantity, msg.sender, tokenId, mintTo);
        }

        bool shouldTransferFunds = config.fundsRecipient != address(0);
        commands.setSize(shouldTransferFunds ? 2 : 1);

        // Mint command
        commands.mint(mintTo, tokenId, quantity);

        if (bytes(comment).length > 0) {
            emit MintComment(mintTo, msg.sender, tokenId, quantity, comment);
        }

        // Should transfer funds if funds recipient is set to a non-default address
        if (shouldTransferFunds) {
            commands.transfer(config.fundsRecipient, ethValueSent);
        }
    }

    /// @notice Sets the sale config for a given token
    function setSale(uint256 tokenId, SalesConfig memory salesConfig) external {
        salesConfigs[msg.sender][tokenId] = salesConfig;

        // Emit event
        emit SaleSet(msg.sender, tokenId, salesConfig);
    }

    /// @notice Deletes the sale config for a given token
    function resetSale(uint256 tokenId) external override {
        delete salesConfigs[msg.sender][tokenId];

        // Deleted sale emit event
        emit SaleSet(msg.sender, tokenId, salesConfigs[msg.sender][tokenId]);
    }

    /// @notice Returns the sale config for a given token
    function sale(address tokenContract, uint256 tokenId) external view returns (SalesConfig memory) {
        return salesConfigs[tokenContract][tokenId];
    }

    function supportsInterface(bytes4 interfaceId)
        public
        pure
        virtual
        override(LimitedMintPerAddress, SaleStrategy)
        returns (bool)
    {
        return super.supportsInterface(interfaceId) || LimitedMintPerAddress.supportsInterface(interfaceId)
            || SaleStrategy.supportsInterface(interfaceId);
    }
}

File 2 of 11 : IMinter1155.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol";
import { ICreatorCommands } from "./ICreatorCommands.sol";

/// @notice Minter standard interface
/// @dev Minters need to confirm to the ERC165 selector of type(IMinter1155).interfaceId
interface IMinter1155 is IERC165Upgradeable {
    function requestMint(
        address sender,
        uint256 tokenId,
        uint256 quantity,
        uint256 ethValueSent,
        bytes calldata minterArguments
    )
        external
        returns (ICreatorCommands.CommandSet memory commands);
}

File 3 of 11 : ICreatorCommands.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

/// @notice Creator Commands used by minter modules passed back to the main modules
interface ICreatorCommands {
    /// @notice This enum is used to define supported creator action types.
    /// This can change in the future
    enum CreatorActions
    // No operation - also the default for mintings that may not return a command
    {
        NO_OP,
        // Send ether
        SEND_ETH,
        // Mint operation
        MINT
    }

    /// @notice This command is for
    struct Command {
        // Method for operation
        CreatorActions method;
        // Arguments used for this operation
        bytes args;
    }

    /// @notice This command set is returned from the minter back to the user
    struct CommandSet {
        Command[] commands;
        uint256 at;
    }
}

File 4 of 11 : SaleStrategy.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol";
import { IMinter1155 } from "../interfaces/IMinter1155.sol";
import { IContractMetadata } from "../interfaces/IContractMetadata.sol";
import { IVersionedContract } from "../interfaces/IVersionedContract.sol";

/// @notice Sales Strategy Helper contract template on top of IMinter1155
abstract contract SaleStrategy is IMinter1155, IVersionedContract, IContractMetadata {
    /// @notice This function resets the sales configuration for a given tokenId and contract.
    /// @dev This function is intentioned to be called directly from the affected sales contract
    function resetSale(uint256 tokenId) external virtual;

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool) {
        return interfaceId == type(IMinter1155).interfaceId || interfaceId == type(IERC165Upgradeable).interfaceId;
    }
}

File 5 of 11 : SaleCommandHelper.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { ICreatorCommands } from "../../interfaces/ICreatorCommands.sol";

/// @title SaleCommandHelper
/// @notice Helper library for creating commands for the sale contract
library SaleCommandHelper {
    /// @notice Sets the size of commands and initializes command array. Empty entries are skipped by the resolver.
    /// @dev Beware: this removes all previous command entries from memory
    /// @param commandSet command set struct storage.
    /// @param size size to set for the new struct
    function setSize(ICreatorCommands.CommandSet memory commandSet, uint256 size) internal pure {
        commandSet.commands = new ICreatorCommands.Command[](size);
    }

    /// @notice Creates a command to mint a token
    /// @param commandSet The command set to add the command to
    /// @param to The address to mint to
    /// @param tokenId The token ID to mint
    /// @param quantity The quantity of tokens to mint
    function mint(
        ICreatorCommands.CommandSet memory commandSet,
        address to,
        uint256 tokenId,
        uint256 quantity
    )
        internal
        pure
    {
        unchecked {
            commandSet.commands[commandSet.at++] = ICreatorCommands.Command({
                method: ICreatorCommands.CreatorActions.MINT,
                args: abi.encode(to, tokenId, quantity)
            });
        }
    }

    /// @notice Creates a command to transfer ETH
    /// @param commandSet The command set to add the command to
    /// @param to The address to transfer to
    /// @param amount The amount of ETH to transfer
    function transfer(ICreatorCommands.CommandSet memory commandSet, address to, uint256 amount) internal pure {
        unchecked {
            commandSet.commands[commandSet.at++] = ICreatorCommands.Command({
                method: ICreatorCommands.CreatorActions.SEND_ETH,
                args: abi.encode(to, amount)
            });
        }
    }
}

File 6 of 11 : LimitedMintPerAddress.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { ILimitedMintPerAddress } from "../../interfaces/ILimitedMintPerAddress.sol";

contract LimitedMintPerAddress is ILimitedMintPerAddress {
    /// @notice Storage for slot to check user mints
    /// @notice target contract -> tokenId -> minter user -> numberMinted
    /// @dev No gap or stroage interface since this is used within non-upgradeable contracts
    mapping(address => mapping(uint256 => mapping(address => uint256))) internal mintedPerAddress;

    function getMintedPerWallet(
        address tokenContract,
        uint256 tokenId,
        address wallet
    )
        external
        view
        returns (uint256)
    {
        return mintedPerAddress[tokenContract][tokenId][wallet];
    }

    function _requireMintNotOverLimitAndUpdate(
        uint256 limit,
        uint256 numRequestedMint,
        address tokenContract,
        uint256 tokenId,
        address wallet
    )
        internal
    {
        mintedPerAddress[tokenContract][tokenId][wallet] += numRequestedMint;
        if (mintedPerAddress[tokenContract][tokenId][wallet] > limit) {
            revert UserExceedsMintLimit(wallet, limit, mintedPerAddress[tokenContract][tokenId][wallet]);
        }
    }

    function supportsInterface(bytes4 interfaceId) public pure virtual override returns (bool) {
        return interfaceId == type(ILimitedMintPerAddress).interfaceId;
    }
}

File 7 of 11 : IERC165Upgradeable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165Upgradeable.sol";

File 8 of 11 : IContractMetadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IContractMetadata {
    /// @notice Contract name returns the pretty contract name
    function contractName() external returns (string memory);
}

File 9 of 11 : IVersionedContract.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

interface IVersionedContract {
    function contractVersion() external returns (string memory);
}

File 10 of 11 : ILimitedMintPerAddress.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

import { IERC165Upgradeable } from "@openzeppelin/contracts-upgradeable/interfaces/IERC165Upgradeable.sol";

interface ILimitedMintPerAddress is IERC165Upgradeable {
    error UserExceedsMintLimit(address user, uint256 limit, uint256 requestedAmount);

    function getMintedPerWallet(address token, uint256 tokenId, address wallet) external view returns (uint256);
}

File 11 of 11 : IERC165Upgradeable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165Upgradeable {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "forge-std/=lib/forge-std/src/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/",
    "solmate/=lib/solmate/src/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": true,
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"SaleEnded","type":"error"},{"inputs":[],"name":"SaleHasNotStarted","type":"error"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"name":"UserExceedsMintLimit","type":"error"},{"inputs":[],"name":"WrongValueSent","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"string","name":"comment","type":"string"}],"name":"MintComment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"mediaContract","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint64","name":"saleStart","type":"uint64"},{"internalType":"uint64","name":"saleEnd","type":"uint64"},{"internalType":"uint64","name":"maxTokensPerAddress","type":"uint64"},{"internalType":"uint96","name":"pricePerToken","type":"uint96"},{"internalType":"address","name":"fundsRecipient","type":"address"}],"indexed":false,"internalType":"struct CreatorFixedPriceSaleStrategy.SalesConfig","name":"salesConfig","type":"tuple"}],"name":"SaleSet","type":"event"},{"inputs":[],"name":"contractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"getMintedPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"ethValueSent","type":"uint256"},{"internalType":"bytes","name":"minterArguments","type":"bytes"}],"name":"requestMint","outputs":[{"components":[{"components":[{"internalType":"enum ICreatorCommands.CreatorActions","name":"method","type":"uint8"},{"internalType":"bytes","name":"args","type":"bytes"}],"internalType":"struct ICreatorCommands.Command[]","name":"commands","type":"tuple[]"},{"internalType":"uint256","name":"at","type":"uint256"}],"internalType":"struct ICreatorCommands.CommandSet","name":"commands","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resetSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"sale","outputs":[{"components":[{"internalType":"uint64","name":"saleStart","type":"uint64"},{"internalType":"uint64","name":"saleEnd","type":"uint64"},{"internalType":"uint64","name":"maxTokensPerAddress","type":"uint64"},{"internalType":"uint96","name":"pricePerToken","type":"uint96"},{"internalType":"address","name":"fundsRecipient","type":"address"}],"internalType":"struct CreatorFixedPriceSaleStrategy.SalesConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint64","name":"saleStart","type":"uint64"},{"internalType":"uint64","name":"saleEnd","type":"uint64"},{"internalType":"uint64","name":"maxTokensPerAddress","type":"uint64"},{"internalType":"uint96","name":"pricePerToken","type":"uint96"},{"internalType":"address","name":"fundsRecipient","type":"address"}],"internalType":"struct CreatorFixedPriceSaleStrategy.SalesConfig","name":"salesConfig","type":"tuple"}],"name":"setSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]

60808060405234601557610beb908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146109e75750806319b45c4f1461092f57806334db7eee146107e8578063611efc091461072a5780636890e5b31461018357806375d0c0dc146101255780637b49ff2c146100c25763a0a8e4601461007757600080fd5b346100bd5760003660031901126100bd576100b960405161009781610a7b565b60018152603160f81b6020820152604051918291602083526020830190610b20565b0390f35b600080fd5b346100bd5760603660031901126100bd576100db610ab7565b6001600160a01b0360443581811692908390036100bd5716600052600060205260406000206024356000526020526040600020906000526020526020604060002054604051908152f35b346100bd5760003660031901126100bd576100b960405161014581610a7b565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610b20565b346100bd5760a03660031901126100bd5761019c610ab7565b506084356001600160401b0381116100bd57366023820112156100bd576001600160401b038160040135116100bd573660248260040135830101116100bd57604051906101e882610a7b565b60608252600060208301526040518060208101106001600160401b036020830111176104a657602081016040526000815290602081600401351460001461067c576020818060040135810103126100bd576001600160a01b039061024e90602401610b60565b16905b3360005260016020526040600020602435600052602052604060002080546001600160401b038160401c16421161066a576001600160401b0381164210610658576001600160601b0360018301541660443581029080820460443514901517156106305760643503610646576001600160401b038160801c16610542575b506001015460601c9182156105395760ff60025b166102ed81610b74565b906102fb6040519283610a96565b80825261030a601f1991610b74565b0160005b8181106105145750508452604080516001600160a01b038316602082015260243591810191909152604435606080830191909152815261038a90610353608082610a96565b6040519061036082610a7b565b60028252602082015285516020870151916001830160208901526103848383610b8b565b52610b8b565b5081516104bc575b50508061043f575b50604051602081526060810182519060406020840152815180915260808301602060808360051b86010193019160005b8181106103e1576020870151604087015285850386f35b90919293607f1986820301845284519081519160038310156104295761041d826040602080959460019782965201519181858201520190610b20565b960194019291016103ca565b634e487b7160e01b600052602160045260246000fd5b604051906020820152606435604082015260408152606081018181106001600160401b038211176104a65761049f918160405261047b82610a7b565b60018252608081015282516020840151916001830160208601526103848383610b8b565b508161039a565b634e487b7160e01b600052604160045260246000fd5b604051916044358352604060208401527fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a602435938061050a339560018060a01b0316946040830190610b20565b0390a48280610392565b60209060405161052381610a7b565b600081526060838201528282860101520161030e565b60ff60016102e3565b3360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526040600020805460443581018111610630576044350190553360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526001600160401b038160801c1660406000205411156102cf57336000908152602081815260408083206024803585529083528184206001600160a01b0389168086529352928190205490516338b6455960e21b8152600481019290925260809390931c6001600160401b0316918101919091526044810191909152606490fd5b634e487b7160e01b600052601160045260246000fd5b604051632f4613eb60e01b8152600490fd5b6040516374626dc160e11b8152600490fd5b604051630bd8a3eb60e01b8152600490fd5b90506040818060040135810103126100bd5761069a60248201610b60565b9060448101356001600160401b0381116100bd578101602482600401358301016043820112156100bd576024810135906001600160401b0382116104a6576024604051936106f26020601f19601f8701160186610a96565b83855280600401350101604483830101116100bd578160009260446020930183860137830101526001600160a01b0390911690610251565b346100bd5760403660031901126100bd57610743610ab7565b6000608060405161075381610a60565b828152826020820152826040820152826060820152015260018060a01b0316600052600160205260406000206024356000526020526100b9604060002060016040519161079f83610a60565b80546001600160401b03908181168552818160401c16602086015260801c16604084015201546001600160601b038116606083015260601c608082015260405191829182610acd565b346100bd5760c03660031901126100bd5760043560a03660231901126100bd5760405161081481610a60565b6001600160401b0360243581811681036100bd57825260443581811681036100bd57602083019081526064359082821682036100bd57604084019182526001600160601b0360843581811681036100bd576060860190815260a435926001600160a01b03841684036100bd576001946080880194855233600052856020526040600020896000526020526040600020968851166fffffffffffffffff00000000000000008854935160401b16916001600160401b0360801b905160801b16926001600160401b0360c01b1617171785555116906001600160601b0319905160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c6040518061092a339482610acd565b0390a3005b346100bd576020806003193601126100bd5760043590336000526001815260406000208260005281526000600160408220828155015533600052600181526040600020826000528152600160406000206040519281546001600160401b03918282168652828260401c169086015260801c16604084015201546001600160601b038116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b346100bd5760203660031901126100bd576004359063ffffffff60e01b82168092036100bd57602091631ed27fcb60e21b8114908115610a5b575b8115610a30575b5015158152f35b636890e5b360e01b811491508115610a4a575b5083610a29565b6301ffc9a760e01b14905083610a43565b610a22565b60a081019081106001600160401b038211176104a657604052565b604081019081106001600160401b038211176104a657604052565b90601f801991011681019081106001600160401b038211176104a657604052565b600435906001600160a01b03821682036100bd57565b919091608060a08201936001600160401b0380825116845280602083015116602085015260408201511660408401526001600160601b0360608201511660608401528160018060a01b0391015116910152565b919082519283825260005b848110610b4c575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610b2b565b35906001600160a01b03821682036100bd57565b6001600160401b0381116104a65760051b60200190565b8051821015610b9f5760209160051b010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208a38978203c4ae8469bc72bf8739e24bb73f13ed52eea0941c383e30dd9f768964736f6c63430008190033

Deployed Bytecode

0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a7146109e75750806319b45c4f1461092f57806334db7eee146107e8578063611efc091461072a5780636890e5b31461018357806375d0c0dc146101255780637b49ff2c146100c25763a0a8e4601461007757600080fd5b346100bd5760003660031901126100bd576100b960405161009781610a7b565b60018152603160f81b6020820152604051918291602083526020830190610b20565b0390f35b600080fd5b346100bd5760603660031901126100bd576100db610ab7565b6001600160a01b0360443581811692908390036100bd5716600052600060205260406000206024356000526020526040600020906000526020526020604060002054604051908152f35b346100bd5760003660031901126100bd576100b960405161014581610a7b565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610b20565b346100bd5760a03660031901126100bd5761019c610ab7565b506084356001600160401b0381116100bd57366023820112156100bd576001600160401b038160040135116100bd573660248260040135830101116100bd57604051906101e882610a7b565b60608252600060208301526040518060208101106001600160401b036020830111176104a657602081016040526000815290602081600401351460001461067c576020818060040135810103126100bd576001600160a01b039061024e90602401610b60565b16905b3360005260016020526040600020602435600052602052604060002080546001600160401b038160401c16421161066a576001600160401b0381164210610658576001600160601b0360018301541660443581029080820460443514901517156106305760643503610646576001600160401b038160801c16610542575b506001015460601c9182156105395760ff60025b166102ed81610b74565b906102fb6040519283610a96565b80825261030a601f1991610b74565b0160005b8181106105145750508452604080516001600160a01b038316602082015260243591810191909152604435606080830191909152815261038a90610353608082610a96565b6040519061036082610a7b565b60028252602082015285516020870151916001830160208901526103848383610b8b565b52610b8b565b5081516104bc575b50508061043f575b50604051602081526060810182519060406020840152815180915260808301602060808360051b86010193019160005b8181106103e1576020870151604087015285850386f35b90919293607f1986820301845284519081519160038310156104295761041d826040602080959460019782965201519181858201520190610b20565b960194019291016103ca565b634e487b7160e01b600052602160045260246000fd5b604051906020820152606435604082015260408152606081018181106001600160401b038211176104a65761049f918160405261047b82610a7b565b60018252608081015282516020840151916001830160208601526103848383610b8b565b508161039a565b634e487b7160e01b600052604160045260246000fd5b604051916044358352604060208401527fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a602435938061050a339560018060a01b0316946040830190610b20565b0390a48280610392565b60209060405161052381610a7b565b600081526060838201528282860101520161030e565b60ff60016102e3565b3360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526040600020805460443581018111610630576044350190553360005260006020526040600020602435600052602052604060002060018060a01b0385166000526020526001600160401b038160801c1660406000205411156102cf57336000908152602081815260408083206024803585529083528184206001600160a01b0389168086529352928190205490516338b6455960e21b8152600481019290925260809390931c6001600160401b0316918101919091526044810191909152606490fd5b634e487b7160e01b600052601160045260246000fd5b604051632f4613eb60e01b8152600490fd5b6040516374626dc160e11b8152600490fd5b604051630bd8a3eb60e01b8152600490fd5b90506040818060040135810103126100bd5761069a60248201610b60565b9060448101356001600160401b0381116100bd578101602482600401358301016043820112156100bd576024810135906001600160401b0382116104a6576024604051936106f26020601f19601f8701160186610a96565b83855280600401350101604483830101116100bd578160009260446020930183860137830101526001600160a01b0390911690610251565b346100bd5760403660031901126100bd57610743610ab7565b6000608060405161075381610a60565b828152826020820152826040820152826060820152015260018060a01b0316600052600160205260406000206024356000526020526100b9604060002060016040519161079f83610a60565b80546001600160401b03908181168552818160401c16602086015260801c16604084015201546001600160601b038116606083015260601c608082015260405191829182610acd565b346100bd5760c03660031901126100bd5760043560a03660231901126100bd5760405161081481610a60565b6001600160401b0360243581811681036100bd57825260443581811681036100bd57602083019081526064359082821682036100bd57604084019182526001600160601b0360843581811681036100bd576060860190815260a435926001600160a01b03841684036100bd576001946080880194855233600052856020526040600020896000526020526040600020968851166fffffffffffffffff00000000000000008854935160401b16916001600160401b0360801b905160801b16926001600160401b0360c01b1617171785555116906001600160601b0319905160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c6040518061092a339482610acd565b0390a3005b346100bd576020806003193601126100bd5760043590336000526001815260406000208260005281526000600160408220828155015533600052600181526040600020826000528152600160406000206040519281546001600160401b03918282168652828260401c169086015260801c16604084015201546001600160601b038116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b346100bd5760203660031901126100bd576004359063ffffffff60e01b82168092036100bd57602091631ed27fcb60e21b8114908115610a5b575b8115610a30575b5015158152f35b636890e5b360e01b811491508115610a4a575b5083610a29565b6301ffc9a760e01b14905083610a43565b610a22565b60a081019081106001600160401b038211176104a657604052565b604081019081106001600160401b038211176104a657604052565b90601f801991011681019081106001600160401b038211176104a657604052565b600435906001600160a01b03821682036100bd57565b919091608060a08201936001600160401b0380825116845280602083015116602085015260408201511660408401526001600160601b0360608201511660608401528160018060a01b0391015116910152565b919082519283825260005b848110610b4c575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610b2b565b35906001600160a01b03821682036100bd57565b6001600160401b0381116104a65760051b60200190565b8051821015610b9f5760209160051b010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212208a38978203c4ae8469bc72bf8739e24bb73f13ed52eea0941c383e30dd9f768964736f6c63430008190033

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
[ 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.