ETH Price: $2,929.63 (-3.52%)

Contract

0x43edB2388e6EDCF5EF2D916b1dc320410866e0aC
 

Overview

ETH Balance

0.01 ETH

ETH Value

$29.30 (@ $2,929.63/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Pool Claim Winni...135568342025-01-03 16:58:03390 days ago1735923483IN
0x43edB238...10866e0aC
0 ETH0.000002230.00114108
Pool Purchase Ti...135564442025-01-03 16:45:03390 days ago1735922703IN
0x43edB238...10866e0aC
0 ETH0.000004340.00111952
Set Round State ...135564142025-01-03 16:44:03390 days ago1735922643IN
0x43edB238...10866e0aC
0 ETH0.000004170.00112042
Purchase Tickets135158032025-01-02 18:10:21391 days ago1735841421IN
0x43edB238...10866e0aC
0.001 ETH0.00000040.00218843
Pool Claim Winni...135136952025-01-02 17:00:05391 days ago1735837205IN
0x43edB238...10866e0aC
0 ETH0.000000140.00193597
Pool Purchase Ti...135132442025-01-02 16:45:03391 days ago1735836303IN
0x43edB238...10866e0aC
0 ETH0.000000360.00194425
Set Round State ...135132142025-01-02 16:44:03391 days ago1735836243IN
0x43edB238...10866e0aC
0 ETH0.000000120.00196305
Purchase Tickets134783032025-01-01 21:20:21392 days ago1735766421IN
0x43edB238...10866e0aC
0.001 ETH0.000000570.00315053
Pool Claim Winni...134704642025-01-01 16:59:03392 days ago1735750743IN
0x43edB238...10866e0aC
0 ETH0.000000440.0059927
Pool Purchase Ti...134700442025-01-01 16:45:03392 days ago1735749903IN
0x43edB238...10866e0aC
0 ETH0.000001090.00598952
Set Round State ...134700142025-01-01 16:44:03392 days ago1735749843IN
0x43edB238...10866e0aC
0 ETH0.000000350.00598374
Purchase Tickets134282052024-12-31 17:30:25393 days ago1735666225IN
0x43edB238...10866e0aC
0.001 ETH0.000002180.00103033
Pool Claim Winni...134272942024-12-31 17:00:03393 days ago1735664403IN
0x43edB238...10866e0aC
0 ETH0.000003460.00101309
Pool Purchase Ti...134268442024-12-31 16:45:03393 days ago1735663503IN
0x43edB238...10866e0aC
0 ETH0.000025170.00100978
Set Round State ...134268142024-12-31 16:44:03393 days ago1735663443IN
0x43edB238...10866e0aC
0 ETH0.000022080.00100988
Purchase Tickets134120062024-12-31 8:30:27394 days ago1735633827IN
0x43edB238...10866e0aC
0.001 ETH0.000005330.00106315
Pool Claim Winni...133840942024-12-30 17:00:03394 days ago1735578003IN
0x43edB238...10866e0aC
0 ETH0.000007470.00107392
Pool Purchase Ti...133836442024-12-30 16:45:03394 days ago1735577103IN
0x43edB238...10866e0aC
0 ETH0.000005190.00107378
Set Round State ...133836142024-12-30 16:44:03394 days ago1735577043IN
0x43edB238...10866e0aC
0 ETH0.000003830.00107326
Purchase Tickets133746552024-12-30 11:45:25394 days ago1735559125IN
0x43edB238...10866e0aC
0.001 ETH0.000001210.00123366
Pool Claim Winni...133408952024-12-29 17:00:05395 days ago1735491605IN
0x43edB238...10866e0aC
0 ETH0.000005070.00108747
Pool Purchase Ti...133404452024-12-29 16:45:05395 days ago1735490705IN
0x43edB238...10866e0aC
0 ETH0.000017060.00108358
Set Round State ...133404142024-12-29 16:44:03395 days ago1735490643IN
0x43edB238...10866e0aC
0 ETH0.000016140.00108654
Purchase Tickets132989032024-12-28 17:40:21396 days ago1735407621IN
0x43edB238...10866e0aC
0.001 ETH0.000011050.00133104
Pool Claim Winni...132976942024-12-28 17:00:03396 days ago1735405203IN
0x43edB238...10866e0aC
0 ETH0.000004510.00100834
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
135564442025-01-03 16:45:03390 days ago1735922703
0x43edB238...10866e0aC
0.001 ETH
135132442025-01-02 16:45:03391 days ago1735836303
0x43edB238...10866e0aC
0.001 ETH
134700442025-01-01 16:45:03392 days ago1735749903
0x43edB238...10866e0aC
0.001 ETH
134268442024-12-31 16:45:03393 days ago1735663503
0x43edB238...10866e0aC
0.001 ETH
133836442024-12-30 16:45:03394 days ago1735577103
0x43edB238...10866e0aC
0.001 ETH
133404452024-12-29 16:45:05395 days ago1735490705
0x43edB238...10866e0aC
0.001 ETH
132972442024-12-28 16:45:03396 days ago1735404303
0x43edB238...10866e0aC
0.001 ETH
132540442024-12-27 16:45:03397 days ago1735317903
0x43edB238...10866e0aC
0.006 ETH
132108442024-12-26 16:45:03398 days ago1735231503
0x43edB238...10866e0aC
0.001 ETH
131676442024-12-25 16:45:03399 days ago1735145103
0x43edB238...10866e0aC
0.006 ETH
131244442024-12-24 16:45:03400 days ago1735058703
0x43edB238...10866e0aC
0.006 ETH
130813042024-12-23 16:47:03401 days ago1734972423
0x43edB238...10866e0aC
0.001 ETH
130381042024-12-22 16:47:03402 days ago1734886023
0x43edB238...10866e0aC
0.006 ETH
129949042024-12-21 16:47:03403 days ago1734799623
0x43edB238...10866e0aC
0.001 ETH
129512842024-12-20 16:33:03404 days ago1734712383
0x43edB238...10866e0aC
0.002 ETH
129080842024-12-19 16:33:03405 days ago1734625983
0x43edB238...10866e0aC
0.002 ETH
128648842024-12-18 16:33:03406 days ago1734539583
0x43edB238...10866e0aC
0.003 ETH
128216842024-12-17 16:33:03407 days ago1734453183
0x43edB238...10866e0aC
0.001 ETH
127352842024-12-15 16:33:03409 days ago1734280383
0x43edB238...10866e0aC
0.001 ETH
126488842024-12-13 16:33:03411 days ago1734107583
0x43edB238...10866e0aC
0.001 ETH
125625142024-12-11 16:34:03413 days ago1733934843
0x43edB238...10866e0aC
0.001 ETH
121738042024-12-02 16:37:03422 days ago1733157423
0x43edB238...10866e0aC
0.002 ETH
120874042024-11-30 16:37:03424 days ago1732984623
0x43edB238...10866e0aC
0.002 ETH
120010042024-11-28 16:37:03426 days ago1732811823
0x43edB238...10866e0aC
0.004 ETH
116554642024-11-20 16:39:03434 days ago1732120743
0x43edB238...10866e0aC
0.001 ETH
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MegaPoolEthDaily

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: MIT

/** MegaPoolEthDaily.sol */

pragma solidity 0.8.24;

import "./blast-l2-kit/src/IBlast.sol";
import "./blast-l2-kit/src/IBlastPoints.sol";
import "./megapot/IMegapotEth.sol";

import "@openzeppelin/contracts/access/Ownable.sol";

/**
 * @title MegaPoolEthDaily contract
 * @author megapool.party
 */
/// @custom:security-contact [email protected]
contract MegaPoolEthDaily is Ownable {
    /**
     * @notice Megapot contract address
     * @dev The address of the Megapot contract
     */
    address public megapotContractAddress;

    /**
     * @notice Referrer address
     * @dev The address of the referrer
     */
    address private referrerAddress;

    /**
     * @notice Eth gas yield contract address
     * @dev The address of the Eth gas yield contract
     */
    address public blastGasYieldContract;

    /**
     * @notice Eth points contract address
     * @dev The address of the Eth points contract
     */
    address public blastPointsContract;

    /**
     * @notice Eth governor address
     * @dev The address of the Eth governor
     */
    address private blastGovernor;

    /**
     * @notice Player struct
     * @dev The player information for each player
     * @dev ticketsPurchased: The number of total tickets purchased by the player
     * @dev winningsClaimable: The number of winnings claimable by the player
     * @dev isActive: Whether the player is active
     */
    struct Player {
        uint256 ticketsPurchased;
        uint256 winningsClaimable;
        bool isActive;
    }

    /**
     * @notice Mapping of player address to player information
     * @dev The player information for each player
     */
    mapping(address => Player) public players;

    /**
     * @notice Array of active player addresses
     * @dev The addresses of active players
     */
    address[] private activePlayerAddresses;

    /**
     * @notice Mapping of player address to tickets purchased in current round
     * @dev The number of tickets purchased by a player in the current round
     */
    mapping(address => uint256) public playerTicketsCurrentRound;

    /**
     * @notice Total tickets purchased in current round
     * @dev The total number of tickets purchased in the current round
     */
    uint256 public totalTicketsCurrentRound;

    // POOL VARIABLES

    /**
     * @notice Round ID
     * @dev The current round ID
     */
    uint256 public roundId;

    /**
     * @notice Ticket price
     * @dev The price of a ticket in wei
     */
    uint256 public ticketPrice;

    /**
     * @notice Pool fee percentage in basis points
     * @dev The pool fee percentage in basis points
     */
    uint256 public poolFeePercentageBps;

    /**
     * @notice Pool state
     * @dev Open: Pool is open for purchases
     * @dev Closed: Pool is closed
     */
    uint256 public poolState;

    /**
     * @notice Round state
     * @dev Open: Round is open for purchases
     * @dev Pending: Round is pending (pool purchased tickets)
     * @dev Drawing: Round is drawing (results are being calculated)
     */
    uint256 public roundState;

    /**
     * @notice Enum for pool state (Circuit Breaker)
     * @dev Open: Pool is open for purchases
     * @dev Closed: Pool is closed
     */
    enum PoolState {
        Open,
        Closed
    }

    /**
     * @notice Enum for round state
     * @dev Open: Round is open for purchases
     * @dev Pending: Round is pending (pool purchased tickets)
     * @dev Drawing: Round is drawing (results are being calculated)
     */
    enum RoundState {
        Open,
        Pending,
        Drawing
    }

    //
    //
    //
    // EVENTS
    //
    //
    //

    /**
     * @notice Event for when a player purchases tickets
     * @dev Emitted when a player purchases tickets
     * @param player The address of the player
     * @param ticketsPurchased The number of tickets purchased
     * @param roundId The ID of the round
     */
    event TicketsPurchased(
        address indexed player,
        uint256 indexed ticketsPurchased,
        uint256 indexed roundId
    );

    /**
     * @notice Event for when pool purchases tickets
     * @dev Emitted when pool purchases tickets
     * @param roundId The ID of the round
     * @param totalTicketsPurchased The number of tickets purchased
     * @param totalCost The total cost of the tickets purchased
     */
    event PoolTicketsPurchased(
        uint256 indexed roundId,
        uint256 indexed totalTicketsPurchased,
        uint256 indexed totalCost
    );

    /**
     * @notice Event for when a player claims winnings
     * @dev Emitted when a player claims winnings
     * @param player The address of the player
     * @param amountClaimed The amount of winnings claimed
     */
    event PlayerWinningsClaimed(
        address indexed player,
        uint256 indexed amountClaimed
    );

    /**
     * @notice Event for when contract claims winnings
     * @dev Emitted when contract claims winnings
     * @param amountClaimed The amount of winnings claimed
     * @param roundId The ID of the round
     */
    event PoolWinningsClaimed(
        uint256 indexed amountClaimed,
        uint256 indexed roundId
    );

    /**
     * @notice Event for when winnings are distributed
     * @dev Emitted when winnings are distributed
     * @param roundId The ID of the round
     * @param winningsDistributed The amount of winnings distributed
     * @param poolFee The amount of pool fee
     */
    event WinningsDistributed(
        uint256 indexed roundId,
        uint256 indexed winningsDistributed,
        uint256 indexed poolFee
    );

    /**
     * @notice Event for when a new round is started
     * @dev Emitted when a new round is started
     * @param roundId The ID of the round
     */
    event NewRoundStarted(uint256 indexed roundId);

    /**
     * @notice Event for when a round stat is set Pending
     * @dev Emitted when a round stat is set Pending
     * @param roundId The ID of the round
     */
    event RoundPending(uint256 indexed roundId);

    /**
     * @notice Event for when a round stat is set Drawing
     * @dev Emitted when a round stat is set Drawing
     * @param roundId The ID of the round
     */
    event RoundDrawing(uint256 indexed roundId);

    /**
     * @notice Event for when a round results are set
     * @dev Emitted when a round results are set
     * @param roundId The ID of the round
     * @param totalTicketsPurchased The number of tickets purchased
     * @param totalWinningsClaimable The total winnings claimable
     * @param isPoolWinner Whether the pool is the winner
     */
    event RoundResults(
        uint256 indexed roundId,
        uint256 totalTicketsPurchased,
        uint256 indexed totalWinningsClaimable,
        bool indexed isPoolWinner
    );

    /**
     * @notice Event for when ticket price is updated
     * @dev Emitted when ticket price is updated
     * @param roundId The ID of the round
     * @param ticketPrice The price of a ticket in wei
     */
    event TicketPriceUpdated(
        uint256 indexed roundId,
        uint256 indexed ticketPrice
    );

    /**
     * @notice Event for when referrer address is updated
     * @dev Emitted when referrer address is updated
     * @param roundId The ID of the round
     * @param referrerAddress The address of the referrer
     */
    event ReferrerAddressUpdated(
        uint256 indexed roundId,
        address indexed referrerAddress
    );

    /**
     * @notice Event for when Megapot contract address is updated
     * @dev Emitted when Megapot contract address is updated
     * @param megapotContractAddress The address of the Megapot contract
     */
    event MegapotContractAddressUpdated(address indexed megapotContractAddress);

    /**
     * @notice Event for when pool fee percentage is updated
     * @dev Emitted when pool fee percentage is updated
     * @param roundId The ID of the round
     * @param poolFeePercentageBps The pool fee percentage in basis points
     */
    event PoolFeePercentageUpdated(
        uint256 indexed roundId,
        uint256 indexed poolFeePercentageBps
    );

    /**
     * @notice Event for when pool state is updated
     * @dev Emitted when pool state is updated
     * @param poolState The state of the pool
     */
    event PoolClosed(uint256 indexed poolState);

    /**
     * @notice Event for when emergency withdraw is called
     * @dev Emitted when emergency withdraw is called
     * @param receiver The address of the receiver
     * @param amount The amount of tokens withdrawn
     */
    event EmergencyWithdraw(address indexed receiver, uint256 indexed amount);

    /**
     * @notice Event for when blast gas yield contract is updated
     * @dev Emitted when blast gas yield contract is updated
     * @param blastGasYieldContract The address of the blast gas yield contract
     */
    event BlastGasYieldContractUpdated(address blastGasYieldContract);

    /**
     * @notice Event for when blast points contract is updated
     * @dev Emitted when blast points contract is updated
     * @param blastPointsContract The address of the blast points contract
     */
    event BlastPointsContractUpdated(address blastPointsContract);

    /**
     * @notice Event for when blast governor is updated
     * @dev Emitted when blast governor is updated
     * @param blastGovernor The address of the blast governor
     */
    event BlastGovernorUpdated(address blastGovernor);

    //
    //
    // CONSTRUCTOR
    //
    //
    //
    constructor(
        address _deployerAddress,
        address _referrerAddress,
        address _megapotContractAddress,
        address _blastGasYieldContract,
        address _blastPointsContract,
        address _governorAddress
    )
        payable
        // We pass in the owner address to the Ownable contract
        Ownable(_deployerAddress)
    {
        blastGasYieldContract = _blastGasYieldContract;
        blastPointsContract = _blastPointsContract;
        blastGovernor = _governorAddress;

        referrerAddress = _referrerAddress;

        players[referrerAddress].isActive = false;
        players[referrerAddress].ticketsPurchased = 0;
        players[referrerAddress].winningsClaimable = 0;

        megapotContractAddress = _megapotContractAddress;

        poolFeePercentageBps = 500;
        ticketPrice = 0.001 ether;
        roundId = 1;
        roundState = uint256(RoundState.Open);
        poolState = uint256(PoolState.Open);

        // Emit events for initial round setup
        emit TicketPriceUpdated(roundId, ticketPrice);
        emit PoolFeePercentageUpdated(roundId, poolFeePercentageBps);
        emit ReferrerAddressUpdated(roundId, referrerAddress);
        emit NewRoundStarted(roundId);
        emit MegapotContractAddressUpdated(megapotContractAddress);
        // Configure the contract for automatic yield and claimable gas on Eth
        IBlast(blastGasYieldContract).configureClaimableYield();
        IBlast(blastGasYieldContract).configureClaimableGas();
        IBlast(blastGasYieldContract).configureGovernor(blastGovernor);

        // // configure Points Operator
        IBlastPoints(blastPointsContract).configurePointsOperator(
            blastGovernor
        );
    }

    //
    //
    //
    // MODIFIERS
    //
    //
    //

    /**
     * @notice Modifier to check if pool is open
     * @dev Only callable when pool is open
     */
    modifier onlyOpenPool() {
        require(
            poolState == uint256(PoolState.Open),
            "MegaPoolEth: Pool is not open"
        );
        _;
    }

    /**
     * @notice Modifier to check if round is open
     * @dev Only callable when round is open
     */
    modifier onlyOpenRound() {
        require(
            roundState == uint256(RoundState.Open),
            "MegaPoolEth: Round is not open"
        );
        _;
    }

    /**
     * @notice Modifier to check if round is pending
     * @dev Only callable when round is pending
     */
    modifier onlyPendingRound() {
        require(
            roundState == uint256(RoundState.Pending),
            "MegaPoolEth: Round is not pending"
        );
        _;
    }

    /**
     * @notice Modifier to check if round is drawing
     * @dev Only callable when round is drawing
     */
    modifier onlyDrawingRound() {
        require(
            roundState == uint256(RoundState.Drawing),
            "MegaPoolEth: Round is not drawing"
        );
        _;
    }

    /**
     * @notice Modifier to check if tickets have been purchased
     * @dev Only callable when tickets have been purchased
     */
    modifier onlyIfTicketsPurchased() {
        require(
            totalTicketsCurrentRound > 0,
            "MegaPoolEth: No tickets purchased"
        );
        _;
    }

    //
    //
    //
    // PLAYER FUNCTIONS
    //
    //
    //

    /**
     * @notice Purchase tickets
     * @dev Only callable by the owner when round is open
     * @param _ticketCount The number of tickets to purchase
     */
    function purchaseTickets(
        uint256 _ticketCount
    ) external payable onlyOpenPool onlyOpenRound {
        require(
            _ticketCount > 0,
            "MegaPoolEth: Ticket count must be greater than 0"
        );

        require(
            msg.value == ticketPrice * _ticketCount,
            "MegaPoolEth: Incorrect amount of funds sent"
        );

        Player storage player = players[msg.sender];
        // Add player to active user addresses if not already in there
        if (!player.isActive) {
            activePlayerAddresses.push(msg.sender);
        }
        player.isActive = true;
        player.ticketsPurchased += _ticketCount;
        playerTicketsCurrentRound[msg.sender] += _ticketCount;
        totalTicketsCurrentRound += _ticketCount;

        // Emit event for ticket purchase
        emit TicketsPurchased(msg.sender, _ticketCount, roundId);
    }

    //
    //
    //
    // POOL FUNCTIONS
    //
    //
    //

    /**
     * @notice Pool purchase tickets
     * @dev Only callable by the owner when round is pending
     * @return bool
     */
    function poolPurchaseTickets()
        external
        payable
        onlyOwner
        onlyPendingRound
        returns (bool)
    {
        require(
            roundState == uint256(RoundState.Pending),
            "MegaPoolEth: Round is not pending"
        );

        uint256 totalCost = totalTicketsCurrentRound * ticketPrice;

        require(
            address(this).balance >= totalCost,
            "MegaPoolEth: Insufficient contract balance"
        );

        IMegapotEth megapot = IMegapotEth(megapotContractAddress);

        megapot.purchaseTickets{value: totalCost}(referrerAddress);

        // Update round state to Drawing
        roundState = uint256(RoundState.Drawing);
        emit RoundDrawing(roundId);

        // Emit event for successful ticket purchase
        emit PoolTicketsPurchased(roundId, totalTicketsCurrentRound, totalCost);

        return true;
    }

    /**
     * @notice Pool claim winnings
     * @dev Only callable by the owner when round is drawing
     */
    function poolClaimWinnings() external onlyOwner onlyDrawingRound {
        IMegapotEth megapot = IMegapotEth(megapotContractAddress);
        IMegapotEth.User memory userInfo = megapot.usersInfo(address(this));
        uint256 totalWinnings = userInfo.winningsClaimable;

        uint256 activePlayerAddressesLength = activePlayerAddresses.length;

        bool isPoolWinner = totalWinnings > 0;

        if (isPoolWinner) {
            uint256 contractBalanceBeforeClaim = address(this).balance;

            megapot.withdrawWinnings();

            uint256 contractBalanceAfterClaim = address(this).balance;

            uint256 claimedWinnings = contractBalanceAfterClaim -
                contractBalanceBeforeClaim;
            require(
                totalWinnings == claimedWinnings,
                "MegaPoolEth: Winnings claimed do not match"
            );

            // Emit event for winnings claimed
            emit PoolWinningsClaimed(claimedWinnings, roundId);

            // Calculate the pool fee
            uint256 poolFee = (claimedWinnings * poolFeePercentageBps) / 10000;
            uint256 winningsToDistribute = claimedWinnings - poolFee;

            // Add referrer winningsClaimable
            Player storage referrer = players[referrerAddress];

            referrer.winningsClaimable += poolFee;

            // Distribute winnings to players
            for (uint256 i = 0; i < activePlayerAddressesLength; ) {
                address playerAddress = activePlayerAddresses[i];
                uint256 playerTickets = playerTicketsCurrentRound[
                    playerAddress
                ];

                // Calculate player's share of winnings
                uint256 playerWinnings = (winningsToDistribute *
                    playerTickets) / totalTicketsCurrentRound;

                // Update player's claimableWinnings
                players[playerAddress].winningsClaimable += playerWinnings;
                unchecked {
                    ++i;
                }
            }

            // Emit event for winnings distribution
            emit WinningsDistributed(roundId, winningsToDistribute, poolFee);
        }
        emit RoundResults(
            roundId,
            totalTicketsCurrentRound,
            totalWinnings,
            isPoolWinner
        );

        // Reset totalTicketsCurrentRound
        totalTicketsCurrentRound = 0;

        // Reset player's isActive to false
        for (uint256 i = 0; i < activePlayerAddressesLength; ) {
            address playerAddress = activePlayerAddresses[i];
            players[playerAddress].isActive = false;
            delete playerTicketsCurrentRound[playerAddress];
            unchecked {
                ++i;
            }
        }

        // Empty activePlayerAddresses
        delete activePlayerAddresses;

        // Reset round state
        roundState = uint256(RoundState.Open);

        // Start new round
        ++roundId;

        // Emit event for new round started
        emit NewRoundStarted(roundId);
    }

    /**
     * @notice Allows a player to claim their winnings
     * @dev Transfers the claimable winnings to the player and resets their winningsClaimable to 0
     */
    function claimWinnings() external {
        Player storage player = players[msg.sender];
        uint256 winningsToTransfer = player.winningsClaimable;
        require(winningsToTransfer > 0, "No winnings to claim");

        // Reset winningsClaimable before transfer to prevent reentrancy
        player.winningsClaimable = 0;

        // Transfer winnings to the player
        (bool success, ) = payable(msg.sender).call{value: winningsToTransfer}(
            ""
        );
        require(success, "Transfer failed");

        emit PlayerWinningsClaimed(msg.sender, winningsToTransfer);
    }

    //
    //
    //
    // POOL STATE OPERATIONS VARIABLE UPDATE FUNCTIONS
    //
    //
    //
    /**
     * @notice Set the address of the Megapot contract
     * @dev Only callable by the owner. Updates the megapot contract address and emits an event.
     * @param _addr The address of the new Megapot contract
     */
    function setMegapotContractAddress(address _addr) external onlyOwner {
        megapotContractAddress = _addr;
        emit MegapotContractAddressUpdated(megapotContractAddress);
    }

    /**
     * @notice Set the referrer address
     * @dev Only callable by the owner. Updates the referrer address and emits an event.
     * @param _referrerAddress The address of the new referrer
     */
    function setReferrerAddress(address _referrerAddress) external onlyOwner {
        referrerAddress = _referrerAddress;
        emit ReferrerAddressUpdated(roundId, referrerAddress);
    }

    /**
     * @notice Set the address of the Eth gas yield contract
     * @dev Only callable by the owner. Updates the gas yield contract address and emits an event.
     * @param _addr The address of the new Eth gas yield contract
     */
    function setBlastGasYieldContract(address _addr) external onlyOwner {
        blastGasYieldContract = _addr;
        emit BlastGasYieldContractUpdated(blastGasYieldContract);
    }

    /**
     * @notice Set the address of the Eth points contract
     * @dev Only callable by the owner. Updates the points contract address and emits an event.
     * @param _addr The address of the new Eth points contract
     */
    function setBlastPointsContract(address _addr) external onlyOwner {
        blastPointsContract = _addr;
        emit BlastPointsContractUpdated(blastPointsContract);
    }

    /**
     * @notice Set the address of the Eth governor
     * @dev Only callable by the owner. Updates the governor address and emits an event.
     * @param _addr The address of the new Eth governor
     */
    function setBlastGovernor(address _addr) external onlyOwner {
        blastGovernor = _addr;
        emit BlastGovernorUpdated(blastGovernor);
    }

    //
    //
    // POOL STATE VARIABLE UPDATE FUNCTIONS
    //
    //
    /**
     * @notice Set the price of a ticket
     * @dev Only callable by the owner. Updates the ticket price and emits an event.
     * @param _ticketPrice The new price of a ticket in wei
     */
    function setTicketPrice(uint256 _ticketPrice) external onlyOwner {
        ticketPrice = _ticketPrice;
        emit TicketPriceUpdated(roundId, ticketPrice);
    }

    /**
     * @notice Set the pool fee percentage in basis points
     * @dev Only callable by the owner. Updates the pool fee percentage and emits an event.
     * @param _poolFeePercentageBps The new pool fee percentage in basis points
     */
    function setPoolFeePercentageBps(
        uint256 _poolFeePercentageBps
    ) external onlyOwner {
        poolFeePercentageBps = _poolFeePercentageBps;
        emit PoolFeePercentageUpdated(roundId, poolFeePercentageBps);
    }

    //
    //
    //
    // PLAYER(s) / ROUND(s) FUNCTIONS
    //
    //
    //
    /**
     * @notice Returns the count of active players in the current round
     * @dev Retrieves the length of the activePlayerAddresses array
     * @return The number of active players in the current round
     */
    function getActivePlayersCount() external view returns (uint256) {
        return activePlayerAddresses.length;
    }

    /**
     * @notice Get the number of tickets a player has in a current round
     * @dev Retrieves the number of tickets purchased by a specific player in the current round
     * @param _player The address of the player
     * @return The number of tickets purchased by the player in the current round
     */
    function getPlayerTicketsCurrentRound(
        address _player
    ) external view returns (uint256) {
        return playerTicketsCurrentRound[_player];
    }

    //
    //
    //
    // POOL & ROUND STATE FUNCTIONS
    //
    //
    //

    /**
     * @notice Set the pool state to closed
     * @dev Only callable by the owner. Updates the pool state and emits an event.
     */
    function setPoolStateClosed() external onlyOwner {
        poolState = uint256(PoolState.Closed);

        emit PoolClosed(poolState);
    }

    /**
     * @notice Set the round state to pending
     * @dev Only callable by the owner. Updates the round state and emits an event.
     */
    function setRoundStatePending()
        external
        onlyOwner
        onlyOpenRound
        onlyIfTicketsPurchased
    {
        roundState = uint256(RoundState.Pending);

        // Emit RoundPending event
        emit RoundPending(roundId);
    }

    //
    //
    //
    // ETH FUNCTIONS
    //
    //
    //

    // /**
    //  * @notice Configure the Eth gas yield governor
    //  * @dev Only callable by the owner
    //  * @param _governor The address of the Eth gas yield governor
    //  */
    // function configureEthGasYieldGovernor(
    //     address _governor
    // ) external onlyOwner {
    //     IEth(blastGasYieldContract).configureGovernor(_governor);
    // }

    // /**
    //  * @notice Configure the Eth points operator
    //  * @dev Only callable by the owner
    //  * @param _operator The address of the Eth points operator
    //  */
    // function configureEthPointsOperator(
    //     address _operator
    // ) external onlyOwner {
    //     IEthPoints(blastPointsContract).configurePointsOperator(_operator);
    // }

    /**
     * @notice Claim a specific amount of Eth gas yield
     * @dev Only callable by the owner
     * @param _recipient The address to send the yield to
     * @param _amount The amount of yield to claim
     */
    function claimYield(
        address _recipient,
        uint256 _amount
    ) external onlyOwner {
        IBlast(blastGasYieldContract).claimYield(
            address(this),
            _recipient,
            _amount
        );
    }

    /**
     * @notice Claim all Eth gas yield
     * @dev Only callable by the owner. If you'd like to maximize the amount of gas fees, then you can use claimMaxGas to guarantee a 100% claim rate. Only gas fees that have fully matured (30 days) will be claimed. Any remaining fees after calling this function will remain in the Eth Gas contract for you to claim later.
     * @param _recipient The address to send the yield to
     */
    function claimAllYield(address _recipient) external onlyOwner {
        IBlast(blastGasYieldContract).claimAllYield(address(this), _recipient);
    }

    /**
     * @notice Claim the maximum amount of Eth gas yield
     * @dev Only callable by the owner. If you’d like to maximize the amount of gas fees, then you can use claimMaxGas to guarantee a 100% claim rate. Only gas fees that have fully matured (30 days) will be claimed. Any remaining fees after calling this function will remain in the Eth Gas contract for you to claim later.
     * @param _recipient The address to send the yield to
     */
    function claimMaxGas(address _recipient) external onlyOwner {
        IBlast(blastGasYieldContract).claimMaxGas(address(this), _recipient);
    }

    /**
     * @notice Claim all Eth gas yield
     * @dev Only callable by the owner. If you'd like to maximize the amount of gas fees, then you can use claimMaxGas to guarantee a 100% claim rate. Only gas fees that have fully matured (30 days) will be claimed. Any remaining fees after calling this function will remain in the Eth Gas contract for you to claim later.
     * @param _recipient The address to send the yield to
     */
    function claimAllGas(address _recipient) external onlyOwner {
        IBlast(blastGasYieldContract).claimAllGas(address(this), _recipient);
    }

    /**
     * @notice Claim gas at a minimum claim rate
     * @dev Only callable by the owner. Allows you to claim the maximum amount of gas fees while guaranteeing a specific claim rate. If you're comfortable with an 80% claim rate, that translates to 8000 bip. Calling this function with a 100% min claim rate is the same as calling claimMaxGas.
     * @param _recipient The address to send the yield to
     * @param _claimRateBips The minimum claim rate in bip
     */
    function claimGasAtMinClaimRate(
        address _recipient,
        uint256 _claimRateBips
    ) external onlyOwner {
        IBlast(blastGasYieldContract).claimGasAtMinClaimRate(
            address(this),
            _recipient,
            _claimRateBips
        );
    }

    /**
     * @notice Read the claimable gas yield
     * @dev Only callable by the owner. Retrieves the claimable gas yield for the contract
     * @return The claimable gas yield in wei
     */
    function readClaimableGas() external view returns (uint256) {
        (, uint256 etherBalance, , ) = IBlast(blastGasYieldContract)
            .readGasParams(address(this));
        return etherBalance;
    }

    fallback() external payable {}

    receive() external payable {}
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import {Context} from "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.24;

enum YieldMode {
    AUTOMATIC,
    VOID,
    CLAIMABLE
}

enum GasMode {
    VOID,
    CLAIMABLE
}

interface IBlast {
    // configure
    function configureContract(
        address contractAddress,
        YieldMode _yield,
        GasMode gasMode,
        address governor
    ) external;

    function configure(
        YieldMode _yield,
        GasMode gasMode,
        address governor
    ) external;

    // base configuration options
    function configureClaimableYield() external;

    function configureClaimableYieldOnBehalf(address contractAddress) external;

    function configureAutomaticYield() external;

    function configureAutomaticYieldOnBehalf(address contractAddress) external;

    function configureVoidYield() external;

    function configureVoidYieldOnBehalf(address contractAddress) external;

    function configureClaimableGas() external;

    function configureClaimableGasOnBehalf(address contractAddress) external;

    function configureVoidGas() external;

    function configureVoidGasOnBehalf(address contractAddress) external;

    function configureGovernor(address _governor) external;

    function configureGovernorOnBehalf(
        address _newGovernor,
        address contractAddress
    ) external;

    // claim yield
    function claimYield(
        address contractAddress,
        address recipientOfYield,
        uint256 amount
    ) external returns (uint256);

    function claimAllYield(
        address contractAddress,
        address recipientOfYield
    ) external returns (uint256);

    // claim gas
    function claimAllGas(
        address contractAddress,
        address recipientOfGas
    ) external returns (uint256);

    function claimGasAtMinClaimRate(
        address contractAddress,
        address recipientOfGas,
        uint256 minClaimRateBips
    ) external returns (uint256);

    function claimMaxGas(
        address contractAddress,
        address recipientOfGas
    ) external returns (uint256);

    function claimGas(
        address contractAddress,
        address recipientOfGas,
        uint256 gasToClaim,
        uint256 gasSecondsToConsume
    ) external returns (uint256);

    // read functions
    function readClaimableYield(
        address contractAddress
    ) external view returns (uint256);

    function readYieldConfiguration(
        address contractAddress
    ) external view returns (uint8);

    function readGasParams(
        address contractAddress
    )
        external
        view
        returns (
            uint256 etherSeconds,
            uint256 etherBalance,
            uint256 lastUpdated,
            GasMode
        );
}

// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.24;

interface IBlastPoints {
    function configurePointsOperator(address operator) external;

    function configurePointsOperatorOnBehalf(
        address contractAddress,
        address operator
    ) external;
}

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.24;

interface IMegapotEth {
    // Structs
    struct User {
        uint256 ticketsPurchasedTotalBps;
        uint256 winningsClaimable;
        bool active;
    }

    struct LP {
        uint256 principal;
        uint256 stake;
        uint256 riskPercentage;
        bool active;
    }

    // Events
    event UserTicketPurchase(
        address indexed user,
        uint256 ticketsPurchasedTotalBps
    );
    event UserWinWithdrawal(address indexed user, uint256 amount);
    event LotteryRunRequested(address indexed user);
    event LotteryRun(
        uint256 time,
        address winner,
        uint256 winningTicket,
        uint256 winAmount,
        uint256 ticketsPurchasedTotalBps
    );
    event EntropyResult(uint64 sequenceNumber, bytes32 randomNumber);

    // View functions
    function allowPurchasing() external view returns (bool);

    function usersInfo(address) external view returns (User memory);

    function ticketPrice() external view returns (uint256);

    function lastWinnerAddress() external view returns (address);

    function lotteryLock() external view returns (bool);

    function entropyCallbackLock() external view returns (bool);

    // State-changing functions
    function purchaseTickets(address referrer) external payable;

    function withdrawWinnings() external;
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_deployerAddress","type":"address"},{"internalType":"address","name":"_referrerAddress","type":"address"},{"internalType":"address","name":"_megapotContractAddress","type":"address"},{"internalType":"address","name":"_blastGasYieldContract","type":"address"},{"internalType":"address","name":"_blastPointsContract","type":"address"},{"internalType":"address","name":"_governorAddress","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"blastGasYieldContract","type":"address"}],"name":"BlastGasYieldContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"blastGovernor","type":"address"}],"name":"BlastGovernorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"blastPointsContract","type":"address"}],"name":"BlastPointsContractUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"megapotContractAddress","type":"address"}],"name":"MegapotContractAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"NewRoundStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"PlayerWinningsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolState","type":"uint256"}],"name":"PoolClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolFeePercentageBps","type":"uint256"}],"name":"PoolFeePercentageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"totalTicketsPurchased","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"totalCost","type":"uint256"}],"name":"PoolTicketsPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amountClaimed","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"PoolWinningsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"referrerAddress","type":"address"}],"name":"ReferrerAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"RoundDrawing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"RoundPending","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTicketsPurchased","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"totalWinningsClaimable","type":"uint256"},{"indexed":true,"internalType":"bool","name":"isPoolWinner","type":"bool"}],"name":"RoundResults","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ticketPrice","type":"uint256"}],"name":"TicketPriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"ticketsPurchased","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"TicketsPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"winningsDistributed","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolFee","type":"uint256"}],"name":"WinningsDistributed","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"blastGasYieldContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blastPointsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claimAllGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claimAllYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_claimRateBips","type":"uint256"}],"name":"claimGasAtMinClaimRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"claimMaxGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"claimYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getActivePlayersCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_player","type":"address"}],"name":"getPlayerTicketsCurrentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"megapotContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerTicketsCurrentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"players","outputs":[{"internalType":"uint256","name":"ticketsPurchased","type":"uint256"},{"internalType":"uint256","name":"winningsClaimable","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolClaimWinnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolFeePercentageBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolPurchaseTickets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"poolState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ticketCount","type":"uint256"}],"name":"purchaseTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"readClaimableGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"roundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"roundState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setBlastGasYieldContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setBlastGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setBlastPointsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setMegapotContractAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_poolFeePercentageBps","type":"uint256"}],"name":"setPoolFeePercentageBps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPoolStateClosed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referrerAddress","type":"address"}],"name":"setReferrerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRoundStatePending","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ticketPrice","type":"uint256"}],"name":"setTicketPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ticketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTicketsCurrentRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260405162001d5038038062001d5083398101604081905262000026916200041c565b856001600160a01b0381166200005657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006181620003af565b50600380546001600160a01b038086166001600160a01b031992831617909255600480548584169083161790556005805484841690831617905560028054888416908316811782556000908152600660205260408082208301805460ff1916905582548516825280822082905591548416815290812060019081018290558054938816939092169290921781556101f4600c5566038d7ea4c68000600b55600a55600e556000600d55600b54600a546040517fd4c5e06b1ae097ba02372652a7adaa6e4a8e00be527497a3ad0ebc3f761ef3fb90600090a3600c54600a546040517f49785993d16ad978a1b3890bf38403b5cb33051a9055df69384a1452f05a65df90600090a3600254600a546040516001600160a01b03909216917fe13062f9359faca1f402c58a009f412a8874d0f1a74a666ca7676d572e1260a390600090a3600a546040517fae4cf40c31a833f14b2aee71da8cb55d5fd1944a9ed5b7696022328921f6e31790600090a26001546040516001600160a01b03909116907f11742c438d1aca9917eebebda548598070d068db2e04e605a117855a79b03f0490600090a2600360009054906101000a90046001600160a01b03166001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200025857600080fd5b505af11580156200026d573d6000803e3d6000fd5b50505050600360009054906101000a90046001600160a01b03166001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620002c257600080fd5b505af1158015620002d7573d6000803e3d6000fd5b5050600354600554604051631d70c8d360e31b81526001600160a01b0391821660048201529116925063eb8646989150602401600060405180830381600087803b1580156200032557600080fd5b505af11580156200033a573d6000803e3d6000fd5b5050600480546005546040516336b91f2b60e01b81526001600160a01b03918216938101939093521692506336b91f2b9150602401600060405180830381600087803b1580156200038a57600080fd5b505af11580156200039f573d6000803e3d6000fd5b505050505050505050506200049d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200041757600080fd5b919050565b60008060008060008060c087890312156200043657600080fd5b6200044187620003ff565b95506200045160208801620003ff565b94506200046160408801620003ff565b93506200047160608801620003ff565b92506200048160808801620003ff565b91506200049160a08801620003ff565b90509295509295509295565b6118a380620004ad6000396000f3fe6080604052600436106101f05760003560e01c80638da5cb5b1161010c578063c3238a1d1161009a578063e3b1055c1161006c578063e3b1055c146105b5578063e8a89e8e146105d5578063ea3647a8146105ea578063f2fde38b1461060a578063f37213691461062a57005b8063c3238a1d14610503578063cd2002f514610523578063e0ba8cea14610543578063e2eb41ff1461055957005b8063a6b95c10116100de578063a6b95c101461046e578063b401faf11461048e578063b930b482146104a3578063bcd2bf25146104c3578063c2d94aec146104e357005b80638da5cb5b146103dd57806399b8aff51461040f578063a127760014610425578063a4636c4d1461043857005b806333f8aba711610189578063715018a61161015b578063715018a614610357578063773c7c4a1461036c5780638b210472146103825780638c3421f3146103af5780638cd221c9146103c757005b806333f8aba7146102f757806354882df31461030c5780636266d32414610321578063641ad8a91461034157005b80631869ebda116101c25780631869ebda146102775780631d5023c814610297578063272b1323146102b757806327943fc7146102d757005b806309415a4f146101f95780631209b1f61461020e57806315981650146102375780631834c0c91461025757005b366101f757005b005b34801561020557600080fd5b506101f761063f565b34801561021a57600080fd5b50610224600b5481565b6040519081526020015b60405180910390f35b34801561024357600080fd5b506101f761025236600461162e565b61072b565b34801561026357600080fd5b506101f761027236600461162e565b61076a565b34801561028357600080fd5b506101f7610292366004611663565b6107a9565b3480156102a357600080fd5b506101f76102b236600461168d565b610834565b3480156102c357600080fd5b506101f76102d236600461168d565b610889565b3480156102e357600080fd5b506101f76102f236600461168d565b61090c565b34801561030357600080fd5b50600754610224565b34801561031857600080fd5b506101f7610969565b34801561032d57600080fd5b506101f761033c36600461168d565b6109a3565b34801561034d57600080fd5b50610224600d5481565b34801561036357600080fd5b506101f76109f9565b34801561037857600080fd5b5061022460095481565b34801561038e57600080fd5b5061022461039d36600461168d565b60086020526000908152604090205481565b6103b7610a0d565b604051901515815260200161022e565b3480156103d357600080fd5b50610224600a5481565b3480156103e957600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161022e565b34801561041b57600080fd5b50610224600c5481565b6101f761043336600461162e565b610bab565b34801561044457600080fd5b5061022461045336600461168d565b6001600160a01b031660009081526008602052604090205490565b34801561047a57600080fd5b506101f761048936600461168d565b610e1b565b34801561049a57600080fd5b506101f7610e6d565b3480156104af57600080fd5b506004546103f7906001600160a01b031681565b3480156104cf57600080fd5b506101f76104de366004611663565b610f87565b3480156104ef57600080fd5b506101f76104fe36600461168d565b610fce565b34801561050f57600080fd5b506003546103f7906001600160a01b031681565b34801561052f57600080fd5b506101f761053e36600461168d565b61100e565b34801561054f57600080fd5b50610224600e5481565b34801561056557600080fd5b5061059861057436600461168d565b60066020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161022e565b3480156105c157600080fd5b506001546103f7906001600160a01b031681565b3480156105e157600080fd5b5061022461104e565b3480156105f657600080fd5b506101f761060536600461168d565b6110c9565b34801561061657600080fd5b506101f761062536600461168d565b61111f565b34801561063657600080fd5b506101f761115d565b61064761157f565b600e541561069c5760405162461bcd60e51b815260206004820152601e60248201527f4d656761506f6f6c4574683a20526f756e64206973206e6f74206f70656e000060448201526064015b60405180910390fd5b6000600954116106f85760405162461bcd60e51b815260206004820152602160248201527f4d656761506f6f6c4574683a204e6f207469636b6574732070757263686173656044820152601960fa1b6064820152608401610693565b6001600e55600a546040517f6cfb19826b5a053d873d738b99290455661276ebe2b40ae5f5973f46995a36d990600090a2565b61073361157f565b600b819055600a546040518291907fd4c5e06b1ae097ba02372652a7adaa6e4a8e00be527497a3ad0ebc3f761ef3fb90600090a350565b61077261157f565b600c819055600a546040518291907f49785993d16ad978a1b3890bf38403b5cb33051a9055df69384a1452f05a65df90600090a350565b6107b161157f565b600354604051637cb8cb3160e11b81523060048201526001600160a01b038481166024830152604482018490529091169063f9719662906064015b6020604051808303816000875af115801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f91906116af565b505050565b61083c61157f565b600280546001600160a01b0319166001600160a01b038316908117909155600a546040517fe13062f9359faca1f402c58a009f412a8874d0f1a74a666ca7676d572e1260a390600090a350565b61089161157f565b600354604051634aa7d2f760e11b81523060048201526001600160a01b0383811660248301529091169063954fa5ee906044015b6020604051808303816000875af11580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090891906116af565b5050565b61091461157f565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f3b389f2d3ca4b98585be394e375e512a2b6325e806dcc2ae6dca995a2fd31439906020015b60405180910390a150565b61097161157f565b6001600d8190556040517f925a19753e677c9dc36a80e0fc824ca0c5b1afde494872b43daccab9ffeaffd490600090a2565b6109ab61157f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f590b6e04dfc334615ab5a579e76aa2478ad80af902902618f5a9e044196757c29060200161095e565b610a0161157f565b610a0b60006115ac565b565b6000610a1761157f565b6001600e5414610a395760405162461bcd60e51b8152600401610693906116c8565b6001600e5414610a5b5760405162461bcd60e51b8152600401610693906116c8565b6000600b54600954610a6d919061171f565b905080471015610ad25760405162461bcd60e51b815260206004820152602a60248201527f4d656761506f6f6c4574683a20496e73756666696369656e7420636f6e74726160448201526963742062616c616e636560b01b6064820152608401610693565b600154600254604051633644aedf60e11b81526001600160a01b0391821660048201529116908190636c895dbe9084906024016000604051808303818588803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b5060029350610b4092505050565b600e55600a546040517fac73857f4f68972d1f03640417932faa7e2b7fb7727584a5d5aec2769977ce3e90600090a281600954600a547fd99a59f5e7638616a9a116bd9cc0ca8033bea4215873bc50611fa5a891aca99160405160405180910390a460019250505090565b600d5415610bfb5760405162461bcd60e51b815260206004820152601d60248201527f4d656761506f6f6c4574683a20506f6f6c206973206e6f74206f70656e0000006044820152606401610693565b600e5415610c4b5760405162461bcd60e51b815260206004820152601e60248201527f4d656761506f6f6c4574683a20526f756e64206973206e6f74206f70656e00006044820152606401610693565b60008111610cb45760405162461bcd60e51b815260206004820152603060248201527f4d656761506f6f6c4574683a205469636b657420636f756e74206d757374206260448201526f0652067726561746572207468616e20360841b6064820152608401610693565b80600b54610cc2919061171f565b3414610d245760405162461bcd60e51b815260206004820152602b60248201527f4d656761506f6f6c4574683a20496e636f727265637420616d6f756e74206f6660448201526a08199d5b991cc81cd95b9d60aa1b6064820152608401610693565b336000908152600660205260409020600281015460ff16610d8257600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b031916331790555b60028101805460ff19166001179055805482908290600090610da590849061173c565b90915550503360009081526008602052604081208054849290610dc990849061173c565b925050819055508160096000828254610de2919061173c565b9091555050600a54604051839033907f7d58f5ddf17a7f65d89554f5d8144ae1dc788046467927063c090f92ed1145dc90600090a45050565b610e2361157f565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f11742c438d1aca9917eebebda548598070d068db2e04e605a117855a79b03f0490600090a250565b336000908152600660205260409020600181015480610ec55760405162461bcd60e51b81526020600482015260146024820152734e6f2077696e6e696e677320746f20636c61696d60601b6044820152606401610693565b600060018301819055604051339083908381818185875af1925050503d8060008114610f0d576040519150601f19603f3d011682016040523d82523d6000602084013e610f12565b606091505b5050905080610f555760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610693565b604051829033907fc92f63975de8621ffe782345b82a5a94f51c144e380bbd2ec9f53b3ccfe7b73090600090a3505050565b610f8f61157f565b600354604051630951888f60e01b81523060048201526001600160a01b0384811660248301526044820184905290911690630951888f906064016107ec565b610fd661157f565b60035460405163430021db60e11b81523060048201526001600160a01b0383811660248301529091169063860043b6906044016108c5565b61101661157f565b60035460405163662aa11d60e01b81523060048201526001600160a01b0383811660248301529091169063662aa11d906044016108c5565b600354604051633779e62960e21b815230600482015260009182916001600160a01b039091169063dde798a490602401608060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf919061174f565b5090949350505050565b6110d161157f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f801a24d4f1f7ba1e29f4072dd6b094c83d624358feb05d172c10aa9cf312a37c9060200161095e565b61112761157f565b6001600160a01b03811661115157604051631e4fbdf760e01b815260006004820152602401610693565b61115a816115ac565b50565b61116561157f565b6002600e54146111c15760405162461bcd60e51b815260206004820152602160248201527f4d656761506f6f6c4574683a20526f756e64206973206e6f742064726177696e6044820152606760f81b6064820152608401610693565b600154604051635d0eaaaf60e01b81523060048201526001600160a01b03909116906000908290635d0eaaaf90602401606060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190611794565b6020810151600754919250908115801590611481576000479050856001600160a01b031663cc42e83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128757600080fd5b505af115801561129b573d6000803e3d6000fd5b50479250600091506112af90508383611809565b90508086146113135760405162461bcd60e51b815260206004820152602a60248201527f4d656761506f6f6c4574683a2057696e6e696e677320636c61696d656420646f604482015269040dcdee840dac2e8c6d60b31b6064820152608401610693565b600a5460405182907f58bebe106df24787d9e7a43008b75016a7d3c877da8caa15a1041bb5b92fd18b90600090a36000612710600c5483611354919061171f565b61135e919061181c565b9050600061136c8284611809565b6002546001600160a01b03166000908152600660205260408120600181018054939450909285929061139f90849061173c565b90915550600090505b88811015611449576000600782815481106113c5576113c561183e565b60009182526020808320909101546001600160a01b03168083526008909152604082205460095491935091906113fb838861171f565b611405919061181c565b6001600160a01b03841660009081526006602052604081206001018054929350839290919061143590849061173c565b9091555050600190930192506113a8915050565b50600a54604051849184917fbe1d837dc2b7f451c1f41fa55c0a2a4c20a693f1f8906132c5b5a735848ed9c090600090a45050505050505b80151583600a547ff4a21cc9ce913f5ff75a4c2fff9c173260ea8a9a2e43ba17c1a82829bce159636009546040516114bb91815260200190565b60405180910390a4600060098190555b82811015611526576000600782815481106114e8576114e861183e565b60009182526020808320909101546001600160a01b03168252600681526040808320600201805460ff191690556008909152812055506001016114cb565b50611533600760006115fc565b6000600e55600a805460009061154890611854565b90915550600a546040517fae4cf40c31a833f14b2aee71da8cb55d5fd1944a9ed5b7696022328921f6e31790600090a25050505050565b6000546001600160a01b03163314610a0b5760405163118cdaa760e01b8152336004820152602401610693565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b508054600082559060005260206000209081019061115a91905b8082111561162a5760008155600101611616565b5090565b60006020828403121561164057600080fd5b5035919050565b80356001600160a01b038116811461165e57600080fd5b919050565b6000806040838503121561167657600080fd5b61167f83611647565b946020939093013593505050565b60006020828403121561169f57600080fd5b6116a882611647565b9392505050565b6000602082840312156116c157600080fd5b5051919050565b60208082526021908201527f4d656761506f6f6c4574683a20526f756e64206973206e6f742070656e64696e6040820152606760f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761173657611736611709565b92915050565b8082018082111561173657611736611709565b6000806000806080858703121561176557600080fd5b84519350602085015192506040850151915060608501516002811061178957600080fd5b939692955090935050565b6000606082840312156117a657600080fd5b6040516060810181811067ffffffffffffffff821117156117d757634e487b7160e01b600052604160045260246000fd5b80604052508251815260208301516020820152604083015180151581146117fd57600080fd5b60408201529392505050565b8181038181111561173657611736611709565b60008261183957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161186657611866611709565b506001019056fea2646970667358221220e6d2ffe9435884bb0e46ba893e881be98bcec054d2d401e0e6c5308d5991061f64736f6c63430008180033000000000000000000000000500724995380363e7e931c8335a83a6bdf5c717e0000000000000000000000009111777b56265c3d6b7acfba083a358d303c0fbf000000000000000000000000a9f2416f64e36505efc92bfab512de84e8af600000000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000009cf4a217a6d28d53450529b2abe41d8c55041955

Deployed Bytecode

0x6080604052600436106101f05760003560e01c80638da5cb5b1161010c578063c3238a1d1161009a578063e3b1055c1161006c578063e3b1055c146105b5578063e8a89e8e146105d5578063ea3647a8146105ea578063f2fde38b1461060a578063f37213691461062a57005b8063c3238a1d14610503578063cd2002f514610523578063e0ba8cea14610543578063e2eb41ff1461055957005b8063a6b95c10116100de578063a6b95c101461046e578063b401faf11461048e578063b930b482146104a3578063bcd2bf25146104c3578063c2d94aec146104e357005b80638da5cb5b146103dd57806399b8aff51461040f578063a127760014610425578063a4636c4d1461043857005b806333f8aba711610189578063715018a61161015b578063715018a614610357578063773c7c4a1461036c5780638b210472146103825780638c3421f3146103af5780638cd221c9146103c757005b806333f8aba7146102f757806354882df31461030c5780636266d32414610321578063641ad8a91461034157005b80631869ebda116101c25780631869ebda146102775780631d5023c814610297578063272b1323146102b757806327943fc7146102d757005b806309415a4f146101f95780631209b1f61461020e57806315981650146102375780631834c0c91461025757005b366101f757005b005b34801561020557600080fd5b506101f761063f565b34801561021a57600080fd5b50610224600b5481565b6040519081526020015b60405180910390f35b34801561024357600080fd5b506101f761025236600461162e565b61072b565b34801561026357600080fd5b506101f761027236600461162e565b61076a565b34801561028357600080fd5b506101f7610292366004611663565b6107a9565b3480156102a357600080fd5b506101f76102b236600461168d565b610834565b3480156102c357600080fd5b506101f76102d236600461168d565b610889565b3480156102e357600080fd5b506101f76102f236600461168d565b61090c565b34801561030357600080fd5b50600754610224565b34801561031857600080fd5b506101f7610969565b34801561032d57600080fd5b506101f761033c36600461168d565b6109a3565b34801561034d57600080fd5b50610224600d5481565b34801561036357600080fd5b506101f76109f9565b34801561037857600080fd5b5061022460095481565b34801561038e57600080fd5b5061022461039d36600461168d565b60086020526000908152604090205481565b6103b7610a0d565b604051901515815260200161022e565b3480156103d357600080fd5b50610224600a5481565b3480156103e957600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161022e565b34801561041b57600080fd5b50610224600c5481565b6101f761043336600461162e565b610bab565b34801561044457600080fd5b5061022461045336600461168d565b6001600160a01b031660009081526008602052604090205490565b34801561047a57600080fd5b506101f761048936600461168d565b610e1b565b34801561049a57600080fd5b506101f7610e6d565b3480156104af57600080fd5b506004546103f7906001600160a01b031681565b3480156104cf57600080fd5b506101f76104de366004611663565b610f87565b3480156104ef57600080fd5b506101f76104fe36600461168d565b610fce565b34801561050f57600080fd5b506003546103f7906001600160a01b031681565b34801561052f57600080fd5b506101f761053e36600461168d565b61100e565b34801561054f57600080fd5b50610224600e5481565b34801561056557600080fd5b5061059861057436600461168d565b60066020526000908152604090208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161022e565b3480156105c157600080fd5b506001546103f7906001600160a01b031681565b3480156105e157600080fd5b5061022461104e565b3480156105f657600080fd5b506101f761060536600461168d565b6110c9565b34801561061657600080fd5b506101f761062536600461168d565b61111f565b34801561063657600080fd5b506101f761115d565b61064761157f565b600e541561069c5760405162461bcd60e51b815260206004820152601e60248201527f4d656761506f6f6c4574683a20526f756e64206973206e6f74206f70656e000060448201526064015b60405180910390fd5b6000600954116106f85760405162461bcd60e51b815260206004820152602160248201527f4d656761506f6f6c4574683a204e6f207469636b6574732070757263686173656044820152601960fa1b6064820152608401610693565b6001600e55600a546040517f6cfb19826b5a053d873d738b99290455661276ebe2b40ae5f5973f46995a36d990600090a2565b61073361157f565b600b819055600a546040518291907fd4c5e06b1ae097ba02372652a7adaa6e4a8e00be527497a3ad0ebc3f761ef3fb90600090a350565b61077261157f565b600c819055600a546040518291907f49785993d16ad978a1b3890bf38403b5cb33051a9055df69384a1452f05a65df90600090a350565b6107b161157f565b600354604051637cb8cb3160e11b81523060048201526001600160a01b038481166024830152604482018490529091169063f9719662906064015b6020604051808303816000875af115801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f91906116af565b505050565b61083c61157f565b600280546001600160a01b0319166001600160a01b038316908117909155600a546040517fe13062f9359faca1f402c58a009f412a8874d0f1a74a666ca7676d572e1260a390600090a350565b61089161157f565b600354604051634aa7d2f760e11b81523060048201526001600160a01b0383811660248301529091169063954fa5ee906044015b6020604051808303816000875af11580156108e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090891906116af565b5050565b61091461157f565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f3b389f2d3ca4b98585be394e375e512a2b6325e806dcc2ae6dca995a2fd31439906020015b60405180910390a150565b61097161157f565b6001600d8190556040517f925a19753e677c9dc36a80e0fc824ca0c5b1afde494872b43daccab9ffeaffd490600090a2565b6109ab61157f565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f590b6e04dfc334615ab5a579e76aa2478ad80af902902618f5a9e044196757c29060200161095e565b610a0161157f565b610a0b60006115ac565b565b6000610a1761157f565b6001600e5414610a395760405162461bcd60e51b8152600401610693906116c8565b6001600e5414610a5b5760405162461bcd60e51b8152600401610693906116c8565b6000600b54600954610a6d919061171f565b905080471015610ad25760405162461bcd60e51b815260206004820152602a60248201527f4d656761506f6f6c4574683a20496e73756666696369656e7420636f6e74726160448201526963742062616c616e636560b01b6064820152608401610693565b600154600254604051633644aedf60e11b81526001600160a01b0391821660048201529116908190636c895dbe9084906024016000604051808303818588803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b5060029350610b4092505050565b600e55600a546040517fac73857f4f68972d1f03640417932faa7e2b7fb7727584a5d5aec2769977ce3e90600090a281600954600a547fd99a59f5e7638616a9a116bd9cc0ca8033bea4215873bc50611fa5a891aca99160405160405180910390a460019250505090565b600d5415610bfb5760405162461bcd60e51b815260206004820152601d60248201527f4d656761506f6f6c4574683a20506f6f6c206973206e6f74206f70656e0000006044820152606401610693565b600e5415610c4b5760405162461bcd60e51b815260206004820152601e60248201527f4d656761506f6f6c4574683a20526f756e64206973206e6f74206f70656e00006044820152606401610693565b60008111610cb45760405162461bcd60e51b815260206004820152603060248201527f4d656761506f6f6c4574683a205469636b657420636f756e74206d757374206260448201526f0652067726561746572207468616e20360841b6064820152608401610693565b80600b54610cc2919061171f565b3414610d245760405162461bcd60e51b815260206004820152602b60248201527f4d656761506f6f6c4574683a20496e636f727265637420616d6f756e74206f6660448201526a08199d5b991cc81cd95b9d60aa1b6064820152608401610693565b336000908152600660205260409020600281015460ff16610d8257600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b031916331790555b60028101805460ff19166001179055805482908290600090610da590849061173c565b90915550503360009081526008602052604081208054849290610dc990849061173c565b925050819055508160096000828254610de2919061173c565b9091555050600a54604051839033907f7d58f5ddf17a7f65d89554f5d8144ae1dc788046467927063c090f92ed1145dc90600090a45050565b610e2361157f565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f11742c438d1aca9917eebebda548598070d068db2e04e605a117855a79b03f0490600090a250565b336000908152600660205260409020600181015480610ec55760405162461bcd60e51b81526020600482015260146024820152734e6f2077696e6e696e677320746f20636c61696d60601b6044820152606401610693565b600060018301819055604051339083908381818185875af1925050503d8060008114610f0d576040519150601f19603f3d011682016040523d82523d6000602084013e610f12565b606091505b5050905080610f555760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b6044820152606401610693565b604051829033907fc92f63975de8621ffe782345b82a5a94f51c144e380bbd2ec9f53b3ccfe7b73090600090a3505050565b610f8f61157f565b600354604051630951888f60e01b81523060048201526001600160a01b0384811660248301526044820184905290911690630951888f906064016107ec565b610fd661157f565b60035460405163430021db60e11b81523060048201526001600160a01b0383811660248301529091169063860043b6906044016108c5565b61101661157f565b60035460405163662aa11d60e01b81523060048201526001600160a01b0383811660248301529091169063662aa11d906044016108c5565b600354604051633779e62960e21b815230600482015260009182916001600160a01b039091169063dde798a490602401608060405180830381865afa15801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf919061174f565b5090949350505050565b6110d161157f565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f801a24d4f1f7ba1e29f4072dd6b094c83d624358feb05d172c10aa9cf312a37c9060200161095e565b61112761157f565b6001600160a01b03811661115157604051631e4fbdf760e01b815260006004820152602401610693565b61115a816115ac565b50565b61116561157f565b6002600e54146111c15760405162461bcd60e51b815260206004820152602160248201527f4d656761506f6f6c4574683a20526f756e64206973206e6f742064726177696e6044820152606760f81b6064820152608401610693565b600154604051635d0eaaaf60e01b81523060048201526001600160a01b03909116906000908290635d0eaaaf90602401606060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190611794565b6020810151600754919250908115801590611481576000479050856001600160a01b031663cc42e83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561128757600080fd5b505af115801561129b573d6000803e3d6000fd5b50479250600091506112af90508383611809565b90508086146113135760405162461bcd60e51b815260206004820152602a60248201527f4d656761506f6f6c4574683a2057696e6e696e677320636c61696d656420646f604482015269040dcdee840dac2e8c6d60b31b6064820152608401610693565b600a5460405182907f58bebe106df24787d9e7a43008b75016a7d3c877da8caa15a1041bb5b92fd18b90600090a36000612710600c5483611354919061171f565b61135e919061181c565b9050600061136c8284611809565b6002546001600160a01b03166000908152600660205260408120600181018054939450909285929061139f90849061173c565b90915550600090505b88811015611449576000600782815481106113c5576113c561183e565b60009182526020808320909101546001600160a01b03168083526008909152604082205460095491935091906113fb838861171f565b611405919061181c565b6001600160a01b03841660009081526006602052604081206001018054929350839290919061143590849061173c565b9091555050600190930192506113a8915050565b50600a54604051849184917fbe1d837dc2b7f451c1f41fa55c0a2a4c20a693f1f8906132c5b5a735848ed9c090600090a45050505050505b80151583600a547ff4a21cc9ce913f5ff75a4c2fff9c173260ea8a9a2e43ba17c1a82829bce159636009546040516114bb91815260200190565b60405180910390a4600060098190555b82811015611526576000600782815481106114e8576114e861183e565b60009182526020808320909101546001600160a01b03168252600681526040808320600201805460ff191690556008909152812055506001016114cb565b50611533600760006115fc565b6000600e55600a805460009061154890611854565b90915550600a546040517fae4cf40c31a833f14b2aee71da8cb55d5fd1944a9ed5b7696022328921f6e31790600090a25050505050565b6000546001600160a01b03163314610a0b5760405163118cdaa760e01b8152336004820152602401610693565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b508054600082559060005260206000209081019061115a91905b8082111561162a5760008155600101611616565b5090565b60006020828403121561164057600080fd5b5035919050565b80356001600160a01b038116811461165e57600080fd5b919050565b6000806040838503121561167657600080fd5b61167f83611647565b946020939093013593505050565b60006020828403121561169f57600080fd5b6116a882611647565b9392505050565b6000602082840312156116c157600080fd5b5051919050565b60208082526021908201527f4d656761506f6f6c4574683a20526f756e64206973206e6f742070656e64696e6040820152606760f81b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761173657611736611709565b92915050565b8082018082111561173657611736611709565b6000806000806080858703121561176557600080fd5b84519350602085015192506040850151915060608501516002811061178957600080fd5b939692955090935050565b6000606082840312156117a657600080fd5b6040516060810181811067ffffffffffffffff821117156117d757634e487b7160e01b600052604160045260246000fd5b80604052508251815260208301516020820152604083015180151581146117fd57600080fd5b60408201529392505050565b8181038181111561173657611736611709565b60008261183957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820161186657611866611709565b506001019056fea2646970667358221220e6d2ffe9435884bb0e46ba893e881be98bcec054d2d401e0e6c5308d5991061f64736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000500724995380363e7e931c8335a83a6bdf5c717e0000000000000000000000009111777b56265c3d6b7acfba083a358d303c0fbf000000000000000000000000a9f2416f64e36505efc92bfab512de84e8af600000000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000009cf4a217a6d28d53450529b2abe41d8c55041955

-----Decoded View---------------
Arg [0] : _deployerAddress (address): 0x500724995380363e7E931c8335A83a6bDf5c717E
Arg [1] : _referrerAddress (address): 0x9111777b56265c3D6b7acFBa083a358D303C0FBf
Arg [2] : _megapotContractAddress (address): 0xA9F2416f64E36505eFc92bfab512De84e8aF6000
Arg [3] : _blastGasYieldContract (address): 0x4300000000000000000000000000000000000002
Arg [4] : _blastPointsContract (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [5] : _governorAddress (address): 0x9CF4a217A6D28d53450529B2aBE41d8c55041955

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000500724995380363e7e931c8335a83a6bdf5c717e
Arg [1] : 0000000000000000000000009111777b56265c3d6b7acfba083a358d303c0fbf
Arg [2] : 000000000000000000000000a9f2416f64e36505efc92bfab512de84e8af6000
Arg [3] : 0000000000000000000000004300000000000000000000000000000000000002
Arg [4] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [5] : 0000000000000000000000009cf4a217a6d28d53450529b2abe41d8c55041955


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.