Overview
ETH Balance
ETH Value
$29.30 (@ $2,929.63/ETH)Latest 25 from a total of 259 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Pool Claim Winni... | 13556834 | 390 days ago | IN | 0 ETH | 0.00000223 | ||||
| Pool Purchase Ti... | 13556444 | 390 days ago | IN | 0 ETH | 0.00000434 | ||||
| Set Round State ... | 13556414 | 390 days ago | IN | 0 ETH | 0.00000417 | ||||
| Purchase Tickets | 13515803 | 391 days ago | IN | 0.001 ETH | 0.0000004 | ||||
| Pool Claim Winni... | 13513695 | 391 days ago | IN | 0 ETH | 0.00000014 | ||||
| Pool Purchase Ti... | 13513244 | 391 days ago | IN | 0 ETH | 0.00000036 | ||||
| Set Round State ... | 13513214 | 391 days ago | IN | 0 ETH | 0.00000012 | ||||
| Purchase Tickets | 13478303 | 392 days ago | IN | 0.001 ETH | 0.00000057 | ||||
| Pool Claim Winni... | 13470464 | 392 days ago | IN | 0 ETH | 0.00000044 | ||||
| Pool Purchase Ti... | 13470044 | 392 days ago | IN | 0 ETH | 0.00000109 | ||||
| Set Round State ... | 13470014 | 392 days ago | IN | 0 ETH | 0.00000035 | ||||
| Purchase Tickets | 13428205 | 393 days ago | IN | 0.001 ETH | 0.00000218 | ||||
| Pool Claim Winni... | 13427294 | 393 days ago | IN | 0 ETH | 0.00000346 | ||||
| Pool Purchase Ti... | 13426844 | 393 days ago | IN | 0 ETH | 0.00002517 | ||||
| Set Round State ... | 13426814 | 393 days ago | IN | 0 ETH | 0.00002208 | ||||
| Purchase Tickets | 13412006 | 394 days ago | IN | 0.001 ETH | 0.00000533 | ||||
| Pool Claim Winni... | 13384094 | 394 days ago | IN | 0 ETH | 0.00000747 | ||||
| Pool Purchase Ti... | 13383644 | 394 days ago | IN | 0 ETH | 0.00000519 | ||||
| Set Round State ... | 13383614 | 394 days ago | IN | 0 ETH | 0.00000383 | ||||
| Purchase Tickets | 13374655 | 394 days ago | IN | 0.001 ETH | 0.00000121 | ||||
| Pool Claim Winni... | 13340895 | 395 days ago | IN | 0 ETH | 0.00000507 | ||||
| Pool Purchase Ti... | 13340445 | 395 days ago | IN | 0 ETH | 0.00001706 | ||||
| Set Round State ... | 13340414 | 395 days ago | IN | 0 ETH | 0.00001614 | ||||
| Purchase Tickets | 13298903 | 396 days ago | IN | 0.001 ETH | 0.00001105 | ||||
| Pool Claim Winni... | 13297694 | 396 days ago | IN | 0 ETH | 0.00000451 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 13556444 | 390 days ago | 0.001 ETH | ||||
| 13513244 | 391 days ago | 0.001 ETH | ||||
| 13470044 | 392 days ago | 0.001 ETH | ||||
| 13426844 | 393 days ago | 0.001 ETH | ||||
| 13383644 | 394 days ago | 0.001 ETH | ||||
| 13340445 | 395 days ago | 0.001 ETH | ||||
| 13297244 | 396 days ago | 0.001 ETH | ||||
| 13254044 | 397 days ago | 0.006 ETH | ||||
| 13210844 | 398 days ago | 0.001 ETH | ||||
| 13167644 | 399 days ago | 0.006 ETH | ||||
| 13124444 | 400 days ago | 0.006 ETH | ||||
| 13081304 | 401 days ago | 0.001 ETH | ||||
| 13038104 | 402 days ago | 0.006 ETH | ||||
| 12994904 | 403 days ago | 0.001 ETH | ||||
| 12951284 | 404 days ago | 0.002 ETH | ||||
| 12908084 | 405 days ago | 0.002 ETH | ||||
| 12864884 | 406 days ago | 0.003 ETH | ||||
| 12821684 | 407 days ago | 0.001 ETH | ||||
| 12735284 | 409 days ago | 0.001 ETH | ||||
| 12648884 | 411 days ago | 0.001 ETH | ||||
| 12562514 | 413 days ago | 0.001 ETH | ||||
| 12173804 | 422 days ago | 0.002 ETH | ||||
| 12087404 | 424 days ago | 0.002 ETH | ||||
| 12001004 | 426 days ago | 0.004 ETH | ||||
| 11655464 | 434 days ago | 0.001 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// 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;
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Net Worth in USD
Net Worth in ETH
Token Allocations
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| BLAST | 100.00% | $2,929.63 | 0.01 | $29.3 |
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.