ETH Price: $2,486.52 (+0.21%)

Token

spraytoken.net (SPRAY)
 

Overview

Max Total Supply

437,351,104,619,084.59533792 SPRAY

Holders

147 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Filtered by Token Holder
Uniswap V2: SPRAY 2
Balance
290,360,671,392,127.64507951 SPRAY

Value
$0.00
0x304872a6D0faF474a7D8e43d874880A5199a4e34
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A deflationary token with automatic rewards for holders.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Spray

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 7 of 7: Spray.sol
// Spraytoken.net (SPRAY)
// SPRAY is a deflationary cryptocurrency with auto-staking and dynamic burn model,
// designed to resist the bear market by increasing the burn rate when the market is in a downward phase.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "Ownable.sol";
import "IERC20Metadata.sol";
import "Address.sol";
import "AggregatorV3Interface.sol";

/**
 * @dev Wrapper for chainlink oracle (AggregatorV3Interface)
 */
abstract contract Aggregator is Ownable {
    using Address for address;

    AggregatorV3Interface private _aggregator;
    int256 private _price = 0;
    bool private _isTrandUp = true;

    /**
     * @dev Emitted when agregator changes to `newAggregator`.
     */
    event UpdateAggregator(address indexed newAggregator);

    /**
     * @dev Updates the oracle used to receive market data.
     *
     * Can be called by the contract owner.
     */
    function updateAggregator(address newAggregator) public virtual onlyOwner {
        require(newAggregator.isContract(), "Address: call to non-contract");

        _aggregator = AggregatorV3Interface(newAggregator);
        updateTrand();

        emit UpdateAggregator(newAggregator);
    }

    /**
     * @dev Checks if the market trend is upward (bullish).
     */
    function isTrandUp() public view virtual returns (bool) {
        return _isTrandUp;
    }

    /**
     * @dev Updates the trend information.
     */
    function updateTrand() public virtual {
        (, int256 price, , , ) = _aggregator.latestRoundData();

        if (price != _price) {
            _isTrandUp = price > _price;
            _price = price;
        }
    }
}

/**
 * @dev Deflationary ERC-20 token. Automatic rewards for holders. Dynamic supply. Rich in memes.
 *
 * For more information see spraytoken.net
 */
contract Spray is Aggregator, IERC20Metadata {
    uint8 private constant _FEE_BASE = 3;
    uint8 private constant _FEE_DIV = 100;
    uint8 private constant _FIRE_MARKET_UP = 1;
    uint8 private constant _FIRE_MARKET_DOWN = 2;
    uint8 private constant _FIRE_DIV = 3;

    string private constant _NAME = "spraytoken.net";
    string private constant _SYMBOL = "SPRAY";
    uint8 private constant _DECIMALS = 8;
    uint256 private constant _EMISSION_INIT = 500 * (10**12) * (10**8);

    uint256 private _emissionExcluded = 0;
    uint256 private _emissionIncluded = _EMISSION_INIT;
    uint256 private _rate = type(uint256).max / _EMISSION_INIT;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _balances;

    mapping(address => bool) private _isExcluded;
    mapping(address => uint256) private _excludedBalances;

    constructor() {
        _balances[_msgSender()] = _EMISSION_INIT * _rate;
        emit Transfer(address(0), _msgSender(), _EMISSION_INIT);
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public pure override returns (string memory) {
        return _NAME;
    }

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() public pure override returns (string memory) {
        return _SYMBOL;
    }

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() public pure override returns (uint8) {
        return _DECIMALS;
    }

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() public view override returns (uint256) {
        return _emissionExcluded + _emissionIncluded;
    }

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _excludedBalances[account];

        return _balances[account] / _rate;
    }

    /**
     * @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)
        public
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _approve(sender, _msgSender(), currentAllowance - amount);

        _transfer(sender, recipient, amount);

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + addedValue
        );
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Check whether the account is included in redistribution.
     */
    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    /**
     * @dev Exclude `account` from receiving 1-2% transaction fee redistribution via auto-staking.
     *
     * Can be used to exclude technical addresses, such as exchange hot wallets.
     * Can be called by the contract owner.
     */
    function excludeAccount(address account) public virtual onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");

        uint256 eBalance = _balances[account] / _rate;
        _excludedBalances[account] += eBalance;
        _balances[account] = 0;
        _isExcluded[account] = true;
        _emissionExcluded += eBalance;
        _emissionIncluded -= eBalance;
    }

    /**
     * @dev Includes `accounts` back for receiving 1-2% transaction fee redistribution via auto-staking.
     *
     * Can be called by the contract owner.
     */
    function includeAccount(address account) public virtual onlyOwner {
        require(_isExcluded[account], "Account is already included");

        uint256 eBalance = _excludedBalances[account];
        _excludedBalances[account] = 0;
        _balances[account] = eBalance * _rate;
        _isExcluded[account] = false;
        _emissionExcluded -= eBalance;
        _emissionIncluded += eBalance;
    }

    /**
     * @dev Exclude sender account from receiving 1-2% transaction fee redistribution via auto-staking.
     *
     * Can be used to exclude technical addresses, such as exchange hot wallets.
     */
    function excludeSelf() public virtual {
        excludeAccount(_msgSender());
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Moves tokens `eAmount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 eAmount
    ) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(
            _EMISSION_INIT >= eAmount,
            "ERC20: transfer amount exceeds balance"
        );

        // Withdrawal from sender
        uint256 rAmount = eAmount * _rate;
        if (_isExcluded[sender]) {
            uint256 senderBalance = _excludedBalances[sender];
            require(
                senderBalance >= eAmount,
                "ERC20: transfer amount exceeds balance"
            );
            _excludedBalances[sender] = senderBalance - eAmount;

            _emissionExcluded -= eAmount;
            _emissionIncluded += eAmount;
        } else {
            uint256 senderBalance = _balances[sender];
            require(
                senderBalance >= rAmount,
                "ERC20: transfer amount exceeds balance"
            );
            uint256 newBalance = senderBalance - rAmount;
            if (newBalance < _rate) {
                rAmount += newBalance;
                _balances[sender] = 0;
            } else {
                _balances[sender] = newBalance;
            }
        }

        // Calculate fee and fired fee
        updateTrand();

        uint256 eFee = (eAmount * _FEE_BASE) / _FEE_DIV;
        uint256 rFee = eFee * _rate;
        uint8 fireBase = isTrandUp() ? _FIRE_MARKET_UP : _FIRE_MARKET_DOWN;
        uint256 eFire = (eFee * fireBase) / _FIRE_DIV;

        // Update emission and coefficient
        uint256 oldEmission = _emissionIncluded;
        _emissionIncluded -= eFire;
        _rate = (_rate * (oldEmission - eFee)) / _emissionIncluded;

        // Refill to recipient
        if (_isExcluded[recipient]) {
            uint256 tAmount = (rAmount - rFee) / _rate;
            _excludedBalances[recipient] += tAmount;

            _emissionExcluded += tAmount;
            _emissionIncluded -= tAmount;
        } else {
            _balances[recipient] += rAmount - rFee;
        }

        emit Transfer(sender, recipient, eAmount - eFee);
    }
}

File 1 of 7: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 7: AggregatorV3Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorV3Interface {

  function decimals()
    external
    view
    returns (
      uint8
    );

  function description()
    external
    view
    returns (
      string memory
    );

  function version()
    external
    view
    returns (
      uint256
    );

  // getRoundData and latestRoundData should both raise "No data present"
  // if they do not have data to report, instead of returning unset values
  // which could be misinterpreted as actual reported values.
  function getRoundData(
    uint80 _roundId
  )
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

}

File 3 of 7: 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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

File 5 of 7: IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

pragma solidity ^0.8.0;

import "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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        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;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAggregator","type":"address"}],"name":"UpdateAggregator","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excludeSelf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTrandUp","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAggregator","type":"address"}],"name":"updateAggregator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTrand","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600060028190556003805460ff19166001179055600455690a968163f0a57b4000006005819055610037906000196100f8565b60065534801561004657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060065461009f90690a968163f0a57b400000610118565b336000818152600860209081526040808320949094559251690a968163f0a57b4000008152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610143565b60008261011357634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561013e57634e487b7160e01b81526011600452602481fd5b500290565b6112c9806101526000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063a9059cbb1161007c578063a9059cbb14610280578063cba0e99614610293578063dd62ed3e146102bf578063f2cc0c18146102f8578063f2fde38b1461030b578063f84354f11461031e57600080fd5b80638da5cb5b146102165780639316181f1461023157806395d89b41146102395780639fe4ee471461025a578063a457c2d71461026d57600080fd5b8063313ce567116100ff578063313ce567146101ce57806339509351146101dd57806370a08231146101f0578063715018a614610203578063766f14da1461020b57600080fd5b806306fdde031461013c578063095ea7b31461017857806318160ddd1461019b57806323b872dd146101b1578063289a4f9d146101c4575b600080fd5b60408051808201909152600e81526d1cdc1c985e5d1bdad95b8b9b995d60921b60208201525b60405161016f9190611141565b60405180910390f35b61018b6101863660046110c9565b610331565b604051901515815260200161016f565b6101a3610347565b60405190815260200161016f565b61018b6101bf36600461108e565b61035e565b6101cc610412565b005b6040516008815260200161016f565b61018b6101eb3660046110c9565b6104ba565b6101a36101fe36600461103b565b6104f1565b6101cc61055a565b60035460ff1661018b565b6000546040516001600160a01b03909116815260200161016f565b6101cc6105ce565b604080518082019091526005815264535052415960d81b6020820152610162565b6101cc61026836600461103b565b6105d9565b61018b61027b3660046110c9565b6106b4565b61018b61028e3660046110c9565b61074f565b61018b6102a136600461103b565b6001600160a01b031660009081526009602052604090205460ff1690565b6101a36102cd36600461105c565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6101cc61030636600461103b565b61075c565b6101cc61031936600461103b565b6108ac565b6101cc61032c36600461103b565b610996565b600061033e338484610aab565b50600192915050565b6000600554600454610359919061120f565b905090565b6001600160a01b0383166000908152600760209081526040808320338452909152812054828110156103e85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6103fc85336103f78685611266565b610aab565b610407858585610bcf565b506001949350505050565b60015460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561045757600080fd5b505afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f91906110f2565b50505091505060025481146104b757600280546003805460ff19169184139190911790558190555b50565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161033e9185906103f790869061120f565b6001600160a01b03811660009081526009602052604081205460ff161561052e57506001600160a01b03166000908152600a602052604090205490565b6006546001600160a01b0383166000908152600860205260409020546105549190611227565b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b81526004016103df906111da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105d73361075c565b565b6000546001600160a01b031633146106035760405162461bcd60e51b81526004016103df906111da565b6001600160a01b0381163b61065a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103df565b600180546001600160a01b0319166001600160a01b03831617905561067d610412565b6040516001600160a01b038216907f4dacc134578f0f35bf291d6513217ed5de0823cace2244ce694f3c30b48e1b0c90600090a250565b3360009081526007602090815260408083206001600160a01b0386168452909152812054828110156107365760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103df565b61074533856103f78685611266565b5060019392505050565b600061033e338484610bcf565b6000546001600160a01b031633146107865760405162461bcd60e51b81526004016103df906111da565b6001600160a01b03811660009081526009602052604090205460ff16156107ef5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016103df565b6006546001600160a01b038216600090815260086020526040812054909161081691611227565b6001600160a01b0383166000908152600a602052604081208054929350839290919061084390849061120f565b90915550506001600160a01b038216600090815260086020908152604080832083905560099091528120805460ff191660011790556004805483929061088a90849061120f565b9250508190555080600560008282546108a39190611266565b90915550505050565b6000546001600160a01b031633146108d65760405162461bcd60e51b81526004016103df906111da565b6001600160a01b03811661093b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103df565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109c05760405162461bcd60e51b81526004016103df906111da565b6001600160a01b03811660009081526009602052604090205460ff16610a285760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016103df565b6001600160a01b0381166000908152600a602052604081208054919055600654610a529082611247565b6001600160a01b03831660009081526008602090815260408083209390935560099052908120805460ff1916905560048054839290610a92908490611266565b9250508190555080600560008282546108a3919061120f565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103df565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103df565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103df565b6001600160a01b038216610c955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103df565b80690a968163f0a57b4000001015610cbf5760405162461bcd60e51b81526004016103df90611194565b600060065482610ccf9190611247565b6001600160a01b03851660009081526009602052604090205490915060ff1615610d89576001600160a01b0384166000908152600a602052604090205482811015610d2c5760405162461bcd60e51b81526004016103df90611194565b610d368382611266565b6001600160a01b0386166000908152600a602052604081209190915560048054859290610d64908490611266565b925050819055508260056000828254610d7d919061120f565b90915550610e23915050565b6001600160a01b03841660009081526008602052604090205481811015610dc25760405162461bcd60e51b81526004016103df90611194565b6000610dce8383611266565b9050600654811015610e0457610de4818461120f565b6001600160a01b0387166000908152600860205260408120559250610e20565b6001600160a01b03861660009081526008602052604090208190555b50505b610e2b610412565b60006064610e3a600385611247565b610e449190611227565b9050600060065482610e569190611247565b90506000610e6660035460ff1690565b610e71576002610e74565b60015b905060006003610e8760ff841686611247565b610e919190611227565b6005805491925082906000610ea68385611266565b9091555050600554610eb88683611266565b600654610ec59190611247565b610ecf9190611227565b6006556001600160a01b03881660009081526009602052604090205460ff1615610f7857600654600090610f038689611266565b610f0d9190611227565b6001600160a01b038a166000908152600a6020526040812080549293508392909190610f3a90849061120f565b925050819055508060046000828254610f53919061120f565b925050819055508060056000828254610f6c9190611266565b90915550610fb0915050565b610f828487611266565b6001600160a01b03891660009081526008602052604081208054909190610faa90849061120f565b90915550505b6001600160a01b03808916908a167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610fe9888b611266565b60405190815260200160405180910390a3505050505050505050565b80356001600160a01b038116811461101c57600080fd5b919050565b805169ffffffffffffffffffff8116811461101c57600080fd5b60006020828403121561104c578081fd5b61105582611005565b9392505050565b6000806040838503121561106e578081fd5b61107783611005565b915061108560208401611005565b90509250929050565b6000806000606084860312156110a2578081fd5b6110ab84611005565b92506110b960208501611005565b9150604084013590509250925092565b600080604083850312156110db578182fd5b6110e483611005565b946020939093013593505050565b600080600080600060a08688031215611109578081fd5b61111286611021565b945060208601519350604086015192506060860151915061113560808701611021565b90509295509295909350565b6000602080835283518082850152825b8181101561116d57858101830151858201604001528201611151565b8181111561117e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156112225761122261127d565b500190565b60008261124257634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156112615761126161127d565b500290565b6000828210156112785761127861127d565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220685fe1280716f3cb29bba05e97b35df580223e94db51d475b4847191588f9cb264736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063a9059cbb1161007c578063a9059cbb14610280578063cba0e99614610293578063dd62ed3e146102bf578063f2cc0c18146102f8578063f2fde38b1461030b578063f84354f11461031e57600080fd5b80638da5cb5b146102165780639316181f1461023157806395d89b41146102395780639fe4ee471461025a578063a457c2d71461026d57600080fd5b8063313ce567116100ff578063313ce567146101ce57806339509351146101dd57806370a08231146101f0578063715018a614610203578063766f14da1461020b57600080fd5b806306fdde031461013c578063095ea7b31461017857806318160ddd1461019b57806323b872dd146101b1578063289a4f9d146101c4575b600080fd5b60408051808201909152600e81526d1cdc1c985e5d1bdad95b8b9b995d60921b60208201525b60405161016f9190611141565b60405180910390f35b61018b6101863660046110c9565b610331565b604051901515815260200161016f565b6101a3610347565b60405190815260200161016f565b61018b6101bf36600461108e565b61035e565b6101cc610412565b005b6040516008815260200161016f565b61018b6101eb3660046110c9565b6104ba565b6101a36101fe36600461103b565b6104f1565b6101cc61055a565b60035460ff1661018b565b6000546040516001600160a01b03909116815260200161016f565b6101cc6105ce565b604080518082019091526005815264535052415960d81b6020820152610162565b6101cc61026836600461103b565b6105d9565b61018b61027b3660046110c9565b6106b4565b61018b61028e3660046110c9565b61074f565b61018b6102a136600461103b565b6001600160a01b031660009081526009602052604090205460ff1690565b6101a36102cd36600461105c565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b6101cc61030636600461103b565b61075c565b6101cc61031936600461103b565b6108ac565b6101cc61032c36600461103b565b610996565b600061033e338484610aab565b50600192915050565b6000600554600454610359919061120f565b905090565b6001600160a01b0383166000908152600760209081526040808320338452909152812054828110156103e85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6103fc85336103f78685611266565b610aab565b610407858585610bcf565b506001949350505050565b60015460408051633fabe5a360e21b815290516000926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561045757600080fd5b505afa15801561046b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048f91906110f2565b50505091505060025481146104b757600280546003805460ff19169184139190911790558190555b50565b3360008181526007602090815260408083206001600160a01b0387168452909152812054909161033e9185906103f790869061120f565b6001600160a01b03811660009081526009602052604081205460ff161561052e57506001600160a01b03166000908152600a602052604090205490565b6006546001600160a01b0383166000908152600860205260409020546105549190611227565b92915050565b6000546001600160a01b031633146105845760405162461bcd60e51b81526004016103df906111da565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105d73361075c565b565b6000546001600160a01b031633146106035760405162461bcd60e51b81526004016103df906111da565b6001600160a01b0381163b61065a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103df565b600180546001600160a01b0319166001600160a01b03831617905561067d610412565b6040516001600160a01b038216907f4dacc134578f0f35bf291d6513217ed5de0823cace2244ce694f3c30b48e1b0c90600090a250565b3360009081526007602090815260408083206001600160a01b0386168452909152812054828110156107365760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016103df565b61074533856103f78685611266565b5060019392505050565b600061033e338484610bcf565b6000546001600160a01b031633146107865760405162461bcd60e51b81526004016103df906111da565b6001600160a01b03811660009081526009602052604090205460ff16156107ef5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016103df565b6006546001600160a01b038216600090815260086020526040812054909161081691611227565b6001600160a01b0383166000908152600a602052604081208054929350839290919061084390849061120f565b90915550506001600160a01b038216600090815260086020908152604080832083905560099091528120805460ff191660011790556004805483929061088a90849061120f565b9250508190555080600560008282546108a39190611266565b90915550505050565b6000546001600160a01b031633146108d65760405162461bcd60e51b81526004016103df906111da565b6001600160a01b03811661093b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103df565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109c05760405162461bcd60e51b81526004016103df906111da565b6001600160a01b03811660009081526009602052604090205460ff16610a285760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c75646564000000000060448201526064016103df565b6001600160a01b0381166000908152600a602052604081208054919055600654610a529082611247565b6001600160a01b03831660009081526008602090815260408083209390935560099052908120805460ff1916905560048054839290610a92908490611266565b9250508190555080600560008282546108a3919061120f565b6001600160a01b038316610b0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016103df565b6001600160a01b038216610b6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016103df565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610c335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016103df565b6001600160a01b038216610c955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016103df565b80690a968163f0a57b4000001015610cbf5760405162461bcd60e51b81526004016103df90611194565b600060065482610ccf9190611247565b6001600160a01b03851660009081526009602052604090205490915060ff1615610d89576001600160a01b0384166000908152600a602052604090205482811015610d2c5760405162461bcd60e51b81526004016103df90611194565b610d368382611266565b6001600160a01b0386166000908152600a602052604081209190915560048054859290610d64908490611266565b925050819055508260056000828254610d7d919061120f565b90915550610e23915050565b6001600160a01b03841660009081526008602052604090205481811015610dc25760405162461bcd60e51b81526004016103df90611194565b6000610dce8383611266565b9050600654811015610e0457610de4818461120f565b6001600160a01b0387166000908152600860205260408120559250610e20565b6001600160a01b03861660009081526008602052604090208190555b50505b610e2b610412565b60006064610e3a600385611247565b610e449190611227565b9050600060065482610e569190611247565b90506000610e6660035460ff1690565b610e71576002610e74565b60015b905060006003610e8760ff841686611247565b610e919190611227565b6005805491925082906000610ea68385611266565b9091555050600554610eb88683611266565b600654610ec59190611247565b610ecf9190611227565b6006556001600160a01b03881660009081526009602052604090205460ff1615610f7857600654600090610f038689611266565b610f0d9190611227565b6001600160a01b038a166000908152600a6020526040812080549293508392909190610f3a90849061120f565b925050819055508060046000828254610f53919061120f565b925050819055508060056000828254610f6c9190611266565b90915550610fb0915050565b610f828487611266565b6001600160a01b03891660009081526008602052604081208054909190610faa90849061120f565b90915550505b6001600160a01b03808916908a167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610fe9888b611266565b60405190815260200160405180910390a3505050505050505050565b80356001600160a01b038116811461101c57600080fd5b919050565b805169ffffffffffffffffffff8116811461101c57600080fd5b60006020828403121561104c578081fd5b61105582611005565b9392505050565b6000806040838503121561106e578081fd5b61107783611005565b915061108560208401611005565b90509250929050565b6000806000606084860312156110a2578081fd5b6110ab84611005565b92506110b960208501611005565b9150604084013590509250925092565b600080604083850312156110db578182fd5b6110e483611005565b946020939093013593505050565b600080600080600060a08688031215611109578081fd5b61111286611021565b945060208601519350604086015192506060860151915061113560808701611021565b90509295509295909350565b6000602080835283518082850152825b8181101561116d57858101830151858201604001528201611151565b8181111561117e5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156112225761122261127d565b500190565b60008261124257634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156112615761126161127d565b500290565b6000828210156112785761127861127d565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220685fe1280716f3cb29bba05e97b35df580223e94db51d475b4847191588f9cb264736f6c63430008040033

Deployed Bytecode Sourcemap

1814:10750:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2915:90;2993:5;;;;;;;;;;;;-1:-1:-1;;;2993:5:6;;;;2915:90;;;;;;;:::i;:::-;;;;;;;;4611:202;;;;;;:::i;:::-;;:::i;:::-;;;2325:14:7;;2318:22;2300:41;;2288:2;2273:18;4611:202:6;2255:92:7;3409:123:6;;;:::i;:::-;;;7784:25:7;;;7772:2;7757:18;3409:123:6;7739:76:7;5280:478:6;;;;;;:::i;:::-;;:::i;1439:220::-;;;:::i;:::-;;3242:90;;;2227:1;7962:36:7;;7950:2;7935:18;3242:90:6;7917:87:7;6153:286:6;;;;;;:::i;:::-;;:::i;3615:195::-;;;;;;:::i;:::-;;:::i;1691:145:5:-;;;:::i;1284:90:6:-;1357:10;;;;1284:90;;1059:85:5;1105:7;1131:6;1059:85;;-1:-1:-1;;;;;1131:6:5;;;2098:51:7;;2086:2;2071:18;1059:85:5;2053:102:7;9000:83:6;;;:::i;3072:94::-;3152:7;;;;;;;;;;;;-1:-1:-1;;;3152:7:6;;;;3072:94;;912:290;;;;;;:::i;:::-;;:::i;6926:433::-;;;;;;:::i;:::-;;:::i;4030:192::-;;;;;;:::i;:::-;;:::i;7450:108::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7531:20:6;7508:4;7531:20;;;:11;:20;;;;;;;;;7450:108;4280:193;;;;;;:::i;:::-;-1:-1:-1;;;;;4439:18:6;;;4409:7;4439:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4280:193;7811:395;;;;;;:::i;:::-;;:::i;1985:240:5:-;;;;;;:::i;:::-;;:::i;8384:402:6:-;;;;;;:::i;:::-;;:::i;4611:202::-;4726:4;4746:39;665:10:2;4769:7:6;4778:6;4746:8;:39::i;:::-;-1:-1:-1;4802:4:6;4611:202;;;;:::o;3409:123::-;3462:7;3508:17;;3488;;:37;;;;:::i;:::-;3481:44;;3409:123;:::o;5280:478::-;-1:-1:-1;;;;;5459:19:6;;5416:4;5459:19;;;:11;:19;;;;;;;;665:10:2;5459:33:6;;;;;;;;5523:26;;;;5502:113;;;;-1:-1:-1;;;5502:113:6;;5495:2:7;5502:113:6;;;5477:21:7;5534:2;5514:18;;;5507:30;5573:34;5553:18;;;5546:62;-1:-1:-1;;;5624:18:7;;;5617:38;5672:19;;5502:113:6;;;;;;;;;5625:57;5634:6;665:10:2;5656:25:6;5675:6;5656:16;:25;:::i;:::-;5625:8;:57::i;:::-;5693:36;5703:6;5711:9;5722:6;5693:9;:36::i;:::-;-1:-1:-1;5747:4:6;;5280:478;-1:-1:-1;;;;5280:478:6:o;1439:220::-;1512:11;;:29;;;-1:-1:-1;;;1512:29:6;;;;1490:12;;-1:-1:-1;;;;;1512:11:6;;:27;;:29;;;;;;;;;;;;;;:11;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1487:54;;;;;;1565:6;;1556:5;:15;1552:101;;1608:6;;;1587:10;:27;;-1:-1:-1;;1587:27:6;1600:14;;;1587:27;;;;;;1628:14;;;1552:101;1439:220;:::o;6153:286::-;665:10:2;6265:4:6;6354:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6354:34:6;;;;;;;;;;6265:4;;6285:126;;6333:7;;6354:47;;6391:10;;6354:47;:::i;3615:195::-;-1:-1:-1;;;;;3704:20:6;;3681:7;3704:20;;;:11;:20;;;;;;;;3700:59;;;-1:-1:-1;;;;;;3733:26:6;;;;;:17;:26;;;;;;;3615:195::o;3700:59::-;3798:5;;-1:-1:-1;;;;;3777:18:6;;;;;;:9;:18;;;;;;:26;;3798:5;3777:26;:::i;:::-;3770:33;3615:195;-1:-1:-1;;3615:195:6:o;1691:145:5:-;1105:7;1131:6;-1:-1:-1;;;;;1131:6:5;665:10:2;1271:23:5;1263:68;;;;-1:-1:-1;;;1263:68:5;;;;;;;:::i;:::-;1797:1:::1;1781:6:::0;;1760:40:::1;::::0;-1:-1:-1;;;;;1781:6:5;;::::1;::::0;1760:40:::1;::::0;1797:1;;1760:40:::1;1827:1;1810:19:::0;;-1:-1:-1;;;;;;1810:19:5::1;::::0;;1691:145::o;9000:83:6:-;9048:28;665:10:2;7811:395:6;:::i;9048:28::-;9000:83::o;912:290::-;1105:7:5;1131:6;-1:-1:-1;;;;;1131:6:5;665:10:2;1271:23:5;1263:68;;;;-1:-1:-1;;;1263:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;1004:24:6;::::1;1078:20:0::0;996:68:6::1;;;::::0;-1:-1:-1;;;996:68:6;;7076:2:7;996:68:6::1;::::0;::::1;7058:21:7::0;7115:2;7095:18;;;7088:30;7154:31;7134:18;;;7127:59;7203:18;;996:68:6::1;7048:179:7::0;996:68:6::1;1075:11;:50:::0;;-1:-1:-1;;;;;;1075:50:6::1;-1:-1:-1::0;;;;;1075:50:6;::::1;;::::0;;1135:13:::1;:11;:13::i;:::-;1164:31;::::0;-1:-1:-1;;;;;1164:31:6;::::1;::::0;::::1;::::0;;;::::1;912:290:::0;:::o;6926:433::-;665:10:2;7043:4:6;7090:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;7090:34:6;;;;;;;;;;7155:35;;;;7134:119;;;;-1:-1:-1;;;7134:119:6;;7434:2:7;7134:119:6;;;7416:21:7;7473:2;7453:18;;;7446:30;7512:34;7492:18;;;7485:62;-1:-1:-1;;;7563:18:7;;;7556:35;7608:19;;7134:119:6;7406:227:7;7134:119:6;7263:67;665:10:2;7286:7:6;7295:34;7314:15;7295:16;:34;:::i;7263:67::-;-1:-1:-1;7348:4:6;;6926:433;-1:-1:-1;;;6926:433:6:o;4030:192::-;4132:4;4152:42;665:10:2;4176:9:6;4187:6;4152:9;:42::i;7811:395::-;1105:7:5;1131:6;-1:-1:-1;;;;;1131:6:5;665:10:2;1271:23:5;1263:68;;;;-1:-1:-1;;;1263:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;7896:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;7895:21;7887:61;;;::::0;-1:-1:-1;;;7887:61:6;;4376:2:7;7887:61:6::1;::::0;::::1;4358:21:7::0;4415:2;4395:18;;;4388:30;4454:29;4434:18;;;4427:57;4501:18;;7887:61:6::1;4348:177:7::0;7887:61:6::1;7999:5;::::0;-1:-1:-1;;;;;7978:18:6;::::1;7959:16;7978:18:::0;;;:9:::1;:18;::::0;;;;;7959:16;;7978:26:::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;8014:26:6;::::1;;::::0;;;:17:::1;:26;::::0;;;;:38;;7959:45;;-1:-1:-1;7959:45:6;;8014:26;;;:38:::1;::::0;7959:45;;8014:38:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;8062:18:6;::::1;8083:1;8062:18:::0;;;:9:::1;:18;::::0;;;;;;;:22;;;8094:11:::1;:20:::0;;;;;:27;;-1:-1:-1;;8094:27:6::1;8117:4;8094:27;::::0;;8131:17:::1;:29:::0;;8152:8;;8083:1;8131:29:::1;::::0;8152:8;;8131:29:::1;:::i;:::-;;;;;;;;8191:8;8170:17;;:29;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;7811:395:6:o;1985:240:5:-;1105:7;1131:6;-1:-1:-1;;;;;1131:6:5;665:10:2;1271:23:5;1263:68;;;;-1:-1:-1;;;1263:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;2073:22:5;::::1;2065:73;;;::::0;-1:-1:-1;;;2065:73:5;;3566:2:7;2065:73:5::1;::::0;::::1;3548:21:7::0;3605:2;3585:18;;;3578:30;3644:34;3624:18;;;3617:62;-1:-1:-1;;;3695:18:7;;;3688:36;3741:19;;2065:73:5::1;3538:228:7::0;2065:73:5::1;2174:6;::::0;;2153:38:::1;::::0;-1:-1:-1;;;;;2153:38:5;;::::1;::::0;2174:6;::::1;::::0;2153:38:::1;::::0;::::1;2201:6;:17:::0;;-1:-1:-1;;;;;;2201:17:5::1;-1:-1:-1::0;;;;;2201:17:5;;;::::1;::::0;;;::::1;::::0;;1985:240::o;8384:402:6:-;1105:7:5;1131:6;-1:-1:-1;;;;;1131:6:5;665:10:2;1271:23:5;1263:68;;;;-1:-1:-1;;;1263:68:5;;;;;;;:::i;:::-;-1:-1:-1;;;;;8468:20:6;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;8460:60;;;::::0;-1:-1:-1;;;8460:60:6;;5139:2:7;8460:60:6::1;::::0;::::1;5121:21:7::0;5178:2;5158:18;;;5151:30;5217:29;5197:18;;;5190:57;5264:18;;8460:60:6::1;5111:177:7::0;8460:60:6::1;-1:-1:-1::0;;;;;8550:26:6;::::1;8531:16;8550:26:::0;;;:17:::1;:26;::::0;;;;;;8586:30;;;8658:5:::1;::::0;8647:16:::1;::::0;8550:26;8647:16:::1;:::i;:::-;-1:-1:-1::0;;;;;8626:18:6;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:37;;;;8673:11:::1;:20:::0;;;;;:28;;-1:-1:-1;;8673:28:6::1;::::0;;8711:17:::1;:29:::0;;8732:8;;8626:18;8711:29:::1;::::0;8732:8;;8711:29:::1;:::i;:::-;;;;;;;;8771:8;8750:17;;:29;;;;;;;:::i;9506:361::-:0;-1:-1:-1;;;;;9628:19:6;;9620:68;;;;-1:-1:-1;;;9620:68:6;;6671:2:7;9620:68:6;;;6653:21:7;6710:2;6690:18;;;6683:30;6749:34;6729:18;;;6722:62;-1:-1:-1;;;6800:18:7;;;6793:34;6844:19;;9620:68:6;6643:226:7;9620:68:6;-1:-1:-1;;;;;9706:21:6;;9698:68;;;;-1:-1:-1;;;9698:68:6;;3973:2:7;9698:68:6;;;3955:21:7;4012:2;3992:18;;;3985:30;4051:34;4031:18;;;4024:62;-1:-1:-1;;;4102:18:7;;;4095:32;4144:19;;9698:68:6;3945:224:7;9698:68:6;-1:-1:-1;;;;;9777:18:6;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;9828:32;;7784:25:7;;;9828:32:6;;7757:18:7;9828:32:6;;;;;;;9506:361;;;:::o;10342:2220::-;-1:-1:-1;;;;;10469:20:6;;10461:70;;;;-1:-1:-1;;;10461:70:6;;6265:2:7;10461:70:6;;;6247:21:7;6304:2;6284:18;;;6277:30;6343:34;6323:18;;;6316:62;-1:-1:-1;;;6394:18:7;;;6387:35;6439:19;;10461:70:6;6237:227:7;10461:70:6;-1:-1:-1;;;;;10549:23:6;;10541:71;;;;-1:-1:-1;;;10541:71:6;;3162:2:7;10541:71:6;;;3144:21:7;3201:2;3181:18;;;3174:30;3240:34;3220:18;;;3213:62;-1:-1:-1;;;3291:18:7;;;3284:33;3334:19;;10541:71:6;3134:225:7;10541:71:6;10661:7;2276:24;10643:25;;10622:110;;;;-1:-1:-1;;;10622:110:6;;;;;;;:::i;:::-;10777:15;10805:5;;10795:7;:15;;;;:::i;:::-;-1:-1:-1;;;;;10824:19:6;;;;;;:11;:19;;;;;;10777:33;;-1:-1:-1;10824:19:6;;10820:848;;;-1:-1:-1;;;;;10883:25:6;;10859:21;10883:25;;;:17;:25;;;;;;10947:24;;;;10922:121;;;;-1:-1:-1;;;10922:121:6;;;;;;;:::i;:::-;11085:23;11101:7;11085:13;:23;:::i;:::-;-1:-1:-1;;;;;11057:25:6;;;;;;:17;:25;;;;;:51;;;;11123:17;:28;;11144:7;;11057:25;11123:28;;11144:7;;11123:28;:::i;:::-;;;;;;;;11186:7;11165:17;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;10820:848:6;;-1:-1:-1;;10820:848:6;;-1:-1:-1;;;;;11248:17:6;;11224:21;11248:17;;;:9;:17;;;;;;11304:24;;;;11279:121;;;;-1:-1:-1;;;11279:121:6;;;;;;;:::i;:::-;11414:18;11435:23;11451:7;11435:13;:23;:::i;:::-;11414:44;;11489:5;;11476:10;:18;11472:186;;;11514:21;11525:10;11514:21;;:::i;:::-;-1:-1:-1;;;;;11553:17:6;;11573:1;11553:17;;;:9;:17;;;;;:21;11514;-1:-1:-1;11472:186:6;;;-1:-1:-1;;;;;11613:17:6;;;;;;:9;:17;;;;;:30;;;11472:186;10820:848;;;11717:13;:11;:13::i;:::-;11741:12;1941:3;11757:19;1900:1;11757:7;:19;:::i;:::-;11756:32;;;;:::i;:::-;11741:47;;11798:12;11820:5;;11813:4;:12;;;;:::i;:::-;11798:27;;11835:14;11852:11;1357:10;;;;;1284:90;11852:11;:49;;2041:1;11852:49;;;1991:1;11852:49;11835:66;-1:-1:-1;11911:13:6;2083:1;11928:15;11927:29;11928:15;;:4;:15;:::i;:::-;11927:29;;;;:::i;:::-;12032:17;;;11911:45;;-1:-1:-1;11911:45:6;;12010:19;12059:26;11911:45;12032:17;12059:26;:::i;:::-;;;;-1:-1:-1;;12136:17:6;;12113:18;12127:4;12113:11;:18;:::i;:::-;12104:5;;:28;;;;:::i;:::-;12103:50;;;;:::i;:::-;12095:5;:58;-1:-1:-1;;;;;12199:22:6;;;;;;:11;:22;;;;;;;;12195:302;;;12274:5;;12237:15;;12256:14;12266:4;12256:7;:14;:::i;:::-;12255:24;;;;:::i;:::-;-1:-1:-1;;;;;12293:28:6;;;;;;:17;:28;;;;;:39;;12237:42;;-1:-1:-1;12237:42:6;;12293:28;;;:39;;12237:42;;12293:39;:::i;:::-;;;;;;;;12368:7;12347:17;;:28;;;;;;;:::i;:::-;;;;;;;;12410:7;12389:17;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;12195:302:6;;-1:-1:-1;;12195:302:6;;12472:14;12482:4;12472:7;:14;:::i;:::-;-1:-1:-1;;;;;12448:20:6;;;;;;:9;:20;;;;;:38;;:20;;;:38;;;;;:::i;:::-;;;;-1:-1:-1;;12195:302:6;-1:-1:-1;;;;;12512:43:6;;;;;;;12540:14;12550:4;12540:7;:14;:::i;:::-;12512:43;;7784:25:7;;;7772:2;7757:18;12512:43:6;;;;;;;10342:2220;;;;;;;;;:::o;14:173:7:-;82:20;;-1:-1:-1;;;;;131:31:7;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:179::-;270:13;;323:22;312:34;;302:45;;292:2;;361:1;358;351:12;376:196;435:6;488:2;476:9;467:7;463:23;459:32;456:2;;;509:6;501;494:22;456:2;537:29;556:9;537:29;:::i;:::-;527:39;446:126;-1:-1:-1;;;446:126:7:o;577:270::-;645:6;653;706:2;694:9;685:7;681:23;677:32;674:2;;;727:6;719;712:22;674:2;755:29;774:9;755:29;:::i;:::-;745:39;;803:38;837:2;826:9;822:18;803:38;:::i;:::-;793:48;;664:183;;;;;:::o;852:338::-;929:6;937;945;998:2;986:9;977:7;973:23;969:32;966:2;;;1019:6;1011;1004:22;966:2;1047:29;1066:9;1047:29;:::i;:::-;1037:39;;1095:38;1129:2;1118:9;1114:18;1095:38;:::i;:::-;1085:48;;1180:2;1169:9;1165:18;1152:32;1142:42;;956:234;;;;;:::o;1195:264::-;1263:6;1271;1324:2;1312:9;1303:7;1299:23;1295:32;1292:2;;;1345:6;1337;1330:22;1292:2;1373:29;1392:9;1373:29;:::i;:::-;1363:39;1449:2;1434:18;;;;1421:32;;-1:-1:-1;;;1282:177:7:o;1464:483::-;1567:6;1575;1583;1591;1599;1652:3;1640:9;1631:7;1627:23;1623:33;1620:2;;;1674:6;1666;1659:22;1620:2;1702:39;1731:9;1702:39;:::i;:::-;1692:49;;1781:2;1770:9;1766:18;1760:25;1750:35;;1825:2;1814:9;1810:18;1804:25;1794:35;;1869:2;1858:9;1854:18;1848:25;1838:35;;1892:49;1936:3;1925:9;1921:19;1892:49;:::i;:::-;1882:59;;1610:337;;;;;;;;:::o;2352:603::-;2464:4;2493:2;2522;2511:9;2504:21;2554:6;2548:13;2597:6;2592:2;2581:9;2577:18;2570:34;2622:4;2635:140;2649:6;2646:1;2643:13;2635:140;;;2744:14;;;2740:23;;2734:30;2710:17;;;2729:2;2706:26;2699:66;2664:10;;2635:140;;;2793:6;2790:1;2787:13;2784:2;;;2863:4;2858:2;2849:6;2838:9;2834:22;2830:31;2823:45;2784:2;-1:-1:-1;2939:2:7;2918:15;-1:-1:-1;;2914:29:7;2899:45;;;;2946:2;2895:54;;2473:482;-1:-1:-1;;;2473:482:7:o;4530:402::-;4732:2;4714:21;;;4771:2;4751:18;;;4744:30;4810:34;4805:2;4790:18;;4783:62;-1:-1:-1;;;4876:2:7;4861:18;;4854:36;4922:3;4907:19;;4704:228::o;5702:356::-;5904:2;5886:21;;;5923:18;;;5916:30;5982:34;5977:2;5962:18;;5955:62;6049:2;6034:18;;5876:182::o;8009:128::-;8049:3;8080:1;8076:6;8073:1;8070:13;8067:2;;;8086:18;;:::i;:::-;-1:-1:-1;8122:9:7;;8057:80::o;8142:217::-;8182:1;8208;8198:2;;-1:-1:-1;;;8233:31:7;;8287:4;8284:1;8277:15;8315:4;8240:1;8305:15;8198:2;-1:-1:-1;8344:9:7;;8188:171::o;8364:168::-;8404:7;8470:1;8466;8462:6;8458:14;8455:1;8452:21;8447:1;8440:9;8433:17;8429:45;8426:2;;;8477:18;;:::i;:::-;-1:-1:-1;8517:9:7;;8416:116::o;8537:125::-;8577:4;8605:1;8602;8599:8;8596:2;;;8610:18;;:::i;:::-;-1:-1:-1;8647:9:7;;8586:76::o;8667:127::-;8728:10;8723:3;8719:20;8716:1;8709:31;8759:4;8756:1;8749:15;8783:4;8780:1;8773:15

Swarm Source

ipfs://685fe1280716f3cb29bba05e97b35df580223e94db51d475b4847191588f9cb2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.