Contract 0xA9158E22F89Bb3F69c5600338895Cb5FB81e5090

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc891e9dc04517296cce82c4a40d0febfb79cce8240aa3d2f2687eb0305309cfd0x60806040273274872022-04-19 14:54:21166 days 20 hrs ago0xb919da06d5f81777b13fc5cbd48635e19500fbf5 IN  Create: RaritiesWithOracle0 MATIC0.074417890608 31.048023838
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RaritiesWithOracle

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 1 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 9 : RaritiesWithOracle.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;

import "@openzeppelin/contracts/math/SafeMath.sol";

import '../interfaces/ICollectionManager.sol';
import '../interfaces/IOracle.sol';
import '../commons/OwnableInitializable.sol';
import '../commons/NativeMetaTransaction.sol';
import '../libs/String.sol';

contract RaritiesWithOracle is OwnableInitializable, NativeMetaTransaction {
    using String for string;
    using SafeMath for uint256;

    struct Rarity {
        string name;
        uint256 maxSupply;
        uint256 price;
    }

    Rarity[] public rarities;

    /// @dev indexes will start in 1
    mapping(bytes32 => uint256) rarityIndex;

    IOracle public oracle;

    event AddRarity(Rarity _rarity);
    event UpdatePrice(string _name, uint256 _price);
    event OracleSet(IOracle indexed _oldOracle, IOracle indexed _newOracle);

    /**
     * @notice Create the contract
     * @dev Rarity price is the price of a rarity in the rate returned by the oracle.
     *      For example if the oracle returns the rate of USD by MANA, then the price of the rarity
     *      has to be in USD
     * @param _owner - owner of the contract
     */
    constructor(
        address _owner,
        Rarity[] memory _rarities,
        IOracle _oracle
    ) {
        // EIP712 init
        _initializeEIP712('Decentraland Rarities', '1');
        // Ownable init
        _initOwnable();
        setOracle(_oracle);
        transferOwnership(_owner);

        for (uint256 i = 0; i < _rarities.length; i++) {
            _addRarity(_rarities[i]);
        }
    }

    /**
     * @notice Set the oracle
     * @param _newOracle - oracle contract
     */
    function setOracle(IOracle _newOracle) public onlyOwner {
        require(
            address(_newOracle) != address(0),
            'Rarities#setOracle: INVALID_ORACLE'
        );

        emit OracleSet(oracle, _newOracle);
        oracle = _newOracle;
    }

    function updatePrices(string[] calldata _names, uint256[] calldata _prices)
        external
        onlyOwner
    {
        require(
            _names.length == _prices.length,
            'Rarities#updatePrices: LENGTH_MISMATCH'
        );

        for (uint256 i = 0; i < _names.length; i++) {
            string memory name = _names[i];
            uint256 price = _prices[i];
            bytes32 rarityKey = keccak256(bytes(name.toLowerCase()));
            uint256 index = rarityIndex[rarityKey];

            require(
                rarityIndex[rarityKey] > 0,
                'Rarities#updatePrices: INVALID_RARITY'
            );

            rarities[index - 1].price = price;

            emit UpdatePrice(name, price);
        }
    }

    function addRarities(Rarity[] memory _rarities) external onlyOwner {
        for (uint256 i = 0; i < _rarities.length; i++) {
            _addRarity(_rarities[i]);
        }
    }

    function _addRarity(Rarity memory _rarity) internal {
        uint256 rarityLength = bytes(_rarity.name).length;
        require(
            rarityLength > 0 && rarityLength <= 32,
            'Rarities#_addRarity: INVALID_LENGTH'
        );

        bytes32 rarityKey = keccak256(bytes(_rarity.name.toLowerCase()));
        require(
            rarityIndex[rarityKey] == 0,
            'Rarities#_addRarity: RARITY_ALREADY_ADDED'
        );

        rarities.push(_rarity);

        rarityIndex[rarityKey] = rarities.length;

        emit AddRarity(_rarity);
    }

    /**
     * @notice Returns the amount of item in the collection
     * @return Amount of items in the collection
     */
    function raritiesCount() external view returns (uint256) {
        return rarities.length;
    }

    /**
     * @notice Returns a rarity with the price updated to reflect its price
     *         in the expected token. For example, the price is set in USD 
     *         but it has to be paid in MANA so the price will be returned 
     *         rated in MANA instead.
     * @dev will revert if the rarity is out of bounds
     * @return rarity for the given index
     */
    function getRarityByName(string memory _rarity)
        public
        view
        returns (Rarity memory)
    {
        bytes32 rarityKey = keccak256(bytes(_rarity.toLowerCase()));

        uint256 index = rarityIndex[rarityKey];

        require(
            rarityIndex[rarityKey] > 0,
            'Rarities#getRarityByName: INVALID_RARITY'
        );

        Rarity memory rarity = rarities[index - 1];

        uint256 originalPrice = rarity.price;
        uint256 rate = _getRateFromOracle();
        uint256 finalPrice = originalPrice.mul(1 ether).div(rate);

        rarity.price = finalPrice;

        return rarity;
    }

    /**
    * @dev Safely call Oracle.getRate
    * @return Rate
    */
    function _getRateFromOracle() internal view returns(uint256) {
        /* solium-disable-next-line */
        (bool success, bytes memory data) = address(oracle).staticcall(
            abi.encodeWithSelector(oracle.getRate.selector)
        );

        require(success, "Rarities#_getRateFromOracle: INVALID_RATE_FROM_ORACLE");

        return abi.decode(data, (uint256));
    }
}

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

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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) {
        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) {
        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) {
        // 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) {
        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) {
        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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    /**
     * @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. 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) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b > 0, "SafeMath: modulo by zero");
        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) {
        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.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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) {
        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) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

File 3 of 9 : ICollectionManager.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;


interface ICollectionManager {
   function manageCollection(address _forwarder, address _collection, bytes calldata _data) external;
}

File 4 of 9 : IOracle.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;

interface IOracle {
    function getRate() external view returns (uint256);
}

File 5 of 9 : OwnableInitializable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;

import "./ContextMixin.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 OwnableInitializable is ContextMixin {
    address internal _owner;

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


    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    function _initOwnable () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

pragma solidity ^0.7.6;

import {SafeMath} from "@openzeppelin/contracts/math/SafeMath.sol";

import { EIP712Base } from "./EIP712Base.sol";

contract NativeMetaTransaction is EIP712Base {
    using SafeMath for uint256;
    bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(
        bytes(
            "MetaTransaction(uint256 nonce,address from,bytes functionSignature)"
        )
    );
    event MetaTransactionExecuted(
        address userAddress,
        address relayerAddress,
        bytes functionSignature
    );
    mapping(address => uint256) nonces;

    struct MetaTransaction {
        uint256 nonce;
        address from;
        bytes functionSignature;
    }

    function executeMetaTransaction(
        address userAddress,
        bytes memory functionSignature,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) external payable returns (bytes memory) {
        MetaTransaction memory metaTx = MetaTransaction({
            nonce: nonces[userAddress],
            from: userAddress,
            functionSignature: functionSignature
        });

        require(
            verify(userAddress, metaTx, sigR, sigS, sigV),
            "NMT#executeMetaTransaction: SIGNER_AND_SIGNATURE_DO_NOT_MATCH"
        );

        // increase nonce for user (to avoid re-use)
        nonces[userAddress] = nonces[userAddress].add(1);

        emit MetaTransactionExecuted(
            userAddress,
            msg.sender,
            functionSignature
        );

        // Append userAddress and relayer address at the end to extract it from calling context
        (bool success, bytes memory returnData) = address(this).call{value: msg.value}(
            abi.encodePacked(functionSignature, userAddress)
        );
        require(success, "NMT#executeMetaTransaction: CALL_FAILED");

        return returnData;
    }

    function hashMetaTransaction(MetaTransaction memory metaTx)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encode(
                    META_TRANSACTION_TYPEHASH,
                    metaTx.nonce,
                    metaTx.from,
                    keccak256(metaTx.functionSignature)
                )
            );
    }

    function getNonce(address user) external view returns (uint256 nonce) {
        nonce = nonces[user];
    }

    function verify(
        address signer,
        MetaTransaction memory metaTx,
        bytes32 sigR,
        bytes32 sigS,
        uint8 sigV
    ) internal view returns (bool) {
        require(signer != address(0), "NMT#verify: INVALID_SIGNER");
        return
            signer ==
            ecrecover(
                toTypedMessageHash(hashMetaTransaction(metaTx)),
                sigV,
                sigR,
                sigS
            );
    }
}

File 7 of 9 : String.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.12;

library String {

    /**
     * @dev Convert bytes32 to string.
     * @param _x - to be converted to string.
     * @return string
     */
    function bytes32ToString(bytes32 _x) internal pure returns (string memory) {
        bytes memory bytesString = new bytes(32);
        uint charCount = 0;
        for (uint j = 0; j < 32; j++) {
            bytes1 currentChar = bytes1(bytes32(uint(_x) * 2 ** (8 * j)));
            if (currentChar != 0) {
                bytesString[charCount] = currentChar;
                charCount++;
            }
        }
        bytes memory bytesStringTrimmed = new bytes(charCount);
        for (uint j = 0; j < charCount; j++) {
            bytesStringTrimmed[j] = bytesString[j];
        }
        return string(bytesStringTrimmed);
    }

    /**
     * @dev Convert uint to string.
     * @param _i - uint256 to be converted to string.
     * @return _uintAsString uint in string
     */
    function uintToString(uint _i) internal pure returns (string memory _uintAsString) {
        uint i = _i;

        if (i == 0) {
            return "0";
        }
        uint j = i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (i != 0) {
            bstr[k--] = bytes1(uint8(48 + i % 10));
            i /= 10;
        }
        return string(bstr);
    }

    /**
     * @dev Convert an address to string.
     * @param _x - address to be converted to string.
     * @return string representation of the address
     */
    function addressToString(address _x) internal pure returns (string memory) {
        bytes memory s = new bytes(40);
        for (uint i = 0; i < 20; i++) {
            bytes1 b = bytes1(uint8(uint160(_x) / (2**(8*(19 - i)))));
            bytes1 hi = bytes1(uint8(b) / 16);
            bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi));
            s[2*i] = char(hi);
            s[2*i+1] = char(lo);
        }
        return string(s);
    }

    function char(bytes1 b) internal pure returns (bytes1 c) {
        if (uint8(b) < 10) return bytes1(uint8(b) + 0x30);
        else return bytes1(uint8(b) + 0x57);
    }

    /**
     * @dev Lowercase a string.
     * @param _str - to be converted to string.
     * @return string
     */
    function toLowerCase(string memory _str) internal pure returns (string memory) {
        bytes memory bStr = bytes(_str);
        bytes memory bLower = new bytes(bStr.length);

        for (uint i = 0; i < bStr.length; i++) {
            // Uppercase character...
            if ((bStr[i] >= 0x41) && (bStr[i] <= 0x5A)) {
                // So we add 0x20 to make it lowercase
                bLower[i] = bytes1(uint8(bStr[i]) + 0x20);
            } else {
                bLower[i] = bStr[i];
            }
        }
        return string(bLower);
    }
}

File 8 of 9 : ContextMixin.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;


abstract contract ContextMixin {
    function _msgSender()
        internal
        view
        virtual
        returns (address payable sender)
    {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender := and(
                    mload(add(array, index)),
                    0xffffffffffffffffffffffffffffffffffffffff
                )
            }
        } else {
            sender = msg.sender;
        }
        return sender;
    }
}

File 9 of 9 : EIP712Base.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;


contract EIP712Base {
    struct EIP712Domain {
        string name;
        string version;
        address verifyingContract;
        bytes32 salt;
    }

    bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(
        bytes(
            "EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)"
        )
    );
    bytes32 public domainSeparator;

    // supposed to be called once while initializing.
    // one of the contractsa that inherits this contract follows proxy pattern
    // so it is not possible to do this in a constructor
    function _initializeEIP712(
        string memory name,
        string memory version
    )
        internal
    {
        domainSeparator = keccak256(
            abi.encode(
                EIP712_DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                keccak256(bytes(version)),
                address(this),
                bytes32(getChainId())
            )
        );
    }

    function getChainId() public pure returns (uint256) {
        uint256 id;
        assembly {
            id := chainid()
        }
        return id;
    }

    /**
     * Accept message hash and returns hash message in EIP712 compatible form
     * So that it can be used to recover signer from signature signed using EIP712 formatted data
     * https://eips.ethereum.org/EIPS/eip-712
     * "\\x19" makes the encoding deterministic
     * "\\x01" is the version byte to make it compatible to EIP-191
     */
    function toTypedMessageHash(bytes32 messageHash)
        internal
        view
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19\x01", domainSeparator, messageHash)
            );
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct RaritiesWithOracle.Rarity[]","name":"_rarities","type":"tuple[]"},{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"indexed":false,"internalType":"struct RaritiesWithOracle.Rarity","name":"_rarity","type":"tuple"}],"name":"AddRarity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"address","name":"relayerAddress","type":"address"},{"indexed":false,"internalType":"bytes","name":"functionSignature","type":"bytes"}],"name":"MetaTransactionExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IOracle","name":"_oldOracle","type":"address"},{"indexed":true,"internalType":"contract IOracle","name":"_newOracle","type":"address"}],"name":"OracleSet","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":false,"internalType":"string","name":"_name","type":"string"},{"indexed":false,"internalType":"uint256","name":"_price","type":"uint256"}],"name":"UpdatePrice","type":"event"},{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct RaritiesWithOracle.Rarity[]","name":"_rarities","type":"tuple[]"}],"name":"addRarities","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"bytes","name":"functionSignature","type":"bytes"},{"internalType":"bytes32","name":"sigR","type":"bytes32"},{"internalType":"bytes32","name":"sigS","type":"bytes32"},{"internalType":"uint8","name":"sigV","type":"uint8"}],"name":"executeMetaTransaction","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getChainId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_rarity","type":"string"}],"name":"getRarityByName","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"internalType":"struct RaritiesWithOracle.Rarity","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rarities","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"raritiesCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_newOracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"_names","type":"string[]"},{"internalType":"uint256[]","name":"_prices","type":"uint256[]"}],"name":"updatePrices","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620026f2380380620026f283398101604081905262000034916200075e565b620000946040518060400160405280601581526020017f446563656e7472616c616e642052617269746965730000000000000000000000815250604051806040016040528060018152602001603160f81b815250620000f960201b60201c565b6200009e62000193565b620000a981620001da565b620000b483620002c4565b60005b8251811015620000ef57620000e6838281518110620000d257fe5b6020026020010151620003b160201b60201c565b600101620000b7565b5050505062000a95565b6040518060800160405280604f815260200162002663604f91398051906020012082805190602001208280519060200120306200013b620004f560201b60201c565b60001b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206001819055505050565b60006200019f620004fa565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620026d2833981519152908290a350565b620001e4620004fa565b6000546001600160a01b0390811691161462000236576040805162461bcd60e51b81526020600482018190526024820152600080516020620026b2833981519152604482015290519081900360640190fd5b6001600160a01b038116620002685760405162461bcd60e51b81526004016200025f906200094d565b60405180910390fd5b6005546040516001600160a01b038084169216907fc1d3048301c0d23629a2532c8defa6d68f8e1a0e4157918769e9fb1b2eeb888e90600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b620002ce620004fa565b6000546001600160a01b0390811691161462000320576040805162461bcd60e51b81526020600482018190526024820152600080516020620026b2833981519152604482015290519081900360640190fd5b6001600160a01b038116620003675760405162461bcd60e51b81526004018080602001828103825260268152602001806200263d6026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620026d283398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b8051518015801590620003c5575060208111155b620003e45760405162461bcd60e51b81526004016200025f906200098f565b60006200040083600001516200055860201b62000c541760201c565b805160209182012060008181526004909252604090912054909150156200043b5760405162461bcd60e51b81526004016200025f9062000904565b600380546001810182556000829052845180518693929092027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b01916200048b91839160209190910190620006a5565b506020828101516001830155604092830151600290920191909155600354600084815260049092529082902055517fa1551daaa553ebc192df9198fc7d3d7e68b02a9be07fc92605cccd0d935d2c0090620004e8908590620009d2565b60405180910390a1505050565b465b90565b6000333014156200055357600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b03169150620004f79050565b503390565b60606000829050600081516001600160401b03811180156200057957600080fd5b506040519080825280601f01601f191660200182016040528015620005a5576020820181803683370190505b50905060005b82518110156200069b57604160f81b838281518110620005c757fe5b01602001516001600160f81b03191610801590620006045750605a60f81b838281518110620005f257fe5b01602001516001600160f81b03191611155b1562000655578281815181106200061757fe5b602001015160f81c60f81b60f81c60200160f81b8282815181106200063857fe5b60200101906001600160f81b031916908160001a90535062000692565b8281815181106200066257fe5b602001015160f81c60f81b8282815181106200067a57fe5b60200101906001600160f81b031916908160001a9053505b600101620005ab565b509150505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620006dd576000855562000728565b82601f10620006f857805160ff191683800117855562000728565b8280016001018555821562000728579182015b82811115620007285782518255916020019190600101906200070b565b50620007369291506200073a565b5090565b5b808211156200073657600081556001016200073b565b8051620006a08162000a7c565b60008060006060848603121562000773578283fd5b8351620007808162000a7c565b60208501519093506001600160401b038111156200079c578283fd5b85601f8287010112620007ad578283fd5b848101516001600160401b03811115620007c357fe5b620007d360208083020162000a25565b8181526020808201919088850101865b84811015620008e45781518a870101601f196060828e03820112156200080757898afd5b6040516001600160401b036060820190811190821117156200082557fe5b6060810160405260208301516001600160401b0381111562000845578b8cfd5b8e603f828601011262000856578b8cfd5b838101602001516001600160401b038111156200086f57fe5b62000882602085601f8401160162000a25565b93508084528f6020808385890101010111156200089d578c8dfd5b620008b2816020860160408589010162000a49565b5050908152604082810151602080840191909152606090930151908201528552938401939190910190600101620007e3565b505080955050505050620008fb6040850162000751565b90509250925092565b60208082526029908201527f5261726974696573235f6164645261726974793a205241524954595f414c524560408201526810511657d05111115160ba1b606082015260800190565b60208082526022908201527f5261726974696573237365744f7261636c653a20494e56414c49445f4f5241436040820152614c4560f01b606082015260800190565b60208082526023908201527f5261726974696573235f6164645261726974793a20494e56414c49445f4c454e60408201526208ea8960eb1b606082015260800190565b6000602082528251606060208401528051806080850152620009fc8160a086016020850162000a49565b6020850151604085810191909152909401516060840152505060a0601f909201601f1916010190565b6040518181016001600160401b038111828210171562000a4157fe5b604052919050565b60005b8381101562000a6657818101518382015260200162000a4c565b8381111562000a76576000848401525b50505050565b6001600160a01b038116811462000a9257600080fd5b50565b611b988062000aa56000396000f3fe6080604052600436106100ad5760003560e01c80630c53c51c146100b257806317b8e1cf146100db5780632d0335ab1461010a5780633408e470146101375780635b26f8da1461014c578063715018a61461016e5780637adbf973146101835780637dc0d1d0146101a357806389e9c4d3146101c55780638da5cb5b146101da578063b5262333146101ef578063f2fde38b1461021c578063f698da251461023c578063fa21cc7b14610251575b600080fd5b6100c56100c036600461144a565b610271565b6040516100d291906116f9565b60405180910390f35b3480156100e757600080fd5b506100fb6100f6366004611664565b61055e565b6040516100d29392919061172e565b34801561011657600080fd5b5061012a61012536600461142e565b61061d565b6040516100d291906116f0565b34801561014357600080fd5b5061012a610638565b34801561015857600080fd5b5061016c61016736600461153f565b61063d565b005b34801561017a57600080fd5b5061016c6106c9565b34801561018f57600080fd5b5061016c61019e36600461142e565b610759565b3480156101af57600080fd5b506101b861083c565b6040516100d291906116dc565b3480156101d157600080fd5b5061012a61084b565b3480156101e657600080fd5b506101b8610851565b3480156101fb57600080fd5b5061020f61020a36600461162a565b610860565b6040516100d29190611949565b34801561022857600080fd5b5061016c61023736600461142e565b6109bf565b34801561024857600080fd5b5061012a610aa5565b34801561025d57600080fd5b5061016c61026c3660046114d7565b610aab565b60408051606081810183526001600160a01b038816600081815260026020908152908590205484528301529181018690526102af8782878787610d92565b6102ea5760405162461bcd60e51b815260040180806020018281038252603d815260200180611a9e603d913960400191505060405180910390fd5b6001600160a01b03871660009081526002602052604090205461030e906001610e7f565b60026000896001600160a01b03166001600160a01b03168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b87338860405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156103b657818101518382015260200161039e565b50505050905090810190601f1680156103e35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1600080306001600160a01b031634898b6040516020018083805190602001908083835b602083106104345780518252601f199092019160209182019101610415565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106104aa5780518252601f19909201916020918201910161048b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461050c576040519150601f19603f3d011682016040523d82523d6000602084013e610511565b606091505b5091509150816105525760405162461bcd60e51b8152600401808060200182810382526027815260200180611afc6027913960400191505060405180910390fd5b98975050505050505050565b6003818154811061056e57600080fd5b60009182526020918290206003919091020180546040805160026001841615610100026000190190931692909204601f8101859004850283018501909152808252919350918391908301828280156106075780601f106105dc57610100808354040283529160200191610607565b820191906000526020600020905b8154815290600101906020018083116105ea57829003601f168201915b5050505050908060010154908060020154905083565b6001600160a01b031660009081526002602052604090205490565b465b90565b610645610ee0565b6000546001600160a01b03908116911614610695576040805162461bcd60e51b81526020600482018190526024820152600080516020611b23833981519152604482015290519081900360640190fd5b60005b81518110156106c5576106bd8282815181106106b057fe5b6020026020010151610f3c565b600101610698565b5050565b6106d1610ee0565b6000546001600160a01b03908116911614610721576040805162461bcd60e51b81526020600482018190526024820152600080516020611b23833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020611b43833981519152908390a3600080546001600160a01b0319169055565b610761610ee0565b6000546001600160a01b039081169116146107b1576040805162461bcd60e51b81526020600482018190526024820152600080516020611b23833981519152604482015290519081900360640190fd5b6001600160a01b0381166107e05760405162461bcd60e51b81526004016107d79061182a565b60405180910390fd5b6005546040516001600160a01b038084169216907fc1d3048301c0d23629a2532c8defa6d68f8e1a0e4157918769e9fb1b2eeb888e90600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031681565b60035490565b6000546001600160a01b031690565b6108686112ad565b600061087383610c54565b805160209182012060008181526004909252604090912054909150806108ab5760405162461bcd60e51b81526004016107d790611753565b6000600360018303815481106108bd57fe5b600091825260209182902060408051600393909302909101805460026001821615610100026000190190911604601f81018590049094028301608090810190925260608301848152929390928492909184918401828280156109605780601f1061093557610100808354040283529160200191610960565b820191906000526020600020905b81548152906001019060200180831161094357829003601f168201915b505050918352505060018201546020820152600290910154604091820152810151909150600061098e611068565b905060006109ae826109a885670de0b6b3a764000061112f565b90611188565b604085015250919695505050505050565b6109c7610ee0565b6000546001600160a01b03908116911614610a17576040805162461bcd60e51b81526020600482018190526024820152600080516020611b23833981519152604482015290519081900360640190fd5b6001600160a01b038116610a5c5760405162461bcd60e51b8152600401808060200182810382526026815260200180611a786026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020611b4383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60015481565b610ab3610ee0565b6000546001600160a01b03908116911614610b03576040805162461bcd60e51b81526020600482018190526024820152600080516020611b23833981519152604482015290519081900360640190fd5b828114610b225760405162461bcd60e51b81526004016107d7906117e4565b60005b83811015610c4d576000858583818110610b3b57fe5b9050602002810190610b4d9190611985565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939450879250869150859050818110610b9257fe5b9050602002013590506000610ba683610c54565b80516020918201206000818152600490925260409091205490915080610bde5760405162461bcd60e51b81526004016107d79061186c565b8260036001830381548110610bef57fe5b9060005260206000209060030201600201819055507f05b0e3546b37c788d01ccb3d1c8a6329795f32a6b78cb3bfe6782bd86d0e26fe8484604051610c3592919061170c565b60405180910390a1505060019092019150610b259050565b5050505050565b60606000829050600081516001600160401b0381118015610c7457600080fd5b506040519080825280601f01601f191660200182016040528015610c9f576020820181803683370190505b50905060005b8251811015610d8a57604160f81b838281518110610cbf57fe5b01602001516001600160f81b03191610801590610cfa5750605a60f81b838281518110610ce857fe5b01602001516001600160f81b03191611155b15610d4757828181518110610d0b57fe5b602001015160f81c60f81b60f81c60200160f81b828281518110610d2b57fe5b60200101906001600160f81b031916908160001a905350610d82565b828181518110610d5357fe5b602001015160f81c60f81b828281518110610d6a57fe5b60200101906001600160f81b031916908160001a9053505b600101610ca5565b509392505050565b60006001600160a01b038616610dec576040805162461bcd60e51b815260206004820152601a6024820152792726aa11bb32b934b33c9d1024a72b20a624a22fa9a4a3a722a960311b604482015290519081900360640190fd5b6001610dff610dfa876111ec565b61126f565b83868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015610e56573d6000803e3d6000fd5b505050602060405103516001600160a01b0316866001600160a01b031614905095945050505050565b600082820183811015610ed7576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b90505b92915050565b600033301415610f3757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061063a9050565b503390565b8051518015801590610f4f575060208111155b610f6b5760405162461bcd60e51b81526004016107d7906118b1565b6000610f7a8360000151610c54565b80516020918201206000818152600490925260409091205490915015610fb25760405162461bcd60e51b81526004016107d79061179b565b600380546001810182556000829052845180518693929092027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0191611000918391602091909101906112ce565b506020828101516001830155604092830151600290920191909155600354600084815260049092529082902055517fa1551daaa553ebc192df9198fc7d3d7e68b02a9be07fc92605cccd0d935d2c009061105b908590611949565b60405180910390a1505050565b60055460408051600481526024810182526020810180516001600160e01b03166333cd77e760e11b1790529051600092839283926001600160a01b03909216916110b291906116c0565b600060405180830381855afa9150503d80600081146110ed576040519150601f19603f3d011682016040523d82523d6000602084013e6110f2565b606091505b5091509150816111145760405162461bcd60e51b81526004016107d7906118f4565b80806020019051810190611128919061167c565b9250505090565b60008261113e57506000610eda565b8282028284828161114b57fe5b0414610ed75760405162461bcd60e51b8152600401808060200182810382526021815260200180611adb6021913960400191505060405180910390fd5b60008082116111db576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816111e457fe5b049392505050565b6000604051806080016040528060438152602001611a3560439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6001546040805161190160f01b6020808301919091526022820193909352604280820194909452815180820390940184526062019052815191012090565b60405180606001604052806060815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611304576000855561134a565b82601f1061131d57805160ff191683800117855561134a565b8280016001018555821561134a579182015b8281111561134a57825182559160200191906001019061132f565b5061135692915061135a565b5090565b5b80821115611356576000815560010161135b565b60006001600160401b0383111561138257fe5b611395601f8401601f19166020016119c9565b90508281528383830111156113a957600080fd5b828260208301376000602084830101529392505050565b60008083601f8401126113d1578182fd5b5081356001600160401b038111156113e7578182fd5b602083019150836020808302850101111561140157600080fd5b9250929050565b600082601f830112611418578081fd5b6114278383356020850161136f565b9392505050565b60006020828403121561143f578081fd5b8135610ed781611a1c565b600080600080600060a08688031215611461578081fd5b853561146c81611a1c565b945060208601356001600160401b03811115611486578182fd5b8601601f81018813611496578182fd5b6114a58882356020840161136f565b9450506040860135925060608601359150608086013560ff811681146114c9578182fd5b809150509295509295909350565b600080600080604085870312156114ec578384fd5b84356001600160401b0380821115611502578586fd5b61150e888389016113c0565b90965094506020870135915080821115611526578384fd5b50611533878288016113c0565b95989497509550505050565b60006020808385031215611551578182fd5b82356001600160401b0380821115611567578384fd5b818501915085601f83011261157a578384fd5b81358181111561158657fe5b61159384858302016119c9565b81815284810190848601875b8481101561161b57813587016060818d03601f190112156115be57898afd5b60408051606081018181108a821117156115d457fe5b8252828b0135898111156115e6578c8dfd5b6115f48f8d83870101611408565b825250828201358b820152606090920135908201528452928701929087019060010161159f565b50909998505050505050505050565b60006020828403121561163b578081fd5b81356001600160401b03811115611650578182fd5b61165c84828501611408565b949350505050565b600060208284031215611675578081fd5b5035919050565b60006020828403121561168d578081fd5b5051919050565b600081518084526116ac8160208601602086016119ec565b601f01601f19169290920160200192915050565b600082516116d28184602087016119ec565b9190910192915050565b6001600160a01b0391909116815260200190565b90815260200190565b6000602082526114276020830184611694565b60006040825261171f6040830185611694565b90508260208301529392505050565b6000606082526117416060830186611694565b60208301949094525060400152919050565b60208082526028908201527f52617269746965732367657452617269747942794e616d653a20494e56414c49604082015267445f52415249545960c01b606082015260800190565b60208082526029908201527f5261726974696573235f6164645261726974793a205241524954595f414c524560408201526810511657d05111115160ba1b606082015260800190565b60208082526026908201527f5261726974696573237570646174655072696365733a204c454e4754485f4d496040820152650a69a82a886960d31b606082015260800190565b60208082526022908201527f5261726974696573237365744f7261636c653a20494e56414c49445f4f5241436040820152614c4560f01b606082015260800190565b60208082526025908201527f5261726974696573237570646174655072696365733a20494e56414c49445f52604082015264415249545960d81b606082015260800190565b60208082526023908201527f5261726974696573235f6164645261726974793a20494e56414c49445f4c454e60408201526208ea8960eb1b606082015260800190565b60208082526035908201527f5261726974696573235f6765745261746546726f6d4f7261636c653a20494e56604082015274414c49445f524154455f46524f4d5f4f5241434c4560581b606082015260800190565b6000602082528251606060208401526119656080840182611694565b905060208401516040840152604084015160608401528091505092915050565b6000808335601e1984360301811261199b578283fd5b8301803591506001600160401b038211156119b4578283fd5b60200191503681900382131561140157600080fd5b6040518181016001600160401b03811182821017156119e457fe5b604052919050565b60005b83811015611a075781810151838201526020016119ef565b83811115611a16576000848401525b50505050565b6001600160a01b0381168114611a3157600080fd5b5056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734e4d5423657865637574654d6574615472616e73616374696f6e3a205349474e45525f414e445f5349474e41545552455f444f5f4e4f545f4d41544348536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774e4d5423657865637574654d6574615472616e73616374696f6e3a2043414c4c5f4641494c45444f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212206cb2fed08340d78270966f3d8870007ee9ef45ef44490edbf293431cd82c14d364736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c74294f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000e659a116e161d8e502f9036babda51334f2667e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000e18b1361d41afc44658216f3dc27e48c2336e3c2000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000001b1ae4d6e2ef5000000000000000000000000000000000000000000000000000000000000000000006636f6d6d6f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000001b1ae4d6e2ef5000000000000000000000000000000000000000000000000000000000000000000008756e636f6d6d6f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000000000000000000000047261726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000001b1ae4d6e2ef500000000000000000000000000000000000000000000000000000000000000000000465706963000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000000000000000000000096c6567656e6461727900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000000000000000000000066d797468696300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000001b1ae4d6e2ef5000000000000000000000000000000000000000000000000000000000000000000006756e697175650000000000000000000000000000000000000000000000000000

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

0000000000000000000000000e659a116e161d8e502f9036babda51334f2667e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000e18b1361d41afc44658216f3dc27e48c2336e3c2000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000004a0000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000001b1ae4d6e2ef5000000000000000000000000000000000000000000000000000000000000000000006636f6d6d6f6e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000001b1ae4d6e2ef5000000000000000000000000000000000000000000000000000000000000000000008756e636f6d6d6f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000000000000000000000047261726500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000001b1ae4d6e2ef500000000000000000000000000000000000000000000000000000000000000000000465706963000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000000000000000000000096c6567656e6461727900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000001b1ae4d6e2ef50000000000000000000000000000000000000000000000000000000000000000000066d797468696300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000001b1ae4d6e2ef5000000000000000000000000000000000000000000000000000000000000000000006756e697175650000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _owner (address): 0x0e659a116e161d8e502f9036babda51334f2667e
Arg [1] : _rarities (tuple[]): System.Object,System.Object,System.Object,System.Object,System.Object,System.Object,System.Object
Arg [2] : _oracle (address): 0xe18b1361d41afc44658216f3dc27e48c2336e3c2

-----Encoded View---------------
46 Constructor Arguments found :
Arg [0] : 0000000000000000000000000e659a116e161d8e502f9036babda51334f2667e
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 000000000000000000000000e18b1361d41afc44658216f3dc27e48c2336e3c2
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [7] : 00000000000000000000000000000000000000000000000000000000000002c0
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000360
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [10] : 00000000000000000000000000000000000000000000000000000000000004a0
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [12] : 00000000000000000000000000000000000000000000000000000000000186a0
Arg [13] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [15] : 636f6d6d6f6e0000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [17] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [18] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [20] : 756e636f6d6d6f6e000000000000000000000000000000000000000000000000
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [22] : 0000000000000000000000000000000000000000000000000000000000001388
Arg [23] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [24] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [25] : 7261726500000000000000000000000000000000000000000000000000000000
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [27] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [28] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [30] : 6570696300000000000000000000000000000000000000000000000000000000
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [33] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [35] : 6c6567656e646172790000000000000000000000000000000000000000000000
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [37] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [38] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [39] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [40] : 6d79746869630000000000000000000000000000000000000000000000000000
Arg [41] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [42] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [43] : 00000000000000000000000000000000000000000000001b1ae4d6e2ef500000
Arg [44] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [45] : 756e697175650000000000000000000000000000000000000000000000000000


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.