Contract 0x722fc4daabfeaff81b97894fc623f91814a1bf68

Contract Overview

Gnosis: mGNO Token
Balance:
0 xDAI

xDAI Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x01fdb3a4f9b201c15ea4a5fc0903eb43ca4b5a60d1f839631c7f7cf886bd850dApprove282667652023-06-03 9:57:457 hrs 49 mins ago0x5697ce38fce437fb0510839047cbe00174923bb2 IN  Gnosis: mGNO Token0 xDAI0.000076824
0xf8f8f7ff7d3c9c353c716051bc9f541fa8aaa034218964e44e6472b5cfc8b66cTransfer282540472023-06-02 15:28:101 day 2 hrs ago0x0c3bca67f311df655ed8948f836e86efa1fab852 IN  Gnosis: mGNO Token0 xDAI0.000246100808
0xed75c3365f15325d779ee21332ffa0e1bd862f8c03411dd47a5d1e2cc65a5b76Approve282386902023-06-01 17:10:002 days 37 mins ago0xdb03b65bc09c3f0c8b0dcaf12eda57e5946c1838 IN  Gnosis: mGNO Token0 xDAI0.000076788
0x14c329d49916de948dee1185a8130064188b538a92253fcfeb5a6484e9a48044Approve281208352023-05-25 11:25:059 days 6 hrs ago0xe95be2366862b39819c74be94996e6c6cf262139 IN  Gnosis: mGNO Token0 xDAI0.000076842
0xa626c7fb50a6ba4973efa595d9de82b4c5f6ec1a89bf45e6ec056260e9f67130Approve280690862023-05-22 8:34:1012 days 9 hrs ago0x7822159ee394d14745cde63a706f965fb73c7ac8 IN  Gnosis: mGNO Token0 xDAI0.000627187848
0xa369d9edafb1eefe6b696400621b3b6604fa38f045cde682184d4d22f8025855Approve279771802023-05-16 19:38:5017 days 22 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  Gnosis: mGNO Token0 xDAI0.000210326884
0xdbcad7645d2b7d2bb3b200220816a9bc02cb5b1bcbe354efada8b704115e6abcApprove279769862023-05-16 19:22:0017 days 22 hrs ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  Gnosis: mGNO Token0 xDAI0.000164364715
0x59eee4e1a66c8332e83594e606d01e07128d7e41301c977fadf5aa782134e1a9Transfer And Cal...279759812023-05-16 17:54:3517 days 23 hrs ago0x6926dbc198a99a47375d085dbc980c4312214374 IN  Gnosis: mGNO Token0 xDAI0.0002578775
0x2a4b80637919dd2fd5d20c8765a7516fb22846b070bc047e9cd8e78a2f650350Transfer And Cal...279759592023-05-16 17:52:3017 days 23 hrs ago0x6926dbc198a99a47375d085dbc980c4312214374 IN  Gnosis: mGNO Token0 xDAI0.000247445
0xa33a48c8894c5d88d3698e93b3cbbf4b47c679b35b9683f3c7024226350db465Approve279757162023-05-16 17:31:0018 days 16 mins ago0x9f620ccbcb854f15575bcefffc41dac3173f2b48 IN  Gnosis: mGNO Token0 xDAI0.000187748561
0x703abe48fe939745c7f19a143599b4ca95f8649ea1ba63ee9945c31256f8783aApprove279408732023-05-14 15:00:4520 days 2 hrs ago0xcaa74debeae8b73de8a894e16ceef7625c69c7ff IN  Gnosis: mGNO Token0 xDAI0.00025608
0x132eb5d228c584f783a82d99fb23d7ea311fb5652f3d1dad141d430e2f7b5e63Transfer And Cal...278366652023-05-08 7:48:5026 days 9 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.0001617645
0xf46fb66b404d99dd475e3a9f8668af0fc13a643b08540d73b36f8f32065dc890Transfer And Cal...278364222023-05-08 7:27:3526 days 10 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.000255749716
0x9d5523cf424168caf6f95b42b35852b6a04e5de8f9c63d2bdfc239664aae3ba5Transfer And Cal...277829512023-05-05 1:48:0529 days 15 hrs ago0xf564ae3860106514d6dee5c480bb884f298df6f6 IN  Gnosis: mGNO Token0 xDAI0.0003088674
0xccf82dc406d5865943f9ced798327d4096444cca82c27b310bd6c05c840aa4d3Transfer And Cal...277258502023-05-01 15:09:4033 days 2 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.000323529
0xd085178675d7a0c10ef577f6ad599ef40e8ab6da692acc88b4d665cfdbab3f15Transfer And Cal...277238842023-05-01 12:18:2033 days 5 hrs ago0x8be77092bb7cb74c8c584d11f1d7250c2fafd537 IN  Gnosis: mGNO Token0 xDAI0.000307024501
0x47585cb8751906617a05f6a7e646c46115e2842395deab5907771f72dc11351fTransfer And Cal...276833492023-04-29 1:37:4535 days 16 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.0003228354
0x5e426b752a705dca8c1ffbe5b784d1acf8129bfaa5b79e68b2cf21bece507d3cTransfer And Cal...276806892023-04-28 21:47:2035 days 20 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.000323529
0x434cfdf88117405a3091ce7b2d578b3618c45b88881b05ad75b395a0160816bdTransfer And Cal...276729842023-04-28 10:37:0536 days 7 hrs ago0x86b888563e448af5554ca200189eeef65697ea01 IN  Gnosis: mGNO Token0 xDAI0.000323493
0xad066e78e7abba783153718aa280f3114324c1c8c7782de37f9ccbd7c38dbf33Transfer And Cal...276547412023-04-27 7:55:2037 days 9 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.00031318421
0x494ab9fba023ad5dcce81e0c167f91702c0e3cec5bdb0f02cc5398c889d1b4e9Transfer And Cal...276455402023-04-26 18:33:4037 days 23 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.000193838572
0xaa5849adc42230396117b9fc81155cd20a79b661863d9ee0f8c0a3b9b43d1aacTransfer And Cal...276190772023-04-25 4:03:1039 days 13 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.0001617285
0x32261cce87fa3dbf4d67564ba7492d94134ffd7c3665f17a9f55ab25e5a98d1eTransfer And Cal...276189702023-04-25 3:53:4539 days 13 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.00031468941
0x4ce3a12d5dca62cd783872fceea45ffa56ec38d1c17845ae4dba468aac8916f7Transfer And Cal...276048662023-04-24 7:17:0040 days 10 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.000304408436
0x3af146ca8a1b6ec974d2c52a62381e3454896372cd65cbf9a06cc3fd7e34dff7Transfer And Cal...275815832023-04-22 21:09:5041 days 20 hrs ago0xbc8f162d0b906d5614ff6b91fcb25c7f746a96ee IN  Gnosis: mGNO Token0 xDAI0.00019372032
[ Download CSV Export 

OVERVIEW

Gnosis Chain is one of the first Ethereum sidechains and has stayed true to its values.

Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x835cadb03c663e5cb966cda463f5de4a130d055f06ad426383832e21abc2f90a194687792021-12-08 5:56:55542 days 11 hrs ago Gnosis: mGNO Token  Contract Creation0 xDAI
[ Download CSV Export 
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
SBCTokenProxy

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 5000000 runs

Other Settings:
default evmVersion, Unlicense license
File 1 of 14 : SBCTokenProxy.sol:SBCTokenProxy
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

import "./utils/EIP1967Proxy.sol";
import "contracts/SBCToken.sol";

/**
 * @title SBCTokenProxy
 * @dev Upgradeable version of the underlying SBCToken.
 */
contract SBCTokenProxy is EIP1967Proxy {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(
        address _admin,
        string memory name,
        string memory symbol
    ) {
        _setAdmin(_admin);
        _setImplementation(address(new SBCToken()));
        _name = name;
        _symbol = symbol;
    }
}

File 2 of 14 : PausableEIP1967Admin.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

import "contracts/security/Pausable.sol";
import "contracts/EIP1967Admin.sol";

/**
 * @title PausableEIP1967Admin
 * @dev Pausable contract, controlled by the current EIP1967 proxy owner.
 */
contract PausableEIP1967Admin is EIP1967Admin, Pausable {
    function pause() external onlyAdmin {
        _pause();
    }

    function unpause() external onlyAdmin {
        _unpause();
    }
}

File 3 of 14 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "contracts/token/ERC20/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 4 of 14 : EIP1967Proxy.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

import "contracts/EIP1967Admin.sol";

/**
 * @title EIP1967Proxy
 * @dev Upgradeable proxy pattern implementation according to minimalistic EIP1967.
 */
contract EIP1967Proxy is EIP1967Admin {
    // EIP 1967
    // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)
    uint256 internal constant EIP1967_IMPLEMENTATION_STORAGE =
        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    event Upgraded(address indexed implementation);
    event AdminChanged(address previousAdmin, address newAdmin);

    function admin() public view returns (address) {
        return _admin();
    }

    function implementation() public view returns (address res) {
        assembly {
            res := sload(EIP1967_IMPLEMENTATION_STORAGE)
        }
    }

    function setAdmin(address _admin) external onlyAdmin {
        _setAdmin(_admin);
    }

    function upgradeTo(address _implementation) external onlyAdmin {
        _setImplementation(_implementation);
    }

    /**
     * @dev Fallback function allowing to perform a delegatecall to the given implementation.
     * This function will return whatever the implementation call returns
     */
    fallback() external payable {
        address impl = implementation();
        require(impl != address(0));
        assembly {
            // Copy msg.data. We take full control of memory in this inline assembly
            // block because it will not return to Solidity code. We overwrite the
            // Solidity scratch pad at memory position 0.
            calldatacopy(0, 0, calldatasize())

            // Call the implementation.
            // out and outsize are 0 because we don't know the size yet.
            let result := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)

            // Copy the returned data.
            returndatacopy(0, 0, returndatasize())

            switch result
            // delegatecall returns 0 on error.
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    /**
     * @dev Internal function for transfer current admin rights to a different account.
     * @param _admin address of the new administrator.
     */
    function _setAdmin(address _admin) internal {
        address previousAdmin = admin();
        require(_admin != address(0));
        require(previousAdmin != _admin);
        assembly {
            sstore(EIP1967_ADMIN_STORAGE, _admin)
        }
        emit AdminChanged(previousAdmin, _admin);
    }

    /**
     * @dev Internal function for setting a new implementation address.
     * @param _implementation address of the new implementation contract.
     */
    function _setImplementation(address _implementation) internal {
        require(_implementation != address(0));
        require(implementation() != _implementation);
        assembly {
            sstore(EIP1967_IMPLEMENTATION_STORAGE, _implementation)
        }
        emit Upgraded(_implementation);
    }
}

File 5 of 14 : EIP1967Admin.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

/**
 * @title EIP1967Admin
 * @dev Upgradeable proxy pattern implementation according to minimalistic EIP1967.
 */
contract EIP1967Admin {
    // EIP 1967
    // bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)
    uint256 internal constant EIP1967_ADMIN_STORAGE =
        0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    modifier onlyAdmin() {
        require(msg.sender == _admin());
        _;
    }

    function _admin() internal view returns (address res) {
        assembly {
            res := sload(EIP1967_ADMIN_STORAGE)
        }
    }
}

File 6 of 14 : Claimable.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

import "contracts/token/ERC20/IERC20.sol";

/**
 * @title Claimable
 * @dev Implementation of the claiming utils that can be useful for withdrawing accidentally sent tokens.
 */
contract Claimable {
    /**
     * @dev Withdraws the erc20 tokens or native coins from this contract.
     * @param _token address of the claimed token or address(0) for native coins.
     * @param _to address of the tokens/coins receiver.
     */
    function _claimValues(address _token, address _to) internal {
        if (_token == address(0)) {
            _claimNativeCoins(_to);
        } else {
            _claimERC20Tokens(_token, _to);
        }
    }

    /**
     * @dev Internal function for withdrawing all native coins from the contract.
     * @param _to address of the coins receiver.
     */
    function _claimNativeCoins(address _to) internal {
        uint256 balance = address(this).balance;
        payable(_to).transfer(balance);
    }

    /**
     * @dev Internal function for withdrawing all tokens of some particular ERC20 contract from this contract.
     * @param _token address of the claimed ERC20 token.
     * @param _to address of the tokens receiver.
     */
    function _claimERC20Tokens(address _token, address _to) internal {
        uint256 balance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, balance);
    }
}

File 7 of 14 : IERC677Receiver.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

interface IERC677Receiver {
    function onTokenTransfer(
        address from,
        uint256 value,
        bytes calldata data
    ) external returns (bool);
}

File 8 of 14 : IERC677.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

import "contracts/token/ERC20/IERC20.sol";

interface IERC677 is IERC20 {
    function transferAndCall(
        address to,
        uint256 amount,
        bytes calldata data
    ) external;
}

File 9 of 14 : SBCToken.sol
// SPDX-License-Identifier: CC0-1.0

pragma solidity 0.8.9;

import "contracts/token/ERC20/extensions/ERC20Pausable.sol";
import "./utils/Claimable.sol";
import "./utils/PausableEIP1967Admin.sol";
import "./interfaces/IERC677.sol";
import "./interfaces/IERC677Receiver.sol";

/**
 * @title SBCToken
 * @dev Wrapped token used for depositing into SBC.
 */
contract SBCToken is IERC677, ERC20Pausable, PausableEIP1967Admin, Claimable {
    address private _minter;

    constructor() ERC20("", "") {}

    /**
     * @dev Initialization setter for the minter address.
     * Only admin can call this method.
     * @param minter address of the SBCWrapper contract.
     */
    function setMinter(address minter) external onlyAdmin {
        require(_minter == address(0), "SBCToken: minter already set");
        _minter = minter;
    }

    /**
     * @dev Mints new tokens.
     * Only configured minter is allowed to mint tokens, which should be a SBCWrapper contract.
     * @param _to tokens receiver.
     * @param _amount amount of tokens to mint.
     */
    function mint(address _to, uint256 _amount) external {
        require(_msgSender() == _minter, "SBCToken: not a minter");
        _mint(_to, _amount);
    }

    /**
     * @dev Implements the ERC677 transferAndCall standard.
     * Executes a regular transfer, but calls the receiver's function to handle them in the same transaction.
     * @param _to tokens receiver.
     * @param _amount amount of sent tokens.
     * @param _data extra data to pass to the callback function.
     */
    function transferAndCall(
        address _to,
        uint256 _amount,
        bytes calldata _data
    ) external override {
        address sender = _msgSender();
        _transfer(sender, _to, _amount);
        require(IERC677Receiver(_to).onTokenTransfer(sender, _amount, _data), "SBCToken: ERC677 callback failed");
    }

    /**
     * @dev Allows to transfer any locked token from this contract.
     * Only admin can call this method.
     * @param _token address of the token, if it is not provided (0x00..00), native coins will be transferred.
     * @param _to address that will receive the locked tokens from this contract.
     */
    function claimTokens(address _token, address _to) external onlyAdmin {
        _claimValues(_token, _to);
    }
}

File 10 of 14 : 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;
    }
}

File 11 of 14 : ERC20Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "contracts/token/ERC20.sol";
import "../../../security/Pausable.sol";

/**
 * @dev ERC20 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 */
abstract contract ERC20Pausable is ERC20, Pausable {
    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        require(!paused(), "ERC20Pausable: token transfer while paused");
    }
}

File 12 of 14 : 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 13 of 14 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "contracts/token/ERC20.sol";
import "contracts/extensions/IERC20Metadata.sol";
import "contracts/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 14 of 14 : Pausable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_admin","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"res","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_admin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200212b3803806200212b83398101604081905262000034916200037b565b6200003f83620000aa565b620000756040516200005190620001fa565b604051809103906000f0801580156200006e573d6000803e3d6000fd5b5062000146565b81516200008a90600390602085019062000208565b508051620000a090600490602084019062000208565b5050505062000442565b6000620000b6620001db565b90506001600160a01b038216620000cc57600080fd5b816001600160a01b0316816001600160a01b03161415620000ec57600080fd5b600080516020620020eb833981519152829055604080516001600160a01b038084168252841660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6001600160a01b0381166200015a57600080fd5b6001600160a01b0381166200017c6000805160206200210b8339815191525490565b6001600160a01b031614156200019157600080fd5b6000805160206200210b8339815191528190556040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000620001f5600080516020620020eb8339815191525490565b905090565b61180c80620008df83390190565b828054620002169062000405565b90600052602060002090601f0160209004810192826200023a576000855562000285565b82601f106200025557805160ff191683800117855562000285565b8280016001018555821562000285579182015b828111156200028557825182559160200191906001019062000268565b506200029392915062000297565b5090565b5b8082111562000293576000815560010162000298565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620002d657600080fd5b81516001600160401b0380821115620002f357620002f3620002ae565b604051601f8301601f19908116603f011681019082821181831017156200031e576200031e620002ae565b816040528381526020925086838588010111156200033b57600080fd5b600091505b838210156200035f578582018301518183018401529082019062000340565b83821115620003715760008385830101525b9695505050505050565b6000806000606084860312156200039157600080fd5b83516001600160a01b0381168114620003a957600080fd5b60208501519093506001600160401b0380821115620003c757600080fd5b620003d587838801620002c4565b93506040860151915080821115620003ec57600080fd5b50620003fb86828701620002c4565b9150509250925092565b600181811c908216806200041a57607f821691505b602082108114156200043c57634e487b7160e01b600052602260045260246000fd5b50919050565b61048d80620004526000396000f3fe60806040526004361061003f5760003560e01c80633659cfe6146100af5780635c60da1b146100d1578063704b6c021461012a578063f851a4401461014a575b60006100697f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff811661008b57600080fd5b3660008037600080366000845af43d6000803e8080156100aa573d6000f35b3d6000fd5b3480156100bb57600080fd5b506100cf6100ca36600461041a565b61015f565b005b3480156100dd57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b34801561013657600080fd5b506100cf61014536600461041a565b6101c4565b34801561015657600080fd5b50610101610226565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101b857600080fd5b6101c181610255565b50565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461021d57600080fd5b6101c18161033d565b60006102507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905090565b73ffffffffffffffffffffffffffffffffffffffff811661027557600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166102b47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b73ffffffffffffffffffffffffffffffffffffffff1614156102d557600080fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6000610347610226565b905073ffffffffffffffffffffffffffffffffffffffff821661036957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156103a257600080fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038290556040805173ffffffffffffffffffffffffffffffffffffffff8084168252841660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b60006020828403121561042c57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461045057600080fd5b939250505056fea264697066735822122047bcb18fb500c630ad57f777a1d7c247509f496b4c4cf9a78a58c569b97fe1d764736f6c6343000809003360806040523480156200001157600080fd5b506040805160208082018084526000808452845192830190945292815281519192909162000042916003916200006b565b508051620000589060049060208401906200006b565b50506005805460ff19169055506200014e565b828054620000799062000111565b90600052602060002090601f0160209004810192826200009d5760008555620000e8565b82601f10620000b857805160ff1916838001178555620000e8565b82800160010185558215620000e8579182015b82811115620000e8578251825591602001919060010190620000cb565b50620000f6929150620000fa565b5090565b5b80821115620000f65760008155600101620000fb565b600181811c908216806200012657607f821691505b602082108114156200014857634e487b7160e01b600052602260045260246000fd5b50919050565b6116ae806200015e6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80635c975abb116100b257806395d89b4111610081578063a9059cbb11610066578063a9059cbb1461026a578063dd62ed3e1461027d578063fca3b5aa146102c357600080fd5b806395d89b411461024f578063a457c2d71461025757600080fd5b80635c975abb146101f357806369ffa08a146101fe57806370a08231146102115780638456cb591461024757600080fd5b8063313ce567116101095780633f4ba83a116100ee5780633f4ba83a146101c35780634000aea0146101cd57806340c10f19146101e057600080fd5b8063313ce567146101a157806339509351146101b057600080fd5b806306fdde031461013b578063095ea7b31461015957806318160ddd1461017c57806323b872dd1461018e575b600080fd5b6101436102d6565b604051610150919061135b565b60405180910390f35b61016c6101673660046113f7565b610368565b6040519015158152602001610150565b6002545b604051908152602001610150565b61016c61019c366004611421565b61037e565b60405160128152602001610150565b61016c6101be3660046113f7565b610469565b6101cb6104b2565b005b6101cb6101db36600461145d565b610515565b6101cb6101ee3660046113f7565b610638565b60055460ff1661016c565b6101cb61020c3660046114e4565b6106e2565b61018061021f366004611517565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6101cb610745565b6101436107a6565b61016c6102653660046113f7565b6107b5565b61016c6102783660046113f7565b61088d565b61018061028b3660046114e4565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6101cb6102d1366004611517565b61089a565b6060600380546102e590611539565b80601f016020809104026020016040519081016040528092919081815260200182805461031190611539565b801561035e5780601f106103335761010080835404028352916020019161035e565b820191906000526020600020905b81548152906001019060200180831161034157829003601f168201915b5050505050905090565b60006103753384846109c4565b50600192915050565b600061038b848484610b77565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915290205482811015610451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61045e85338584036109c4565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915281205490916103759185906104ad90869061158d565b6109c4565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461050b57600080fd5b610513610e37565b565b33610521818686610b77565b6040517fa4c0ed3600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86169063a4c0ed36906105799084908890889088906004016115cc565b602060405180830381600087803b15801561059357600080fd5b505af11580156105a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cb919061163d565b610631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f534243546f6b656e3a204552433637372063616c6c6261636b206661696c65646044820152606401610448565b5050505050565b600554610100900473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f534243546f6b656e3a206e6f742061206d696e746572000000000000000000006044820152606401610448565b6106de8282610f18565b5050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461073b57600080fd5b6106de8282611044565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079e57600080fd5b610513611072565b6060600480546102e590611539565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205482811015610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610448565b61088333858584036109c4565b5060019392505050565b6000610375338484610b77565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108f357600080fd5b600554610100900473ffffffffffffffffffffffffffffffffffffffff1615610978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f534243546f6b656e3a206d696e74657220616c726561647920736574000000006044820152606401610448565b6005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff8316610a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610448565b73ffffffffffffffffffffffffffffffffffffffff8216610b09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610448565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610c1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610448565b73ffffffffffffffffffffffffffffffffffffffff8216610cbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610448565b610cc8838383611132565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610448565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610dc290849061158d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e2891815260200190565b60405180910390a35b50505050565b60055460ff16610ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610448565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff8216610f95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610448565b610fa160008383611132565b8060026000828254610fb3919061158d565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610fed90849061158d565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611068576106de816111ca565b6106de828261120f565b60055460ff16156110df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610448565b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610eee3390565b60055460ff16156111c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f45524332305061757361626c653a20746f6b656e207472616e7366657220776860448201527f696c6520706175736564000000000000000000000000000000000000000000006064820152608401610448565b505050565b604051479073ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f193505050501580156111c5573d6000803e3d6000fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8416906370a082319060240160206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af919061165f565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018390529192509084169063a9059cbb90604401602060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e31919061163d565b600060208083528351808285015260005b818110156113885785810183015185820160400152820161136c565b8181111561139a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146113f257600080fd5b919050565b6000806040838503121561140a57600080fd5b611413836113ce565b946020939093013593505050565b60008060006060848603121561143657600080fd5b61143f846113ce565b925061144d602085016113ce565b9150604084013590509250925092565b6000806000806060858703121561147357600080fd5b61147c856113ce565b935060208501359250604085013567ffffffffffffffff808211156114a057600080fd5b818701915087601f8301126114b457600080fd5b8135818111156114c357600080fd5b8860208285010111156114d557600080fd5b95989497505060200194505050565b600080604083850312156114f757600080fd5b611500836113ce565b915061150e602084016113ce565b90509250929050565b60006020828403121561152957600080fd5b611532826113ce565b9392505050565b600181811c9082168061154d57607f821691505b60208210811415611587577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600082198211156115c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01601019392505050565b60006020828403121561164f57600080fd5b8151801515811461153257600080fd5b60006020828403121561167157600080fd5b505191905056fea26469706673582212201618180623d92c088e76ef6b24012410a2adc0f7b1d7bbb84ef43d2648f3720e64736f6c63430008090033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc0000000000000000000000007c6ec14c8da5bf4f67c5021f4d41a1c6c14fb98f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000046d474e4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046d474e4f00000000000000000000000000000000000000000000000000000000

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

0000000000000000000000007c6ec14c8da5bf4f67c5021f4d41a1c6c14fb98f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000046d474e4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046d474e4f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _admin (address): 0x7c6ec14c8da5bf4f67c5021f4d41a1c6c14fb98f
Arg [1] : name (string): mGNO
Arg [2] : symbol (string): mGNO

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000007c6ec14c8da5bf4f67c5021f4d41a1c6c14fb98f
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [4] : 6d474e4f00000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 6d474e4f00000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

218:498:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1283:12:12;1298:16;794:30;788:37;;688:153;1298:16;1283:31;-1:-1:-1;1332:18:12;;;1324:27;;;;;;1629:14;1626:1;1623;1610:34;1833:1;1830;1814:14;1811:1;1805:4;1798:5;1785:50;1909:16;1906:1;1903;1888:38;1947:6;2014:66;;;;2129:16;2126:1;2119:27;2014:66;2049:16;2046:1;2039:27;940:115;;;;;;;;;;-1:-1:-1;940:115:12;;;;;:::i;:::-;;:::i;:::-;;688:153;;;;;;;;;;-1:-1:-1;794:30:12;788:37;688:153;;;504:42:14;492:55;;;474:74;;462:2;447:18;688:153:12;;;;;;;847:87;;;;;;;;;;-1:-1:-1;847:87:12;;;;;:::i;:::-;;:::i;603:79::-;;;;;;;;;;;;;:::i;940:115::-;599:21:0;593:28;452:22;;:10;:22;;;444:31;;;;;;1013:35:12::1;1032:15;1013:18;:35::i;:::-;940:115:::0;:::o;847:87::-;599:21:0;593:28;452:22;;:10;:22;;;444:31;;;;;;910:17:12::1;920:6;910:9;:17::i;603:79::-:0;641:7;667:8;599:21:0;593:28;;499:138;667:8:12;660:15;;603:79;:::o;2811:308::-;2891:29;;;2883:38;;;;;;2959:15;2939:35;;:16;794:30;788:37;;688:153;2939:16;:35;;;;2931:44;;;;;;3015:30;3008:55;;;3087:25;;;;;;;;;;;2811:308;:::o;2341:302::-;2395:21;2419:7;:5;:7::i;:::-;2395:31;-1:-1:-1;2444:20:12;;;2436:29;;;;;;2500:6;2483:23;;:13;:23;;;;2475:32;;;;;;2547:21;2540:37;;;2601:35;;;743:42:14;812:15;;;794:34;;864:15;;859:2;844:18;;837:43;2601:35:12;;706:18:14;2601:35:12;;;;;;;2385:258;2341:302;:::o;14:309:14:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:14:o

Swarm Source

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