Contract 0x15b9462d4eb94222a7506bc7a25fb27a2359291e

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x95140161d839dc16a9019fed9720ad900ba891f5703f29f894409d5d1bb7208682569422021-06-13 8:42:2420 mins ago0xa53b54fc78621f2a7eaaf36d562ff4f99603b0e5 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0x75823976b87cc13a6df5e91c134ec5daed02012522055f64400472b7a36586c882569062021-06-13 8:40:3622 mins ago0xab39a88e851a7843e1de9bf4349f0591aa5182ba IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0x23159a26d462f912b8e102bcd40be8613289ed5d375f28bdc87cdf7a3b84eb2082563642021-06-13 8:13:1649 mins ago0x2d52f7bae61912f7217351443ea8a226996a3def IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0xde19c35346d9032cdad5b7f73aaf646a43084b737251442e86ee0e049242f8c282562932021-06-13 8:09:2053 mins ago0x69432e7f7cc99aaa93609b87ec4e986b2ff5fe4d IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0x0e03809a914b141102db6beed5a395f20d03de6a991886638d1dab780be263bf82562492021-06-13 8:07:0755 mins ago0x4ef7a1db14215d402dd56b0afc947326260445d4 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0x6145a7a0d6aec17f0f2eadd6fb95bddeda43c8f127bc6ff5c2b1e3279159f06382561672021-06-13 8:03:0159 mins ago0x1818b4995da04666aef80b327438b1dba0f36656 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0xbfb02012469bda6cf99e4402714975132877b19c82297e3b07ae3bcc70ff718c82560932021-06-13 7:59:191 hr 3 mins ago0x5e51d1f456d8438ffa867c978699522574dbbc76 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
0x0a93ede79b7404031ddd75cfb59f92e1528edcccf31bd34dd64746b0789485bc82554712021-06-13 7:28:101 hr 34 mins ago0x1de1c830ab205d1658b79888ce22397b1c47d7a3 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000382401
0xcea80bbbd847ebdb27b68bfd8302643cd0466ebe4ed99b1ce78b7771fb55082882545852021-06-13 6:42:592 hrs 19 mins ago0x568ba082a9b90d2adcba751f68ec955021d73804 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000212445
0x36d8faa50bc007176949fd459dd9dad25b5b0b4a2a1e452ba77b68c9f091340982543282021-06-13 6:30:052 hrs 32 mins ago0x04c5b2424f1f920518436f0e3a433463c40392ec IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000221795
0x1243e363221b935756a628540887f8426cb6291a55a513313483d70e969e0ead82543192021-06-13 6:29:382 hrs 33 mins ago0x04c5b2424f1f920518436f0e3a433463c40392ec IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000402505
0x1e98e78389fbeb477456abece4aa29c5e5ab2dacf557e5e1975696246e968bfe82541882021-06-13 6:23:052 hrs 39 mins ago0x36abe5ce091031b707912d93925e92d7c53b7771 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
0x448a5c860002e489ed740899d09ecaa869f5990d917e62a9363efef73ac0288982539832021-06-13 6:12:472 hrs 50 mins ago0xdbcf1be65bbf8e9ff3eb4680b6f2489306c74070 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
0x355c5f0244211552d5ef5d0f48d1f7dc0f2d89665f643c6520635c5862692b1a82536112021-06-13 5:54:063 hrs 8 mins ago0x4e8d229db9212d59cd69086c759258cc97982d97 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0xdbce419a9587aff6d6bafaa4e799ced24ec76fa12d49b75d12aeb3b693d1eebc82535282021-06-13 5:49:573 hrs 12 mins ago0x61dfb673acff0400ecc2565728d03a2d420fe2bb IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327505
0x68652b588d6877be789ef60a2144decaf38f38d2bbe8deb1206bd5cde4ffeb4082531882021-06-13 5:32:573 hrs 29 mins ago0x62ef037a6776ba40c0f78b1bafac76b8f8deee9c IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327625
0xd64b5f0d02b1014374ccb3eda18489f1fea9864ccdb55cf348ca66c63138e5f282524392021-06-13 4:55:304 hrs 7 mins ago0x2547be579dcb69765cf48efe9e396c3070a91354 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000212505
0x1523a276389ebeb5b9bf58169397e5a6a1624151646bed1753ffb0a2604257c182521222021-06-13 4:39:394 hrs 23 mins ago0x432fcd67815d5cc72808a7815a02373fdee7d740 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
0x4c6310d0ad45d142972b39df7c3a8f29f1ad6c2880b586d9cab1e1e1344e412482518212021-06-13 4:23:464 hrs 39 mins ago0x767259a36cd8456c8612d6b05d4230b904f5b04f IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327685
0x5ff76a698a7896d9e2853bd6fdb388b68511b5ba97010eec364defffcf45eaaa82506072021-06-13 3:22:505 hrs 40 mins ago0x7c5be40c87a22c2170716671a75ee03b9ccecc4e IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
0x87b31639f0c566a1713aa6d099d15993c367ddbdfeb96f449c9d32896b13450082502512021-06-13 3:05:025 hrs 57 mins ago0xeba98c93dcc6d8100ee3e70cc540fd4c0fdcdb95 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000221795
0x87ee28ac4fc5b5d4857c458f9aa09e2a6afef0b35bbe45af6e4352c2b0747ed482502142021-06-13 3:03:115 hrs 59 mins ago0xeba98c93dcc6d8100ee3e70cc540fd4c0fdcdb95 IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
0x4a2fa25df599371b881b927325753ce8001596affdfb1cf40b2ddafea88d6a7182488472021-06-13 1:54:427 hrs 8 mins ago0x57941d9e0094b67f8735d1f1e230dac9657006dc IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000212385
0xdd29fd74cfe581765f2805b53b6cda81b47bb27689f631599deb2a90c403e09f82485932021-06-13 1:42:007 hrs 20 mins ago0x171bf34cdf79f215e2e2db977677a2e9bd73deda IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000221795
0xd54847721c0429bd90a1813cf8db557f45b1f218c911e6536c95539ace2344f382485762021-06-13 1:41:097 hrs 21 mins ago0x171bf34cdf79f215e2e2db977677a2e9bd73deda IN  0x15b9462d4eb94222a7506bc7a25fb27a2359291e0 BNB0.000327565
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
xNerve

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 10000 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 5 : xNerve.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";

// This contract handles swapping to and from xNRV, Nerve's staking token.
contract xNerve is ERC20("xNerve", "xNRV"){
    using SafeMath for uint256;
    IERC20 public nerve;

    // Define the Nerve token 
    constructor(IERC20 _nerve) public {
        nerve = _nerve;
    }

    // Enter the bar. Pay some SUSHIs. Earn some shares.
    // Locks Nerve and mints xNerve
    function enter(uint256 _amount) public {
        // Gets the amount of Nerve locked in the contract
        uint256 totalNerve = nerve.balanceOf(address(this));
        // Gets the amount of xNerve in existence
        uint256 totalShares = totalSupply();
        // If no xNerve exists, mint it 1:1 to the amount put in
        if (totalShares == 0 || totalNerve == 0) {
            _mint(msg.sender, _amount);
        } 
        // Calculate and mint the amount of xNerve the Nerve is worth. The ratio will change overtime, as xNerve is burned/minted and Nerve deposited + gained from fees / withdrawn.
        else {
            uint256 what = _amount.mul(totalShares).div(totalNerve);
            _mint(msg.sender, what);
        }
        // Lock the Nerve in the contract
        nerve.transferFrom(msg.sender, address(this), _amount);
    }

    // Leave the bar. Claim back your NERVEs.
    // Unlocks the staked + gained Nerve and burns xNerve
    function leave(uint256 _share) public {
        // Gets the amount of xNerve in existence
        uint256 totalShares = totalSupply();
        // Calculates the amount of Nerve the xNerve is worth
        uint256 what = _share.mul(nerve.balanceOf(address(this))).div(totalShares);
        _burn(msg.sender, _share);
        nerve.transfer(msg.sender, what);
    }
}

File 2 of 5 : 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);
}

File 3 of 5 : 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 4 of 5 : 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 5 of 5 : 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;
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_nerve","type":"address"}],"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":"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":"uint256","name":"_amount","type":"uint256"}],"name":"enter","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":[{"internalType":"uint256","name":"_share","type":"uint256"}],"name":"leave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nerve","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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"}]

60806040523480156200001157600080fd5b506040516200158238038062001582833981810160405260208110156200003757600080fd5b50516040805180820182526006815265784e6572766560d01b6020828101918252835180850190945260048452633c27292b60e11b9084015281519192916200008391600391620000d3565b50805162000099906004906020840190620000d3565b5050600580546001600160a01b0390931661010002610100600160a81b031960ff199094166012179390931692909217909155506200016f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200011657805160ff191683800117855562000146565b8280016001018555821562000146579182015b828111156200014657825182559160200191906001019062000129565b506200015492915062000158565b5090565b5b8082111562000154576000815560010162000159565b611403806200017f6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063a59f3e0c11610066578063a59f3e0c14610300578063a9059cbb1461031d578063cd4eb5db14610356578063dd62ed3e14610387576100ea565b806370a082311461028c57806395d89b41146102bf578063a457c2d7146102c7576100ea565b806323b872dd116100c857806323b872dd146101d3578063313ce56714610216578063395093511461023457806367dfd4c91461026d576100ea565b806306fdde03146100ef578063095ea7b31461016c57806318160ddd146101b9575b600080fd5b6100f76103c2565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610131578181015183820152602001610119565b50505050905090810190601f16801561015e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a56004803603604081101561018257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610476565b604080519115158252519081900360200190f35b6101c1610494565b60408051918252519081900360200190f35b6101a5600480360360608110156101e957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561049a565b61021e61053b565b6040805160ff9092168252519081900360200190f35b6101a56004803603604081101561024a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610544565b61028a6004803603602081101561028357600080fd5b503561059f565b005b6101c1600480360360208110156102a257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610731565b6100f7610759565b6101a5600480360360408110156102dd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107d8565b61028a6004803603602081101561031657600080fd5b503561084d565b6101a56004803603604081101561033357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109be565b61035e6109d2565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101c16004803603604081101561039d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109f3565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561046c5780601f106104415761010080835404028352916020019161046c565b820191906000526020600020905b81548152906001019060200180831161044f57829003601f168201915b5050505050905090565b600061048a610483610a2b565b8484610a2f565b5060015b92915050565b60025490565b60006104a7848484610b76565b610531846104b3610a2b565b61052c856040518060600160405280602881526020016113176028913973ffffffffffffffffffffffffffffffffffffffff8a166000908152600160205260408120906104fe610a2b565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610d46565b610a2f565b5060019392505050565b60055460ff1690565b600061048a610551610a2b565b8461052c8560016000610562610a2b565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610df7565b60006105a9610494565b9050600061067682610670600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561063d57600080fd5b505afa158015610651573d6000803e3d6000fd5b505050506040513d602081101561066757600080fd5b50518690610e72565b90610ee5565b90506106823384610f27565b600554604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101849052905161010090920473ffffffffffffffffffffffffffffffffffffffff169163a9059cbb916044808201926020929091908290030181600087803b15801561070057600080fd5b505af1158015610714573d6000803e3d6000fd5b505050506040513d602081101561072a57600080fd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561046c5780601f106104415761010080835404028352916020019161046c565b600061048a6107e5610a2b565b8461052c856040518060600160405280602581526020016113a9602591396001600061080f610a2b565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610d46565b600554604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600092610100900473ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156108c357600080fd5b505afa1580156108d7573d6000803e3d6000fd5b505050506040513d60208110156108ed57600080fd5b5051905060006108fb610494565b9050801580610908575081155b1561091c576109173384611071565b61093a565b600061092c836106708685610e72565b90506109383382611071565b505b600554604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052905161010090920473ffffffffffffffffffffffffffffffffffffffff16916323b872dd916064808201926020929091908290030181600087803b15801561070057600080fd5b600061048a6109cb610a2b565b8484610b76565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610a9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806113856024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610b07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112ae6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610be2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806113606025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610c4e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806112696023913960400191505060405180910390fd5b610c598383836111a2565b610ca3816040518060600160405280602681526020016112d06026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610d46565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610cdf9082610df7565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610def576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610db4578181015183820152602001610d9c565b50505050905090810190601f168015610de15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610e6b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b600082610e815750600061048e565b82820282848281610e8e57fe5b0414610e6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806112f66021913960400191505060405180910390fd5b6000610e6b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506111a7565b73ffffffffffffffffffffffffffffffffffffffff8216610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061133f6021913960400191505060405180910390fd5b610f9f826000836111a2565b610fe98160405180606001604052806022815260200161128c6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610d46565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205560025461101c9082611226565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166110f357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6110ff600083836111a2565b60025461110c9082610df7565b60025573ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461113f9082610df7565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b60008183611210576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315610db4578181015183820152602001610d9c565b50600083858161121c57fe5b0495945050505050565b6000610e6b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d4656fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c52f45ee65b1ebd32bfce5b2d47f90a7913b85337bcb23a679f30e1d2006ee1964736f6c634300060c003300000000000000000000000042f6f551ae042cbe50c739158b4f0cac0edb9096

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

00000000000000000000000042f6f551ae042cbe50c739158b4f0cac0edb9096

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000042f6f551ae042cbe50c739158b4f0cac0edb9096


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.