Contract 0x0f47ba9d9bde3442b42175e51d6a367928a1173b

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2e058a2d004eba74154c6e8bdc986f076af818e3b44a1f7cc411eb725a7355b9Transfer26976262022-10-03 19:15:1211 hrs 55 mins ago0x0d0707963952f2fba59dd06f2b425ace40b492fe IN  Zenlink: ZLK Token0 MOVR0.00005095
0x0db79c1d67e16a5f9b1e7e7738c45587ba23a81442ec380addbe5eddab05cd1aApprove26956062022-10-03 12:17:1218 hrs 53 mins ago0x8f91a830f387a79ec51f7ab6ab13dbb61d0e91a5 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x8eaa9d7825d89e7a9e7352e8e2df9574806d501dff852accbd152590ee574824Approve26937582022-10-03 5:55:001 day 1 hr ago0xd90825b15f70b64f81bab600f7f56fe3f86747ce IN  Zenlink: ZLK Token0 MOVR0.000138861
0x77967c282cc96356b41fdbd3e4f09f1d570c86cc386f47aea9d86b51c44cd4d0Approve26895032022-10-02 15:13:481 day 15 hrs ago0xe39bc99b80a9efd0f14f82aea1406eee93d456f2 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x335779ffe1afe94c470df6d1520de7a5c0d3a66142976f692da71f9d0a9a9b3eApprove26889722022-10-02 13:23:121 day 17 hrs ago0xc6ca7dedd3bccb12e58d361ce794a8ea3f81a1d5 IN  Zenlink: ZLK Token0 MOVR0.000092622
0xe710c07691a46ccde4dab5b860496319818739493c2b099347cd2d19f41fe4ffApprove26856392022-10-02 1:52:062 days 5 hrs ago0x156e3dfb146ff7baccffa23b8e83c2b4202949d7 IN  Zenlink: ZLK Token0 MOVR0.000138933
0xa10882e90fb0c9e73bf5acc8fc92c3c4c02197029055ed44c3257e2cd08e6282Approve26839512022-10-01 20:00:242 days 11 hrs ago0x5de0b2583c555894503faa3406d2f96d0b466289 IN  Zenlink: ZLK Token0 MOVR0.000075255375
0xddc25a67d7ea2a4402cd34550a64820e6bce0571ee6398dec528bc9c02885c3aApprove26818452022-10-01 12:41:182 days 18 hrs ago0x02d32f820f296cd4a4e8d7aae30ceec85c858737 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x476cf69114cb26c96eaea460823e9488385ce67a532b8a80f428740d1fb5e983Approve26809462022-10-01 9:36:242 days 21 hrs ago0x6a435bcd8ec93346d558b84cbb213a31da52222b IN  Zenlink: ZLK Token0 MOVR0.000138933
0x9702a4d9d34fdd76eb94e8512a4d1c9e3303ecce844c97a1a736240ae3b1305cApprove26757752022-09-30 15:46:243 days 15 hrs ago0x2dfec97f3221da9d9bccb6d2f706ad1b53411454 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x5741dd7bccb59a0751c8f517131dde214910938a0fab7492a1013bd092bb0d04Approve26727172022-09-30 5:16:244 days 1 hr ago0xa789023d50e20880d795810bdf64ee44b8a4d5d8 IN  Zenlink: ZLK Token0 MOVR0.000138933
0xdd784198f28ee56b9a38f5b32aa5129a3d6c83bf61ca6bece566cedabbb364ebTransfer26724522022-09-30 4:22:364 days 2 hrs ago0x397e171f20790d3a9518736ae7954a928e341160 IN  Zenlink: ZLK Token0 MOVR0.000077595
0x6dc6614932f62bdd433deef1586137492299639c00d897b0d71e46884a83fd5fTransfer26724492022-09-30 4:21:544 days 2 hrs ago0x0340193707fa5c812763b0407191156417ac05fb IN  Zenlink: ZLK Token0 MOVR0.000127315
0x8a3420d679a3af8bd963f85fdaea07363d21457338fc09050f0a8ff81f69f969Transfer26711332022-09-29 23:50:544 days 7 hrs ago0x2f2ac5944c316704f48ee93de5e8692a5f7ce8fd IN  Zenlink: ZLK Token0 MOVR0.00002485
0xb25d3fdc1c9a0eb74bf8300ef9bfa18d1d24b45c8c11a47eaacdcb8989fc0df0Approve26691702022-09-29 17:04:424 days 14 hrs ago0x7e884e885ac2ec3241fef4b560f7d1aaedcc0e50 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x49f3fe05a384b22c17afc9fb7ae27b562826c439ead6a5349dbc98128429712aTransfer26690982022-09-29 16:49:424 days 14 hrs ago0x63f95612136b6b00ef65a61f06eb5885d06d6bda IN  Zenlink: ZLK Token0 MOVR0.000062125
0x3e2252924914213a862130a2023931fa2130b50da06c4e24946d262000448c16Transfer26690822022-09-29 16:45:544 days 14 hrs ago0x63f95612136b6b00ef65a61f06eb5885d06d6bda IN  Zenlink: ZLK Token0 MOVR0.000127315
0xecef7a7e79c99dbfd6d4ae964f7188b695a8f7c85f166c2ddce21974af0a4927Approve26676822022-09-29 11:54:004 days 19 hrs ago0xbf9eafca2fa34769246e9f59ec54ebee2e77a7d0 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x2ca744043cf07085ba3af082559569dc424d12ec0f32a83e22e9432d09d6c61fTransfer26671802022-09-29 10:08:124 days 21 hrs ago0x0d0707963952f2fba59dd06f2b425ace40b492fe IN  Zenlink: ZLK Token0 MOVR0.00005095
0x6919f4db673d7b7ea915f9347271c3438e871601137a019203077ad2895634a0Approve26631652022-09-28 20:19:425 days 10 hrs ago0x0e304ad208cf62b90956ce200a5bfbd82e63e4cf IN  Zenlink: ZLK Token0 MOVR0.000046311
0x5073cae6739b6ab6794080fa4ad0f25edb1dd31b58ef5146dcf19b9f4848b595Approve26603702022-09-28 10:38:005 days 20 hrs ago0xd531b6a5ab7db8b5091876d8c26836e53e0d3cd5 IN  Zenlink: ZLK Token0 MOVR0.000138933
0x27e2d7d44780132caecab9da3b71c293d4c5fbd6131a650e599a6ef2b6af1038Approve26577432022-09-28 1:32:246 days 5 hrs ago0x5f715316ecaa3a6353167b1ca3afd3fe4d5b87a8 IN  Zenlink: ZLK Token0 MOVR0.000138933
0xebf24f8ec7b0d143ad6c21372e92d5a9bd97dbd03d40401a73e583d677b12276Approve26542812022-09-27 13:34:306 days 17 hrs ago0xc966071815f0fdf802aebc02e97a56aa76d380e8 IN  Zenlink: ZLK Token0 MOVR0.000138933
0xaebaa5e0b405c2f043feb3ea826bd4cbbdbc01b70e719983bc2eaa9e461c0a6fApprove26535802022-09-27 11:09:426 days 20 hrs ago0xdad73954a27e497b9d8eef95eae963f130184e33 IN  Zenlink: ZLK Token0 MOVR0.000138933
0xa21f7d668066edea7694d530957dbcee995f044bce1868ab972ab4ddd4141a2bApprove26511522022-09-27 2:45:427 days 4 hrs ago0x0c5b97401d84b5b799f1032b3323bc50405f57c8 IN  Zenlink: ZLK Token0 MOVR0.000138933
[ Download CSV Export 

OVERVIEW

Zenlink is a cross-chain DEX protocol based on Polkadot. By accessing the ultimate, open, and universal cross-chain DEX protocol based on Substrate, Zenlink DEX Protocol enables all parachains to build DEX and achieve liquidity sharing in one click.

Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ZenlinkToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonriver.moonscan.io on 2021-11-19
*/

// File: contracts/libraries/Math.sol



pragma solidity >=0.8.0;

// a library for performing various math operations

library Math {
    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }

    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

    function sub(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x - y) <= x, "ds-math-sub-underflow");
    }

    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow");
    }
}

// File: contracts/libraries/AdminUpgradeable.sol



pragma solidity >=0.8.0;

abstract contract AdminUpgradeable {
    address public admin;
    address public adminCandidate;

    function _initializeAdmin(address _admin) internal {
        require(admin == address(0), "admin already set");

        admin = _admin;
    }

    function candidateConfirm() external {
        require(msg.sender == adminCandidate, "not Candidate");
        emit AdminChanged(admin, adminCandidate);

        admin = adminCandidate;
        adminCandidate = address(0);
    }

    function setAdminCandidate(address _candidate) external onlyAdmin {
        adminCandidate = _candidate;
        emit Candidate(_candidate);
    }

    modifier onlyAdmin {
        require(msg.sender == admin, "not admin");
        _;
    }

    event Candidate(address indexed newAdmin);
    event AdminChanged(address indexed oldAdmin, address indexed newAdmin);
}
// File: @openzeppelin/contracts/utils/Context.sol



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/tokens/ZenlinkToken.sol



pragma solidity >=0.8.0;




contract ZenlinkToken is ERC20, AdminUpgradeable {
    using Math for uint256;
    // global transfer switch
    bool public transferable;

    uint8 private decimal;

    uint256 public maxTotalSupply;

    // address map that can be transferred at any time.
    mapping(address => bool) public whitelistMap;

    modifier canTransfer() {
        require(
            transferable == true || whitelistMap[msg.sender] == true,
            "can't transfer"
        );
        _;
    }

    constructor(
        string memory setSymbol,
        string memory setName,
        uint8 setDecimal,
        uint256 initialBalance,
        uint256 maxMint
    ) ERC20(setName, setSymbol) {
        require(maxMint >= initialBalance, "initialBalance bigger than max");
        _initializeAdmin(msg.sender);
        _mint(msg.sender, initialBalance);
        whitelistMap[msg.sender] = true;
        decimal = setDecimal;
        maxTotalSupply = maxMint;
    }

    function decimals() public view virtual override returns (uint8) {
        return decimal;
    }

    function addWhitelist(address user) external onlyAdmin {
        whitelistMap[user] = true;
    }

    function removeWhitelist(address user) external onlyAdmin {
        delete whitelistMap[user];
    }

    function enableTransfer() external onlyAdmin {
        transferable = true;
    }

    function disableTransfer() external onlyAdmin {
        transferable = false;
    }

    function mint(uint256 mintAmount) external onlyAdmin {
        require(totalSupply().add(mintAmount) <= maxTotalSupply, "can't mint");
        _mint(msg.sender, mintAmount);
    }

    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        canTransfer
        returns (bool)
    {
        return ERC20.transfer(recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override canTransfer returns (bool) {
        return ERC20.transferFrom(sender, recipient, amount);
    }
}

Contract ABI

[{"inputs":[{"internalType":"string","name":"setSymbol","type":"string"},{"internalType":"string","name":"setName","type":"string"},{"internalType":"uint8","name":"setDecimal","type":"uint8"},{"internalType":"uint256","name":"initialBalance","type":"uint256"},{"internalType":"uint256","name":"maxMint","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"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":"newAdmin","type":"address"}],"name":"Candidate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminCandidate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"candidateConfirm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_candidate","type":"address"}],"name":"setAdminCandidate","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":[],"name":"transferable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162001472380380620014728339810160408190526200003491620003cd565b8351849086906200004d90600390602085019062000270565b5080516200006390600490602084019062000270565b50505081811015620000bc5760405162461bcd60e51b815260206004820152601e60248201527f696e697469616c42616c616e636520626967676572207468616e206d6178000060448201526064015b60405180910390fd5b620000c7336200011a565b620000d333836200018b565b336000908152600860205260409020805460ff191660011790556006805460ff94909416600160a81b0260ff60a81b19909416939093179092555060075550620004dd9050565b6005546001600160a01b031615620001695760405162461bcd60e51b815260206004820152601160248201527018591b5a5b88185b1c9958591e481cd95d607a1b6044820152606401620000b3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038216620001e35760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620000b3565b8060026000828254620001f7919062000463565b90915550506001600160a01b038216600090815260208190526040812080548392906200022690849062000463565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200027e906200048a565b90600052602060002090601f016020900481019282620002a25760008555620002ed565b82601f10620002bd57805160ff1916838001178555620002ed565b82800160010185558215620002ed579182015b82811115620002ed578251825591602001919060010190620002d0565b50620002fb929150620002ff565b5090565b5b80821115620002fb576000815560010162000300565b600082601f8301126200032857600080fd5b81516001600160401b0380821115620003455762000345620004c7565b604051601f8301601f19908116603f01168101908282118183101715620003705762000370620004c7565b816040528381526020925086838588010111156200038d57600080fd5b600091505b83821015620003b1578582018301518183018401529082019062000392565b83821115620003c35760008385830101525b9695505050505050565b600080600080600060a08688031215620003e657600080fd5b85516001600160401b0380821115620003fe57600080fd5b6200040c89838a0162000316565b965060208801519150808211156200042357600080fd5b50620004328882890162000316565b945050604086015160ff811681146200044a57600080fd5b6060870151608090970151959894975095949392505050565b600082198211156200048557634e487b7160e01b600052601160045260246000fd5b500190565b600181811c908216806200049f57607f821691505b60208210811415620004c157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b610f8580620004ed6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806378c8cda7116100c3578063a9059cbb1161007c578063a9059cbb146102dc578063b187984f146102ef578063dd62ed3e146102f7578063f1b50c1d14610330578063f80f5dd514610338578063f851a4401461034b57600080fd5b806378c8cda71461027457806392ff0d311461028757806395d89b411461029b57806396de7aa0146102a3578063a0712d68146102b6578063a457c2d7146102c957600080fd5b8063313ce56711610115578063313ce567146101c157806332531c3c146101e057806339509351146102035780633accfa6c146102165780633f0232301461024157806370a082311461024b57600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd1461019357806323b872dd146101a55780632ab4d052146101b8575b600080fd5b61015a61035e565b6040516101679190610e76565b60405180910390f35b61018361017e366004610e33565b6103f0565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101836101b3366004610df7565b610407565b61019760075481565b600654600160a81b900460ff1660405160ff9091168152602001610167565b6101836101ee366004610da9565b60086020526000908152604090205460ff1681565b610183610211366004610e33565b610490565b600654610229906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b6102496104cc565b005b610197610259366004610da9565b6001600160a01b031660009081526020819052604090205490565b610249610282366004610da9565b61057c565b60065461018390600160a01b900460ff1681565b61015a6105c7565b6102496102b1366004610da9565b6105d6565b6102496102c4366004610e5d565b61064a565b6101836102d7366004610e33565b6106d2565b6101836102ea366004610e33565b61076b565b6102496107ed565b610197610305366004610dc4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610249610826565b610249610346366004610da9565b610865565b600554610229906001600160a01b031681565b60606003805461036d90610f14565b80601f016020809104026020016040519081016040528092919081815260200182805461039990610f14565b80156103e65780601f106103bb576101008083540402835291602001916103e6565b820191906000526020600020905b8154815290600101906020018083116103c957829003601f168201915b5050505050905090565b60006103fd3384846108b3565b5060015b92915050565b600654600090600160a01b900460ff1615156001148061043b57503360009081526008602052604090205460ff1615156001145b61047d5760405162461bcd60e51b815260206004820152600e60248201526d31b0b713ba103a3930b739b332b960911b60448201526064015b60405180910390fd5b6104888484846109d7565b949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103fd9185906104c7908690610eee565b6108b3565b6006546001600160a01b031633146105165760405162461bcd60e51b815260206004820152600d60248201526c6e6f742043616e64696461746560981b6044820152606401610474565b6006546005546040516001600160a01b0392831692909116907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f90600090a360068054600580546001600160a01b03199081166001600160a01b03841617909155169055565b6005546001600160a01b031633146105a65760405162461bcd60e51b815260040161047490610ecb565b6001600160a01b03166000908152600860205260409020805460ff19169055565b60606004805461036d90610f14565b6005546001600160a01b031633146106005760405162461bcd60e51b815260040161047490610ecb565b600680546001600160a01b0319166001600160a01b0383169081179091556040517f8cc40b9abca4a505a92028908f9d913d621d18112c69412806506f02333f26b490600090a250565b6005546001600160a01b031633146106745760405162461bcd60e51b815260040161047490610ecb565b60075461068a8261068460025490565b90610a81565b11156106c55760405162461bcd60e51b815260206004820152600a60248201526918d85b89dd081b5a5b9d60b21b6044820152606401610474565b6106cf3382610ad6565b50565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156107545760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610474565b61076133858584036108b3565b5060019392505050565b600654600090600160a01b900460ff1615156001148061079f57503360009081526008602052604090205460ff1615156001145b6107dc5760405162461bcd60e51b815260206004820152600e60248201526d31b0b713ba103a3930b739b332b960911b6044820152606401610474565b6107e68383610bb5565b9392505050565b6005546001600160a01b031633146108175760405162461bcd60e51b815260040161047490610ecb565b6006805460ff60a01b19169055565b6005546001600160a01b031633146108505760405162461bcd60e51b815260040161047490610ecb565b6006805460ff60a01b1916600160a01b179055565b6005546001600160a01b0316331461088f5760405162461bcd60e51b815260040161047490610ecb565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6001600160a01b0383166109155760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610474565b6001600160a01b0382166109765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610474565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006109e4848484610bbe565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610a695760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610474565b610a7685338584036108b3565b506001949350505050565b600082610a8e8382610eee565b91508110156104015760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b6044820152606401610474565b6001600160a01b038216610b2c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610474565b8060026000828254610b3e9190610eee565b90915550506001600160a01b03821660009081526020819052604081208054839290610b6b908490610eee565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60006103fd3384845b6001600160a01b038316610c225760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610474565b6001600160a01b038216610c845760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610474565b6001600160a01b03831660009081526020819052604090205481811015610cfc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610474565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610d33908490610eee565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d7f91815260200190565b60405180910390a350505050565b80356001600160a01b0381168114610da457600080fd5b919050565b600060208284031215610dbb57600080fd5b6107e682610d8d565b60008060408385031215610dd757600080fd5b610de083610d8d565b9150610dee60208401610d8d565b90509250929050565b600080600060608486031215610e0c57600080fd5b610e1584610d8d565b9250610e2360208501610d8d565b9150604084013590509250925092565b60008060408385031215610e4657600080fd5b610e4f83610d8d565b946020939093013593505050565b600060208284031215610e6f57600080fd5b5035919050565b600060208083528351808285015260005b81811015610ea357858101830151858201604001528201610e87565b81811115610eb5576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b60008219821115610f0f57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c90821680610f2857607f821691505b60208210811415610f4957634e487b7160e01b600052602260045260246000fd5b5091905056fea26469706673582212205d53a3c5cdb9e67d3ece70821538938f97fc4c7ecb514743afbb7659debd175264736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000000000000000000000000035a4c4b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155a656e6c696e6b204e6574776f726b20546f6b656e0000000000000000000000

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

00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052b7d2dcc80cd2e400000000000000000000000000000000000000000000000000000000000000000000035a4c4b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000155a656e6c696e6b204e6574776f726b20546f6b656e0000000000000000000000

-----Decoded View---------------
Arg [0] : setSymbol (string): ZLK
Arg [1] : setName (string): Zenlink Network Token
Arg [2] : setDecimal (uint8): 18
Arg [3] : initialBalance (uint256): 0
Arg [4] : maxMint (uint256): 100000000000000000000000000

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5a4c4b0000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [8] : 5a656e6c696e6b204e6574776f726b20546f6b656e0000000000000000000000


Deployed ByteCode Sourcemap

18547:2142:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8502:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10669:169;;;;;;:::i;:::-;;:::i;:::-;;;1798:14:1;;1791:22;1773:41;;1761:2;1746:18;10669:169:0;1633:187:1;9622:108:0;9710:12;;9622:108;;;7483:25:1;;;7471:2;7456:18;9622:108:0;7337:177:1;20457:229:0;;;;;;:::i;:::-;;:::i;18726:29::-;;;;;;19539:98;19622:7;;-1:-1:-1;;;19622:7:0;;;;19539:98;;7691:4:1;7679:17;;;7661:36;;7649:2;7634:18;19539:98:0;7519:184:1;18821:44:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;12221:215;;;;;;:::i;:::-;;:::i;1294:29::-;;;;;-1:-1:-1;;;;;1294:29:0;;;;;;-1:-1:-1;;;;;1589:32:1;;;1571:51;;1559:2;1544:18;1294:29:0;1425:203:1;1486:234:0;;;:::i;:::-;;9793:127;;;;;;:::i;:::-;-1:-1:-1;;;;;9894:18:0;9867:7;9894:18;;;;;;;;;;;;9793:127;19752:102;;;;;;:::i;:::-;;:::i;18663:24::-;;;;;-1:-1:-1;;;18663:24:0;;;;;;8721:104;;;:::i;1728:149::-;;;;;;:::i;:::-;;:::i;20046:182::-;;;;;;:::i;:::-;;:::i;12939:413::-;;;;;;:::i;:::-;;:::i;20236:213::-;;;;;;:::i;:::-;;:::i;19953:85::-;;;:::i;10371:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10487:18:0;;;10460:7;10487:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10371:151;19862:83;;;:::i;19645:99::-;;;;;;:::i;:::-;;:::i;1267:20::-;;;;;-1:-1:-1;;;;;1267:20:0;;;8502:100;8556:13;8589:5;8582:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8502:100;:::o;10669:169::-;10752:4;10769:39;2812:10;10792:7;10801:6;10769:8;:39::i;:::-;-1:-1:-1;10826:4:0;10669:169;;;;;:::o;20457:229::-;18930:12;;20609:4;;-1:-1:-1;;;18930:12:0;;;;:20;;18946:4;18930:20;;:56;;-1:-1:-1;18967:10:0;18954:24;;;;:12;:24;;;;;;;;:32;;:24;:32;18930:56;18908:120;;;;-1:-1:-1;;;18908:120:0;;3436:2:1;18908:120:0;;;3418:21:1;3475:2;3455:18;;;3448:30;-1:-1:-1;;;3494:18:1;;;3487:44;3548:18;;18908:120:0;;;;;;;;;20633:45:::1;20652:6;20660:9;20671:6;20633:18;:45::i;:::-;20626:52:::0;20457:229;-1:-1:-1;;;;20457:229:0:o;12221:215::-;2812:10;12309:4;12358:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12358:34:0;;;;;;;;;;12309:4;;12326:80;;12349:7;;12358:47;;12395:10;;12358:47;:::i;:::-;12326:8;:80::i;1486:234::-;1556:14;;-1:-1:-1;;;;;1556:14:0;1542:10;:28;1534:54;;;;-1:-1:-1;;;1534:54:0;;5283:2:1;1534:54:0;;;5265:21:1;5322:2;5302:18;;;5295:30;-1:-1:-1;;;5341:18:1;;;5334:43;5394:18;;1534:54:0;5081:337:1;1534:54:0;1624:14;;1617:5;;1604:35;;-1:-1:-1;;;;;1624:14:0;;;;1617:5;;;;1604:35;;1624:14;;1604:35;1660:14;;;1652:5;:22;;-1:-1:-1;;;;;;1652:22:0;;;-1:-1:-1;;;;;1660:14:0;;1652:22;;;;1685:27;;;1486:234::o;19752:102::-;1937:5;;-1:-1:-1;;;;;1937:5:0;1923:10;:19;1915:41;;;;-1:-1:-1;;;1915:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19828:18:0::1;;::::0;;;:12:::1;:18;::::0;;;;19821:25;;-1:-1:-1;;19821:25:0::1;::::0;;19752:102::o;8721:104::-;8777:13;8810:7;8803:14;;;;;:::i;1728:149::-;1937:5;;-1:-1:-1;;;;;1937:5:0;1923:10;:19;1915:41;;;;-1:-1:-1;;;1915:41:0;;;;;;;:::i;:::-;1805:14:::1;:27:::0;;-1:-1:-1;;;;;;1805:27:0::1;-1:-1:-1::0;;;;;1805:27:0;::::1;::::0;;::::1;::::0;;;1848:21:::1;::::0;::::1;::::0;-1:-1:-1;;1848:21:0::1;1728:149:::0;:::o;20046:182::-;1937:5;;-1:-1:-1;;;;;1937:5:0;1923:10;:19;1915:41;;;;-1:-1:-1;;;1915:41:0;;;;;;;:::i;:::-;20151:14:::1;;20118:29;20136:10;20118:13;9710:12:::0;;;9622:108;20118:13:::1;:17:::0;::::1;:29::i;:::-;:47;;20110:70;;;::::0;-1:-1:-1;;;20110:70:0;;4944:2:1;20110:70:0::1;::::0;::::1;4926:21:1::0;4983:2;4963:18;;;4956:30;-1:-1:-1;;;5002:18:1;;;4995:40;5052:18;;20110:70:0::1;4742:334:1::0;20110:70:0::1;20191:29;20197:10;20209;20191:5;:29::i;:::-;20046:182:::0;:::o;12939:413::-;2812:10;13032:4;13076:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13076:34:0;;;;;;;;;;13129:35;;;;13121:85;;;;-1:-1:-1;;;13121:85:0;;6773:2:1;13121:85:0;;;6755:21:1;6812:2;6792:18;;;6785:30;6851:34;6831:18;;;6824:62;-1:-1:-1;;;6902:18:1;;;6895:35;6947:19;;13121:85:0;6571:401:1;13121:85:0;13242:67;2812:10;13265:7;13293:15;13274:16;:34;13242:8;:67::i;:::-;-1:-1:-1;13340:4:0;;12939:413;-1:-1:-1;;;12939:413:0:o;20236:213::-;18930:12;;20379:4;;-1:-1:-1;;;18930:12:0;;;;:20;;18946:4;18930:20;;:56;;-1:-1:-1;18967:10:0;18954:24;;;;:12;:24;;;;;;;;:32;;:24;:32;18930:56;18908:120;;;;-1:-1:-1;;;18908:120:0;;3436:2:1;18908:120:0;;;3418:21:1;3475:2;3455:18;;;3448:30;-1:-1:-1;;;3494:18:1;;;3487:44;3548:18;;18908:120:0;3234:338:1;18908:120:0;20408:33:::1;20423:9;20434:6;20408:14;:33::i;:::-;20401:40:::0;20236:213;-1:-1:-1;;;20236:213:0:o;19953:85::-;1937:5;;-1:-1:-1;;;;;1937:5:0;1923:10;:19;1915:41;;;;-1:-1:-1;;;1915:41:0;;;;;;;:::i;:::-;20010:12:::1;:20:::0;;-1:-1:-1;;;;20010:20:0::1;::::0;;19953:85::o;19862:83::-;1937:5;;-1:-1:-1;;;;;1937:5:0;1923:10;:19;1915:41;;;;-1:-1:-1;;;1915:41:0;;;;;;;:::i;:::-;19918:12:::1;:19:::0;;-1:-1:-1;;;;19918:19:0::1;-1:-1:-1::0;;;19918:19:0::1;::::0;;19862:83::o;19645:99::-;1937:5;;-1:-1:-1;;;;;1937:5:0;1923:10;:19;1915:41;;;;-1:-1:-1;;;1915:41:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19711:18:0::1;;::::0;;;:12:::1;:18;::::0;;;;:25;;-1:-1:-1;;19711:25:0::1;19732:4;19711:25;::::0;;19645:99::o;16623:380::-;-1:-1:-1;;;;;16759:19:0;;16751:68;;;;-1:-1:-1;;;16751:68:0;;6031:2:1;16751:68:0;;;6013:21:1;6070:2;6050:18;;;6043:30;6109:34;6089:18;;;6082:62;-1:-1:-1;;;6160:18:1;;;6153:34;6204:19;;16751:68:0;5829:400:1;16751:68:0;-1:-1:-1;;;;;16838:21:0;;16830:68;;;;-1:-1:-1;;;16830:68:0;;3033:2:1;16830:68:0;;;3015:21:1;3072:2;3052:18;;;3045:30;3111:34;3091:18;;;3084:62;-1:-1:-1;;;3162:18:1;;;3155:32;3204:19;;16830:68:0;2831:398:1;16830:68:0;-1:-1:-1;;;;;16911:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16963:32;;7483:25:1;;;16963:32:0;;7456:18:1;16963:32:0;;;;;;;16623:380;;;:::o;11320:492::-;11460:4;11477:36;11487:6;11495:9;11506:6;11477:9;:36::i;:::-;-1:-1:-1;;;;;11553:19:0;;11526:24;11553:19;;;:11;:19;;;;;;;;2812:10;11553:33;;;;;;;;11605:26;;;;11597:79;;;;-1:-1:-1;;;11597:79:0;;4535:2:1;11597:79:0;;;4517:21:1;4574:2;4554:18;;;4547:30;4613:34;4593:18;;;4586:62;-1:-1:-1;;;4664:18:1;;;4657:38;4712:19;;11597:79:0;4333:404:1;11597:79:0;11712:57;11721:6;2812:10;11762:6;11743:16;:25;11712:8;:57::i;:::-;-1:-1:-1;11800:4:0;;11320:492;-1:-1:-1;;;;11320:492:0:o;691:137::-;749:9;794:1;784:5;788:1;794;784:5;:::i;:::-;780:9;;;779:16;;771:49;;;;-1:-1:-1;;;771:49:0;;3779:2:1;771:49:0;;;3761:21:1;3818:2;3798:18;;;3791:30;-1:-1:-1;;;3837:18:1;;;3830:50;3897:18;;771:49:0;3577:344:1;14862:399:0;-1:-1:-1;;;;;14946:21:0;;14938:65;;;;-1:-1:-1;;;14938:65:0;;7179:2:1;14938:65:0;;;7161:21:1;7218:2;7198:18;;;7191:30;7257:33;7237:18;;;7230:61;7308:18;;14938:65:0;6977:355:1;14938:65:0;15094:6;15078:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;15111:18:0;;:9;:18;;;;;;;;;;:28;;15133:6;;15111:9;:28;;15133:6;;15111:28;:::i;:::-;;;;-1:-1:-1;;15155:37:0;;7483:25:1;;;-1:-1:-1;;;;;15155:37:0;;;15172:1;;15155:37;;7471:2:1;7456:18;15155:37:0;;;;;;;14862:399;;:::o;10133:175::-;10219:4;10236:42;2812:10;10260:9;10271:6;13842:733;-1:-1:-1;;;;;13982:20:0;;13974:70;;;;-1:-1:-1;;;13974:70:0;;5625:2:1;13974:70:0;;;5607:21:1;5664:2;5644:18;;;5637:30;5703:34;5683:18;;;5676:62;-1:-1:-1;;;5754:18:1;;;5747:35;5799:19;;13974:70:0;5423:401:1;13974:70:0;-1:-1:-1;;;;;14063:23:0;;14055:71;;;;-1:-1:-1;;;14055:71:0;;2629:2:1;14055:71:0;;;2611:21:1;2668:2;2648:18;;;2641:30;2707:34;2687:18;;;2680:62;-1:-1:-1;;;2758:18:1;;;2751:33;2801:19;;14055:71:0;2427:399:1;14055:71:0;-1:-1:-1;;;;;14223:17:0;;14199:21;14223:17;;;;;;;;;;;14259:23;;;;14251:74;;;;-1:-1:-1;;;14251:74:0;;4128:2:1;14251:74:0;;;4110:21:1;4167:2;4147:18;;;4140:30;4206:34;4186:18;;;4179:62;-1:-1:-1;;;4257:18:1;;;4250:36;4303:19;;14251:74:0;3926:402:1;14251:74:0;-1:-1:-1;;;;;14361:17:0;;;:9;:17;;;;;;;;;;;14381:22;;;14361:42;;14425:20;;;;;;;;:30;;14397:6;;14361:9;14425:30;;14397:6;;14425:30;:::i;:::-;;;;;;;;14490:9;-1:-1:-1;;;;;14473:35:0;14482:6;-1:-1:-1;;;;;14473:35:0;;14501:6;14473:35;;;;7483:25:1;;7471:2;7456:18;;7337:177;14473:35:0;;;;;;;;13963:612;13842:733;;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:1:o;1240:180::-;1299:6;1352:2;1340:9;1331:7;1327:23;1323:32;1320:52;;;1368:1;1365;1358:12;1320:52;-1:-1:-1;1391:23:1;;1240:180;-1:-1:-1;1240:180:1:o;1825:597::-;1937:4;1966:2;1995;1984:9;1977:21;2027:6;2021:13;2070:6;2065:2;2054:9;2050:18;2043:34;2095:1;2105:140;2119:6;2116:1;2113:13;2105:140;;;2214:14;;;2210:23;;2204:30;2180:17;;;2199:2;2176:26;2169:66;2134:10;;2105:140;;;2263:6;2260:1;2257:13;2254:91;;;2333:1;2328:2;2319:6;2308:9;2304:22;2300:31;2293:42;2254:91;-1:-1:-1;2406:2:1;2385:15;-1:-1:-1;;2381:29:1;2366:45;;;;2413:2;2362:54;;1825:597;-1:-1:-1;;;1825:597:1:o;6234:332::-;6436:2;6418:21;;;6475:1;6455:18;;;6448:29;-1:-1:-1;;;6508:2:1;6493:18;;6486:39;6557:2;6542:18;;6234:332::o;7708:225::-;7748:3;7779:1;7775:6;7772:1;7769:13;7766:136;;;7824:10;7819:3;7815:20;7812:1;7805:31;7859:4;7856:1;7849:15;7887:4;7884:1;7877:15;7766:136;-1:-1:-1;7918:9:1;;7708:225::o;7938:380::-;8017:1;8013:12;;;;8060;;;8081:61;;8135:4;8127:6;8123:17;8113:27;;8081:61;8188:2;8180:6;8177:14;8157:18;8154:38;8151:161;;;8234:10;8229:3;8225:20;8222:1;8215:31;8269:4;8266:1;8259:15;8297:4;8294:1;8287:15;8151:161;;7938:380;;;:::o

Swarm Source

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