Contract 0x2d2ee2516c6209349067df69bfbfa015d5b51682

Contract Overview

Balance:
0 MATIC
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x9c523899dde2881ff2edeac85466418854d3ae9874761848b2df15d5106232cfApprove226084862021-12-13 11:58:46533 days 15 hrs ago0x60245a73be7664ead1c5cfcc53f34233dd69f82d IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00152664633
0x5149a494b7a9c45d1c69bc59cc11dcc3bb4e628ba94acfbc682c8924442f2213Transfers219772772021-11-27 8:06:45549 days 19 hrs ago0x19897154cd9858bdb036f6f7e4a3049597f15061 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00016898154.1
0x9a7d29769f9474af64f595c41af4e5d86e0ac6e629e7fc6db39b1e55749fd68aTransfers219771892021-11-27 8:03:45549 days 19 hrs ago0x9ba5271fb97abbcdbd295470ab22bb987a1876e9 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00470362254.1
0x95ea40fc0581fcc1a6c27ac68f35f64625a4374a1157e6356641d089915ddb1cTransfers219766052021-11-27 7:43:41549 days 19 hrs ago0x9b3a7d2e8a6390ebeb80856578e01f08d7897a94 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xa037ba7602ef608ca079aebaa322b602502d3f862f96473f732fa5ca3c5eccaaTransfers219763432021-11-27 7:34:41549 days 19 hrs ago0x1954bd03c659774c99f0418ab4d6b1fd39067ca6 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xc7ef9909ccabf5ed0187b2327584449b0695429c622add7148cd63bbc19b0467Transfers219763232021-11-27 7:34:01549 days 19 hrs ago0xfee6527e2193c5cadd618bea592cc299c1739aea IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x2743038decfe49222402c76c8441ac6fe5b71ab8e799989dd5e5f9b2a711682bTransfers219763052021-11-27 7:33:21549 days 19 hrs ago0x5ce747b10729d2991c94239d1a17ba5255d2ea03 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x9725e9a938cc0b3b42f0d7298e0b5f71977cb89754c8db94b29b2c817ceebc64Transfers219762852021-11-27 7:32:41549 days 20 hrs ago0x88e61fb558d9a1d1414db2869d70ea2bf73e0ed9 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x00fada4303beea2deb672890b41da1babfd10be34b817433f7070901d70a2e2cTransfers219762652021-11-27 7:32:01549 days 20 hrs ago0x074c3e57ccf4160ae3e85470419aea31282d7f6e IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x515c84778cbee9492fd8df53c983184d962098985a3b8590d69cd015f1267c31Transfers219762472021-11-27 7:31:21549 days 20 hrs ago0x5de8e83d24f5b2d3faa6d58e7c56670c9498bc15 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x6a6988600399fa2cd57cea39f29f293814937649ebd4f6b9ea9cbe4600d028e2Transfers219762272021-11-27 7:30:41549 days 20 hrs ago0x37b9f035c05164fb0c447184f5c6d0b0647a9c48 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xc625ccd9d2bf30ad61375a667095dfd84bacdb33b2c4b8ad9c58fb773ba651e6Transfers219762072021-11-27 7:30:01549 days 20 hrs ago0xab3bc7896213f966963ceafc91c9c14f11a23d1b IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xe3ae830b9ea4fb5fcfa6e5353924774ea3c14d847b3a4d7d221f29800a04e5d7Transfers219761892021-11-27 7:29:21549 days 20 hrs ago0xa74dedf712c06a5af971ac6615bcf8fd18c66d7d IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xfdf19710ce160ec0a3048159a8af756250a8a332ba3c762e7102cd3b75b2787dTransfers219761692021-11-27 7:28:41549 days 20 hrs ago0xd896ce87241366643fe0b08fbfdde789fd8396c5 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x75bb7bcc2e26c5bbed099d53e92699a7f704ae89e48fe31a993b78019fc3e172Transfers219761492021-11-27 7:28:01549 days 20 hrs ago0x271cc49194224e0190ecaed17789fdc101f6405d IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x5408b352b458e4f1919d266f7130b397b78a3b4f8927238e2e56aa17b05ae141Transfers219761292021-11-27 7:27:21549 days 20 hrs ago0x36fac14cf980d8095417442d569d07be8c5a6b4a IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xbb7cee8f7c804f7151f14c640c7edb014a13beed97f869af15adba1d470d3358Transfers219761112021-11-27 7:26:41549 days 20 hrs ago0x6ef44f1bd85658324ba18a8817932033572b6df4 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x9040565910f5cb62d543aab2ad687cf9f8a4fd38b2c4ce6dd160234d821e7c0bTransfers219760912021-11-27 7:26:01549 days 20 hrs ago0x7053da7af3843729ccf10d1e35e3b80b0ac52d5b IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xae658dafc62b5369466b1cb35ece8ae0d00a948f2eef3809dcf90166f4c4f131Transfers219760712021-11-27 7:25:21549 days 20 hrs ago0xccbed3310b578ad781f8a6e0598d5c9cf94bedb0 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xbef06ce8fde02c3667b30dad9161002077aea342f361815d19fb809fbd435cddTransfers219760532021-11-27 7:24:41549 days 20 hrs ago0x1502c903fe7011d334b3bcac407b79c6a8cd4a32 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x65f0695cca0463821290eaf86585e09b8cd58078b11351d0743d81f0e4617a9aTransfers219760332021-11-27 7:24:01549 days 20 hrs ago0xa3ec1ad85c50afd5fb7bbda73ef1c7e6f88408f4 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xe9a584d0dc4bd905412505efbdbc54ac1ce971afb34437bf317942d64d890b2bTransfers219760132021-11-27 7:23:21549 days 20 hrs ago0xc601687e4e46a12a8cf26c39f1557c4a6760e3dc IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x2d42963a8c397cc902e88b55fe7093c8b5f2b02b08c04e63364c57b301cec2e7Transfers219759952021-11-27 7:22:41549 days 20 hrs ago0x73c8eb0677760550e0de183775a16881d3a0552d IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0x5133ccbfae127a0d85840cac62c01972da6e5863329e38f3120ffe2fae07702aTransfers219759752021-11-27 7:22:01549 days 20 hrs ago0x6dc7c23ddd6d5db6b2969c27eceded19d619193a IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
0xd1a72be8323a16fb53c47e4fc409f4ae57e7d0cfe102dac38a5018e99044f5f7Transfers219759552021-11-27 7:21:21549 days 20 hrs ago0x1b7e54a3780a79d82708d018ddec66a8b4e16b33 IN  0x2d2ee2516c6209349067df69bfbfa015d5b516820 MATIC0.00011209814.1
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x6894599adF4e42eA48D5EDbD0D509634Ba145B9f

Contract Name:
LmnToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 99999 runs

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


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

/**
 * The CmnToken contract does this and that...
 */
contract LmnToken is ERC20,Ownable{

	event TransferUpgrade(address from,address to,uint256 amount,string orderId);
    event Transfers(address[] addreses,uint256[] amounts,string orderId);
    
	

  constructor() ERC20("LMNTOKEN", "LMN") {
        _mint(msg.sender,10000000000 *10 ** 18);
    }

    function transfers (address[] memory addreses,uint256[] memory amounts,string memory orderId) public virtual returns(bool) {
        require (addreses.length == amounts.length,"The number of entries cannot match");
        address msgSender = _msgSender();
        for(uint256 i = 0; i < addreses.length; i++){
            _transfer(msgSender, addreses[i], amounts[i]);
        }
        emit Transfers(addreses,amounts,orderId);
        return true;
        
    }
    


    function transferUpgrade (address recipient, uint256 amount,string memory orderId) public virtual returns(bool)  {
    	_transfer(_msgSender(), recipient, amount);
    	emit TransferUpgrade(_msgSender(),recipient,amount,orderId);
        return true;
    }
    
    function transferFromUpgrade ( address sender,
        address recipient,
        uint256 amount,
        string memory orderId
    )  public virtual  returns(bool)  {
    	 _transfer(sender, recipient, amount);

        uint256 currentAllowance = allowance(sender,_msgSender());
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }
		emit TransferUpgrade(sender,recipient,amount,orderId);
        return true;
    }
    
}

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

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";

/**
 * @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 3 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

import "../IERC20.sol";

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"orderId","type":"string"}],"name":"TransferUpgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addreses","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"indexed":false,"internalType":"string","name":"orderId","type":"string"}],"name":"Transfers","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":[],"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":"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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"orderId","type":"string"}],"name":"transferFromUpgrade","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"orderId","type":"string"}],"name":"transferUpgrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addreses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"string","name":"orderId","type":"string"}],"name":"transfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051806040016040528060088152602001672626a72a27a5a2a760c11b815250604051806040016040528060038152602001622626a760e91b815250816003908051906020019062000067929190620001f6565b5080516200007d906004906020840190620001f6565b5050506200009a62000094620000b860201b60201c565b620000bc565b620000b2336b204fce5e3e250261100000006200010e565b62000300565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001695760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600260008282546200017d91906200029c565b90915550506001600160a01b03821660009081526020819052604081208054839290620001ac9084906200029c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200020490620002c3565b90600052602060002090601f01602090048101928262000228576000855562000273565b82601f106200024357805160ff191683800117855562000273565b8280016001018555821562000273579182015b828111156200027357825182559160200191906001019062000256565b506200028192915062000285565b5090565b5b8082111562000281576000815560010162000286565b60008219821115620002be57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680620002d857607f821691505b60208210811415620002fa57634e487b7160e01b600052602260045260246000fd5b50919050565b61159080620003106000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80638da5cb5b116100b2578063a9059cbb11610081578063dd62ed3e11610066578063dd62ed3e14610264578063f2fde38b146102aa578063fd76004b146102bd57600080fd5b8063a9059cbb1461023e578063bc31eb461461025157600080fd5b80638da5cb5b146101e8578063902a66421461021057806395d89b4114610223578063a457c2d71461022b57600080fd5b8063313ce567116100ee578063313ce56714610186578063395093511461019557806370a08231146101a8578063715018a6146101de57600080fd5b806306fdde0314610120578063095ea7b31461013e57806318160ddd1461016157806323b872dd14610173575b600080fd5b6101286102d0565b60405161013591906113a2565b60405180910390f35b61015161014c3660046110e8565b610362565b6040519015158152602001610135565b6002545b604051908152602001610135565b610151610181366004611044565b610378565b60405160128152602001610135565b6101516101a33660046110e8565b610463565b6101656101b6366004610fef565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101e66104ac565b005b60055460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610135565b61015161021e366004611080565b610539565b61012861063a565b6101516102393660046110e8565b610649565b61015161024c3660046110e8565b610721565b61015161025f366004611112565b61072e565b610165610272366004611011565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101e66102b8366004610fef565b610782565b6101516102cb366004611169565b6108b2565b6060600380546102df90611440565b80601f016020809104026020016040519081016040528092919081815260200182805461030b90611440565b80156103585780601f1061032d57610100808354040283529160200191610358565b820191906000526020600020905b81548152906001019060200180831161033b57829003601f168201915b5050505050905090565b600061036f3384846109e8565b50600192915050565b6000610385848484610b9b565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548281101561044b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61045885338584036109e8565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152812054909161036f9185906104a7908690611428565b6109e8565b60055473ffffffffffffffffffffffffffffffffffffffff16331461052d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610442565b6105376000610e4f565b565b6000610546858585610b9b565b60006105528633610272565b9050838110156105e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152608401610442565b6105f186338684036109e8565b7f10f5a92c55faf4ba3cd6cd9ae35227ee7b429572f7caf5dfcee484a6a1d8ecca8686868660405161062694939291906112b5565b60405180910390a150600195945050505050565b6060600480546102df90611440565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120548281101561070a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610442565b61071733858584036109e8565b5060019392505050565b600061036f338484610b9b565b600061073b338585610b9b565b7f10f5a92c55faf4ba3cd6cd9ae35227ee7b429572f7caf5dfcee484a6a1d8ecca3385858560405161077094939291906112b5565b60405180910390a15060019392505050565b60055473ffffffffffffffffffffffffffffffffffffffff163314610803576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610442565b73ffffffffffffffffffffffffffffffffffffffff81166108a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610442565b6108af81610e4f565b50565b60008251845114610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f546865206e756d626572206f6620656e74726965732063616e6e6f74206d617460448201527f63680000000000000000000000000000000000000000000000000000000000006064820152608401610442565b3360005b85518110156109a15761098f82878381518110610968576109686114fc565b6020026020010151878481518110610982576109826114fc565b6020026020010151610b9b565b8061099981611494565b915050610949565b507fbb5113e9d7ef9ad0ff9cf4fb97c6dc4bc0bb7a3d56fa521670356cd3cb98cd2d8585856040516109d5939291906112fe565b60405180910390a1506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610442565b73ffffffffffffffffffffffffffffffffffffffff8216610b2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610442565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610442565b73ffffffffffffffffffffffffffffffffffffffff8216610ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610442565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610442565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610ddb908490611428565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e4191815260200190565b60405180910390a350505050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610eea57600080fd5b919050565b600082601f830112610f0057600080fd5b81356020610f15610f1083611404565b6113b5565b80838252828201915082860187848660051b8901011115610f3557600080fd5b60005b85811015610f5457813584529284019290840190600101610f38565b5090979650505050505050565b600082601f830112610f7257600080fd5b813567ffffffffffffffff811115610f8c57610f8c61152b565b610fbd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016113b5565b818152846020838601011115610fd257600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561100157600080fd5b61100a82610ec6565b9392505050565b6000806040838503121561102457600080fd5b61102d83610ec6565b915061103b60208401610ec6565b90509250929050565b60008060006060848603121561105957600080fd5b61106284610ec6565b925061107060208501610ec6565b9150604084013590509250925092565b6000806000806080858703121561109657600080fd5b61109f85610ec6565b93506110ad60208601610ec6565b925060408501359150606085013567ffffffffffffffff8111156110d057600080fd5b6110dc87828801610f61565b91505092959194509250565b600080604083850312156110fb57600080fd5b61110483610ec6565b946020939093013593505050565b60008060006060848603121561112757600080fd5b61113084610ec6565b925060208401359150604084013567ffffffffffffffff81111561115357600080fd5b61115f86828701610f61565b9150509250925092565b60008060006060848603121561117e57600080fd5b833567ffffffffffffffff8082111561119657600080fd5b818601915086601f8301126111aa57600080fd5b813560206111ba610f1083611404565b8083825282820191508286018b848660051b89010111156111da57600080fd5b600096505b84871015611204576111f081610ec6565b8352600196909601959183019183016111df565b509750508701359250508082111561121b57600080fd5b61122787838801610eef565b9350604086013591508082111561123d57600080fd5b5061115f86828701610f61565b6000815180845260005b8181101561127057602081850181015186830182015201611254565b81811115611282576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526112f4608083018461124a565b9695505050505050565b606080825284519082018190526000906020906080840190828801845b8281101561134d57815173ffffffffffffffffffffffffffffffffffffffff168452928401929084019060010161131b565b5050508381038285015285518082528683019183019060005b8181101561138257835183529284019291840191600101611366565b50508481036040860152611396818761124a565b98975050505050505050565b60208152600061100a602083018461124a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156113fc576113fc61152b565b604052919050565b600067ffffffffffffffff82111561141e5761141e61152b565b5060051b60200190565b6000821982111561143b5761143b6114cd565b500190565b600181811c9082168061145457607f821691505b6020821081141561148e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156114c6576114c66114cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220d8d652e175518166937b41d82890eed866f828aae0a33dbb8807b378a6ab7f3064736f6c63430008070033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading