Contract 0xfcef8a994209d6916EB2C86cDD2AFD60Aa6F54b1 6

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xcfcf6ef705d978bd265672b7f83a3e15c4bdde3a835aa684b6e76004852101ddEnter546871572023-01-29 22:53:002 mins ago0x91817a270fb9f03e00918fae83b3fe718c1426e8 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002888836391
0x3c958de2f04bed2f7e94fd2a9dad3931d877618c8a59f5eed5bfab25809a9665Leave546868962023-01-29 22:46:258 mins ago0x3d6991085ab1ae3926cb96f25684c40a364b6856 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002345403654
0xec325e5757c607928f182c847686acdf811ecd68eb2893780791a7aa78fef267Leave546856322023-01-29 22:23:5431 mins ago0x2e125c48782f7da10eb38cb765bea524389e4669 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002593757476
0xcb79d26cf586bd4d111cd06a61c98096cffba4a571fa42f16700231c52c0a724Enter546828772023-01-29 21:35:231 hr 19 mins ago0x3edb7d5b494ccb9bb84d11ca25f320af2bb15f40 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002908190099
0x105cf6ed99dba6ef23a8e08eea1ee88cfa1c6c9d85ba5740387339c6dabd3e20Approve546823432023-01-29 21:24:551 hr 30 mins ago0x216576c02a7ce34053a5c9360dbc37ac76a0377c IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.00258786
0xca5ba6b4ac9e5656d9d54e73ef13d912d7ced0db55b28d7359994ea3e5924372Enter546821712023-01-29 21:21:281 hr 33 mins ago0x216576c02a7ce34053a5c9360dbc37ac76a0377c IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.003899775
0x699f1202835bac6de9127a7dad996e992f2c561b4b10be6f42f203f7de718e76Leave546819072023-01-29 21:16:071 hr 39 mins ago0x73ec4dcb8b04a621506a1825bbcab3975247a47e IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.003166916479
0xfc6e1177993a0ccb15050c1160b012f9e9b4fc8408d513279633c70131dfee80Leave546812552023-01-29 21:02:511 hr 52 mins ago0x82763e3a457b054cf9dd05e0760010ba3542c4c6 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.003463409464
0xfba2fb01de29e8886b0a431faa003ca63259ffad6b7ab299d8efa3ebc0e63bbbLeave546788472023-01-29 20:15:452 hrs 39 mins ago0xb659843889088cedcbee573a5f4f2156f9b1a2ea IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.004202170007
0x66ea61c5c28ca8302338b7b8780ccf61af76a82ec6fab4c823da6036f508ad97Enter546782962023-01-29 20:05:112 hrs 50 mins ago0xac207c599e4a07f9a8cc5e9cf49b02e20ab7ba69 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.096614077406
0xb056d12cb134ce459406d65b2094d97e1d50a36c5e087999b25c95b2529c654cApprove546779822023-01-29 19:57:212 hrs 57 mins ago0x180260a6b9f8fcb8c8c1af0c1a36f83155968507 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.001354353
0x95d76c9d08e9c282a4b1dc9b0da3e40d5d48a4551d19e03e6c6f3a06e882595cLeave546778432023-01-29 19:55:013 hrs ago0xd2ebe762df8b394a1297e443986baf4f84dfbc61 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002781521957
0x9ea7e7c8ee488cb0018adaeddf95e5ec50813d4f1463fb34559bc23423a1a309Leave546765152023-01-29 19:33:083 hrs 22 mins ago0x78c9bfc18a0af755d012011a6366d06b059ab124 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002780330637
0xd1736cf932985fa9e8a4a79453be59511392d2f4097f20f311faad7f4a1e1a73Leave546761522023-01-29 19:27:173 hrs 27 mins ago0x5bb46dd7702c7a87a18aae7d6b454019498b8c48 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.004600007894
0x10fab0261657eb5b0f8fffbce266d9150e9cd71ec7d2e756e676427a35c16102Leave546724792023-01-29 17:57:264 hrs 57 mins ago0x14f3310f600f7a719ba365f15d330ff7502f792c IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.00277403971
0x3ccd08f15a9a87fa4d1e2f4bf39cf045fb9220980ee88ef5b598c826130d8910Enter546715852023-01-29 17:25:335 hrs 29 mins ago0x083c7e063bd9c6244607205da0be15d1b69f657c IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002876064166
0x41fc3eebffa97546fd4db3417a2fa62a586d959a1f4cb70928e688ab7fc754aeEnter546711082023-01-29 17:08:475 hrs 46 mins ago0xe77a54ad04c4645c19ba6287566fbde7f8ca7636 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.001970736584
0x77489b2aaa692dd73976969e3de6500d8d37c81be87a6eae4ca45e74720f98cdLeave546698442023-01-29 16:24:146 hrs 31 mins ago0x5af17702846f1f37e3dde494232145aebd76bbb7 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002322116993
0x2cae2ac658bf4b7c7bc401869448d47b0cb343cfae2d72a31f17cb7cbb218257Leave546692152023-01-29 16:01:436 hrs 53 mins ago0xaa35a4b313efdda0369f499ae4e1702811d6ded3 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002778278222
0x2b1a890076f6fa5d4ec1246f895c811b34bd7b253cea7c67b0c13694d04a77caEnter546690742023-01-29 15:55:546 hrs 59 mins ago0xe4770cc516422b225fcb61c16255de54ebce615b IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002788842304
0xa43465ecfa0b872d47eb7a649a25dedfa447ba6bd6fccaffa9badf46cfc9a98fEnter546673522023-01-29 14:52:148 hrs 3 mins ago0x887e8b6119b38c60cb03cab204c0a704c6e0a473 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.005526818598
0x554e4b5750ecc289ecf975005deb3700a6f55816ad2d2a36207ab4f69102a5deEnter546672632023-01-29 14:49:368 hrs 5 mins ago0xa0ebf4f41ba800a534883daeb0b661029986385c IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.002376603292
0xf2d5b2334c36b29b4b4112d92b16440b6208217a8949cf7704652e0350f1385fApprove546650792023-01-29 13:59:098 hrs 56 mins ago0x21e1728c8768510c145c7b594561e59260c493ec IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.001922683627
0xa551be6b08bceb6e0d7993afac52d7bf12c184888e8a1120651199724be95b56Enter546603072023-01-29 12:35:0810 hrs 20 mins ago0xb1055c1d312fe2e7cd96f3b554e6c9f09bcb08b1 IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.003009973854
0x308426b00d8ec349a44ee3772a052d7cac428f7139eec3f594a4bca35906b02dLeave546532102023-01-29 10:21:4312 hrs 33 mins ago0x942aab0a9242e274cc57ad82b286adb72ebad51d IN  0xfcef8a994209d6916eb2c86cdd2afd60aa6f54b10 FTM0.003308195119
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xf6f649a64d267b6c909a98c8e0302ddbcb75afc325f88bdb15517b2304f256a0224370842021-11-18 18:12:59437 days 4 hrs ago Beethoven X: Deployer  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BeetsBar

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-11-18
*/

// SPDX-License-Identifier: MIT

// Sources flattened with hardhat v2.6.8 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]



pragma solidity ^0.8.0;

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]



pragma solidity ^0.8.0;



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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]



pragma solidity ^0.8.0;

/**
 * @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 on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        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");

        (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");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


// File @openzeppelin/contracts/token/ERC20/utils/[email protected]



pragma solidity ^0.8.0;


/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File contracts_orig/governance/BeetsBar.sol



pragma solidity 0.8.7;



contract BeetsBar is ERC20("FreshBeets", "fBEETS") {
    using SafeERC20 for IERC20;

    IERC20 public vestingToken;

    event Enter(
        address indexed user,
        uint256 vestingInAmount,
        uint256 mintedAmount
    );
    event Leave(
        address indexed user,
        uint256 vestingOutAmount,
        uint256 burnedAmount
    );
    event ShareRevenue(uint256 amount);

    constructor(IERC20 _vestingToken) {
        vestingToken = _vestingToken;
    }

    function enter(uint256 _amount) external {
        if (_amount > 0) {
            uint256 totalLockedTokenSupply = vestingToken.balanceOf(
                address(this)
            );

            uint256 totalFreshBeets = totalSupply();

            vestingToken.transferFrom(msg.sender, address(this), _amount);
            uint256 mintAmount;
            // If no fBeets exists, mint it 1:1 to the amount put in
            if (totalFreshBeets == 0 || totalLockedTokenSupply == 0) {
                mintAmount = _amount;
            }
            // Calculate and mint the amount of fBeets the blp is worth. The ratio will change overtime
            else {
                uint256 shareOfFreshBeets = (_amount * totalFreshBeets) /
                    totalLockedTokenSupply;

                mintAmount = shareOfFreshBeets;
            }
            _mint(msg.sender, mintAmount);
            emit Enter(msg.sender, _amount, mintAmount);
        }
    }

    function leave(uint256 _shareOfFreshBeets) external {
        if (_shareOfFreshBeets > 0) {
            uint256 totalVestedTokenSupply = vestingToken.balanceOf(
                address(this)
            );
            uint256 totalFreshBeets = totalSupply();
            // Calculates the amount of vestingToken the fBeets are worth
            uint256 amount = (_shareOfFreshBeets * totalVestedTokenSupply) /
                totalFreshBeets;
            _burn(msg.sender, _shareOfFreshBeets);
            vestingToken.transfer(msg.sender, amount);

            emit Leave(msg.sender, amount, _shareOfFreshBeets);
        }
    }

    function shareRevenue(uint256 _amount) external {
        vestingToken.transferFrom(msg.sender, address(this), _amount);
        emit ShareRevenue(_amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_vestingToken","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"vestingInAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedAmount","type":"uint256"}],"name":"Enter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"vestingOutAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnedAmount","type":"uint256"}],"name":"Leave","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ShareRevenue","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":"_shareOfFreshBeets","type":"uint256"}],"name":"leave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"shareRevenue","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":"vestingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051620012073803806200120783398101604081905262000034916200016a565b604080518082018252600a8152694672657368426565747360b01b60208083019182528351808501909452600684526566424545545360d01b9084015281519192916200008491600391620000c4565b5080516200009a906004906020840190620000c4565b5050600580546001600160a01b0319166001600160a01b03939093169290921790915550620001d9565b828054620000d2906200019c565b90600052602060002090601f016020900481019282620000f6576000855562000141565b82601f106200011157805160ff191683800117855562000141565b8280016001018555821562000141579182015b828111156200014157825182559160200191906001019062000124565b506200014f92915062000153565b5090565b5b808211156200014f576000815560010162000154565b6000602082840312156200017d57600080fd5b81516001600160a01b03811681146200019557600080fd5b9392505050565b600181811c90821680620001b157607f821691505b60208210811415620001d357634e487b7160e01b600052602260045260246000fd5b50919050565b61101e80620001e96000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80633950935111610097578063a457c2d711610066578063a457c2d714610206578063a59f3e0c14610219578063a9059cbb1461022c578063dd62ed3e1461023f57600080fd5b806339509351146101af57806367dfd4c9146101c257806370a08231146101d557806395d89b41146101fe57600080fd5b806318160ddd116100d357806318160ddd1461015057806319d152fa1461016257806323b872dd1461018d578063313ce567146101a057600080fd5b806306fdde03146100fa578063095ea7b314610118578063139e41e41461013b575b600080fd5b610102610278565b60405161010f9190610ed2565b60405180910390f35b61012b610126366004610e54565b61030a565b604051901515815260200161010f565b61014e610149366004610ea0565b610320565b005b6002545b60405190815260200161010f565b600554610175906001600160a01b031681565b6040516001600160a01b03909116815260200161010f565b61012b61019b366004610e18565b6103e1565b6040516012815260200161010f565b61012b6101bd366004610e54565b610490565b61014e6101d0366004610ea0565b6104cc565b6101546101e3366004610dc3565b6001600160a01b031660009081526020819052604090205490565b610102610648565b61012b610214366004610e54565b610657565b61014e610227366004610ea0565b6106f0565b61012b61023a366004610e54565b610881565b61015461024d366004610de5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461028790610f97565b80601f01602080910402602001604051908101604052809291908181526020018280546102b390610f97565b80156103005780601f106102d557610100808354040283529160200191610300565b820191906000526020600020905b8154815290600101906020018083116102e357829003601f168201915b5050505050905090565b600061031733848461088e565b50600192915050565b6005546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561037257600080fd5b505af1158015610386573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103aa9190610e7e565b506040518181527f8345132cbbbde83001e783cdfdd5190dedc863ae82cae7abe302b22322a602749060200160405180910390a150565b60006103ee8484846109b3565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156104785760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610485853385840361088e565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103179185906104c7908690610f27565b61088e565b8015610645576005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561051657600080fd5b505afa15801561052a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054e9190610eb9565b9050600061055b60025490565b905060008161056a8486610f61565b6105749190610f3f565b90506105803385610b82565b60055460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b1580156105cc57600080fd5b505af11580156105e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106049190610e7e565b50604080518281526020810186905233917f0f0f7f8153c6d63a5696720d4cc434e56bb5ac1cf8c791ed9c180defb6e9215391015b60405180910390a25050505b50565b60606004805461028790610f97565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156106d95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161046f565b6106e6338585840361088e565b5060019392505050565b8015610645576005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b15801561073a57600080fd5b505afa15801561074e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107729190610eb9565b9050600061077f60025490565b6005546040516323b872dd60e01b8152336004820152306024820152604481018690529192506001600160a01b0316906323b872dd90606401602060405180830381600087803b1580156107d257600080fd5b505af11580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a9190610e7e565b506000811580610818575082155b1561082457508261083f565b6000836108318487610f61565b61083b9190610f3f565b9150505b6108493382610cc8565b604080518581526020810183905233917f5087fbec8bdd9b358f62d89babb5f4dd44f8576230a9520c90e3407d6f4dd1fb9101610639565b60006103173384846109b3565b6001600160a01b0383166108f05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161046f565b6001600160a01b0382166109515760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161046f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610a175760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161046f565b6001600160a01b038216610a795760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161046f565b6001600160a01b03831660009081526020819052604090205481811015610af15760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161046f565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610b28908490610f27565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610b7491815260200190565b60405180910390a350505050565b6001600160a01b038216610be25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161046f565b6001600160a01b03821660009081526020819052604090205481811015610c565760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161046f565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610c85908490610f80565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016109a6565b6001600160a01b038216610d1e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161046f565b8060026000828254610d309190610f27565b90915550506001600160a01b03821660009081526020819052604081208054839290610d5d908490610f27565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b80356001600160a01b0381168114610dbe57600080fd5b919050565b600060208284031215610dd557600080fd5b610dde82610da7565b9392505050565b60008060408385031215610df857600080fd5b610e0183610da7565b9150610e0f60208401610da7565b90509250929050565b600080600060608486031215610e2d57600080fd5b610e3684610da7565b9250610e4460208501610da7565b9150604084013590509250925092565b60008060408385031215610e6757600080fd5b610e7083610da7565b946020939093013593505050565b600060208284031215610e9057600080fd5b81518015158114610dde57600080fd5b600060208284031215610eb257600080fd5b5035919050565b600060208284031215610ecb57600080fd5b5051919050565b600060208083528351808285015260005b81811015610eff57858101830151858201604001528201610ee3565b81811115610f11576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610f3a57610f3a610fd2565b500190565b600082610f5c57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610f7b57610f7b610fd2565b500290565b600082821015610f9257610f92610fd2565b500390565b600181811c90821680610fab57607f821691505b60208210811415610fcc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea264697066735822122099dba961d80a11b8100ae18b0168b1dfa71a388debc99d091c5a88f9b93a322f64736f6c63430008070033000000000000000000000000cde5a11a4acb4ee4c805352cec57e236bdbc3837

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

000000000000000000000000cde5a11a4acb4ee4c805352cec57e236bdbc3837

-----Decoded View---------------
Arg [0] : _vestingToken (address): 0xcde5a11a4acb4ee4c805352cec57e236bdbc3837

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cde5a11a4acb4ee4c805352cec57e236bdbc3837


Deployed ByteCode Sourcemap

28645:2311:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6562:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8729:169;;;;;;:::i;:::-;;:::i;:::-;;;2928:14:1;;2921:22;2903:41;;2891:2;2876:18;8729:169:0;2763:187:1;30788:165:0;;;;;;:::i;:::-;;:::i;:::-;;7682:108;7770:12;;7682:108;;;7929:25:1;;;7917:2;7902:18;7682:108:0;7783:177:1;28738:26:0;;;;;-1:-1:-1;;;;;28738:26:0;;;;;;-1:-1:-1;;;;;2060:32:1;;;2042:51;;2030:2;2015:18;28738:26:0;1896:203:1;9380:492:0;;;;;;:::i;:::-;;:::i;7524:93::-;;;7607:2;8360:36:1;;8348:2;8333:18;7524:93:0;8218:184:1;10281:215:0;;;;;;:::i;:::-;;:::i;30137:643::-;;;;;;:::i;:::-;;:::i;7853:127::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7954:18:0;7927:7;7954:18;;;;;;;;;;;;7853:127;6781:104;;;:::i;10999:413::-;;;;;;:::i;:::-;;:::i;29148:981::-;;;;;;:::i;:::-;;:::i;8193:175::-;;;;;;:::i;:::-;;:::i;8431:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8547:18:0;;;8520:7;8547:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8431:151;6562:100;6616:13;6649:5;6642:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6562:100;:::o;8729:169::-;8812:4;8829:39;4349:10;8852:7;8861:6;8829:8;:39::i;:::-;-1:-1:-1;8886:4:0;8729:169;;;;:::o;30788:165::-;30847:12;;:61;;-1:-1:-1;;;30847:61:0;;30873:10;30847:61;;;2344:34:1;30893:4:0;2394:18:1;;;2387:43;2446:18;;;2439:34;;;-1:-1:-1;;;;;30847:12:0;;;;:25;;2279:18:1;;30847:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30924:21:0;;7929:25:1;;;30924:21:0;;7917:2:1;7902:18;30924:21:0;;;;;;;30788:165;:::o;9380:492::-;9520:4;9537:36;9547:6;9555:9;9566:6;9537:9;:36::i;:::-;-1:-1:-1;;;;;9613:19:0;;9586:24;9613:19;;;:11;:19;;;;;;;;4349:10;9613:33;;;;;;;;9665:26;;;;9657:79;;;;-1:-1:-1;;;9657:79:0;;5597:2:1;9657:79:0;;;5579:21:1;5636:2;5616:18;;;5609:30;5675:34;5655:18;;;5648:62;-1:-1:-1;;;5726:18:1;;;5719:38;5774:19;;9657:79:0;;;;;;;;;9772:57;9781:6;4349:10;9822:6;9803:16;:25;9772:8;:57::i;:::-;-1:-1:-1;9860:4:0;;9380:492;-1:-1:-1;;;;9380:492:0:o;10281:215::-;4349:10;10369:4;10418:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10418:34:0;;;;;;;;;;10369:4;;10386:80;;10409:7;;10418:47;;10455:10;;10418:47;:::i;:::-;10386:8;:80::i;30137:643::-;30204:22;;30200:573;;30276:12;;:69;;-1:-1:-1;;;30276:69:0;;30325:4;30276:69;;;2042:51:1;30243:30:0;;-1:-1:-1;;;;;30276:12:0;;:22;;2015:18:1;;30276:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30243:102;;30360:23;30386:13;7770:12;;;7682:108;30386:13;30360:39;-1:-1:-1;30489:14:0;30360:39;30507:43;30528:22;30507:18;:43;:::i;:::-;30506:80;;;;:::i;:::-;30489:97;;30601:37;30607:10;30619:18;30601:5;:37::i;:::-;30653:12;;:41;;-1:-1:-1;;;30653:41:0;;30675:10;30653:41;;;2658:51:1;2725:18;;;2718:34;;;-1:-1:-1;;;;;30653:12:0;;;;:21;;2631:18:1;;30653:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;30716:45:0;;;8139:25:1;;;8195:2;8180:18;;8173:34;;;30722:10:0;;30716:45;;8112:18:1;30716:45:0;;;;;;;;30228:545;;;30200:573;30137:643;:::o;6781:104::-;6837:13;6870:7;6863:14;;;;;:::i;10999:413::-;4349:10;11092:4;11136:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11136:34:0;;;;;;;;;;11189:35;;;;11181:85;;;;-1:-1:-1;;;11181:85:0;;7219:2:1;11181:85:0;;;7201:21:1;7258:2;7238:18;;;7231:30;7297:34;7277:18;;;7270:62;-1:-1:-1;;;7348:18:1;;;7341:35;7393:19;;11181:85:0;7017:401:1;11181:85:0;11302:67;4349:10;11325:7;11353:15;11334:16;:34;11302:8;:67::i;:::-;-1:-1:-1;11400:4:0;;10999:413;-1:-1:-1;;;10999:413:0:o;29148:981::-;29204:11;;29200:922;;29265:12;;:69;;-1:-1:-1;;;29265:69:0;;29314:4;29265:69;;;2042:51:1;29232:30:0;;-1:-1:-1;;;;;29265:12:0;;:22;;2015:18:1;;29265:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29232:102;;29351:23;29377:13;7770:12;;;7682:108;29377:13;29407:12;;:61;;-1:-1:-1;;;29407:61:0;;29433:10;29407:61;;;2344:34:1;29453:4:0;2394:18:1;;;2387:43;2446:18;;;2439:34;;;29351:39:0;;-1:-1:-1;;;;;;29407:12:0;;:25;;2279:18:1;;29407:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29483:18:0;29590:20;;;:51;;-1:-1:-1;29614:27:0;;29590:51;29586:423;;;-1:-1:-1;29675:7:0;29586:423;;;29841:25;29920:22;29870:25;29880:15;29870:7;:25;:::i;:::-;29869:73;;;;:::i;:::-;29841:101;-1:-1:-1;;29586:423:0;30023:29;30029:10;30041;30023:5;:29::i;:::-;30072:38;;;8139:25:1;;;8195:2;8180:18;;8173:34;;;30078:10:0;;30072:38;;8112:18:1;30072:38:0;7965:248:1;8193:175:0;8279:4;8296:42;4349:10;8320:9;8331:6;8296:9;:42::i;14683:380::-;-1:-1:-1;;;;;14819:19:0;;14811:68;;;;-1:-1:-1;;;14811:68:0;;6814:2:1;14811:68:0;;;6796:21:1;6853:2;6833:18;;;6826:30;6892:34;6872:18;;;6865:62;-1:-1:-1;;;6943:18:1;;;6936:34;6987:19;;14811:68:0;6612:400:1;14811:68:0;-1:-1:-1;;;;;14898:21:0;;14890:68;;;;-1:-1:-1;;;14890:68:0;;4787:2:1;14890:68:0;;;4769:21:1;4826:2;4806:18;;;4799:30;4865:34;4845:18;;;4838:62;-1:-1:-1;;;4916:18:1;;;4909:32;4958:19;;14890:68:0;4585:398:1;14890:68:0;-1:-1:-1;;;;;14971:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15023:32;;7929:25:1;;;15023:32:0;;7902:18:1;15023:32:0;;;;;;;;14683:380;;;:::o;11902:733::-;-1:-1:-1;;;;;12042:20:0;;12034:70;;;;-1:-1:-1;;;12034:70:0;;6408:2:1;12034:70:0;;;6390:21:1;6447:2;6427:18;;;6420:30;6486:34;6466:18;;;6459:62;-1:-1:-1;;;6537:18:1;;;6530:35;6582:19;;12034:70:0;6206:401:1;12034:70:0;-1:-1:-1;;;;;12123:23:0;;12115:71;;;;-1:-1:-1;;;12115:71:0;;3980:2:1;12115:71:0;;;3962:21:1;4019:2;3999:18;;;3992:30;4058:34;4038:18;;;4031:62;-1:-1:-1;;;4109:18:1;;;4102:33;4152:19;;12115:71:0;3778:399:1;12115:71:0;-1:-1:-1;;;;;12283:17:0;;12259:21;12283:17;;;;;;;;;;;12319:23;;;;12311:74;;;;-1:-1:-1;;;12311:74:0;;5190:2:1;12311:74:0;;;5172:21:1;5229:2;5209:18;;;5202:30;5268:34;5248:18;;;5241:62;-1:-1:-1;;;5319:18:1;;;5312:36;5365:19;;12311:74:0;4988:402:1;12311:74:0;-1:-1:-1;;;;;12421:17:0;;;:9;:17;;;;;;;;;;;12441:22;;;12421:42;;12485:20;;;;;;;;:30;;12457:6;;12421:9;12485:30;;12457:6;;12485:30;:::i;:::-;;;;;;;;12550:9;-1:-1:-1;;;;;12533:35:0;12542:6;-1:-1:-1;;;;;12533:35:0;;12561:6;12533:35;;;;7929:25:1;;7917:2;7902:18;;7783:177;12533:35:0;;;;;;;;12023:612;11902:733;;;:::o;13654:591::-;-1:-1:-1;;;;;13738:21:0;;13730:67;;;;-1:-1:-1;;;13730:67:0;;6006:2:1;13730:67:0;;;5988:21:1;6045:2;6025:18;;;6018:30;6084:34;6064:18;;;6057:62;-1:-1:-1;;;6135:18:1;;;6128:31;6176:19;;13730:67:0;5804:397:1;13730:67:0;-1:-1:-1;;;;;13897:18:0;;13872:22;13897:18;;;;;;;;;;;13934:24;;;;13926:71;;;;-1:-1:-1;;;13926:71:0;;4384:2:1;13926:71:0;;;4366:21:1;4423:2;4403:18;;;4396:30;4462:34;4442:18;;;4435:62;-1:-1:-1;;;4513:18:1;;;4506:32;4555:19;;13926:71:0;4182:398:1;13926:71:0;-1:-1:-1;;;;;14033:18:0;;:9;:18;;;;;;;;;;14054:23;;;14033:44;;14099:12;:22;;14071:6;;14033:9;14099:22;;14071:6;;14099:22;:::i;:::-;;;;-1:-1:-1;;14139:37:0;;7929:25:1;;;14165:1:0;;-1:-1:-1;;;;;14139:37:0;;;;;7917:2:1;7902:18;14139:37:0;7783:177:1;12922:399:0;-1:-1:-1;;;;;13006:21:0;;12998:65;;;;-1:-1:-1;;;12998:65:0;;7625:2:1;12998:65:0;;;7607:21:1;7664:2;7644:18;;;7637:30;7703:33;7683:18;;;7676:61;7754:18;;12998:65:0;7423:355:1;12998:65:0;13154:6;13138:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13171:18:0;;:9;:18;;;;;;;;;;:28;;13193:6;;13171:9;:28;;13193:6;;13171:28;:::i;:::-;;;;-1:-1:-1;;13215:37:0;;7929:25:1;;;-1:-1:-1;;;;;13215:37:0;;;13232:1;;13215:37;;7917:2:1;7902:18;13215:37:0;;;;;;;12922:399;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:52;;;1126:1;1123;1116:12;1078:52;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;981:254:1:o;1240:277::-;1307:6;1360:2;1348:9;1339:7;1335:23;1331:32;1328:52;;;1376:1;1373;1366:12;1328:52;1408:9;1402:16;1461:5;1454:13;1447:21;1440:5;1437:32;1427:60;;1483:1;1480;1473:12;1522:180;1581:6;1634:2;1622:9;1613:7;1609:23;1605:32;1602:52;;;1650:1;1647;1640:12;1602:52;-1:-1:-1;1673:23:1;;1522:180;-1:-1:-1;1522:180:1:o;1707:184::-;1777:6;1830:2;1818:9;1809:7;1805:23;1801:32;1798:52;;;1846:1;1843;1836:12;1798:52;-1:-1:-1;1869:16:1;;1707:184;-1:-1:-1;1707:184:1:o;3176:597::-;3288:4;3317:2;3346;3335:9;3328:21;3378:6;3372:13;3421:6;3416:2;3405:9;3401:18;3394:34;3446:1;3456:140;3470:6;3467:1;3464:13;3456:140;;;3565:14;;;3561:23;;3555:30;3531:17;;;3550:2;3527:26;3520:66;3485:10;;3456:140;;;3614:6;3611:1;3608:13;3605:91;;;3684:1;3679:2;3670:6;3659:9;3655:22;3651:31;3644:42;3605:91;-1:-1:-1;3757:2:1;3736:15;-1:-1:-1;;3732:29:1;3717:45;;;;3764:2;3713:54;;3176:597;-1:-1:-1;;;3176:597:1:o;8407:128::-;8447:3;8478:1;8474:6;8471:1;8468:13;8465:39;;;8484:18;;:::i;:::-;-1:-1:-1;8520:9:1;;8407:128::o;8540:217::-;8580:1;8606;8596:132;;8650:10;8645:3;8641:20;8638:1;8631:31;8685:4;8682:1;8675:15;8713:4;8710:1;8703:15;8596:132;-1:-1:-1;8742:9:1;;8540:217::o;8762:168::-;8802:7;8868:1;8864;8860:6;8856:14;8853:1;8850:21;8845:1;8838:9;8831:17;8827:45;8824:71;;;8875:18;;:::i;:::-;-1:-1:-1;8915:9:1;;8762:168::o;8935:125::-;8975:4;9003:1;9000;8997:8;8994:34;;;9008:18;;:::i;:::-;-1:-1:-1;9045:9:1;;8935:125::o;9065:380::-;9144:1;9140:12;;;;9187;;;9208:61;;9262:4;9254:6;9250:17;9240:27;;9208:61;9315:2;9307:6;9304:14;9284:18;9281:38;9278:161;;;9361:10;9356:3;9352:20;9349:1;9342:31;9396:4;9393:1;9386:15;9424:4;9421:1;9414:15;9278:161;;9065:380;;;:::o;9450:127::-;9511:10;9506:3;9502:20;9499:1;9492:31;9542:4;9539:1;9532:15;9566:4;9563:1;9556:15

Swarm Source

ipfs://99dba961d80a11b8100ae18b0168b1dfa71a388debc99d091c5a88f9b93a322f
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.