Contract 0x60DE5F9386b637Fe97aF1CC05F25548E9BAAee19

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x6b13442720935e85bdaca244c19f56ed8f4b96795e2a0bee467da6a0d26f27c183853582021-06-17 20:54:3512 hrs 3 mins ago0x75c113d6972904f0cbc48f00a61ee5f7f8d023d6 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x8dcd94d165800ae93f2e98295a2812f94715c762d5387ba921ba2c9fd834414783781692021-06-17 14:53:3618 hrs 4 mins ago0x3b7e9d619f8d0b1089b845eb6c277533b798f98b IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0xd52a406eb8019b26289f1ca8f7025cc4952e2c5b880fb226fa3a9c9d1b47db5883681552021-06-17 6:25:191 day 2 hrs ago0xf671d330ea214cb51fe4790512cec87dbe16c65f IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0xdac8596a7494a79461e19557cae61fead27463c5ce9a2cfbdc799bd2a62eb1dd83576742021-06-16 21:39:001 day 11 hrs ago0x11b08b74dda1602fc9fb6810806636e4348022a2 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x3248f6e11a059bb9899e26f4c15c0b17a4e57367dd95b5a2f68f4ca25eba4faf83507892021-06-16 15:52:341 day 17 hrs ago0x3d5176321863103bfeee3d053f6a0f8d10b1a647 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x6d50c10cf634f793f29f06d254c477645d2d39fd9f13d288ea9ea8888dcba47983495302021-06-16 14:49:281 day 18 hrs ago0x186633bb948ff3cb33ff64566431906c548a7fed IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x03b35bde4701d88fb5d3e6ad99ebd390db8abf6d56f7b7cf103fc186f400ffd683439042021-06-16 10:06:451 day 22 hrs ago0xe83b69b7f7b4fa45f4722b4f55a06092e6e064c2 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0xe3aa5c0113bdb4b233788219ca08934e455e024db5d759ed26af0256b953d2c883316972021-06-15 23:49:332 days 9 hrs ago0xeabc9d0d3e6c63c748a38d1d080653e01a47c735 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x1350e2742d46a8014fc63ceb34a71a7d9683398074032c935d28e7935f54013183185322021-06-15 12:44:592 days 20 hrs ago0xaf842ccb244c41b6e6fe5df1d96d5cbc679e52d7 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x708e8b45d49ef0cce02cd696109492c535d0ca804eb88143c0be40fccd90fc1e83162082021-06-15 10:45:382 days 22 hrs ago0x7b2490cd2d50b2c3f9dff0e5df826eb3cb672867 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x1a53fdf1d55deea4128d6938476c2274d87264e165a49d2c8bcddec705d6842c83147142021-06-15 9:28:102 days 23 hrs ago0x65d6f082156156a8bd4309608fd6e3c8d0eee00d IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x9a61169242b6d1105b0f3df1fda9172864268e0972896b0423f2ca03821c475983062092021-06-15 2:18:333 days 6 hrs ago0x1d8908d6aff89148bbd54fd931a68c1e0b87d761 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x3b1b72c9ee904abb0bef9109cf07af5e9b8dac24a343c7bb491a75137a4a16ec82955742021-06-14 17:18:033 days 15 hrs ago0x87edcdede64c18b2cb3c763c92583d3c415bc86e IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0xe500ce0f79fdc68de523998fcb5130f2b197121438d070e81de7029aa607728682663702021-06-13 16:38:284 days 16 hrs ago0x32b8d0effe0693fe2f779ec4fb6b9818d06a4b10 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0xf6f9d9d6df5ce8358a8720fd5bb49cef423cec18bebf14629f61ae8c7953e92a82651932021-06-13 15:38:544 days 17 hrs ago0xe663b961f504bf8d416986864d17256bcb35d16c IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x228186900cdf294fe67c43eeb34f970e37cc9cc1f6cc7b376b2b82ed40c7e6b282610842021-06-13 12:12:074 days 20 hrs ago0xd882eeea943792cc5956b869f310f2962df46799 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.000072435
0xe40b0677218d0f9d223c13f74b6a1d796d1b22afe18fbbed1ce5908a165b49f382514852021-06-13 4:06:545 days 4 hrs ago0xbca558bf23f5cd082c5e97960d69389b67f63754 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.000072435
0xf40524982872ef734c25ff87209fdacd1e4447bf2fab8fc2260dd99b3081e57282490052021-06-13 2:02:445 days 6 hrs ago0x0f3067db50d935cf0b540237c354b1c74f544fdb IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x66ac275a1f9c5a2e0b22f44a325293b111437069ba8517206ada16f75d17615582421812021-06-12 20:17:295 days 12 hrs ago0x26c02c9158c66077b4bd8bb984169160f6ade0f3 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00018098
0xda2185f86e93dec25ed5a358e627641a70150047b163bbaf88c2e542224b109a82362402021-06-12 15:18:295 days 17 hrs ago0xaf8d636864a5852f01c101bb9e27c3613208f315 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x2813c49150c9e82acf6c67163794dc8b2928c53eab357bc90702369abeaf456782327712021-06-12 12:25:025 days 20 hrs ago0xf971133082e51c0d6f93bf8459e0c23f938b3080 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0xd00d39f22697a973c058f9e510702fda3463d127c8d27a9da34526fca408c3f882259022021-06-12 6:40:256 days 2 hrs ago0x7c01bdac2e6e3e4f9814bf52f25e601bcd7dc1a4 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.00022179
0x1f8537faf76ab50142702f2d5c19cac029c837616276f03d9682e23e41a6959582092572021-06-11 16:44:346 days 16 hrs ago0x3ce10276fede97a8cbc584d3429e23e6a69179a7 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.000072435
0x0d68c51cf17c3881a47fe94b132a64403ca253b2d9037ab86bba0276419ab7cc82091392021-06-11 16:38:406 days 16 hrs ago0x3ce10276fede97a8cbc584d3429e23e6a69179a7 IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.000072435
0x9718b95ce4844e50b0768eb057d2cb73c1265d7714c32d10e0e79b6ce360553682039742021-06-11 12:19:336 days 20 hrs ago0x7ae04ed7f1082d8aa1c19893e9ec4039a666c02c IN  0x60de5f9386b637fe97af1cc05f25548e9baaee190 BNB0.000072435
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeepLock

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

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

pragma solidity >=0.7.0;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Capped.sol";

contract DeepLock is ERC20("DeepLock", "DEEP"), ERC20Capped {
    uint256 constant SUPPLY = 5e6 ether;

    constructor() ERC20Capped(SUPPLY) {
        _mint(address(msg.sender), SUPPLY);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20, ERC20Capped) {
        super._beforeTokenTransfer(from, to, amount);
    }
}

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

pragma solidity >=0.6.0 <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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

pragma solidity >=0.6.0 <0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

        return c;
    }

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

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

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

pragma solidity >=0.6.0 <0.8.0;

import "../../GSN/Context.sol";
import "./IERC20.sol";
import "../../math/SafeMath.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 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 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) public {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view 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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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:
     *
     * - `to` 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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @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 to 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 { }
}

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

pragma solidity >=0.6.0 <0.8.0;

import "./ERC20.sol";

/**
 * @dev Extension of {ERC20} that adds a cap to the supply of tokens.
 */
abstract contract ERC20Capped is ERC20 {
    using SafeMath for uint256;

    uint256 private _cap;

    /**
     * @dev Sets the value of the `cap`. This value is immutable, it can only be
     * set once during construction.
     */
    constructor (uint256 cap_) internal {
        require(cap_ > 0, "ERC20Capped: cap is 0");
        _cap = cap_;
    }

    /**
     * @dev Returns the cap on the token's total supply.
     */
    function cap() public view returns (uint256) {
        return _cap;
    }

    /**
     * @dev See {ERC20-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - minted tokens must not cause the total supply to go over the cap.
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);

        if (from == address(0)) { // When minting tokens
            require(totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded");
        }
    }
}

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

pragma solidity >=0.6.0 <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);
}

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

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"}]

60806040523480156200001157600080fd5b506040805180820182526008815267446565704c6f636b60c01b6020808301918252835180850190945260048452630444545560e41b9084015281516a0422ca8b0a00a42500000093916200006a916003919062000338565b5080516200008090600490602084019062000338565b50506005805460ff191660121790555080620000e3576040805162461bcd60e51b815260206004820152601560248201527f45524332304361707065643a2063617020697320300000000000000000000000604482015290519081900360640190fd5b600655620000fd336a0422ca8b0a00a42500000062000103565b620003e4565b6001600160a01b0382166200015f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200016d6000838362000212565b62000189816002546200022f60201b620006911790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620001bc918390620006916200022f821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6200022a8383836200029160201b6200070c1760201c565b505050565b6000828201838110156200028a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b620002a98383836200022a60201b620007b41760201c565b6001600160a01b0383166200022a57600654620002de82620002ca62000332565b6200022f60201b620006911790919060201c565b11156200022a576040805162461bcd60e51b815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b60025490565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620003705760008555620003bb565b82601f106200038b57805160ff1916838001178555620003bb565b82800160010185558215620003bb579182015b82811115620003bb5782518255916020019190600101906200039e565b50620003c9929150620003cd565b5090565b5b80821115620003c95760008155600101620003ce565b610cc780620003f46000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80633950935111610081578063a457c2d71161005b578063a457c2d71461029a578063a9059cbb146102d3578063dd62ed3e1461030c576100d4565b8063395093511461022657806370a082311461025f57806395d89b4114610292576100d4565b806323b872dd116100b257806323b872dd146101bd578063313ce56714610200578063355274ea1461021e576100d4565b806306fdde03146100d9578063095ea7b31461015657806318160ddd146101a3575b600080fd5b6100e1610347565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561011b578181015183820152602001610103565b50505050905090810190601f1680156101485780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61018f6004803603604081101561016c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356103fb565b604080519115158252519081900360200190f35b6101ab610418565b60408051918252519081900360200190f35b61018f600480360360608110156101d357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561041e565b6102086104bf565b6040805160ff9092168252519081900360200190f35b6101ab6104c8565b61018f6004803603604081101561023c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104ce565b6101ab6004803603602081101561027557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610529565b6100e1610551565b61018f600480360360408110156102b057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105d0565b61018f600480360360408110156102e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610645565b6101ab6004803603604081101561032257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610659565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103f15780601f106103c6576101008083540402835291602001916103f1565b820191906000526020600020905b8154815290600101906020018083116103d457829003601f168201915b5050505050905090565b600061040f6104086107b9565b84846107bd565b50600192915050565b60025490565b600061042b848484610904565b6104b5846104376107b9565b6104b085604051806060016040528060288152602001610bfc6028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906104826107b9565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610ad4565b6107bd565b5060019392505050565b60055460ff1690565b60065490565b600061040f6104db6107b9565b846104b085600160006104ec6107b9565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610691565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103f15780601f106103c6576101008083540402835291602001916103f1565b600061040f6105dd6107b9565b846104b085604051806060016040528060258152602001610c6d60259139600160006106076107b9565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610ad4565b600061040f6106526107b9565b8484610904565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60008282018381101561070557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6107178383836107b4565b73ffffffffffffffffffffffffffffffffffffffff83166107b45760065461074782610741610418565b90610691565b11156107b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f45524332304361707065643a2063617020657863656564656400000000000000604482015290519081900360640190fd5b505050565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180610c496024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610895576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610bb46022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610970576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180610c246025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166109dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180610b916023913960400191505060405180910390fd5b6109e7838383610b85565b610a3181604051806060016040528060268152602001610bd66026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610ad4565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610a6d9082610691565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610b7d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610b42578181015183820152602001610b2a565b50505050905090810190601f168015610b6f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6107b483838361070c56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122031f702cfdeddd794b985a2808d2857a8937ce3737018a17b8a93b183b24cbc6a64736f6c63430007060033

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.