Contract 0x94e496474F1725f1c1824cB5BDb92d7691A4F03a

 

Contract Overview

CyberKongZ: BANANA Token
Balance:
0 Ether

EtherValue:
$0.00

Token:
Txn Hash
Method
Block
From
To
Value
0x586da09178bd16e7b268add3093bfabc3acc9bb2f0b9b47418783ac18f471126Transfer153575452022-08-17 8:04:0815 mins agoENS Name usp45.eth IN  CyberKongZ: BANANA Token0 Ether0.‍0002692 5.‍73993519
0x15c5522f44bf0e3eb0ea6c704ca515f9c7afe5d69cda9ef8856acede8dbaa758Transfer153572222022-08-17 6:51:261 hr 27 mins agoENS Name keungz.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00029489 5.‍70526233
0xba1bde8c5eb82b820e41324a05b90aa0f313c6bf1910d1bb16be846ad8b812deTransfer153570362022-08-17 6:10:222 hrs 8 mins ago0xcb94fd801a44be3bdd59fc4a1bc7053f7967796c IN  CyberKongZ: BANANA Token0 Ether0.‍00064009 18.‍50564288
0xf1a808a42ac9ecf7315c59ce8862aead26382a9b7a4ed105f0d4a9d255c3ebb3Approve153564192022-08-17 3:52:314 hrs 26 mins agoENS Name mjbrwn.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00031745 6.‍82287732
0xa175ee9fb8d72d6dba7950f1ebef6135e11680630bca7f598922dba59be90940Transfer153563672022-08-17 3:41:504 hrs 37 mins ago0x366474e5ca468292da7bb9ab5de87c015b35a110 IN  CyberKongZ: BANANA Token0 Ether0.‍0004782 10.‍19342081
0x2e65f47cdbcba3ceddc418fbd2c2edcbc5eb4758405f552c0b8d4a241d1bd2adTransfer153555542022-08-17 0:24:197 hrs 54 mins agoENS Name 0xcheeseburger.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00036905 7.‍86671782
0xd6bcaac759419c05dd08c20fbd2abcba2e0c6088886a444c66c8d9e4861ad65bTransfer153555012022-08-17 0:15:258 hrs 3 mins ago0xaa2342b48ed2b527710a0ca11678ddd8648f5ed7 IN  CyberKongZ: BANANA Token0 Ether0.‍0003359 7.‍16019169
0x5115e50eb0141eba16ec07e97828edaf55a6843e8c86d66a17f6c8f139ace948Transfer153531182022-08-16 15:19:2216 hrs 59 mins agoENS Name yeoscrypt.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00064177 12.‍41890768
0xcce4cbaf3146da4d237a2ce6041c8423a965274c799ea225d8ea08d65d8d62ebTransfer153518622022-08-16 10:31:5321 hrs 47 mins agoENS Name deltron.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00031393 6.‍07360932
0xbf495be89321bb676fbc4f961ecea5afab793c1a092e3c92ab6a00c05b7d04adApprove153481482022-08-15 20:34:581 day 11 hrs ago0xfa5d05df712b059b74ccefe4084785be7f2ea1b8 IN  CyberKongZ: BANANA Token0 Ether0.‍00101587 21.‍83358924
0x3fb86bb97d5ea6f3a1064fb6279969817cdeb0c2d0fc76f5a8725d7e3ecffc9eTransfer153461162022-08-15 12:52:521 day 19 hrs agoENS Name yeoscrypt.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00067226 13.‍00897149
0xc8a2b254a78bf9f256f80e162bd1921b578d99e385315154b7aaca15d7b18012Transfer153460322022-08-15 12:33:521 day 19 hrs ago0x20fb4ec745c051265d07d1667efa6f0221a78939 IN  CyberKongZ: BANANA Token0 Ether0.‍00035819 12.‍01469186
0x1e50d8a82bfa4ea8e881d6e9a42828b59d6119162491c5003bfd089f889ac80aTransfer153445902022-08-15 7:02:212 days 1 hr agoENS Name jesuspunk.eth IN  CyberKongZ: BANANA Token0 Ether0.‍0006857 13.‍26905805
0xc8d98a94e7804e20f08f2b51f58647ec728119e3dac4106c88a3681bcc05b6d4Transfer153441452022-08-15 5:16:192 days 3 hrs ago0x7852a41100dc709517965b6efe71a96e143ab44d IN  CyberKongZ: BANANA Token0 Ether0.‍00043356 9.‍24194261
0x3e98440e628a93697bf1a47121f5d7e741e30d7ead12a6af90ccde969f71b14bTransfer153432002022-08-15 1:38:292 days 6 hrs agoENS Name kayyo.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00069988 13.‍54029552
0xd33ed3b2d49325c8e240c5b1b9ad3f18965b3242b0f078a44f223c6b2a77aa9fApprove153429792022-08-15 0:47:522 days 7 hrs agoENS Name enzo305.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00082035 17.‍63139018
0xe524b68dca2239cdacb100b1f450649ce23391b6103f5165da995e43b75c6bf7Approve153419932022-08-14 20:59:532 days 11 hrs ago0xa929395477f70b63261c47204bce4a8cca02035f IN  CyberKongZ: BANANA Token0 Ether0.‍0009866 21.‍20449047
0xb683ad567153c520bc51162da14a2bda6edc08490c776e119ad5094cee563705Approve153415882022-08-14 19:24:362 days 12 hrs ago0x2c1c0e2f1e892c3a34b32449d6b388c8d3240a5a IN  CyberKongZ: BANANA Token0 Ether0.‍0005672 12.‍19071125
0x7e3dd92bc5c7f83d0adf5a7426584ccd369d4560282da06af6f0a1e952d370e5Transfer153414302022-08-14 18:47:502 days 13 hrs agoENS Name enzo305.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00049139 18.‍19909172
0x3d9692101a1c766bd30241934ae49cd57b017ed9a97effb1743cdd15bdb238f5Transfer153413942022-08-14 18:40:262 days 13 hrs ago0x27c5932ee1b0873e67279066be914d46203fc738 IN  CyberKongZ: BANANA Token0 Ether0.‍00100645 21.‍45374264
0x8dc131da874dc87b718055f2696c4fcdb6060cc3a9d2c1db7fedbfa13d14d01eTransfer153413322022-08-14 18:26:132 days 13 hrs agoENS Name enzo305.eth IN  CyberKongZ: BANANA Token0 Ether0.‍0003516 13.‍02184752
0xd5a2bd42d6af7fdcfbf1196a6a6ff8b49dcbd2239b24319502033afdb77d1d08Transfer153411682022-08-14 17:48:082 days 14 hrs agoENS Name enzo305.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00049285 18.‍25331078
0x49d4a10ce855b1db3a796236917a399921d334804ca18d6a58b948cd9cf5bc5cTransfer153405822022-08-14 15:29:272 days 16 hrs agoENS Name yeoscrypt.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00092061 17.‍81478166
0xa902d31b4637d4b67835495ab4ee829c9a012c4010345c0fbff3461bb84e7dd1Approve153402712022-08-14 14:25:032 days 17 hrs agoENS Name reynaria.eth IN  CyberKongZ: BANANA Token0 Ether0.‍00047746 10.‍26196681
0xd0fc96fca576ebb5a5841d0c9ed4a57fcc9e22d2a4320c1b0546c11b2d7fe865Approve153388342022-08-14 9:01:292 days 23 hrs ago0xbe50f05da6ae516eac31958c2f63bc189d77dbdc IN  CyberKongZ: BANANA Token0 Ether0.‍00028008 6.‍01976313
[ Download CSV Export 

OVERVIEW

Banana sits at the core of everything in the CyberKongz universe. The mission of CyberKongz extends further than a 2D PFP, or a 3D avatar.

View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BananaV2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 6 : Banana.sol
pragma solidity ^0.6.12;

import "IERC20.sol";
import "ERC20.sol";
import "SafeMath.sol";

/*
 *     ,_,
 *    (',')
 *    {/"\}
 *    -"-"-
 */

interface IOldeNana is IERC20 {
	function rewards(address) external view returns(uint256);
	function lastUpdate(address) external view returns(uint256);
}

contract BananaV2 is ERC20("Banana", "BANANA") {
	using SafeMath for uint256;

	address constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;
	IOldeNana public constant oldeNana = IOldeNana(0xE2311ae37502105b442bBef831E9b53c5d2e9B3b);
	address public constant yieldHub = 0x86CC33dBE3d2fb95bc6734e1E5920D287695215F;

	constructor() public {
		_mint(msg.sender, 3_650_000 ether);
	}

	function swap() external {
		swap(oldeNana.balanceOf(msg.sender));
	}

	function swap(uint256 _amount) public {
		_mint(msg.sender, _amount);
		oldeNana.transferFrom(msg.sender, BURN_ADDRESS, _amount);
	}

	function burnFrom(address _from, uint256 _amount) external {
		require(msg.sender == yieldHub, "!hub");
		_burn(_from, _amount);
	}

	function burnFor(address _user, uint256 _amount) external {
		uint256 currentAllowance = allowance(_user, msg.sender);
		_approve(_user, msg.sender, currentAllowance.sub(_amount));
		_burn(_user, _amount);
	}

	function burn(uint256 _amount) external {
		_burn(msg.sender, _amount);
	}

	function mint(address _to, uint256 _amount) external {
		require(msg.sender == yieldHub, "!hub");
		_mint(_to, _amount);
	}
}

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

pragma solidity ^0.6.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 3 of 6 : ERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

import "Context.sol";
import "IERC20.sol";
import "SafeMath.sol";
import "Address.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;
    using Address for address;

    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 4 of 6 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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 5 of 6 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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 6 of 6 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

Settings
{
  "evmVersion": "istanbul",
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFrom","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":[{"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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldeNana","outputs":[{"internalType":"contract IOldeNana","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"swap","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":"yieldHub","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020016542616e616e6160d01b8152506040518060400160405280600681526020016542414e414e4160d01b81525081600390805190602001906200006892919062000221565b5080516200007e90600490602084019062000221565b50506005805460ff1916601217905550620000a5336a0304eae57f9f3025400000620000ab565b620002bd565b6001600160a01b03821662000107576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200011560008383620001ba565b6200013181600254620001bf60201b620009211790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200016491839062000921620001bf821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b6000828201838110156200021a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026457805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029457825182559160200191906001019062000277565b50620002a2929150620002a6565b5090565b5b80821115620002a25760008155600101620002a7565b61100c80620002cd6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806342966c68116100ad57806395d89b411161007157806395d89b411461038f578063a457c2d714610397578063a9059cbb146103c3578063dd62ed3e146103ef578063df0601791461041d57610121565b806342966c68146102fb57806370a082311461031857806379cc67901461033e5780638119c0651461036a57806394b918de1461037257610121565b80631dd319cb116100f45780631dd319cb1461022157806323b872dd1461024f578063313ce5671461028557806339509351146102a357806340c10f19146102cf57610121565b8063042ba0861461012657806306fdde031461014a578063095ea7b3146101c757806318160ddd14610207575b600080fd5b61012e610425565b604080516001600160a01b039092168252519081900360200190f35b61015261043d565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561018c578181015183820152602001610174565b50505050905090810190601f1680156101b95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101f3600480360360408110156101dd57600080fd5b506001600160a01b0381351690602001356104d3565b604080519115158252519081900360200190f35b61020f6104f0565b60408051918252519081900360200190f35b61024d6004803603604081101561023757600080fd5b506001600160a01b0381351690602001356104f6565b005b6101f36004803603606081101561026557600080fd5b506001600160a01b03813581169160208101359091169060400135610527565b61028d6105a9565b6040805160ff9092168252519081900360200190f35b6101f3600480360360408110156102b957600080fd5b506001600160a01b0381351690602001356105b2565b61024d600480360360408110156102e557600080fd5b506001600160a01b038135169060200135610600565b61024d6004803603602081101561031157600080fd5b503561065f565b61020f6004803603602081101561032e57600080fd5b50356001600160a01b031661066c565b61024d6004803603604081101561035457600080fd5b506001600160a01b038135169060200135610687565b61024d6106e2565b61024d6004803603602081101561038857600080fd5b503561076b565b610152610801565b6101f3600480360360408110156103ad57600080fd5b506001600160a01b038135169060200135610862565b6101f3600480360360408110156103d957600080fd5b506001600160a01b0381351690602001356108ca565b61020f6004803603604081101561040557600080fd5b506001600160a01b03813581169160200135166108de565b61012e610909565b7386cc33dbe3d2fb95bc6734e1e5920d287695215f81565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104c95780601f1061049e576101008083540402835291602001916104c9565b820191906000526020600020905b8154815290600101906020018083116104ac57829003601f168201915b5050505050905090565b60006104e76104e0610982565b8484610986565b50600192915050565b60025490565b600061050283336108de565b905061051883336105138486610a72565b610986565b6105228383610ab4565b505050565b6000610534848484610bb0565b61059f84610540610982565b61051385604051806060016040528060288152602001610f20602891396001600160a01b038a1660009081526001602052604081209061057e610982565b6001600160a01b031681526020810191909152604001600020549190610d0b565b5060019392505050565b60055460ff1690565b60006104e76105bf610982565b8461051385600160006105d0610982565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610921565b337386cc33dbe3d2fb95bc6734e1e5920d287695215f14610651576040805162461bcd60e51b8152602060048083019190915260248201526310b43ab160e11b604482015290519081900360640190fd5b61065b8282610da2565b5050565b6106693382610ab4565b50565b6001600160a01b031660009081526020819052604090205490565b337386cc33dbe3d2fb95bc6734e1e5920d287695215f146106d8576040805162461bcd60e51b8152602060048083019190915260248201526310b43ab160e11b604482015290519081900360640190fd5b61065b8282610ab4565b604080516370a0823160e01b815233600482015290516107699173e2311ae37502105b442bbef831e9b53c5d2e9b3b916370a0823191602480820192602092909190829003018186803b15801561073857600080fd5b505afa15801561074c573d6000803e3d6000fd5b505050506040513d602081101561076257600080fd5b505161076b565b565b6107753382610da2565b604080516323b872dd60e01b815233600482015261dead602482015260448101839052905173e2311ae37502105b442bbef831e9b53c5d2e9b3b916323b872dd9160648083019260209291908290030181600087803b1580156107d757600080fd5b505af11580156107eb573d6000803e3d6000fd5b505050506040513d602081101561052257600080fd5b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104c95780601f1061049e576101008083540402835291602001916104c9565b60006104e761086f610982565b8461051385604051806060016040528060258152602001610fb26025913960016000610899610982565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610d0b565b60006104e76108d7610982565b8484610bb0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b73e2311ae37502105b442bbef831e9b53c5d2e9b3b81565b60008282018381101561097b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166109cb5760405162461bcd60e51b8152600401808060200182810382526024815260200180610f8e6024913960400191505060405180910390fd5b6001600160a01b038216610a105760405162461bcd60e51b8152600401808060200182810382526022815260200180610ed86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600061097b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d0b565b6001600160a01b038216610af95760405162461bcd60e51b8152600401808060200182810382526021815260200180610f486021913960400191505060405180910390fd5b610b0582600083610522565b610b4281604051806060016040528060228152602001610eb6602291396001600160a01b0385166000908152602081905260409020549190610d0b565b6001600160a01b038316600090815260208190526040902055600254610b689082610a72565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6001600160a01b038316610bf55760405162461bcd60e51b8152600401808060200182810382526025815260200180610f696025913960400191505060405180910390fd5b6001600160a01b038216610c3a5760405162461bcd60e51b8152600401808060200182810382526023815260200180610e936023913960400191505060405180910390fd5b610c45838383610522565b610c8281604051806060016040528060268152602001610efa602691396001600160a01b0386166000908152602081905260409020549190610d0b565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610cb19082610921565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610d9a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610d5f578181015183820152602001610d47565b50505050905090810190601f168015610d8c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038216610dfd576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610e0960008383610522565b600254610e169082610921565b6002556001600160a01b038216600090815260208190526040902054610e3c9082610921565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220de2628acf416d09ac91e7e9f3d0234281045eadfd9e7ed329ffdd65e9f9dd93d64736f6c634300060c0033

Block Transaction Difficulty Gas Used Reward
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.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.