ETH Price: $2,426.62 (-1.63%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60808060168481102023-03-17 14:25:11598 days ago1679063111IN
 Create: ZoraCreatorFixedPriceSaleStrategy
0 ETH0.0292391435

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZoraCreatorFixedPriceSaleStrategy

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion
File 1 of 13 : ZoraCreatorFixedPriceSaleStrategy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

/*


             ░░░░░░░░░░░░░░              
        ░░▒▒░░░░░░░░░░░░░░░░░░░░        
      ░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░      
    ░░▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░    
   ░▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░    
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░░  
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░░░  
  ░▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░  
  ░▓▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░  
   ░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░  
    ░░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░    
    ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░▒▒▒▒▒░░    
      ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░      
          ░░▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░░          

               OURS TRULY,


    github.com/ourzora/zora-1155-contracts

 */

/// @title ZoraCreatorFixedPriceSaleStrategy
/// @notice A sale strategy for ZoraCreator that allows for fixed price sales over a given time period
/// @author @iainnash / @tbtstl
contract ZoraCreatorFixedPriceSaleStrategy is Enjoy, 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;
    }

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

    // target -> tokenId -> minter -> count

    using SaleCommandHelper for ICreatorCommands.CommandSet;

    function contractURI() external pure override returns (string memory) {
        return "https://github.com/ourzora/zora-1155-contracts/";
    }

    /// @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.0.0";
    }

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

    event SaleSet(address indexed mediaContract, uint256 indexed tokenId, SalesConfig salesConfig);

    /// @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 = abi.decode(minterArguments, (address));

        SalesConfig memory 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);

        // 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 13 : Enjoy.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

/*





             ░░░░░░░░░░░░░░              
        ░░▒▒░░░░░░░░░░░░░░░░░░░░        
      ░░▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░      
    ░░▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░    
   ░▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░    
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░        ░░░░░░░░  
  ░▓▓▓▒▒▒▒░░░░░░░░░░░░░░    ░░░░░░░░░░  
  ░▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░  
  ░▓▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░  
   ░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░  
    ░░▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░    
    ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░▒▒▒▒▒░░    
      ░░▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░      
          ░░▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░░          

               OURS TRULY,











 */

interface Enjoy {

}

File 3 of 13 : 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 4 of 13 : 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);
}

File 5 of 13 : 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);

    /// @notice Contract URI returns the uri for more information about the given contract
    function contractURI() external returns (string memory);
}

File 6 of 13 : 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 7 of 13 : 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 8 of 13 : 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 9 of 13 : IVersionedContract.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

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

File 10 of 13 : 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";
import {ICreatorCommands} from "../interfaces/ICreatorCommands.sol";
import {SaleCommandHelper} from "./utils/SaleCommandHelper.sol";

/// @notice Sales Strategy Helper contract template on top of IMinter1155
/// @author @iainnash / @tbtstl
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 11 of 13 : 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 12 of 13 : 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
/// @author @iainnash / @tbtstl
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 13 of 13 : TransferHelperUtils.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

/// @title TransferHelperUtils
/// @notice Helper functions for sending ETH
library TransferHelperUtils {
    /// @dev Gas limit to send funds
    uint256 internal constant FUNDS_SEND_LOW_GAS_LIMIT = 110_000;

    // @dev Gas limit to send funds – usable for splits, can use with withdraws
    uint256 internal constant FUNDS_SEND_GAS_LIMIT = 310_000;

    /// @notice Sends ETH to a recipient, making conservative estimates to not run out of gas
    /// @param recipient The address to send ETH to
    /// @param value The amount of ETH to send
    function safeSendETHLowLimit(address recipient, uint256 value) internal returns (bool success) {
        (success, ) = recipient.call{value: value, gas: FUNDS_SEND_LOW_GAS_LIMIT}("");
    }

    /// @notice Sends ETH to a recipient, making an attempt to not run out of gas
    /// @param recipient The address to send ETH to
    /// @param value The amount of ETH to send
    function safeSendETH(address recipient, uint256 value) internal returns (bool success) {
        (success, ) = recipient.call{value: value, gas: FUNDS_SEND_GAS_LIMIT}("");
    }
}

Settings
{
  "remappings": [
    "@openzeppelin/=node_modules/@openzeppelin/",
    "@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/",
    "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
    "_imagine/=_imagine/",
    "ds-test/=node_modules/ds-test/src/",
    "forge-std/=node_modules/forge-std/src/",
    "mint/=_imagine/mint/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 5000
  },
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "london",
  "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":"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 ZoraCreatorFixedPriceSaleStrategy.SalesConfig","name":"salesConfig","type":"tuple"}],"name":"SaleSet","type":"event"},{"inputs":[],"name":"contractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"contractURI","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 ZoraCreatorFixedPriceSaleStrategy.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 ZoraCreatorFixedPriceSaleStrategy.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"}]

6080806040523461001657610e3e908161001c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610bf65750806319b45c4f14610b3857806334db7eee146108ec578063611efc09146107b95780636890e5b31461023b57806375d0c0dc146101dd5780637b49ff2c1461016d578063a0a8e4601461010f5763e8a3d4851461008257600080fd5b3461010a57600060031936011261010a576101066040516100a281610d0b565b602f81527f68747470733a2f2f6769746875622e636f6d2f6f75727a6f72612f7a6f72612d60208201527f313135352d636f6e7472616374732f00000000000000000000000000000000006040820152604051918291602083526020830190610d6d565b0390f35b600080fd5b3461010a57600060031936011261010a5761010660405161012f81610cef565b600581527f312e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610d6d565b3461010a57606060031936011261010a57610186610d4a565b6044359073ffffffffffffffffffffffffffffffffffffffff9081831680930361010a5716600052600060205260406000206024356000526020526040600020906000526020526020604060002054604051908152f35b3461010a57600060031936011261010a576101066040516101fd81610cef565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610d6d565b3461010a5760a060031936011261010a57610254610d4a565b5060843567ffffffffffffffff80821161010a573660238301121561010a57816004013581811161010a5782019136602484011161010a576020816040519461029c86610cef565b60608652600083870152031261010a576024013573ffffffffffffffffffffffffffffffffffffffff8116810361010a573360005260016020526040600020602435600052602052604060002091604051926102f784610cd3565b80549082821685526001838360401c169182602088015284604088019460801c16845201549060608601906bffffffffffffffffffffffff92838116835260601c6080880152421161078f57838651164210610765575116604435810290808204604435149015171561070c576064350361073b575116806105d4575b50608082015173ffffffffffffffffffffffffffffffffffffffff1615801591906105cb5760ff60025b16601f196103c46103ae83610dad565b926103bc6040519485610d27565b808452610dad565b0160005b8181106105a657505084526040805173ffffffffffffffffffffffffffffffffffffffff92909216602083015260243590820152604435606080830191909152815261045090610419608082610d27565b6040519061042682610cef565b600282526020820152845160208601519160018301602088015261044a8383610dc5565b52610dc5565b50610532575b50604051602081526060810182519060406020840152815180915260808301602060808360051b86010193019160005b81811061049d576020870151604087015285850386f35b909192937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808682030184528451908151916003831015610503576104f7826040602080959460019782965201519181858201520190610d6d565b96019401929101610486565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff608061059f9201511660405190602082015260643560408201526040815261056e81610d0b565b6040519061057b82610cef565b600182526020820152825160208401519160018301602086015261044a8383610dc5565b5081610456565b6020906040516105b581610cef565b60008152606083820152828286010152016103c8565b60ff600161039e565b3360005260006020526040600020602435600052602052604060002073ffffffffffffffffffffffffffffffffffffffff83166000526020526040600020805490604435820180921161070c57553360005260006020526040600020602435600052602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052806040600020541115610374579061070873ffffffffffffffffffffffffffffffffffffffff9233600052600060205260406000206024356000526020526040600020848416600052602052604060002054906040519485947fe2d91564000000000000000000000000000000000000000000000000000000008652166004850160409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60046040517f2f4613eb000000000000000000000000000000000000000000000000000000008152fd5b60046040517fe8c4db82000000000000000000000000000000000000000000000000000000008152fd5b60046040517f0bd8a3eb000000000000000000000000000000000000000000000000000000008152fd5b3461010a57604060031936011261010a5773ffffffffffffffffffffffffffffffffffffffff6107e7610d4a565b600060806040516107f781610cd3565b82815282602082015282604082015282606082015201521660005260016020526040600020602435600052602052610106604060002060016040519161083c83610cd3565b805467ffffffffffffffff908181168552818160401c16602086015260801c16604084015201546bffffffffffffffffffffffff8116606083015260601c608082015260405191829182919091608073ffffffffffffffffffffffffffffffffffffffff8160a084019567ffffffffffffffff80825116865280602083015116602087015260408201511660408601526bffffffffffffffffffffffff6060820151166060860152015116910152565b3461010a5760c060031936011261010a5760043560a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261010a5760405167ffffffffffffffff60a0820181811183821017610b0957604052602435818116810361010a578252604435818116810361010a5760208301908152606435828116810361010a5760408401908152608435906bffffffffffffffffffffffff808316830361010a576060860192835260a4359273ffffffffffffffffffffffffffffffffffffffff8416840361010a576001947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009360808901958652336000528660205260406000208a6000526020526040600020978951167fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffffffffffff000000000000000000000000000000006fffffffffffffffff00000000000000008b54955160401b16935160801b16931617171786555116915160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60405180610b04339482919091608073ffffffffffffffffffffffffffffffffffffffff8160a084019567ffffffffffffffff80825116865280602083015116602087015260408201511660408601526bffffffffffffffffffffffff6060820151166060860152015116910152565b0390a3005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461010a5760208060031936011261010a57600435903360005260018152604060002082600052815260006001604082208281550155336000526001815260406000208260005281526001604060002060405192815467ffffffffffffffff918282168652828260401c169086015260801c16604084015201546bffffffffffffffffffffffff8116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b3461010a57602060031936011261010a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361010a57817f7b49ff2c0000000000000000000000000000000000000000000000000000000060209314908115610cce575b8115610c71575b5015158152f35b7f6890e5b300000000000000000000000000000000000000000000000000000000811491508115610ca4575b5083610c6a565b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610c9d565b610c63565b60a0810190811067ffffffffffffffff821117610b0957604052565b6040810190811067ffffffffffffffff821117610b0957604052565b6060810190811067ffffffffffffffff821117610b0957604052565b90601f601f19910116810190811067ffffffffffffffff821117610b0957604052565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010a57565b919082519283825260005b848110610d99575050601f19601f8460006020809697860101520116010190565b602081830181015184830182015201610d78565b67ffffffffffffffff8111610b095760051b60200190565b8051821015610dd95760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220831cd5e17123d5935f26988cb78f362b3107a725981f8372c55e6cab3721cdf064736f6c63430008110033

Deployed Bytecode

0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a714610bf65750806319b45c4f14610b3857806334db7eee146108ec578063611efc09146107b95780636890e5b31461023b57806375d0c0dc146101dd5780637b49ff2c1461016d578063a0a8e4601461010f5763e8a3d4851461008257600080fd5b3461010a57600060031936011261010a576101066040516100a281610d0b565b602f81527f68747470733a2f2f6769746875622e636f6d2f6f75727a6f72612f7a6f72612d60208201527f313135352d636f6e7472616374732f00000000000000000000000000000000006040820152604051918291602083526020830190610d6d565b0390f35b600080fd5b3461010a57600060031936011261010a5761010660405161012f81610cef565b600581527f312e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610d6d565b3461010a57606060031936011261010a57610186610d4a565b6044359073ffffffffffffffffffffffffffffffffffffffff9081831680930361010a5716600052600060205260406000206024356000526020526040600020906000526020526020604060002054604051908152f35b3461010a57600060031936011261010a576101066040516101fd81610cef565b601981527f46697865642050726963652053616c65205374726174656779000000000000006020820152604051918291602083526020830190610d6d565b3461010a5760a060031936011261010a57610254610d4a565b5060843567ffffffffffffffff80821161010a573660238301121561010a57816004013581811161010a5782019136602484011161010a576020816040519461029c86610cef565b60608652600083870152031261010a576024013573ffffffffffffffffffffffffffffffffffffffff8116810361010a573360005260016020526040600020602435600052602052604060002091604051926102f784610cd3565b80549082821685526001838360401c169182602088015284604088019460801c16845201549060608601906bffffffffffffffffffffffff92838116835260601c6080880152421161078f57838651164210610765575116604435810290808204604435149015171561070c576064350361073b575116806105d4575b50608082015173ffffffffffffffffffffffffffffffffffffffff1615801591906105cb5760ff60025b16601f196103c46103ae83610dad565b926103bc6040519485610d27565b808452610dad565b0160005b8181106105a657505084526040805173ffffffffffffffffffffffffffffffffffffffff92909216602083015260243590820152604435606080830191909152815261045090610419608082610d27565b6040519061042682610cef565b600282526020820152845160208601519160018301602088015261044a8383610dc5565b52610dc5565b50610532575b50604051602081526060810182519060406020840152815180915260808301602060808360051b86010193019160005b81811061049d576020870151604087015285850386f35b909192937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808682030184528451908151916003831015610503576104f7826040602080959460019782965201519181858201520190610d6d565b96019401929101610486565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff608061059f9201511660405190602082015260643560408201526040815261056e81610d0b565b6040519061057b82610cef565b600182526020820152825160208401519160018301602086015261044a8383610dc5565b5081610456565b6020906040516105b581610cef565b60008152606083820152828286010152016103c8565b60ff600161039e565b3360005260006020526040600020602435600052602052604060002073ffffffffffffffffffffffffffffffffffffffff83166000526020526040600020805490604435820180921161070c57553360005260006020526040600020602435600052602052604060002073ffffffffffffffffffffffffffffffffffffffff8316600052602052806040600020541115610374579061070873ffffffffffffffffffffffffffffffffffffffff9233600052600060205260406000206024356000526020526040600020848416600052602052604060002054906040519485947fe2d91564000000000000000000000000000000000000000000000000000000008652166004850160409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60046040517f2f4613eb000000000000000000000000000000000000000000000000000000008152fd5b60046040517fe8c4db82000000000000000000000000000000000000000000000000000000008152fd5b60046040517f0bd8a3eb000000000000000000000000000000000000000000000000000000008152fd5b3461010a57604060031936011261010a5773ffffffffffffffffffffffffffffffffffffffff6107e7610d4a565b600060806040516107f781610cd3565b82815282602082015282604082015282606082015201521660005260016020526040600020602435600052602052610106604060002060016040519161083c83610cd3565b805467ffffffffffffffff908181168552818160401c16602086015260801c16604084015201546bffffffffffffffffffffffff8116606083015260601c608082015260405191829182919091608073ffffffffffffffffffffffffffffffffffffffff8160a084019567ffffffffffffffff80825116865280602083015116602087015260408201511660408601526bffffffffffffffffffffffff6060820151166060860152015116910152565b3461010a5760c060031936011261010a5760043560a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36011261010a5760405167ffffffffffffffff60a0820181811183821017610b0957604052602435818116810361010a578252604435818116810361010a5760208301908152606435828116810361010a5760408401908152608435906bffffffffffffffffffffffff808316830361010a576060860192835260a4359273ffffffffffffffffffffffffffffffffffffffff8416840361010a576001947fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009360808901958652336000528660205260406000208a6000526020526040600020978951167fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffffffffffff000000000000000000000000000000006fffffffffffffffff00000000000000008b54955160401b16935160801b16931617171786555116915160601b16179101557f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60405180610b04339482919091608073ffffffffffffffffffffffffffffffffffffffff8160a084019567ffffffffffffffff80825116865280602083015116602087015260408201511660408601526bffffffffffffffffffffffff6060820151166060860152015116910152565b0390a3005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461010a5760208060031936011261010a57600435903360005260018152604060002082600052815260006001604082208281550155336000526001815260406000208260005281526001604060002060405192815467ffffffffffffffff918282168652828260401c169086015260801c16604084015201546bffffffffffffffffffffffff8116606083015260601c60808201527f5e4ad74f00b9a9d4a8452359a7fbd80cc5a6930a9df5e5b797ddc024b24b252c60a03392a3005b3461010a57602060031936011261010a57600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361010a57817f7b49ff2c0000000000000000000000000000000000000000000000000000000060209314908115610cce575b8115610c71575b5015158152f35b7f6890e5b300000000000000000000000000000000000000000000000000000000811491508115610ca4575b5083610c6a565b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483610c9d565b610c63565b60a0810190811067ffffffffffffffff821117610b0957604052565b6040810190811067ffffffffffffffff821117610b0957604052565b6060810190811067ffffffffffffffff821117610b0957604052565b90601f601f19910116810190811067ffffffffffffffff821117610b0957604052565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361010a57565b919082519283825260005b848110610d99575050601f19601f8460006020809697860101520116010190565b602081830181015184830182015201610d78565b67ffffffffffffffff8111610b095760051b60200190565b8051821015610dd95760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220831cd5e17123d5935f26988cb78f362b3107a725981f8372c55e6cab3721cdf064736f6c63430008110033

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  ]

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.