ETH Price: $3,466.30 (-1.43%)
Gas: 3 Gwei

Token

$TURTLESHELL (TRTL)
 

Overview

Max Total Supply

1,080.69 TRTL

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
tbiddy.eth
Balance
19 TRTL

Value
$0.00
0x4E9b812BF109cd768BcA453778e406824e8ff5E6
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:
$TURTLESHELL

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-05
*/

// SPDX-License-Identifier: MIT

// File: @openzeppelin/contracts/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



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() {
        _setOwner(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

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

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

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



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: @openzeppelin/contracts/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



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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual 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) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `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 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 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: contracts/$TURTLESHELL.sol



pragma solidity ^0.8.9;



contract SignatureProver {
    function getMessageHash(
        address to,
        uint256 amount,
        uint256 nonce
    ) public pure returns (bytes32) {
        return keccak256(abi.encodePacked(to, amount, nonce));
    }

    function getEthSignedMessageHash(bytes32 messageHash)
        public
        pure
        returns (bytes32)
    {
        
        // Signature is produced by signing a keccak256 hash with the following format:
        // "\x19Ethereum Signed Message\n" + len(msg) + msg
        
        return
            keccak256(
                abi.encodePacked(
                    "\x19Ethereum Signed Message:\n32",
                    messageHash
                )
            );
    }

    function verify(
        address signer,
        address to,
        uint256 amount,
        uint256 nonce,
        bytes calldata signature
    ) public pure returns (bool) {
        bytes32 messageHash = getMessageHash(to, amount, nonce);
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);

        return recoverSigner(ethSignedMessageHash, signature) == signer;
    }

    function recoverSigner(bytes32 ethSignedMessageHash, bytes memory signature)
        public
        pure
        returns (address)
    {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(signature);

        return ecrecover(ethSignedMessageHash, v, r, s);
    }

    function splitSignature(bytes memory signature)
        private
        pure
        returns (
            bytes32 r,
            bytes32 s,
            uint8 v
        )
    {
        require(signature.length == 65, "Invalid signature length");

        assembly {
            /*
            First 32 bytes stores the length of the signature

            add(sig, 32) = pointer of sig + 32
            effectively, skips first 32 bytes of signature

            mload(p) loads next 32 bytes starting at the memory address p into memory
            */

            // first 32 bytes, after the length prefix
            r := mload(add(signature, 32))
            // second 32 bytes
            s := mload(add(signature, 64))
            // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(signature, 96)))
        }

        // implicitly return (r, s, v)
    }
}

contract $TURTLESHELL is ERC20, Ownable, SignatureProver {
    mapping(address => uint256) public nonceMap;
    mapping(address => uint256) public claimedTokens;

    constructor() ERC20("$TURTLESHELL", "TRTL") {
        _mint(msg.sender, 420690000000000000000);
    }

    function claimTokens(
        uint256 amount,
        uint256 nonce,
        bytes calldata signature
    ) external {
        require(
            verify(owner(), msg.sender, amount, nonce, signature),
            "Invalid signature"
        );

        // Current nonce has to match this one to avoid double-claiming
        require(nonceMap[msg.sender] == nonce, "Invalid nonce");

        _mint(msg.sender, amount);

        nonceMap[msg.sender]++;
        claimedTokens[msg.sender] += amount;
    }

    function sendTokens(uint256 amount, address[] calldata beneficiaries)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < beneficiaries.length; i++) {
            address beneficiary = beneficiaries[i];
            _mint(beneficiary, amount);
        }
    }
}

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":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"bytes32","name":"messageHash","type":"bytes32"}],"name":"getEthSignedMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonceMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"ethSignedMessageHash","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address[]","name":"beneficiaries","type":"address[]"}],"name":"sendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":"signer","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"}]

60806040523480156200001157600080fd5b50604080518082018252600c81526b0915155495131154d211531360a21b6020808301918252835180850190945260048452631514951360e21b9084015281519192916200006291600391620001ee565b50805162000078906004906020840190620001ee565b505050620000956200008f620000b060201b60201c565b620000b4565b620000aa336816ce3f1e16bf15000062000106565b620002f8565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001615760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b806002600082825462000175919062000294565b90915550506001600160a01b03821660009081526020819052604081208054839290620001a490849062000294565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620001fc90620002bb565b90600052602060002090601f0160209004810192826200022057600085556200026b565b82601f106200023b57805160ff19168380011785556200026b565b828001600101855582156200026b579182015b828111156200026b5782518255916020019190600101906200024e565b50620002799291506200027d565b5090565b5b808211156200027957600081556001016200027e565b60008219821115620002b657634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620002d057607f821691505b60208210811415620002f257634e487b7160e01b600052602260045260246000fd5b50919050565b61130780620003086000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806397aba7f9116100b8578063cffc18eb1161007c578063cffc18eb146102bb578063d2b0737b146102ce578063dd62ed3e146102e1578063e91e30721461031a578063f2fde38b1461032d578063fa5408011461034057600080fd5b806397aba7f91461024f578063a457c2d714610262578063a9059cbb14610275578063a960c65f14610288578063c2c2a26b146102a857600080fd5b8063395093511161010a57806339509351146101bc5780636e978d77146101cf57806370a08231146101ef578063715018a6146102185780638da5cb5b1461022257806395d89b411461024757600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018857806323b872dd1461019a578063313ce567146101ad575b600080fd5b61014f610353565b60405161015c9190610e26565b60405180910390f35b610178610173366004610e97565b6103e5565b604051901515815260200161015c565b6002545b60405190815260200161015c565b6101786101a8366004610ec1565b6103fb565b6040516012815260200161015c565b6101786101ca366004610e97565b6104aa565b61018c6101dd366004610efd565b60066020526000908152604090205481565b61018c6101fd366004610efd565b6001600160a01b031660009081526020819052604090205490565b6102206104e6565b005b6005546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b61014f61051c565b61022f61025d366004610f35565b61052b565b610178610270366004610e97565b6105aa565b610178610283366004610e97565b610643565b61018c610296366004610efd565b60076020526000908152604090205481565b6102206102b6366004611039565b610650565b6101786102c936600461108c565b610751565b61018c6102dc366004611104565b6107cf565b61018c6102ef366004611137565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61022061032836600461116a565b61081e565b61022061033b366004610efd565b6108a1565b61018c61034e3660046111e9565b61093c565b60606003805461036290611202565b80601f016020809104026020016040519081016040528092919081815260200182805461038e90611202565b80156103db5780601f106103b0576101008083540402835291602001916103db565b820191906000526020600020905b8154815290600101906020018083116103be57829003601f168201915b5050505050905090565b60006103f233848461098f565b50600192915050565b6000610408848484610ab3565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104925760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61049f853385840361098f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103f29185906104e1908690611253565b61098f565b6005546001600160a01b031633146105105760405162461bcd60e51b81526004016104899061126b565b61051a6000610c81565b565b60606004805461036290611202565b60008060008061053a85610cd3565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015610595573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561062c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610489565b610639338585840361098f565b5060019392505050565b60006103f2338484610ab3565b61066f6106656005546001600160a01b031690565b3386868686610751565b6106af5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610489565b3360009081526006602052604090205483146106fd5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610489565b6107073385610d47565b336000908152600660205260408120805491610722836112a0565b90915550503360009081526007602052604081208054869290610746908490611253565b909155505050505050565b60008061075f8787876107cf565b9050600061076c8261093c565b9050886001600160a01b03166107b88287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061052b92505050565b6001600160a01b0316149998505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052605481018290526000906074016040516020818303038152906040528051906020012090509392505050565b6005546001600160a01b031633146108485760405162461bcd60e51b81526004016104899061126b565b60005b8181101561089b576000838383818110610867576108676112bb565b905060200201602081019061087c9190610efd565b90506108888186610d47565b5080610893816112a0565b91505061084b565b50505050565b6005546001600160a01b031633146108cb5760405162461bcd60e51b81526004016104899061126b565b6001600160a01b0381166109305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610489565b61093981610c81565b50565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6001600160a01b0383166109f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610489565b6001600160a01b038216610a525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610489565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610b175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610489565b6001600160a01b038216610b795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610489565b6001600160a01b03831660009081526020819052604090205481811015610bf15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610489565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610c28908490611253565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c7491815260200190565b60405180910390a361089b565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060008351604114610d295760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610489565b50505060208101516040820151606090920151909260009190911a90565b6001600160a01b038216610d9d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610489565b8060026000828254610daf9190611253565b90915550506001600160a01b03821660009081526020819052604081208054839290610ddc908490611253565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208083528351808285015260005b81811015610e5357858101830151858201604001528201610e37565b81811115610e65576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e9257600080fd5b919050565b60008060408385031215610eaa57600080fd5b610eb383610e7b565b946020939093013593505050565b600080600060608486031215610ed657600080fd5b610edf84610e7b565b9250610eed60208501610e7b565b9150604084013590509250925092565b600060208284031215610f0f57600080fd5b610f1882610e7b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610f4857600080fd5b82359150602083013567ffffffffffffffff80821115610f6757600080fd5b818501915085601f830112610f7b57600080fd5b813581811115610f8d57610f8d610f1f565b604051601f8201601f19908116603f01168101908382118183101715610fb557610fb5610f1f565b81604052828152886020848701011115610fce57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f84011261100257600080fd5b50813567ffffffffffffffff81111561101a57600080fd5b60208301915083602082850101111561103257600080fd5b9250929050565b6000806000806060858703121561104f57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561107457600080fd5b61108087828801610ff0565b95989497509550505050565b60008060008060008060a087890312156110a557600080fd5b6110ae87610e7b565b95506110bc60208801610e7b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156110e657600080fd5b6110f289828a01610ff0565b979a9699509497509295939492505050565b60008060006060848603121561111957600080fd5b61112284610e7b565b95602085013595506040909401359392505050565b6000806040838503121561114a57600080fd5b61115383610e7b565b915061116160208401610e7b565b90509250929050565b60008060006040848603121561117f57600080fd5b83359250602084013567ffffffffffffffff8082111561119e57600080fd5b818601915086601f8301126111b257600080fd5b8135818111156111c157600080fd5b8760208260051b85010111156111d657600080fd5b6020830194508093505050509250925092565b6000602082840312156111fb57600080fd5b5035919050565b600181811c9082168061121657607f821691505b6020821081141561123757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156112665761126661123d565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006000198214156112b4576112b461123d565b5060010190565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220edb946ca95fa0f2d49c64df4eb4b0468b55202ec381eaebe55c61d1b7df65d5164736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c806397aba7f9116100b8578063cffc18eb1161007c578063cffc18eb146102bb578063d2b0737b146102ce578063dd62ed3e146102e1578063e91e30721461031a578063f2fde38b1461032d578063fa5408011461034057600080fd5b806397aba7f91461024f578063a457c2d714610262578063a9059cbb14610275578063a960c65f14610288578063c2c2a26b146102a857600080fd5b8063395093511161010a57806339509351146101bc5780636e978d77146101cf57806370a08231146101ef578063715018a6146102185780638da5cb5b1461022257806395d89b411461024757600080fd5b806306fdde0314610147578063095ea7b31461016557806318160ddd1461018857806323b872dd1461019a578063313ce567146101ad575b600080fd5b61014f610353565b60405161015c9190610e26565b60405180910390f35b610178610173366004610e97565b6103e5565b604051901515815260200161015c565b6002545b60405190815260200161015c565b6101786101a8366004610ec1565b6103fb565b6040516012815260200161015c565b6101786101ca366004610e97565b6104aa565b61018c6101dd366004610efd565b60066020526000908152604090205481565b61018c6101fd366004610efd565b6001600160a01b031660009081526020819052604090205490565b6102206104e6565b005b6005546001600160a01b03165b6040516001600160a01b03909116815260200161015c565b61014f61051c565b61022f61025d366004610f35565b61052b565b610178610270366004610e97565b6105aa565b610178610283366004610e97565b610643565b61018c610296366004610efd565b60076020526000908152604090205481565b6102206102b6366004611039565b610650565b6101786102c936600461108c565b610751565b61018c6102dc366004611104565b6107cf565b61018c6102ef366004611137565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61022061032836600461116a565b61081e565b61022061033b366004610efd565b6108a1565b61018c61034e3660046111e9565b61093c565b60606003805461036290611202565b80601f016020809104026020016040519081016040528092919081815260200182805461038e90611202565b80156103db5780601f106103b0576101008083540402835291602001916103db565b820191906000526020600020905b8154815290600101906020018083116103be57829003601f168201915b5050505050905090565b60006103f233848461098f565b50600192915050565b6000610408848484610ab3565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104925760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61049f853385840361098f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103f29185906104e1908690611253565b61098f565b6005546001600160a01b031633146105105760405162461bcd60e51b81526004016104899061126b565b61051a6000610c81565b565b60606004805461036290611202565b60008060008061053a85610cd3565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015610595573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561062c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610489565b610639338585840361098f565b5060019392505050565b60006103f2338484610ab3565b61066f6106656005546001600160a01b031690565b3386868686610751565b6106af5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606401610489565b3360009081526006602052604090205483146106fd5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606401610489565b6107073385610d47565b336000908152600660205260408120805491610722836112a0565b90915550503360009081526007602052604081208054869290610746908490611253565b909155505050505050565b60008061075f8787876107cf565b9050600061076c8261093c565b9050886001600160a01b03166107b88287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061052b92505050565b6001600160a01b0316149998505050505050505050565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052605481018290526000906074016040516020818303038152906040528051906020012090509392505050565b6005546001600160a01b031633146108485760405162461bcd60e51b81526004016104899061126b565b60005b8181101561089b576000838383818110610867576108676112bb565b905060200201602081019061087c9190610efd565b90506108888186610d47565b5080610893816112a0565b91505061084b565b50505050565b6005546001600160a01b031633146108cb5760405162461bcd60e51b81526004016104899061126b565b6001600160a01b0381166109305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610489565b61093981610c81565b50565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6001600160a01b0383166109f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610489565b6001600160a01b038216610a525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610489565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610b175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610489565b6001600160a01b038216610b795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610489565b6001600160a01b03831660009081526020819052604090205481811015610bf15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610489565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610c28908490611253565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c7491815260200190565b60405180910390a361089b565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060008351604114610d295760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610489565b50505060208101516040820151606090920151909260009190911a90565b6001600160a01b038216610d9d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610489565b8060026000828254610daf9190611253565b90915550506001600160a01b03821660009081526020819052604081208054839290610ddc908490611253565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600060208083528351808285015260005b81811015610e5357858101830151858201604001528201610e37565b81811115610e65576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b0381168114610e9257600080fd5b919050565b60008060408385031215610eaa57600080fd5b610eb383610e7b565b946020939093013593505050565b600080600060608486031215610ed657600080fd5b610edf84610e7b565b9250610eed60208501610e7b565b9150604084013590509250925092565b600060208284031215610f0f57600080fd5b610f1882610e7b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610f4857600080fd5b82359150602083013567ffffffffffffffff80821115610f6757600080fd5b818501915085601f830112610f7b57600080fd5b813581811115610f8d57610f8d610f1f565b604051601f8201601f19908116603f01168101908382118183101715610fb557610fb5610f1f565b81604052828152886020848701011115610fce57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008083601f84011261100257600080fd5b50813567ffffffffffffffff81111561101a57600080fd5b60208301915083602082850101111561103257600080fd5b9250929050565b6000806000806060858703121561104f57600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561107457600080fd5b61108087828801610ff0565b95989497509550505050565b60008060008060008060a087890312156110a557600080fd5b6110ae87610e7b565b95506110bc60208801610e7b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156110e657600080fd5b6110f289828a01610ff0565b979a9699509497509295939492505050565b60008060006060848603121561111957600080fd5b61112284610e7b565b95602085013595506040909401359392505050565b6000806040838503121561114a57600080fd5b61115383610e7b565b915061116160208401610e7b565b90509250929050565b60008060006040848603121561117f57600080fd5b83359250602084013567ffffffffffffffff8082111561119e57600080fd5b818601915086601f8301126111b257600080fd5b8135818111156111c157600080fd5b8760208260051b85010111156111d657600080fd5b6020830194508093505050509250925092565b6000602082840312156111fb57600080fd5b5035919050565b600181811c9082168061121657607f821691505b6020821081141561123757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156112665761126661123d565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006000198214156112b4576112b461123d565b5060010190565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220edb946ca95fa0f2d49c64df4eb4b0468b55202ec381eaebe55c61d1b7df65d5164736f6c63430008090033

Deployed Bytecode Sourcemap

21129:1100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8719:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10886:169;;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;10886:169:0;1053:187:1;9839:108:0;9927:12;;9839:108;;;1391:25:1;;;1379:2;1364:18;9839:108:0;1245:177:1;11537:492:0;;;;;;:::i;:::-;;:::i;9681:93::-;;;9764:2;1902:36:1;;1890:2;1875:18;9681:93:0;1760:184:1;12438:215:0;;;;;;:::i;:::-;;:::i;21193:43::-;;;;;;:::i;:::-;;;;;;;;;;;;;;10010:127;;;;;;:::i;:::-;-1:-1:-1;;;;;10111:18:0;10084:7;10111:18;;;;;;;;;;;;10010:127;2523:94;;;:::i;:::-;;1872:87;1945:6;;-1:-1:-1;;;;;1945:6:0;1872:87;;;-1:-1:-1;;;;;2304:32:1;;;2286:51;;2274:2;2259:18;1872:87:0;2140:203:1;8938:104:0;;;:::i;19915:277::-;;;;;;:::i;:::-;;:::i;13156:413::-;;;;;;:::i;:::-;;:::i;10350:175::-;;;;;;:::i;:::-;;:::i;21243:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;21411:520;;;;;;:::i;:::-;;:::i;19499:408::-;;;;;;:::i;:::-;;:::i;18786:203::-;;;;;;:::i;:::-;;:::i;10588:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10704:18:0;;;10677:7;10704:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10588:151;21939:287;;;;;;:::i;:::-;;:::i;2772:192::-;;;;;;:::i;:::-;;:::i;18997:494::-;;;;;;:::i;:::-;;:::i;8719:100::-;8773:13;8806:5;8799:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8719:100;:::o;10886:169::-;10969:4;10986:39;740:10;11009:7;11018:6;10986:8;:39::i;:::-;-1:-1:-1;11043:4:0;10886:169;;;;:::o;11537:492::-;11677:4;11694:36;11704:6;11712:9;11723:6;11694:9;:36::i;:::-;-1:-1:-1;;;;;11770:19:0;;11743:24;11770:19;;;:11;:19;;;;;;;;740:10;11770:33;;;;;;;;11822:26;;;;11814:79;;;;-1:-1:-1;;;11814:79:0;;7310:2:1;11814:79:0;;;7292:21:1;7349:2;7329:18;;;7322:30;7388:34;7368:18;;;7361:62;-1:-1:-1;;;7439:18:1;;;7432:38;7487:19;;11814:79:0;;;;;;;;;11929:57;11938:6;740:10;11979:6;11960:16;:25;11929:8;:57::i;:::-;-1:-1:-1;12017:4:0;;11537:492;-1:-1:-1;;;;11537:492:0:o;12438:215::-;740:10;12526:4;12575:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12575:34:0;;;;;;;;;;12526:4;;12543:80;;12566:7;;12575:47;;12612:10;;12575:47;:::i;:::-;12543:8;:80::i;2523:94::-;1945:6;;-1:-1:-1;;;;;1945:6:0;740:10;2092:23;2084:68;;;;-1:-1:-1;;;2084:68:0;;;;;;;:::i;:::-;2588:21:::1;2606:1;2588:9;:21::i;:::-;2523:94::o:0;8938:104::-;8994:13;9027:7;9020:14;;;;;:::i;19915:277::-;20040:7;20066:9;20077;20088:7;20099:25;20114:9;20099:14;:25::i;:::-;20144:40;;;;;;;;;;;;8370:25:1;;;8443:4;8431:17;;8411:18;;;8404:45;;;;8465:18;;;8458:34;;;8508:18;;;8501:34;;;20065:59:0;;-1:-1:-1;20065:59:0;;-1:-1:-1;20065:59:0;-1:-1:-1;20144:40:0;;8342:19:1;;20144:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20144:40:0;;-1:-1:-1;;20144:40:0;;;19915:277;-1:-1:-1;;;;;;;19915:277:0:o;13156:413::-;740:10;13249:4;13293:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13293:34:0;;;;;;;;;;13346:35;;;;13338:85;;;;-1:-1:-1;;;13338:85:0;;8748:2:1;13338:85:0;;;8730:21:1;8787:2;8767:18;;;8760:30;8826:34;8806:18;;;8799:62;-1:-1:-1;;;8877:18:1;;;8870:35;8922:19;;13338:85:0;8546:401:1;13338:85:0;13459:67;740:10;13482:7;13510:15;13491:16;:34;13459:8;:67::i;:::-;-1:-1:-1;13557:4:0;;13156:413;-1:-1:-1;;;13156:413:0:o;10350:175::-;10436:4;10453:42;740:10;10477:9;10488:6;10453:9;:42::i;21411:520::-;21565:53;21572:7;1945:6;;-1:-1:-1;;;;;1945:6:0;;1872:87;21572:7;21581:10;21593:6;21601:5;21608:9;;21565:6;:53::i;:::-;21543:120;;;;-1:-1:-1;;;21543:120:0;;9154:2:1;21543:120:0;;;9136:21:1;9193:2;9173:18;;;9166:30;-1:-1:-1;;;9212:18:1;;;9205:47;9269:18;;21543:120:0;8952:341:1;21543:120:0;21766:10;21757:20;;;;:8;:20;;;;;;:29;;21749:55;;;;-1:-1:-1;;;21749:55:0;;9500:2:1;21749:55:0;;;9482:21:1;9539:2;9519:18;;;9512:30;-1:-1:-1;;;9558:18:1;;;9551:43;9611:18;;21749:55:0;9298:337:1;21749:55:0;21817:25;21823:10;21835:6;21817:5;:25::i;:::-;21864:10;21855:20;;;;:8;:20;;;;;:22;;;;;;:::i;:::-;;;;-1:-1:-1;;21902:10:0;21888:25;;;;:13;:25;;;;;:35;;21917:6;;21888:25;:35;;21917:6;;21888:35;:::i;:::-;;;;-1:-1:-1;;;;;;21411:520:0:o;19499:408::-;19673:4;19690:19;19712:33;19727:2;19731:6;19739:5;19712:14;:33::i;:::-;19690:55;;19756:28;19787:36;19811:11;19787:23;:36::i;:::-;19756:67;;19893:6;-1:-1:-1;;;;;19843:56:0;:46;19857:20;19879:9;;19843:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19843:13:0;;-1:-1:-1;;;19843:46:0:i;:::-;-1:-1:-1;;;;;19843:56:0;;;19499:408;-1:-1:-1;;;;;;;;;19499:408:0:o;18786:203::-;18945:35;;-1:-1:-1;;9985:2:1;9981:15;;;9977:53;18945:35:0;;;9965:66:1;10047:12;;;10040:28;;;10084:12;;;10077:28;;;18908:7:0;;10121:12:1;;18945:35:0;;;;;;;;;;;;18935:46;;;;;;18928:53;;18786:203;;;;;:::o;21939:287::-;1945:6;;-1:-1:-1;;;;;1945:6:0;740:10;2092:23;2084:68;;;;-1:-1:-1;;;2084:68:0;;;;;;;:::i;:::-;22067:9:::1;22062:157;22082:24:::0;;::::1;22062:157;;;22128:19;22150:13;;22164:1;22150:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22128:38;;22181:26;22187:11;22200:6;22181:5;:26::i;:::-;-1:-1:-1::0;22108:3:0;::::1;::::0;::::1;:::i;:::-;;;;22062:157;;;;21939:287:::0;;;:::o;2772:192::-;1945:6;;-1:-1:-1;;;;;1945:6:0;740:10;2092:23;2084:68;;;;-1:-1:-1;;;2084:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2861:22:0;::::1;2853:73;;;::::0;-1:-1:-1;;;2853:73:0;;10478:2:1;2853:73:0::1;::::0;::::1;10460:21:1::0;10517:2;10497:18;;;10490:30;10556:34;10536:18;;;10529:62;-1:-1:-1;;;10607:18:1;;;10600:36;10653:19;;2853:73:0::1;10276:402:1::0;2853:73:0::1;2937:19;2947:8;2937:9;:19::i;:::-;2772:192:::0;:::o;18997:494::-;19342:126;;10925:66:1;19342:126:0;;;10913:79:1;11008:12;;;11001:28;;;19099:7:0;;11045:12:1;;19342:126:0;;;;;;;;;;;;19314:169;;;;;;19294:189;;18997:494;;;:::o;16840:380::-;-1:-1:-1;;;;;16976:19:0;;16968:68;;;;-1:-1:-1;;;16968:68:0;;11270:2:1;16968:68:0;;;11252:21:1;11309:2;11289:18;;;11282:30;11348:34;11328:18;;;11321:62;-1:-1:-1;;;11399:18:1;;;11392:34;11443:19;;16968:68:0;11068:400:1;16968:68:0;-1:-1:-1;;;;;17055:21:0;;17047:68;;;;-1:-1:-1;;;17047:68:0;;11675:2:1;17047:68:0;;;11657:21:1;11714:2;11694:18;;;11687:30;11753:34;11733:18;;;11726:62;-1:-1:-1;;;11804:18:1;;;11797:32;11846:19;;17047:68:0;11473:398:1;17047:68:0;-1:-1:-1;;;;;17128:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17180:32;;1391:25:1;;;17180:32:0;;1364:18:1;17180:32:0;;;;;;;16840:380;;;:::o;14059:733::-;-1:-1:-1;;;;;14199:20:0;;14191:70;;;;-1:-1:-1;;;14191:70:0;;12078:2:1;14191:70:0;;;12060:21:1;12117:2;12097:18;;;12090:30;12156:34;12136:18;;;12129:62;-1:-1:-1;;;12207:18:1;;;12200:35;12252:19;;14191:70:0;11876:401:1;14191:70:0;-1:-1:-1;;;;;14280:23:0;;14272:71;;;;-1:-1:-1;;;14272:71:0;;12484:2:1;14272:71:0;;;12466:21:1;12523:2;12503:18;;;12496:30;12562:34;12542:18;;;12535:62;-1:-1:-1;;;12613:18:1;;;12606:33;12656:19;;14272:71:0;12282:399:1;14272:71:0;-1:-1:-1;;;;;14440:17:0;;14416:21;14440:17;;;;;;;;;;;14476:23;;;;14468:74;;;;-1:-1:-1;;;14468:74:0;;12888:2:1;14468:74:0;;;12870:21:1;12927:2;12907:18;;;12900:30;12966:34;12946:18;;;12939:62;-1:-1:-1;;;13017:18:1;;;13010:36;13063:19;;14468:74:0;12686:402:1;14468:74:0;-1:-1:-1;;;;;14578:17:0;;;:9;:17;;;;;;;;;;;14598:22;;;14578:42;;14642:20;;;;;;;;:30;;14614:6;;14578:9;14642:30;;14614:6;;14642:30;:::i;:::-;;;;;;;;14707:9;-1:-1:-1;;;;;14690:35:0;14699:6;-1:-1:-1;;;;;14690:35:0;;14718:6;14690:35;;;;1391:25:1;;1379:2;1364:18;;1245:177;14690:35:0;;;;;;;;14738:46;17820:125;2972:173;3047:6;;;-1:-1:-1;;;;;3064:17:0;;;-1:-1:-1;;;;;;3064:17:0;;;;;;;3097:40;;3047:6;;;3064:17;3047:6;;3097:40;;3028:16;;3097:40;3017:128;2972:173;:::o;20200:922::-;20311:9;20335;20359:7;20402:9;:16;20422:2;20402:22;20394:59;;;;-1:-1:-1;;;20394:59:0;;13295:2:1;20394:59:0;;;13277:21:1;13334:2;13314:18;;;13307:30;13373:26;13353:18;;;13346:54;13417:18;;20394:59:0;13093:348:1;20394:59:0;-1:-1:-1;;;20868:2:0;20853:18;;20847:25;20944:2;20929:18;;20923:25;21057:2;21042:18;;;21036:25;20847;;21033:1;21028:34;;;;;20200:922::o;15079:399::-;-1:-1:-1;;;;;15163:21:0;;15155:65;;;;-1:-1:-1;;;15155:65:0;;13648:2:1;15155:65:0;;;13630:21:1;13687:2;13667:18;;;13660:30;13726:33;13706:18;;;13699:61;13777:18;;15155:65:0;13446:355:1;15155:65:0;15311:6;15295:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15328:18:0;;:9;:18;;;;;;;;;;:28;;15350:6;;15328:9;:28;;15350:6;;15328:28;:::i;:::-;;;;-1:-1:-1;;15372:37:0;;1391:25:1;;;-1:-1:-1;;;;;15372:37:0;;;15389:1;;15372:37;;1379:2:1;1364:18;15372:37:0;;;;;;;15079:399;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;713:70;616:173;;;:::o;794:254::-;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1427:328::-;1504:6;1512;1520;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;1612:29;1631:9;1612:29;:::i;:::-;1602:39;;1660:38;1694:2;1683:9;1679:18;1660:38;:::i;:::-;1650:48;;1745:2;1734:9;1730:18;1717:32;1707:42;;1427:328;;;;;:::o;1949:186::-;2008:6;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;2100:29;2119:9;2100:29;:::i;:::-;2090:39;1949:186;-1:-1:-1;;;1949:186:1:o;2348:127::-;2409:10;2404:3;2400:20;2397:1;2390:31;2440:4;2437:1;2430:15;2464:4;2461:1;2454:15;2480:989;2557:6;2565;2618:2;2606:9;2597:7;2593:23;2589:32;2586:52;;;2634:1;2631;2624:12;2586:52;2670:9;2657:23;2647:33;;2731:2;2720:9;2716:18;2703:32;2754:18;2795:2;2787:6;2784:14;2781:34;;;2811:1;2808;2801:12;2781:34;2849:6;2838:9;2834:22;2824:32;;2894:7;2887:4;2883:2;2879:13;2875:27;2865:55;;2916:1;2913;2906:12;2865:55;2952:2;2939:16;2974:2;2970;2967:10;2964:36;;;2980:18;;:::i;:::-;3055:2;3049:9;3023:2;3109:13;;-1:-1:-1;;3105:22:1;;;3129:2;3101:31;3097:40;3085:53;;;3153:18;;;3173:22;;;3150:46;3147:72;;;3199:18;;:::i;:::-;3239:10;3235:2;3228:22;3274:2;3266:6;3259:18;3314:7;3309:2;3304;3300;3296:11;3292:20;3289:33;3286:53;;;3335:1;3332;3325:12;3286:53;3391:2;3386;3382;3378:11;3373:2;3365:6;3361:15;3348:46;3436:1;3431:2;3426;3418:6;3414:15;3410:24;3403:35;3457:6;3447:16;;;;;;;2480:989;;;;;:::o;3474:347::-;3525:8;3535:6;3589:3;3582:4;3574:6;3570:17;3566:27;3556:55;;3607:1;3604;3597:12;3556:55;-1:-1:-1;3630:20:1;;3673:18;3662:30;;3659:50;;;3705:1;3702;3695:12;3659:50;3742:4;3734:6;3730:17;3718:29;;3794:3;3787:4;3778:6;3770;3766:19;3762:30;3759:39;3756:59;;;3811:1;3808;3801:12;3756:59;3474:347;;;;;:::o;3826:545::-;3914:6;3922;3930;3938;3991:2;3979:9;3970:7;3966:23;3962:32;3959:52;;;4007:1;4004;3997:12;3959:52;4043:9;4030:23;4020:33;;4100:2;4089:9;4085:18;4072:32;4062:42;;4155:2;4144:9;4140:18;4127:32;4182:18;4174:6;4171:30;4168:50;;;4214:1;4211;4204:12;4168:50;4253:58;4303:7;4294:6;4283:9;4279:22;4253:58;:::i;:::-;3826:545;;;;-1:-1:-1;4330:8:1;-1:-1:-1;;;;3826:545:1:o;4376:695::-;4482:6;4490;4498;4506;4514;4522;4575:3;4563:9;4554:7;4550:23;4546:33;4543:53;;;4592:1;4589;4582:12;4543:53;4615:29;4634:9;4615:29;:::i;:::-;4605:39;;4663:38;4697:2;4686:9;4682:18;4663:38;:::i;:::-;4653:48;;4748:2;4737:9;4733:18;4720:32;4710:42;;4799:2;4788:9;4784:18;4771:32;4761:42;;4854:3;4843:9;4839:19;4826:33;4882:18;4874:6;4871:30;4868:50;;;4914:1;4911;4904:12;4868:50;4953:58;5003:7;4994:6;4983:9;4979:22;4953:58;:::i;:::-;4376:695;;;;-1:-1:-1;4376:695:1;;-1:-1:-1;4376:695:1;;5030:8;;4376:695;-1:-1:-1;;;4376:695:1:o;5076:322::-;5153:6;5161;5169;5222:2;5210:9;5201:7;5197:23;5193:32;5190:52;;;5238:1;5235;5228:12;5190:52;5261:29;5280:9;5261:29;:::i;:::-;5251:39;5337:2;5322:18;;5309:32;;-1:-1:-1;5388:2:1;5373:18;;;5360:32;;5076:322;-1:-1:-1;;;5076:322:1:o;5585:260::-;5653:6;5661;5714:2;5702:9;5693:7;5689:23;5685:32;5682:52;;;5730:1;5727;5720:12;5682:52;5753:29;5772:9;5753:29;:::i;:::-;5743:39;;5801:38;5835:2;5824:9;5820:18;5801:38;:::i;:::-;5791:48;;5585:260;;;;;:::o;5850:683::-;5945:6;5953;5961;6014:2;6002:9;5993:7;5989:23;5985:32;5982:52;;;6030:1;6027;6020:12;5982:52;6066:9;6053:23;6043:33;;6127:2;6116:9;6112:18;6099:32;6150:18;6191:2;6183:6;6180:14;6177:34;;;6207:1;6204;6197:12;6177:34;6245:6;6234:9;6230:22;6220:32;;6290:7;6283:4;6279:2;6275:13;6271:27;6261:55;;6312:1;6309;6302:12;6261:55;6352:2;6339:16;6378:2;6370:6;6367:14;6364:34;;;6394:1;6391;6384:12;6364:34;6447:7;6442:2;6432:6;6429:1;6425:14;6421:2;6417:23;6413:32;6410:45;6407:65;;;6468:1;6465;6458:12;6407:65;6499:2;6495;6491:11;6481:21;;6521:6;6511:16;;;;;5850:683;;;;;:::o;6538:180::-;6597:6;6650:2;6638:9;6629:7;6625:23;6621:32;6618:52;;;6666:1;6663;6656:12;6618:52;-1:-1:-1;6689:23:1;;6538:180;-1:-1:-1;6538:180:1:o;6723:380::-;6802:1;6798:12;;;;6845;;;6866:61;;6920:4;6912:6;6908:17;6898:27;;6866:61;6973:2;6965:6;6962:14;6942:18;6939:38;6936:161;;;7019:10;7014:3;7010:20;7007:1;7000:31;7054:4;7051:1;7044:15;7082:4;7079:1;7072:15;6936:161;;6723:380;;;:::o;7517:127::-;7578:10;7573:3;7569:20;7566:1;7559:31;7609:4;7606:1;7599:15;7633:4;7630:1;7623:15;7649:128;7689:3;7720:1;7716:6;7713:1;7710:13;7707:39;;;7726:18;;:::i;:::-;-1:-1:-1;7762:9:1;;7649:128::o;7782:356::-;7984:2;7966:21;;;8003:18;;;7996:30;8062:34;8057:2;8042:18;;8035:62;8129:2;8114:18;;7782:356::o;9640:135::-;9679:3;-1:-1:-1;;9700:17:1;;9697:43;;;9720:18;;:::i;:::-;-1:-1:-1;9767:1:1;9756:13;;9640:135::o;10144:127::-;10205:10;10200:3;10196:20;10193:1;10186:31;10236:4;10233:1;10226:15;10260:4;10257:1;10250:15

Swarm Source

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