ETH Price: $2,285.20 (-3.45%)

Token

Diablo Token (Diablo)
 

Overview

Max Total Supply

939,606,605,594.97293003002557922 Diablo

Holders

41

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
frankiedtankie.eth
Balance
3,724,000 Diablo

Value
$0.00
0xE5798a530Bb7105e148D38ac884f05C28Ed8e804
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
diablo_token

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-24
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/math/SafeMath.sol

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @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
    ) internal virtual {
        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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

// File: diablo_token.sol

pragma solidity ^0.8.4;

/////////////////////////////////////////////////////////////////////////
//      (                  )  (           )         )                  //
//      )\ )  (      )  ( /(  )\       ( /(      ( /(    (             //
//     (()/(  )\  ( /(  )\())((_) (    )\()) (   )\())  ))\  (         //
//      ((_))((_) )(_))((_)\  _   )\  (_))/  )\ ((_)\  /((_) )\ )      //
//      _| |  (_)((_)_ | |(_)| | ((_) | |_  ((_)| |(_)(_))  _(_/(      //
//    / _` |  | |/ _` || '_ \| |/ _ \ |  _|/ _ \| / / / -_)| ' \))     //
//    \__,_|  |_|\__,_||_.__/|_|\___/  \__|\___/|_\_\ \___||_||_|      //
//                                                                     //
//           Diablo Token is a experiment that demonstrates            //
//         how simple deflationary tokenomics can be executed          //
//            to build value thru volume and entertainment.            //
//                           0xrDan 2022                               //
//                                                                     //
/////////////////////////////////////////////////////////////////////////

contract diablo_token is ERC20, ERC20Burnable, Ownable {

    using SafeMath for uint256;
    mapping(address => uint) public balances;
    mapping(address => bool) public isTokenHolder;
    uint256 public taxRate = 690; // ~6.9%
    uint256 internal adjuster = 10000;

    constructor() ERC20("Diablo Token", "Diablo"){
        _mint(msg.sender, 1000000000000 * 10 ** decimals());
    }
    
    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address from, address to, uint256 amount)
        internal
        virtual
        override(ERC20)
    {        
        super._beforeTokenTransfer(from, to, amount);
        require(from != to);
        if (from != address(0) && to != address(0)){
            uint256 tax = ((taxRate.mul(amount)).div(amount)).mul(amount.div(adjuster));
            burnTax(from, tax);
        }
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        uint256 tax = ((taxRate.mul(amount)).div(amount)).mul(amount.div(adjuster));
      _transfer(_msgSender(), recipient, amount.sub(tax)); // recipient receives amount minus tax.
      return true;
    }

    function burnTax(address account, uint256 tax) internal
    {
        // Stop burning at 21M supply
        if(totalSupply()> 21000000000 * 10 ** decimals()){
            _burn(account, tax);
        }
    }
}

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"},{"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":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":"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":"","type":"address"}],"name":"isTokenHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"from","type":"address"},{"internalType":"address","name":"to","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"}]

60806040526102b26008556127106009553480156200001d57600080fd5b50604080518082018252600c81526b2234b0b13637902a37b5b2b760a11b602080830191825283518085019094526006845265446961626c6f60d01b9084015281519192916200007091600391620004a3565b50805162000086906004906020840190620004a3565b505050620000a36200009d620000d360201b60201c565b620000d7565b620000cd33620000b66012600a620005d0565b620000c79064e8d4a510006200068f565b62000129565b6200071e565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001855760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b620001936000838362000210565b8060026000828254620001a7919062000549565b90915550506001600160a01b03821660009081526020819052604081208054839290620001d690849062000549565b90915550506040518181526001600160a01b03831690600090600080516020620017908339815191529060200160405180910390a35b5050565b62000228838383620002ea60201b620006021760201c565b816001600160a01b0316836001600160a01b031614156200024857600080fd5b6001600160a01b038316158015906200026957506001600160a01b03821615155b15620002ea576000620002da6200029160095484620002ef60201b620006071790919060201c565b620002c684620002b2866008546200030660201b6200061a1790919060201c565b620002ef60201b620006071790919060201c565b6200030660201b6200061a1790919060201c565b9050620002e8848262000314565b505b505050565b6000620002fd828462000564565b90505b92915050565b6000620002fd82846200068f565b620003226012600a620005d0565b62000333906404e3b292006200068f565b60025411156200020c576200020c82826001600160a01b038216620003a55760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016200017c565b620003b38260008362000210565b6001600160a01b03821660009081526020819052604090205481811015620004295760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016200017c565b6001600160a01b03831660009081526020819052604081208383039055600280548492906200045a908490620006b1565b90915550506040518281526000906001600160a01b03851690600080516020620017908339815191529060200160405180910390a3620002ea836000846001600160e01b038416565b828054620004b190620006cb565b90600052602060002090601f016020900481019282620004d5576000855562000520565b82601f10620004f057805160ff191683800117855562000520565b8280016001018555821562000520579182015b828111156200052057825182559160200191906001019062000503565b506200052e92915062000532565b5090565b5b808211156200052e576000815560010162000533565b600082198211156200055f576200055f62000708565b500190565b6000826200058257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005c8578160001904821115620005ac57620005ac62000708565b80851615620005ba57918102915b93841c93908002906200058c565b509250929050565b6000620002fd60ff841683600082620005ec5750600162000300565b81620005fb5750600062000300565b81600181146200061457600281146200061f576200063f565b600191505062000300565b60ff84111562000633576200063362000708565b50506001821b62000300565b5060208310610133831016604e8410600b841016171562000664575081810a62000300565b62000670838362000587565b806000190482111562000687576200068762000708565b029392505050565b6000816000190483118215151615620006ac57620006ac62000708565b500290565b600082821015620006c657620006c662000708565b500390565b600181811c90821680620006e057607f821691505b602082108114156200070257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b611062806200072e6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd57806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b9578063dd62ed3e146102cc578063f2fde38b1461030557600080fd5b806395d89b411461029e578063a457c2d7146102a657600080fd5b8063771a3a1d116100b2578063771a3a1d1461026757806379cc6790146102705780638da5cb5b1461028357600080fd5b806370a0823114610236578063715018a61461025f57600080fd5b806327e235e311610124578063395093511161010957806339509351146101eb57806342966c68146101fe57806365731fe91461021357600080fd5b806327e235e3146101bc578063313ce567146101dc57600080fd5b806306fdde0314610156578063095ea7b31461017457806318160ddd1461019757806323b872dd146101a9575b600080fd5b61015e610318565b60405161016b9190610e28565b60405180910390f35b610187610182366004610de5565b6103aa565b604051901515815260200161016b565b6002545b60405190815260200161016b565b6101876101b7366004610da9565b6103c4565b61019b6101ca366004610d5b565b60066020526000908152604090205481565b6040516012815260200161016b565b6101876101f9366004610de5565b6103e8565b61021161020c366004610e0f565b610427565b005b610187610221366004610d5b565b60076020526000908152604090205460ff1681565b61019b610244366004610d5b565b6001600160a01b031660009081526020819052604090205490565b610211610434565b61019b60085481565b61021161027e366004610de5565b610448565b6005546040516001600160a01b03909116815260200161016b565b61015e610461565b6101876102b4366004610de5565b610470565b6101876102c7366004610de5565b61051f565b61019b6102da366004610d76565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610211610313366004610d5b565b610575565b60606003805461032790610fdb565b80601f016020809104026020016040519081016040528092919081815260200182805461035390610fdb565b80156103a05780601f10610375576101008083540402835291602001916103a0565b820191906000526020600020905b81548152906001019060200180831161038357829003601f168201915b5050505050905090565b6000336103b8818585610626565b60019150505b92915050565b6000336103d285828561077e565b6103dd858585610810565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906103b89082908690610422908790610e7d565b610626565b6104313382610a32565b50565b61043c610bc3565b6104466000610c1d565b565b61045382338361077e565b61045d8282610a32565b5050565b60606004805461032790610fdb565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156105125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103dd8286868403610626565b60008061055f61053a6009548561060790919063ffffffff16565b610559856105538760085461061a90919063ffffffff16565b90610607565b9061061a565b90506103b833856105708685610c87565b610810565b61057d610bc3565b6001600160a01b0381166105f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610509565b61043181610c1d565b505050565b60006106138284610e95565b9392505050565b60006106138284610fa5565b6001600160a01b0383166106a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b03821661071d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461080a57818110156107fd5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610509565b61080a8484848403610626565b50505050565b6001600160a01b03831661088c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b0382166109085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610509565b610913838383610c93565b6001600160a01b038316600090815260208190526040902054818110156109a25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109d9908490610e7d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a2591815260200190565b60405180910390a361080a565b6001600160a01b038216610aae5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610509565b610aba82600083610c93565b6001600160a01b03821660009081526020819052604090205481811015610b495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610b78908490610fc4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6005546001600160a01b031633146104465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610509565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106138284610fc4565b816001600160a01b0316836001600160a01b03161415610cb257600080fd5b6001600160a01b03831615801590610cd257506001600160a01b03821615155b15610602576000610d0a610cf16009548461060790919063ffffffff16565b610559846105538660085461061a90919063ffffffff16565b905061080a8482610d1d6012600a610efa565b610d2c906404e3b29200610fa5565b600254111561045d5761045d8282610a32565b80356001600160a01b0381168114610d5657600080fd5b919050565b600060208284031215610d6d57600080fd5b61061382610d3f565b60008060408385031215610d8957600080fd5b610d9283610d3f565b9150610da060208401610d3f565b90509250929050565b600080600060608486031215610dbe57600080fd5b610dc784610d3f565b9250610dd560208501610d3f565b9150604084013590509250925092565b60008060408385031215610df857600080fd5b610e0183610d3f565b946020939093013593505050565b600060208284031215610e2157600080fd5b5035919050565b600060208083528351808285015260005b81811015610e5557858101830151858201604001528201610e39565b81811115610e67576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e9057610e90611016565b500190565b600082610eb257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115610ef2578160001904821115610ed857610ed8611016565b80851615610ee557918102915b93841c9390800290610ebc565b509250929050565b600061061360ff841683600082610f13575060016103be565b81610f20575060006103be565b8160018114610f365760028114610f4057610f5c565b60019150506103be565b60ff841115610f5157610f51611016565b50506001821b6103be565b5060208310610133831016604e8410600b8410161715610f7f575081810a6103be565b610f898383610eb7565b8060001904821115610f9d57610f9d611016565b029392505050565b6000816000190483118215151615610fbf57610fbf611016565b500290565b600082821015610fd657610fd6611016565b500390565b600181811c90821680610fef57607f821691505b6020821081141561101057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220342d2abc153554501d92ad50e6f5058b7fcda7f765f2847506521f5c08f2e5be64736f6c63430008070033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101515760003560e01c806370a08231116100cd57806395d89b4111610081578063a9059cbb11610066578063a9059cbb146102b9578063dd62ed3e146102cc578063f2fde38b1461030557600080fd5b806395d89b411461029e578063a457c2d7146102a657600080fd5b8063771a3a1d116100b2578063771a3a1d1461026757806379cc6790146102705780638da5cb5b1461028357600080fd5b806370a0823114610236578063715018a61461025f57600080fd5b806327e235e311610124578063395093511161010957806339509351146101eb57806342966c68146101fe57806365731fe91461021357600080fd5b806327e235e3146101bc578063313ce567146101dc57600080fd5b806306fdde0314610156578063095ea7b31461017457806318160ddd1461019757806323b872dd146101a9575b600080fd5b61015e610318565b60405161016b9190610e28565b60405180910390f35b610187610182366004610de5565b6103aa565b604051901515815260200161016b565b6002545b60405190815260200161016b565b6101876101b7366004610da9565b6103c4565b61019b6101ca366004610d5b565b60066020526000908152604090205481565b6040516012815260200161016b565b6101876101f9366004610de5565b6103e8565b61021161020c366004610e0f565b610427565b005b610187610221366004610d5b565b60076020526000908152604090205460ff1681565b61019b610244366004610d5b565b6001600160a01b031660009081526020819052604090205490565b610211610434565b61019b60085481565b61021161027e366004610de5565b610448565b6005546040516001600160a01b03909116815260200161016b565b61015e610461565b6101876102b4366004610de5565b610470565b6101876102c7366004610de5565b61051f565b61019b6102da366004610d76565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610211610313366004610d5b565b610575565b60606003805461032790610fdb565b80601f016020809104026020016040519081016040528092919081815260200182805461035390610fdb565b80156103a05780601f10610375576101008083540402835291602001916103a0565b820191906000526020600020905b81548152906001019060200180831161038357829003601f168201915b5050505050905090565b6000336103b8818585610626565b60019150505b92915050565b6000336103d285828561077e565b6103dd858585610810565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091906103b89082908690610422908790610e7d565b610626565b6104313382610a32565b50565b61043c610bc3565b6104466000610c1d565b565b61045382338361077e565b61045d8282610a32565b5050565b60606004805461032790610fdb565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156105125760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103dd8286868403610626565b60008061055f61053a6009548561060790919063ffffffff16565b610559856105538760085461061a90919063ffffffff16565b90610607565b9061061a565b90506103b833856105708685610c87565b610810565b61057d610bc3565b6001600160a01b0381166105f95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610509565b61043181610c1d565b505050565b60006106138284610e95565b9392505050565b60006106138284610fa5565b6001600160a01b0383166106a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b03821661071d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461080a57818110156107fd5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610509565b61080a8484848403610626565b50505050565b6001600160a01b03831661088c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b0382166109085760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610509565b610913838383610c93565b6001600160a01b038316600090815260208190526040902054818110156109a25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906109d9908490610e7d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a2591815260200190565b60405180910390a361080a565b6001600160a01b038216610aae5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610509565b610aba82600083610c93565b6001600160a01b03821660009081526020819052604090205481811015610b495760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152608401610509565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610b78908490610fc4565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b6005546001600160a01b031633146104465760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610509565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006106138284610fc4565b816001600160a01b0316836001600160a01b03161415610cb257600080fd5b6001600160a01b03831615801590610cd257506001600160a01b03821615155b15610602576000610d0a610cf16009548461060790919063ffffffff16565b610559846105538660085461061a90919063ffffffff16565b905061080a8482610d1d6012600a610efa565b610d2c906404e3b29200610fa5565b600254111561045d5761045d8282610a32565b80356001600160a01b0381168114610d5657600080fd5b919050565b600060208284031215610d6d57600080fd5b61061382610d3f565b60008060408385031215610d8957600080fd5b610d9283610d3f565b9150610da060208401610d3f565b90509250929050565b600080600060608486031215610dbe57600080fd5b610dc784610d3f565b9250610dd560208501610d3f565b9150604084013590509250925092565b60008060408385031215610df857600080fd5b610e0183610d3f565b946020939093013593505050565b600060208284031215610e2157600080fd5b5035919050565b600060208083528351808285015260005b81811015610e5557858101830151858201604001528201610e39565b81811115610e67576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610e9057610e90611016565b500190565b600082610eb257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115610ef2578160001904821115610ed857610ed8611016565b80851615610ee557918102915b93841c9390800290610ebc565b509250929050565b600061061360ff841683600082610f13575060016103be565b81610f20575060006103be565b8160018114610f365760028114610f4057610f5c565b60019150506103be565b60ff841115610f5157610f51611016565b50506001821b6103be565b5060208310610133831016604e8410600b8410161715610f7f575081810a6103be565b610f898383610eb7565b8060001904821115610f9d57610f9d611016565b029392505050565b6000816000190483118215151615610fbf57610fbf611016565b500290565b600082821015610fd657610fd6611016565b500390565b600181811c90821680610fef57607f821691505b6020821081141561101057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220342d2abc153554501d92ad50e6f5058b7fcda7f765f2847506521f5c08f2e5be64736f6c63430008070033

Deployed Bytecode Sourcemap

29558:1443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16425:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18776:201;;;;;;:::i;:::-;;:::i;:::-;;;1844:14:1;;1837:22;1819:41;;1807:2;1792:18;18776:201:0;1679:187:1;17545:108:0;17633:12;;17545:108;;;6981:25:1;;;6969:2;6954:18;17545:108:0;6835:177:1;19557:295:0;;;;;;:::i;:::-;;:::i;29655:40::-;;;;;;:::i;:::-;;;;;;;;;;;;;;17387:93;;;17470:2;7159:36:1;;7147:2;7132:18;17387:93:0;7017:184:1;20261:238:0;;;;;;:::i;:::-;;:::i;27794:91::-;;;;;;:::i;:::-;;:::i;:::-;;29702:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;17716:127;;;;;;:::i;:::-;-1:-1:-1;;;;;17817:18:0;17790:7;17817:18;;;;;;;;;;;;17716:127;9848:103;;;:::i;29754:28::-;;;;;;28204:164;;;;;;:::i;:::-;;:::i;9200:87::-;9273:6;;9200:87;;-1:-1:-1;;;;;9273:6:0;;;1594:74:1;;1582:2;1567:18;9200:87:0;1448:226:1;16644:104:0;;;:::i;21002:436::-;;;;;;:::i;:::-;;:::i;30471:306::-;;;;;;:::i;:::-;;:::i;18305:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;18421:18:0;;;18394:7;18421:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18305:151;10106:201;;;;;;:::i;:::-;;:::i;16425:100::-;16479:13;16512:5;16505:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16425:100;:::o;18776:201::-;18859:4;7831:10;18915:32;7831:10;18931:7;18940:6;18915:8;:32::i;:::-;18965:4;18958:11;;;18776:201;;;;;:::o;19557:295::-;19688:4;7831:10;19746:38;19762:4;7831:10;19777:6;19746:15;:38::i;:::-;19795:27;19805:4;19811:2;19815:6;19795:9;:27::i;:::-;-1:-1:-1;19840:4:0;;19557:295;-1:-1:-1;;;;19557:295:0:o;20261:238::-;7831:10;20349:4;18421:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18421:27:0;;;;;;;;;;20349:4;;7831:10;20405:64;;7831:10;;18421:27;;20430:38;;20458:10;;20430:38;:::i;:::-;20405:8;:64::i;27794:91::-;27850:27;7831:10;27870:6;27850:5;:27::i;:::-;27794:91;:::o;9848:103::-;9086:13;:11;:13::i;:::-;9913:30:::1;9940:1;9913:18;:30::i;:::-;9848:103::o:0;28204:164::-;28281:46;28297:7;7831:10;28320:6;28281:15;:46::i;:::-;28338:22;28344:7;28353:6;28338:5;:22::i;:::-;28204:164;;:::o;16644:104::-;16700:13;16733:7;16726:14;;;;;:::i;21002:436::-;7831:10;21095:4;18421:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;18421:27:0;;;;;;;;;;21095:4;;7831:10;21242:15;21222:16;:35;;21214:85;;;;-1:-1:-1;;;21214:85:0;;6631:2:1;21214:85:0;;;6613:21:1;6670:2;6650:18;;;6643:30;6709:34;6689:18;;;6682:62;6780:7;6760:18;;;6753:35;6805:19;;21214:85:0;;;;;;;;;21335:60;21344:5;21351:7;21379:15;21360:16;:34;21335:8;:60::i;30471:306::-;30557:4;30574:11;30588:61;30628:20;30639:8;;30628:6;:10;;:20;;;;:::i;:::-;30589:33;30615:6;30590:19;30602:6;30590:7;;:11;;:19;;;;:::i;:::-;30589:25;;:33::i;:::-;30588:39;;:61::i;:::-;30574:75;-1:-1:-1;30658:51:0;7831:10;30682:9;30693:15;:6;30704:3;30693:10;:15::i;:::-;30658:9;:51::i;10106:201::-;9086:13;:11;:13::i;:::-;-1:-1:-1;;;;;10195:22:0;::::1;10187:73;;;::::0;-1:-1:-1;;;10187:73:0;;3482:2:1;10187:73:0::1;::::0;::::1;3464:21:1::0;3521:2;3501:18;;;3494:30;3560:34;3540:18;;;3533:62;3631:8;3611:18;;;3604:36;3657:19;;10187:73:0::1;3280:402:1::0;10187:73:0::1;10271:28;10290:8;10271:18;:28::i;26351:125::-:0;;;;:::o;4044:98::-;4102:7;4129:5;4133:1;4129;:5;:::i;:::-;4122:12;4044:98;-1:-1:-1;;;4044:98:0:o;3645:::-;3703:7;3730:5;3734:1;3730;:5;:::i;24627:380::-;-1:-1:-1;;;;;24763:19:0;;24755:68;;;;-1:-1:-1;;;24755:68:0;;6226:2:1;24755:68:0;;;6208:21:1;6265:2;6245:18;;;6238:30;6304:34;6284:18;;;6277:62;6375:6;6355:18;;;6348:34;6399:19;;24755:68:0;6024:400:1;24755:68:0;-1:-1:-1;;;;;24842:21:0;;24834:68;;;;-1:-1:-1;;;24834:68:0;;3889:2:1;24834:68:0;;;3871:21:1;3928:2;3908:18;;;3901:30;3967:34;3947:18;;;3940:62;4038:4;4018:18;;;4011:32;4060:19;;24834:68:0;3687:398:1;24834:68:0;-1:-1:-1;;;;;24915:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24967:32;;6981:25:1;;;24967:32:0;;6954:18:1;24967:32:0;;;;;;;24627:380;;;:::o;25298:453::-;-1:-1:-1;;;;;18421:18:0;;;25433:24;18421:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;25500:37:0;;25496:248;;25582:6;25562:16;:26;;25554:68;;;;-1:-1:-1;;;25554:68:0;;4292:2:1;25554:68:0;;;4274:21:1;4331:2;4311:18;;;4304:30;4370:31;4350:18;;;4343:59;4419:18;;25554:68:0;4090:353:1;25554:68:0;25666:51;25675:5;25682:7;25710:6;25691:16;:25;25666:8;:51::i;:::-;25422:329;25298:453;;;:::o;21908:671::-;-1:-1:-1;;;;;22039:18:0;;22031:68;;;;-1:-1:-1;;;22031:68:0;;5820:2:1;22031:68:0;;;5802:21:1;5859:2;5839:18;;;5832:30;5898:34;5878:18;;;5871:62;5969:7;5949:18;;;5942:35;5994:19;;22031:68:0;5618:401:1;22031:68:0;-1:-1:-1;;;;;22118:16:0;;22110:64;;;;-1:-1:-1;;;22110:64:0;;2675:2:1;22110:64:0;;;2657:21:1;2714:2;2694:18;;;2687:30;2753:34;2733:18;;;2726:62;2824:5;2804:18;;;2797:33;2847:19;;22110:64:0;2473:399:1;22110:64:0;22187:38;22208:4;22214:2;22218:6;22187:20;:38::i;:::-;-1:-1:-1;;;;;22260:15:0;;22238:19;22260:15;;;;;;;;;;;22294:21;;;;22286:72;;;;-1:-1:-1;;;22286:72:0;;4650:2:1;22286:72:0;;;4632:21:1;4689:2;4669:18;;;4662:30;4728:34;4708:18;;;4701:62;4799:8;4779:18;;;4772:36;4825:19;;22286:72:0;4448:402:1;22286:72:0;-1:-1:-1;;;;;22394:15:0;;;:9;:15;;;;;;;;;;;22412:20;;;22394:38;;22454:13;;;;;;;;:23;;22426:6;;22394:9;22454:23;;22426:6;;22454:23;:::i;:::-;;;;;;;;22510:2;-1:-1:-1;;;;;22495:26:0;22504:4;-1:-1:-1;;;;;22495:26:0;;22514:6;22495:26;;;;6981:25:1;;6969:2;6954:18;;6835:177;22495:26:0;;;;;;;;22534:37;26351:125;23598:591;-1:-1:-1;;;;;23682:21:0;;23674:67;;;;-1:-1:-1;;;23674:67:0;;5418:2:1;23674:67:0;;;5400:21:1;5457:2;5437:18;;;5430:30;5496:34;5476:18;;;5469:62;5567:3;5547:18;;;5540:31;5588:19;;23674:67:0;5216:397:1;23674:67:0;23754:49;23775:7;23792:1;23796:6;23754:20;:49::i;:::-;-1:-1:-1;;;;;23841:18:0;;23816:22;23841:18;;;;;;;;;;;23878:24;;;;23870:71;;;;-1:-1:-1;;;23870:71:0;;3079:2:1;23870:71:0;;;3061:21:1;3118:2;3098:18;;;3091:30;3157:34;3137:18;;;3130:62;3228:4;3208:18;;;3201:32;3250:19;;23870:71:0;2877:398:1;23870:71:0;-1:-1:-1;;;;;23977:18:0;;:9;:18;;;;;;;;;;23998:23;;;23977:44;;24043:12;:22;;24015:6;;23977:9;24043:22;;24015:6;;24043:22;:::i;:::-;;;;-1:-1:-1;;24083:37:0;;6981:25:1;;;24109:1:0;;-1:-1:-1;;;;;24083:37:0;;;;;6969:2:1;6954:18;24083:37:0;;;;;;;26351:125;;;:::o;9365:132::-;9273:6;;-1:-1:-1;;;;;9273:6:0;7831:10;9429:23;9421:68;;;;-1:-1:-1;;;9421:68:0;;5057:2:1;9421:68:0;;;5039:21:1;;;5076:18;;;5069:30;5135:34;5115:18;;;5108:62;5187:18;;9421:68:0;4855:356:1;10467:191:0;10560:6;;;-1:-1:-1;;;;;10577:17:0;;;;;;;;;;;10610:40;;10560:6;;;10577:17;10560:6;;10610:40;;10541:16;;10610:40;10530:128;10467:191;:::o;3288:98::-;3346:7;3373:5;3377:1;3373;:5;:::i;30037:426::-;30264:2;-1:-1:-1;;;;;30256:10:0;:4;-1:-1:-1;;;;;30256:10:0;;;30248:19;;;;;;-1:-1:-1;;;;;30282:18:0;;;;;;:38;;-1:-1:-1;;;;;;30304:16:0;;;;30282:38;30278:178;;;30336:11;30350:61;30390:20;30401:8;;30390:6;:10;;:20;;;;:::i;:::-;30351:33;30377:6;30352:19;30364:6;30352:7;;:11;;:19;;;;:::i;30350:61::-;30336:75;-1:-1:-1;30426:18:0;30434:4;30336:75;30928:16;17470:2;30928;:16;:::i;:::-;30914:30;;:11;:30;:::i;:::-;17633:12;;30899:45;30896:95;;;30960:19;30966:7;30975:3;30960:5;:19::i;14:196:1:-;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;406:260::-;474:6;482;535:2;523:9;514:7;510:23;506:32;503:52;;;551:1;548;541:12;503:52;574:29;593:9;574:29;:::i;:::-;564:39;;622:38;656:2;645:9;641:18;622:38;:::i;:::-;612:48;;406:260;;;;;:::o;671:328::-;748:6;756;764;817:2;805:9;796:7;792:23;788:32;785:52;;;833:1;830;823:12;785:52;856:29;875:9;856:29;:::i;:::-;846:39;;904:38;938:2;927:9;923:18;904:38;:::i;:::-;894:48;;989:2;978:9;974:18;961:32;951:42;;671:328;;;;;:::o;1004:254::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1172:29;1191:9;1172:29;:::i;:::-;1162:39;1248:2;1233:18;;;;1220:32;;-1:-1:-1;;;1004:254:1:o;1263:180::-;1322:6;1375:2;1363:9;1354:7;1350:23;1346:32;1343:52;;;1391:1;1388;1381:12;1343:52;-1:-1:-1;1414:23:1;;1263:180;-1:-1:-1;1263:180:1:o;1871:597::-;1983:4;2012:2;2041;2030:9;2023:21;2073:6;2067:13;2116:6;2111:2;2100:9;2096:18;2089:34;2141:1;2151:140;2165:6;2162:1;2159:13;2151:140;;;2260:14;;;2256:23;;2250:30;2226:17;;;2245:2;2222:26;2215:66;2180:10;;2151:140;;;2309:6;2306:1;2303:13;2300:91;;;2379:1;2374:2;2365:6;2354:9;2350:22;2346:31;2339:42;2300:91;-1:-1:-1;2452:2:1;2431:15;-1:-1:-1;;2427:29:1;2412:45;;;;2459:2;2408:54;;1871:597;-1:-1:-1;;;1871:597:1:o;7206:128::-;7246:3;7277:1;7273:6;7270:1;7267:13;7264:39;;;7283:18;;:::i;:::-;-1:-1:-1;7319:9:1;;7206:128::o;7339:274::-;7379:1;7405;7395:189;;-1:-1:-1;;;7437:1:1;7430:88;7541:4;7538:1;7531:15;7569:4;7566:1;7559:15;7395:189;-1:-1:-1;7598:9:1;;7339:274::o;7618:422::-;7707:1;7750:5;7707:1;7764:270;7785:7;7775:8;7772:21;7764:270;;;7844:4;7840:1;7836:6;7832:17;7826:4;7823:27;7820:53;;;7853:18;;:::i;:::-;7903:7;7893:8;7889:22;7886:55;;;7923:16;;;;7886:55;8002:22;;;;7962:15;;;;7764:270;;;7768:3;7618:422;;;;;:::o;8045:140::-;8103:5;8132:47;8173:4;8163:8;8159:19;8153:4;8239:5;8269:8;8259:80;;-1:-1:-1;8310:1:1;8324:5;;8259:80;8358:4;8348:76;;-1:-1:-1;8395:1:1;8409:5;;8348:76;8440:4;8458:1;8453:59;;;;8526:1;8521:130;;;;8433:218;;8453:59;8483:1;8474:10;;8497:5;;;8521:130;8558:3;8548:8;8545:17;8542:43;;;8565:18;;:::i;:::-;-1:-1:-1;;8621:1:1;8607:16;;8636:5;;8433:218;;8735:2;8725:8;8722:16;8716:3;8710:4;8707:13;8703:36;8697:2;8687:8;8684:16;8679:2;8673:4;8670:12;8666:35;8663:77;8660:159;;;-1:-1:-1;8772:19:1;;;8804:5;;8660:159;8851:34;8876:8;8870:4;8851:34;:::i;:::-;8921:6;8917:1;8913:6;8909:19;8900:7;8897:32;8894:58;;;8932:18;;:::i;:::-;8970:20;;8190:806;-1:-1:-1;;;8190:806:1:o;9001:168::-;9041:7;9107:1;9103;9099:6;9095:14;9092:1;9089:21;9084:1;9077:9;9070:17;9066:45;9063:71;;;9114:18;;:::i;:::-;-1:-1:-1;9154:9:1;;9001:168::o;9174:125::-;9214:4;9242:1;9239;9236:8;9233:34;;;9247:18;;:::i;:::-;-1:-1:-1;9284:9:1;;9174:125::o;9304:437::-;9383:1;9379:12;;;;9426;;;9447:61;;9501:4;9493:6;9489:17;9479:27;;9447:61;9554:2;9546:6;9543:14;9523:18;9520:38;9517:218;;;-1:-1:-1;;;9588:1:1;9581:88;9692:4;9689:1;9682:15;9720:4;9717:1;9710:15;9517:218;;9304:437;;;:::o;9746:184::-;-1:-1:-1;;;9795:1:1;9788:88;9895:4;9892:1;9885:15;9919:4;9916:1;9909:15

Swarm Source

ipfs://342d2abc153554501d92ad50e6f5058b7fcda7f765f2847506521f5c08f2e5be
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.