ETH Price: $2,638.00 (+1.17%)

Contract

0x1Ee05530f2BEB59E7D6f2838fCc7D9c9464C253d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Request Mint138800112021-12-26 9:32:121010 days ago1640511132IN
0x1Ee05530...9464C253d
0.0471835 ETH0.0030450176
Request Mint137845812021-12-11 15:11:561024 days ago1639235516IN
0x1Ee05530...9464C253d
0.2051559 ETH0.0099702362.16359519
Request Mint137845692021-12-11 15:08:541024 days ago1639235334IN
0x1Ee05530...9464C253d
0.53272479 ETH0.0093295661.96656143
Request Mint137595342021-12-07 16:21:331028 days ago1638894093IN
0x1Ee05530...9464C253d
0.51272838 ETH0.01609205106.88278407
Request Mint137594612021-12-07 16:04:471028 days ago1638893087IN
0x1Ee05530...9464C253d
0.19594642 ETH0.0143233889.30515233
Request Mint137583862021-12-07 11:51:541028 days ago1638877914IN
0x1Ee05530...9464C253d
0.18715035 ETH0.009077156.59501859
Request Mint137579502021-12-07 10:15:181028 days ago1638872118IN
0x1Ee05530...9464C253d
0.17874914 ETH0.0140617487.67387256
Request Mint137357482021-12-03 20:48:201032 days ago1638564500IN
0x1Ee05530...9464C253d
0.17072506 ETH0.01924352119.98181294
Request Mint137341942021-12-03 14:47:031032 days ago1638542823IN
0x1Ee05530...9464C253d
0.16306119 ETH0.0140270387.45745192
Request Mint137334522021-12-03 11:51:461032 days ago1638532306IN
0x1Ee05530...9464C253d
0.15574134 ETH0.0132545182.64084502
Request Mint137290342021-12-02 19:01:101033 days ago1638471670IN
0x1Ee05530...9464C253d
0.14875009 ETH0.01659987103.49890418
Request Mint137196162021-12-01 6:49:551035 days ago1638341395IN
0x1Ee05530...9464C253d
0.14207267 ETH0.01904939118.77141297
Request Mint137175552021-11-30 22:49:121035 days ago1638312552IN
0x1Ee05530...9464C253d
0.13569501 ETH0.0185616115.73010896
Request Mint137175492021-11-30 22:48:341035 days ago1638312514IN
0x1Ee05530...9464C253d
0.49348256 ETH0.02114594140.45050908
Request Mint137167002021-11-30 19:41:531035 days ago1638301313IN
0x1Ee05530...9464C253d
0.12960364 ETH0.02241182139.73592521
Request Mint137007552021-11-28 6:13:071038 days ago1638079987IN
0x1Ee05530...9464C253d
0.12378571 ETH0.0102471563.89020085
Request Mint136998932021-11-28 3:08:081038 days ago1638068888IN
0x1Ee05530...9464C253d
0.11822895 ETH0.01720791107.28993413
Request Mint136993532021-11-28 0:59:581038 days ago1638061198IN
0x1Ee05530...9464C253d
0.11292163 ETH0.02010449125.34990093
Request Mint136993432021-11-28 0:56:381038 days ago1638060998IN
0x1Ee05530...9464C253d
0.47495916 ETH0.01618974107.53158299
Request Mint136993422021-11-28 0:56:001038 days ago1638060960IN
0x1Ee05530...9464C253d
0.10785256 ETH0.01732179108
Request Mint136993342021-11-28 0:52:591038 days ago1638060779IN
0x1Ee05530...9464C253d
0.45713105 ETH0.01887244125.35
Request Mint136979192021-11-27 19:26:281038 days ago1638041188IN
0x1Ee05530...9464C253d
0.10301104 ETH0.0129913481
Request Mint136978612021-11-27 19:14:581038 days ago1638040498IN
0x1Ee05530...9464C253d
0.09838686 ETH0.0136464795.23876748
Request Mint136978462021-11-27 19:11:131038 days ago1638040273IN
0x1Ee05530...9464C253d
0.09397026 ETH0.0112164469.93360328
Request Mint136978412021-11-27 19:10:551038 days ago1638040255IN
0x1Ee05530...9464C253d
0.43997213 ETH0.0150558100
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
137845812021-12-11 15:11:561024 days ago1639235516
0x1Ee05530...9464C253d
0.01519673 ETH
137845812021-12-11 15:11:561024 days ago1639235516
0x1Ee05530...9464C253d
0.18995917 ETH
137845692021-12-11 15:08:541024 days ago1639235334
0x1Ee05530...9464C253d
0.03946109 ETH
137845692021-12-11 15:08:541024 days ago1639235334
0x1Ee05530...9464C253d
0.4932637 ETH
137595342021-12-07 16:21:331028 days ago1638894093
0x1Ee05530...9464C253d
0.03797988 ETH
137595342021-12-07 16:21:331028 days ago1638894093
0x1Ee05530...9464C253d
0.4747485 ETH
137594612021-12-07 16:04:471028 days ago1638893087
0x1Ee05530...9464C253d
0.01451454 ETH
137594612021-12-07 16:04:471028 days ago1638893087
0x1Ee05530...9464C253d
0.18143187 ETH
137583862021-12-07 11:51:541028 days ago1638877914
0x1Ee05530...9464C253d
0.01386298 ETH
137583862021-12-07 11:51:541028 days ago1638877914
0x1Ee05530...9464C253d
0.17328736 ETH
137579502021-12-07 10:15:181028 days ago1638872118
0x1Ee05530...9464C253d
0.01324067 ETH
137579502021-12-07 10:15:181028 days ago1638872118
0x1Ee05530...9464C253d
0.16550846 ETH
137357482021-12-03 20:48:201032 days ago1638564500
0x1Ee05530...9464C253d
0.0126463 ETH
137357482021-12-03 20:48:201032 days ago1638564500
0x1Ee05530...9464C253d
0.15807876 ETH
137341942021-12-03 14:47:031032 days ago1638542823
0x1Ee05530...9464C253d
0.0120786 ETH
137341942021-12-03 14:47:031032 days ago1638542823
0x1Ee05530...9464C253d
0.15098258 ETH
137334522021-12-03 11:51:461032 days ago1638532306
0x1Ee05530...9464C253d
0.01153639 ETH
137334522021-12-03 11:51:461032 days ago1638532306
0x1Ee05530...9464C253d
0.14420495 ETH
137290342021-12-02 19:01:101033 days ago1638471670
0x1Ee05530...9464C253d
0.01101852 ETH
137290342021-12-02 19:01:101033 days ago1638471670
0x1Ee05530...9464C253d
0.13773156 ETH
137196162021-12-01 6:49:551035 days ago1638341395
0x1Ee05530...9464C253d
0.0105239 ETH
137196162021-12-01 6:49:551035 days ago1638341395
0x1Ee05530...9464C253d
0.13154877 ETH
137175552021-11-30 22:49:121035 days ago1638312552
0x1Ee05530...9464C253d
0.01005148 ETH
137175552021-11-30 22:49:121035 days ago1638312552
0x1Ee05530...9464C253d
0.12564353 ETH
137175492021-11-30 22:48:341035 days ago1638312514
0x1Ee05530...9464C253d
0.03655426 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GreatestLARP

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : GreatestLARP.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./TokenRecover.sol";

/// @dev the BotToken interface
abstract contract BotToken {
    function lastMintedToken() external view virtual returns (uint256);

    function mint(address user) external virtual returns (uint256);

    function transferOwnership(address newOwner) public virtual;
}

/// @dev the StatueToken interface
abstract contract StatueToken {
    function lastMintedToken() external view virtual returns (uint256);

    function mint(address user) external virtual returns (uint256);

    function transferOwnership(address newOwner) public virtual;
}

/// @title GreatestLARP Factory Contract
/// @author jaxcoder, ghostffcode
/// @notice Factory LARP NFT Contract
/// @dev factory contract to handle the levels, thresholds and
///     minting of the NFTs.
contract GreatestLARP is Ownable {
    using SafeMath for uint256;
    address payable immutable gitcoin;

    struct Token {
        address tokenAddress;
        uint256 thresholdBots;
        uint256 thresholdStatues;
        uint256 price;
        uint256 inflationRate;
        uint256 totalSupply;
    }

    mapping(uint256 => Token) tokenMap;
    mapping(uint256 => Token) statueMap;

    uint256 public totalTokens;
    uint256 public totalStatues;

    /// @dev checks to make sure the level passed in is valid
    modifier isValidLevel(uint256 level) {
        // level is between 1 and totalTokens Count
        require(level > 0, "Invalid level selected");
        require(level <= totalTokens, "Invalid level selected");
        require(level <= totalStatues, "Invalid level selected");
        _;
    }

    constructor(
        BotToken[] memory tokens,
        StatueToken[] memory statueTokens,
        uint256[] memory thresholdBots,
        uint256[] memory thresholdStatues,
        uint256 startPriceBot,
        uint256 startPriceStatue,
        uint256[] memory inflationRatesStatues,
        uint256[] memory inflationRatesBots
    ) {
        gitcoin = payable(address(0xde21F729137C5Af1b01d73aF1dC21eFfa2B8a0d6));

        require(
            tokens.length == thresholdBots.length,
            "Mismatch length of tokens and threshold"
        );

        require(
            statueTokens.length == thresholdStatues.length,
            "Mismatch length of tokens and threshold"
        );

        for (uint256 i = 0; i < tokens.length; i++) {
            // increment tokens count
            totalTokens += 1;

            // add token to tokenMap
            tokenMap[totalTokens] = Token({
                tokenAddress: address(tokens[i]),
                thresholdBots: thresholdBots[i],
                thresholdStatues: 0,
                price: startPriceBot,
                totalSupply: 300,
                inflationRate: inflationRatesBots[i]
            });
        }

        for (uint256 i = 0; i < statueTokens.length; i++) {
            // increment tokens count
            totalStatues += 1;

            // add token to tokenMap
            statueMap[totalStatues] = Token({
                tokenAddress: address(statueTokens[i]),
                thresholdBots: 0,
                thresholdStatues: thresholdStatues[i],
                price: startPriceStatue,
                totalSupply: 5,
                inflationRate: inflationRatesStatues[i]
            });
        }
    }

    /// @dev A function that can be called from Etherscan to lower
    ///      the price of all items for that level by 10%.
    /// @param _level pass the level you want to lower the price for
    function whompwhomp(uint256 _level) public isValidLevel(_level) onlyOwner {
        tokenMap[_level].price = tokenMap[_level].price.sub(
            tokenMap[_level].price.mul(10).div(100)
        );
        statueMap[_level].price = statueMap[_level].price.sub(
            statueMap[_level].price.mul(10).div(100)
        );
    }

    /// @dev Returns the latest price for selected level
    /// @param _level level number
    /// @return latest price for selected level
    function lastestPriceForTokenLevel(uint256 _level)
        public
        view
        isValidLevel(_level)
        returns (uint256)
    {
        return tokenMap[_level].price;
    }

    /// @dev Returns the latest price for selected level
    /// @param _level level number
    /// @return latest price for selected level
    function lastestPriceForStatueLevel(uint256 _level)
        public
        view
        isValidLevel(_level)
        returns (uint256)
    {
        return statueMap[_level].price;
    }

    /// @dev returns a details array of uints for the Bot levels
    function getDetailForTokenLevels()
        public
        view
        returns (uint256[5][] memory)
    {
        uint256[5][] memory levels = new uint256[5][](totalTokens);

        for (uint256 i = 1; i <= totalTokens; i++) {
            uint256[5] memory levelInfo;
            levelInfo[0] = tokenMap[i].price;
            levelInfo[1] = tokenMap[i].thresholdBots;
            levelInfo[2] = tokenMap[i].totalSupply;
            levelInfo[3] = BotToken(tokenMap[i].tokenAddress).lastMintedToken();
            levelInfo[4] = tokenMap[i].totalSupply - levelInfo[3];

            // push levelInfo into levels
            levels[i - 1] = levelInfo;
        }

        return levels;
    }

    /// @dev returns a details array of uints for the Statue levels
    function getDetailForStatueLevels()
        public
        view
        returns (uint256[5][] memory)
    {
        uint256[5][] memory levels = new uint256[5][](totalTokens);

        for (uint256 i = 1; i <= totalStatues; i++) {
            uint256[5] memory levelInfo;
            levelInfo[0] = statueMap[i].price;
            levelInfo[1] = statueMap[i].thresholdStatues;
            levelInfo[2] = statueMap[i].totalSupply;
            levelInfo[3] = StatueToken(statueMap[i].tokenAddress)
                .lastMintedToken();
            levelInfo[4] = statueMap[i].totalSupply - levelInfo[3];

            // push levelInfo into levels
            levels[i - 1] = levelInfo;
        }

        return levels;
    }

    /// @dev request to mint a Bot NFT
    /// @param level pass the level to route the mint
    /// @return the id of the NFT
    function requestMint(uint256 level)
        public
        payable
        isValidLevel(level)
        returns (uint256)
    {
        BotToken levelToken = BotToken(tokenMap[level].tokenAddress);

        // check if threshold for previous token has been reached
        if (level > 1) {
            uint256 previousLevel = level - 1;
            require(
                BotToken(tokenMap[previousLevel].tokenAddress)
                    .lastMintedToken() >= tokenMap[previousLevel].thresholdBots,
                "You can't continue until the previous level threshold is reached"
            );
        }

        // compare value and price
        require(msg.value >= tokenMap[level].price, "NOT ENOUGH");

        // store the old price
        uint256 currentPrice = tokenMap[level].price;

        // update the price of the token
        tokenMap[level].price = (currentPrice * tokenMap[level].inflationRate)
            .div(1000);

        // make sure there are available tokens for this level
        require(
            levelToken.lastMintedToken() <= tokenMap[level].totalSupply,
            "Minting completed for this level"
        );

        // mint token
        uint256 id = levelToken.mint(msg.sender);

        // send ETH to gitcoin multisig
        (bool success, ) = gitcoin.call{value: currentPrice}("");
        require(success, "could not send");

        // send the refund
        uint256 refund = msg.value.sub(currentPrice);
        if (refund > 0) {
            (bool refundSent, ) = msg.sender.call{value: refund}("");
            require(refundSent, "Refund could not be sent");
        }

        return id;
    }

    /// @dev request to mint a statue NFT
    /// @param level pass the level to route the mint
    /// @return the id of the NFT
    function requestMintStatue(uint256 level)
        public
        payable
        isValidLevel(level)
        returns (uint256)
    {
        StatueToken levelToken = StatueToken(statueMap[level].tokenAddress);

        // check if threshold for previous token has been reached
        if (level > 1) {
            uint256 previousLevel = level - 1;
            require(
                StatueToken(statueMap[previousLevel].tokenAddress)
                    .lastMintedToken() >=
                    statueMap[previousLevel].thresholdStatues,
                "You can't continue until the previous level threshold is reached"
            );
        }

        // compare value and price
        require(msg.value >= statueMap[level].price, "NOT ENOUGH");

        // store the old price
        uint256 currentPrice = statueMap[level].price;

        // update the price of the token
        statueMap[level].price = (currentPrice * 1350).div(1000);

        // make sure there are available tokens for this level
        require(
            levelToken.lastMintedToken() <= statueMap[level].totalSupply,
            "Minting completed for this level"
        );

        // mint token
        uint256 id = levelToken.mint(msg.sender);

        // send ETH to gitcoin multisig
        (bool success, ) = gitcoin.call{value: currentPrice}("");
        require(success, "could not send");

        // send the refund
        uint256 refund = msg.value.sub(currentPrice);
        if (refund > 0) {
            (bool refundSent, ) = msg.sender.call{value: refund}("");
            require(refundSent, "Refund could not be sent");
        }

        return id;
    }

    /// @dev transfer ownership of ERC-721 token contracts
    /// @param to address of the new owner
    function transferTokenOwnership(address to) public onlyOwner {
        require(
            to != 0x0000000000000000000000000000000000000000,
            "cannot make balck hole owner"
        );
        for (uint256 i = 1; i <= totalTokens; i++) {
            BotToken(tokenMap[i].tokenAddress).transferOwnership(to);
        }
    }

    /// @dev transfer ownership of ERC-721 token contracts
    /// @param to address of the new owner
    function transferStatueOwnership(address to) public onlyOwner {
        require(
            to != 0x0000000000000000000000000000000000000000,
            "cannot make balck hole owner"
        );
        for (uint256 i = 1; i <= totalStatues; i++) {
            StatueToken(statueMap[i].tokenAddress).transferOwnership(to);
        }
    }
}

File 2 of 6 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 3 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../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.
 *
 * By default, the owner account will be the one that deploys the contract. 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;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 6 : TokenRecover.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.4;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/**
 * @title TokenRecover
 * @dev Allow to recover any ERC20 sent into the contract for error
 */
contract TokenRecover is Ownable {
    /**
     * @dev Remember that only owner can call so be careful when use on contracts generated from other contracts.
     * @param tokenAddress The token contract address
     * @param tokenAmount Number of tokens to be sent
     */
    function recoverERC20(address tokenAddress, uint256 tokenAmount) public onlyOwner {
        IERC20(tokenAddress).transfer(owner(), tokenAmount);
    }
}

File 5 of 6 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @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;
    }
}

File 6 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract BotToken[]","name":"tokens","type":"address[]"},{"internalType":"contract StatueToken[]","name":"statueTokens","type":"address[]"},{"internalType":"uint256[]","name":"thresholdBots","type":"uint256[]"},{"internalType":"uint256[]","name":"thresholdStatues","type":"uint256[]"},{"internalType":"uint256","name":"startPriceBot","type":"uint256"},{"internalType":"uint256","name":"startPriceStatue","type":"uint256"},{"internalType":"uint256[]","name":"inflationRatesStatues","type":"uint256[]"},{"internalType":"uint256[]","name":"inflationRatesBots","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"getDetailForStatueLevels","outputs":[{"internalType":"uint256[5][]","name":"","type":"uint256[5][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDetailForTokenLevels","outputs":[{"internalType":"uint256[5][]","name":"","type":"uint256[5][]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_level","type":"uint256"}],"name":"lastestPriceForStatueLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_level","type":"uint256"}],"name":"lastestPriceForTokenLevel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"requestMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"level","type":"uint256"}],"name":"requestMintStatue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"totalStatues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferStatueOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"transferTokenOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_level","type":"uint256"}],"name":"whompwhomp","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b5060405162001b5638038062001b568339810160408190526200003491620004fd565b6200003f33620003bd565b7fde21f729137c5af1b01d73af1dc21effa2b8a0d60000000000000000000000006080528551885114620000b95760405162461bcd60e51b8152602060048201526027602482015260008051602062001b368339815191526044820152661c995cda1bdb1960ca1b60648201526084015b60405180910390fd5b84518751146200010b5760405162461bcd60e51b8152602060048201526027602482015260008051602062001b368339815191526044820152661c995cda1bdb1960ca1b6064820152608401620000b0565b60005b88518110156200025e576001600360008282546200012d91906200066b565b925050819055506040518060c001604052808a83815181106200016057634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031681526020018883815181106200019757634e487b7160e01b600052603260045260246000fd5b6020026020010151815260200160008152602001868152602001838381518110620001d257634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825261012c918101919091526003805460009081526001808452604091829020855181546001600160a01b0319166001600160a01b03909116178155938501519084015583015160028301556060830151908201556080820151600482015560a09091015160059091015580620002558162000686565b9150506200010e565b5060005b8751811015620003ae576001600460008282546200028191906200066b565b925050819055506040518060c00160405280898381518110620002b457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316815260200160008152602001878381518110620002f257634e487b7160e01b600052603260045260246000fd5b602002602001015181526020018581526020018483815181106200032657634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825260059181018290526004805460009081526002808452604091829020865181546001600160a01b0319166001600160a01b0390911617815593860151600185015590850151908301556060840151600383015560808401519082015560a09092015191015580620003a58162000686565b91505062000262565b505050505050505050620006d0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600082601f8301126200041e578081fd5b8151602062000437620004318362000645565b62000612565b80838252828201915082860187848660051b890101111562000457578586fd5b855b858110156200048c5781516001600160a01b038116811462000479578788fd5b8452928401929084019060010162000459565b5090979650505050505050565b600082601f830112620004aa578081fd5b81516020620004bd620004318362000645565b80838252828201915082860187848660051b8901011115620004dd578586fd5b855b858110156200048c57815184529284019290840190600101620004df565b600080600080600080600080610100898b0312156200051a578384fd5b88516001600160401b038082111562000531578586fd5b6200053f8c838d016200040d565b995060208b015191508082111562000555578586fd5b620005638c838d016200040d565b985060408b015191508082111562000579578586fd5b620005878c838d0162000499565b975060608b01519150808211156200059d578586fd5b620005ab8c838d0162000499565b965060808b0151955060a08b0151945060c08b0151915080821115620005cf578384fd5b620005dd8c838d0162000499565b935060e08b0151915080821115620005f3578283fd5b50620006028b828c0162000499565b9150509295985092959890939650565b604051601f8201601f191681016001600160401b03811182821017156200063d576200063d620006ba565b604052919050565b60006001600160401b03821115620006615762000661620006ba565b5060051b60200190565b60008219821115620006815762000681620006a4565b500190565b60006000198214156200069d576200069d620006a4565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60805160601c611447620006ef60003960006105a701526114476000f3fe6080604052600436106100dd5760003560e01c8063715018a61161007f578063a805f5e211610059578063a805f5e214610212578063b7d6d22814610228578063cf2ebe561461023d578063f2fde38b1461025d57600080fd5b8063715018a6146101bf5780637e1c0c09146101d45780638da5cb5b146101ea57600080fd5b806349733d04116100bb57806349733d041461014c578063558f89be1461015f57806362d833ab1461017f578063704583c31461019f57600080fd5b806311763ef5146100e257806321e6b53d146101085780632ffff1871461012a575b600080fd5b6100f56100f036600461123b565b61027d565b6040519081526020015b60405180910390f35b34801561011457600080fd5b50610128610123366004611214565b610711565b005b34801561013657600080fd5b5061013f610820565b6040516100ff919061126b565b6100f561015a36600461123b565b6109ba565b34801561016b57600080fd5b5061012861017a36600461123b565b610bd6565b34801561018b57600080fd5b506100f561019a36600461123b565b610d0f565b3480156101ab57600080fd5b506101286101ba366004611214565b610d8d565b3480156101cb57600080fd5b50610128610e98565b3480156101e057600080fd5b506100f560035481565b3480156101f657600080fd5b506000546040516001600160a01b0390911681526020016100ff565b34801561021e57600080fd5b506100f560045481565b34801561023457600080fd5b5061013f610ece565b34801561024957600080fd5b506100f561025836600461123b565b611062565b34801561026957600080fd5b50610128610278366004611214565b6110e0565b600081600081116102a95760405162461bcd60e51b81526004016102a0906112fc565b60405180910390fd5b6003548111156102cb5760405162461bcd60e51b81526004016102a0906112fc565b6004548111156102ed5760405162461bcd60e51b81526004016102a0906112fc565b6000838152600260205260409020546001600160a01b031660018411156103cb57600061031b6001866113c9565b60008181526002602081815260409283902091820154915483516376296a1960e11b8152935194955091936001600160a01b039092169263ec52d4329260048083019392829003018186803b15801561037357600080fd5b505afa158015610387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ab9190611253565b10156103c95760405162461bcd60e51b81526004016102a09061132c565b505b6000848152600260205260409020600301543410156104195760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b60448201526064016102a0565b6000848152600260205260409020600301546104436103e861043d836105466113aa565b9061117b565b600086815260026020908152604091829020600381019390935560059092015481516376296a1960e11b8152915190926001600160a01b0386169263ec52d4329260048083019392829003018186803b15801561049f57600080fd5b505afa1580156104b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d79190611253565b11156105255760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e6720636f6d706c6574656420666f722074686973206c6576656c60448201526064016102a0565b6040516335313c2160e11b81523360048201526000906001600160a01b03841690636a62784290602401602060405180830381600087803b15801561056957600080fd5b505af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190611253565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106575760405162461bcd60e51b815260206004820152600e60248201526d18dbdd5b19081b9bdd081cd95b9960921b60448201526064016102a0565b6000610663348561118e565b9050801561070557604051600090339083908381818185875af1925050503d80600081146106ad576040519150601f19603f3d011682016040523d82523d6000602084013e6106b2565b606091505b50509050806107035760405162461bcd60e51b815260206004820152601860248201527f526566756e6420636f756c64206e6f742062652073656e74000000000000000060448201526064016102a0565b505b50909695505050505050565b6000546001600160a01b0316331461073b5760405162461bcd60e51b81526004016102a0906112c7565b6001600160a01b0381166107915760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f74206d616b652062616c636b20686f6c65206f776e65720000000060448201526064016102a0565b60015b600354811161081c576000818152600160205260409081902054905163f2fde38b60e01b81526001600160a01b0384811660048301529091169063f2fde38b90602401600060405180830381600087803b1580156107f157600080fd5b505af1158015610805573d6000803e3d6000fd5b505050508080610814906113e0565b915050610794565b5050565b6060600060035467ffffffffffffffff81111561084d57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561088657816020015b6108736111f6565b81526020019060019003908161086b5790505b50905060015b60045481116109b45761089d6111f6565b600082815260026020818152604080842060038101548652808401548684015260058101548683015293869052918152915481516376296a1960e11b815291516001600160a01b039091169263ec52d4329260048082019391829003018186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190611253565b6060820181905260008381526002602052604090206005015461096591906113c9565b608082015280836109776001856113c9565b8151811061099557634e487b7160e01b600052603260045260246000fd5b60200260200101819052505080806109ac906113e0565b91505061088c565b50919050565b600081600081116109dd5760405162461bcd60e51b81526004016102a0906112fc565b6003548111156109ff5760405162461bcd60e51b81526004016102a0906112fc565b600454811115610a215760405162461bcd60e51b81526004016102a0906112fc565b6000838152600160208190526040909120546001600160a01b031690841115610b01576000610a516001866113c9565b60008181526001602081815260409283902091820154915483516376296a1960e11b8152935194955091936001600160a01b039092169263ec52d4329260048083019392829003018186803b158015610aa957600080fd5b505afa158015610abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae19190611253565b1015610aff5760405162461bcd60e51b81526004016102a09061132c565b505b600084815260016020526040902060030154341015610b4f5760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b60448201526064016102a0565b60008481526001602052604090206003810154600490910154610b7a906103e89061043d90846113aa565b600086815260016020908152604091829020600381019390935560059092015481516376296a1960e11b8152915190926001600160a01b0386169263ec52d4329260048083019392829003018186803b15801561049f57600080fd5b8060008111610bf75760405162461bcd60e51b81526004016102a0906112fc565b600354811115610c195760405162461bcd60e51b81526004016102a0906112fc565b600454811115610c3b5760405162461bcd60e51b81526004016102a0906112fc565b6000546001600160a01b03163314610c655760405162461bcd60e51b81526004016102a0906112c7565b600082815260016020526040902060030154610ca590610c8d9060649061043d90600a61119a565b6000848152600160205260409020600301549061118e565b6000838152600160209081526040808320600390810194909455600290915290200154610cf690610cde9060649061043d90600a61119a565b6000848152600260205260409020600301549061118e565b6000928352600260205260409092206003019190915550565b60008160008111610d325760405162461bcd60e51b81526004016102a0906112fc565b600354811115610d545760405162461bcd60e51b81526004016102a0906112fc565b600454811115610d765760405162461bcd60e51b81526004016102a0906112fc565b505060009081526002602052604090206003015490565b6000546001600160a01b03163314610db75760405162461bcd60e51b81526004016102a0906112c7565b6001600160a01b038116610e0d5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f74206d616b652062616c636b20686f6c65206f776e65720000000060448201526064016102a0565b60015b600454811161081c576000818152600260205260409081902054905163f2fde38b60e01b81526001600160a01b0384811660048301529091169063f2fde38b90602401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050508080610e90906113e0565b915050610e10565b6000546001600160a01b03163314610ec25760405162461bcd60e51b81526004016102a0906112c7565b610ecc60006111a6565b565b6060600060035467ffffffffffffffff811115610efb57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f3457816020015b610f216111f6565b815260200190600190039081610f195790505b50905060015b60035481116109b457610f4b6111f6565b600082815260016020818152604080842060038101548652808401548684015260058101548683015293869052918152915481516376296a1960e11b815291516001600160a01b039091169263ec52d4329260048082019391829003018186803b158015610fb857600080fd5b505afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff09190611253565b6060820181905260008381526001602052604090206005015461101391906113c9565b608082015280836110256001856113c9565b8151811061104357634e487b7160e01b600052603260045260246000fd5b602002602001018190525050808061105a906113e0565b915050610f3a565b600081600081116110855760405162461bcd60e51b81526004016102a0906112fc565b6003548111156110a75760405162461bcd60e51b81526004016102a0906112fc565b6004548111156110c95760405162461bcd60e51b81526004016102a0906112fc565b505060009081526001602052604090206003015490565b6000546001600160a01b0316331461110a5760405162461bcd60e51b81526004016102a0906112c7565b6001600160a01b03811661116f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a0565b611178816111a6565b50565b6000611187828461138a565b9392505050565b600061118782846113c9565b600061118782846113aa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060a001604052806005906020820280368337509192915050565b600060208284031215611225578081fd5b81356001600160a01b0381168114611187578182fd5b60006020828403121561124c578081fd5b5035919050565b600060208284031215611264578081fd5b5051919050565b6020808252825182820181905260009190848201906040850190845b8181101561070557835183875b60058110156112b157825182529187019190870190600101611294565b5050509284019260a09290920191600101611287565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260169082015275125b9d985b1a59081b195d995b081cd95b1958dd195960521b604082015260600190565b602080825260409082018190527f596f752063616e277420636f6e74696e756520756e74696c2074686520707265908201527f76696f7573206c6576656c207468726573686f6c642069732072656163686564606082015260800190565b6000826113a557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156113c4576113c46113fb565b500290565b6000828210156113db576113db6113fb565b500390565b60006000198214156113f4576113f46113fb565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212202ab2b31851d795f915b9d865996b7f013f9f2ce8a0158b859eca7e56cd2b939364736f6c634300080400334d69736d61746368206c656e677468206f6620746f6b656e7320616e642074680000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000bb9551fc2400000000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000082c7c02a52b75387db14fa375938496cbb98438800000000000000000000000042dcba5da33cddb8202cc182a443a3e7b299dadb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f80e61279bdc3d02bb9b1887a026f500b203893d000000000000000000000000abc230e044f828e142d116d46762e95a92e4bce2000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000054600000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000417

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c8063715018a61161007f578063a805f5e211610059578063a805f5e214610212578063b7d6d22814610228578063cf2ebe561461023d578063f2fde38b1461025d57600080fd5b8063715018a6146101bf5780637e1c0c09146101d45780638da5cb5b146101ea57600080fd5b806349733d04116100bb57806349733d041461014c578063558f89be1461015f57806362d833ab1461017f578063704583c31461019f57600080fd5b806311763ef5146100e257806321e6b53d146101085780632ffff1871461012a575b600080fd5b6100f56100f036600461123b565b61027d565b6040519081526020015b60405180910390f35b34801561011457600080fd5b50610128610123366004611214565b610711565b005b34801561013657600080fd5b5061013f610820565b6040516100ff919061126b565b6100f561015a36600461123b565b6109ba565b34801561016b57600080fd5b5061012861017a36600461123b565b610bd6565b34801561018b57600080fd5b506100f561019a36600461123b565b610d0f565b3480156101ab57600080fd5b506101286101ba366004611214565b610d8d565b3480156101cb57600080fd5b50610128610e98565b3480156101e057600080fd5b506100f560035481565b3480156101f657600080fd5b506000546040516001600160a01b0390911681526020016100ff565b34801561021e57600080fd5b506100f560045481565b34801561023457600080fd5b5061013f610ece565b34801561024957600080fd5b506100f561025836600461123b565b611062565b34801561026957600080fd5b50610128610278366004611214565b6110e0565b600081600081116102a95760405162461bcd60e51b81526004016102a0906112fc565b60405180910390fd5b6003548111156102cb5760405162461bcd60e51b81526004016102a0906112fc565b6004548111156102ed5760405162461bcd60e51b81526004016102a0906112fc565b6000838152600260205260409020546001600160a01b031660018411156103cb57600061031b6001866113c9565b60008181526002602081815260409283902091820154915483516376296a1960e11b8152935194955091936001600160a01b039092169263ec52d4329260048083019392829003018186803b15801561037357600080fd5b505afa158015610387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103ab9190611253565b10156103c95760405162461bcd60e51b81526004016102a09061132c565b505b6000848152600260205260409020600301543410156104195760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b60448201526064016102a0565b6000848152600260205260409020600301546104436103e861043d836105466113aa565b9061117b565b600086815260026020908152604091829020600381019390935560059092015481516376296a1960e11b8152915190926001600160a01b0386169263ec52d4329260048083019392829003018186803b15801561049f57600080fd5b505afa1580156104b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d79190611253565b11156105255760405162461bcd60e51b815260206004820181905260248201527f4d696e74696e6720636f6d706c6574656420666f722074686973206c6576656c60448201526064016102a0565b6040516335313c2160e11b81523360048201526000906001600160a01b03841690636a62784290602401602060405180830381600087803b15801561056957600080fd5b505af115801561057d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a19190611253565b905060007f000000000000000000000000de21f729137c5af1b01d73af1dc21effa2b8a0d66001600160a01b03168360405160006040518083038185875af1925050503d8060008114610610576040519150601f19603f3d011682016040523d82523d6000602084013e610615565b606091505b50509050806106575760405162461bcd60e51b815260206004820152600e60248201526d18dbdd5b19081b9bdd081cd95b9960921b60448201526064016102a0565b6000610663348561118e565b9050801561070557604051600090339083908381818185875af1925050503d80600081146106ad576040519150601f19603f3d011682016040523d82523d6000602084013e6106b2565b606091505b50509050806107035760405162461bcd60e51b815260206004820152601860248201527f526566756e6420636f756c64206e6f742062652073656e74000000000000000060448201526064016102a0565b505b50909695505050505050565b6000546001600160a01b0316331461073b5760405162461bcd60e51b81526004016102a0906112c7565b6001600160a01b0381166107915760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f74206d616b652062616c636b20686f6c65206f776e65720000000060448201526064016102a0565b60015b600354811161081c576000818152600160205260409081902054905163f2fde38b60e01b81526001600160a01b0384811660048301529091169063f2fde38b90602401600060405180830381600087803b1580156107f157600080fd5b505af1158015610805573d6000803e3d6000fd5b505050508080610814906113e0565b915050610794565b5050565b6060600060035467ffffffffffffffff81111561084d57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561088657816020015b6108736111f6565b81526020019060019003908161086b5790505b50905060015b60045481116109b45761089d6111f6565b600082815260026020818152604080842060038101548652808401548684015260058101548683015293869052918152915481516376296a1960e11b815291516001600160a01b039091169263ec52d4329260048082019391829003018186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109429190611253565b6060820181905260008381526002602052604090206005015461096591906113c9565b608082015280836109776001856113c9565b8151811061099557634e487b7160e01b600052603260045260246000fd5b60200260200101819052505080806109ac906113e0565b91505061088c565b50919050565b600081600081116109dd5760405162461bcd60e51b81526004016102a0906112fc565b6003548111156109ff5760405162461bcd60e51b81526004016102a0906112fc565b600454811115610a215760405162461bcd60e51b81526004016102a0906112fc565b6000838152600160208190526040909120546001600160a01b031690841115610b01576000610a516001866113c9565b60008181526001602081815260409283902091820154915483516376296a1960e11b8152935194955091936001600160a01b039092169263ec52d4329260048083019392829003018186803b158015610aa957600080fd5b505afa158015610abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae19190611253565b1015610aff5760405162461bcd60e51b81526004016102a09061132c565b505b600084815260016020526040902060030154341015610b4f5760405162461bcd60e51b815260206004820152600a60248201526909c9ea8408a9c9eaa8e960b31b60448201526064016102a0565b60008481526001602052604090206003810154600490910154610b7a906103e89061043d90846113aa565b600086815260016020908152604091829020600381019390935560059092015481516376296a1960e11b8152915190926001600160a01b0386169263ec52d4329260048083019392829003018186803b15801561049f57600080fd5b8060008111610bf75760405162461bcd60e51b81526004016102a0906112fc565b600354811115610c195760405162461bcd60e51b81526004016102a0906112fc565b600454811115610c3b5760405162461bcd60e51b81526004016102a0906112fc565b6000546001600160a01b03163314610c655760405162461bcd60e51b81526004016102a0906112c7565b600082815260016020526040902060030154610ca590610c8d9060649061043d90600a61119a565b6000848152600160205260409020600301549061118e565b6000838152600160209081526040808320600390810194909455600290915290200154610cf690610cde9060649061043d90600a61119a565b6000848152600260205260409020600301549061118e565b6000928352600260205260409092206003019190915550565b60008160008111610d325760405162461bcd60e51b81526004016102a0906112fc565b600354811115610d545760405162461bcd60e51b81526004016102a0906112fc565b600454811115610d765760405162461bcd60e51b81526004016102a0906112fc565b505060009081526002602052604090206003015490565b6000546001600160a01b03163314610db75760405162461bcd60e51b81526004016102a0906112c7565b6001600160a01b038116610e0d5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f74206d616b652062616c636b20686f6c65206f776e65720000000060448201526064016102a0565b60015b600454811161081c576000818152600260205260409081902054905163f2fde38b60e01b81526001600160a01b0384811660048301529091169063f2fde38b90602401600060405180830381600087803b158015610e6d57600080fd5b505af1158015610e81573d6000803e3d6000fd5b505050508080610e90906113e0565b915050610e10565b6000546001600160a01b03163314610ec25760405162461bcd60e51b81526004016102a0906112c7565b610ecc60006111a6565b565b6060600060035467ffffffffffffffff811115610efb57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610f3457816020015b610f216111f6565b815260200190600190039081610f195790505b50905060015b60035481116109b457610f4b6111f6565b600082815260016020818152604080842060038101548652808401548684015260058101548683015293869052918152915481516376296a1960e11b815291516001600160a01b039091169263ec52d4329260048082019391829003018186803b158015610fb857600080fd5b505afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff09190611253565b6060820181905260008381526001602052604090206005015461101391906113c9565b608082015280836110256001856113c9565b8151811061104357634e487b7160e01b600052603260045260246000fd5b602002602001018190525050808061105a906113e0565b915050610f3a565b600081600081116110855760405162461bcd60e51b81526004016102a0906112fc565b6003548111156110a75760405162461bcd60e51b81526004016102a0906112fc565b6004548111156110c95760405162461bcd60e51b81526004016102a0906112fc565b505060009081526001602052604090206003015490565b6000546001600160a01b0316331461110a5760405162461bcd60e51b81526004016102a0906112c7565b6001600160a01b03811661116f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102a0565b611178816111a6565b50565b6000611187828461138a565b9392505050565b600061118782846113c9565b600061118782846113aa565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040518060a001604052806005906020820280368337509192915050565b600060208284031215611225578081fd5b81356001600160a01b0381168114611187578182fd5b60006020828403121561124c578081fd5b5035919050565b600060208284031215611264578081fd5b5051919050565b6020808252825182820181905260009190848201906040850190845b8181101561070557835183875b60058110156112b157825182529187019190870190600101611294565b5050509284019260a09290920191600101611287565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b602080825260169082015275125b9d985b1a59081b195d995b081cd95b1958dd195960521b604082015260600190565b602080825260409082018190527f596f752063616e277420636f6e74696e756520756e74696c2074686520707265908201527f76696f7573206c6576656c207468726573686f6c642069732072656163686564606082015260800190565b6000826113a557634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156113c4576113c46113fb565b500290565b6000828210156113db576113db6113fb565b500390565b60006000198214156113f4576113f46113fb565b5060010190565b634e487b7160e01b600052601160045260246000fdfea26469706673582212202ab2b31851d795f915b9d865996b7f013f9f2ce8a0158b859eca7e56cd2b939364736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000bb9551fc2400000000000000000000000000000000000000000000000000029a2241af62c0000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000000200000000000000000000000082c7c02a52b75387db14fa375938496cbb98438800000000000000000000000042dcba5da33cddb8202cc182a443a3e7b299dadb0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f80e61279bdc3d02bb9b1887a026f500b203893d000000000000000000000000abc230e044f828e142d116d46762e95a92e4bce2000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000c80000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000054600000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000040f0000000000000000000000000000000000000000000000000000000000000417

-----Decoded View---------------
Arg [0] : tokens (address[]): 0x82C7c02a52B75387DB14FA375938496cbb984388,0x42dCbA5dA33CDDB8202CC182A443a3e7b299dADb
Arg [1] : statueTokens (address[]): 0xf80e61279bdc3d02BB9b1887A026F500B203893d,0xaBC230E044F828e142d116D46762e95a92e4BcE2
Arg [2] : thresholdBots (uint256[]): 200,200
Arg [3] : thresholdStatues (uint256[]): 3,3
Arg [4] : startPriceBot (uint256): 3300000000000000
Arg [5] : startPriceStatue (uint256): 3000000000000000000
Arg [6] : inflationRatesStatues (uint256[]): 1350,1350
Arg [7] : inflationRatesBots (uint256[]): 1039,1047

-----Encoded View---------------
26 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [4] : 000000000000000000000000000000000000000000000000000bb9551fc24000
Arg [5] : 00000000000000000000000000000000000000000000000029a2241af62c0000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [7] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [9] : 00000000000000000000000082c7c02a52b75387db14fa375938496cbb984388
Arg [10] : 00000000000000000000000042dcba5da33cddb8202cc182a443a3e7b299dadb
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [12] : 000000000000000000000000f80e61279bdc3d02bb9b1887a026f500b203893d
Arg [13] : 000000000000000000000000abc230e044f828e142d116d46762e95a92e4bce2
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [15] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [16] : 00000000000000000000000000000000000000000000000000000000000000c8
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [18] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000546
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000546
Arg [23] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [24] : 000000000000000000000000000000000000000000000000000000000000040f
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000417


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.