Contract 0x6b82eace10f782487b61c616b623a78c965fdd88

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa1c68a2743cc7c520f06be64ce1262f49a09233e71965a3e3ff48847b1e25cacLeave Pool128653742024-03-05 15:11:285 mins ago0xeee0a6be7edb0976d4e9e4920574c52374c069b3 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.47764920
0x3b52510c9c6b1a023b00d4c2de5ea74550f33c1ea9f91882647c9bc992c77694Enter Pool128653392024-03-05 15:08:128 mins ago0x007bd8bf6367b8041af869e4d013ace599b6c4e0 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.72443260
0x9ce1b5067b986fac853a219fd47a1606f535ccde9118d39a0e9530bc903d1ba7Enter Pool128652332024-03-05 14:58:1618 mins agoCronos ID Name rwrskr.cro IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.7246750
0xc4f756647d6319a8923661411bcf603d59a995512d8717e56a10ebbfafae4271Approve128652312024-03-05 14:58:0518 mins ago0x3c61da5a2a32edaa92eb816d5a1ae5f71b95fbf0 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.517637120
0xcc08f4b98af5919320d13ca0752efc09a133801a14f29ff334b322ad56a93c58Approve128651562024-03-05 14:51:0725 mins ago0xb3716a03f3dafe037b7105678ee4ef3e1aaadc1d IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.517637120
0x4b84e763bd42fee4df662214d48e7340fdd12f363a1e66d86f4a5c54b134946bLeave Pool128651172024-03-05 14:47:2929 mins ago0x3f9745e7033038c6607f651469c89037c1e93e2a IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.476613276503 10,078.095164166
0x070c515739c3d2841d94f01781dc84e9fc7c7020deccff99a22a047fced0ec30Enter Pool128648352024-03-05 14:21:1755 mins ago0x6842c6f7eb0f2cb337b8a00baed159ecfbc77d19 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0x64601adcb32fc4e7605626b158504c9edefe9d3fcb71e8c87d9aa9320f85e047Enter Pool128646032024-03-05 13:59:441 hr 16 mins ago0x0e0f9b5e206837184dfd122529cd8a7cbcd768d3 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0xa7e189e7e1839436b5e6389d860ca3868dded53e384f2bedc963890df20ccff6Approve128642612024-03-05 13:28:001 hr 48 mins ago0x739b956d7affdfe7e0f081526709dec293afc5ed IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.47057920
0x60b75840ba87f710320cab0f8f1c42a541a9c9fa7136ae258ecd540726614df4Enter Pool128641852024-03-05 13:20:581 hr 55 mins agoCronos ID Name ammarocks.cro IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.55184380
0x69ddd40bed2c721464a8aaf9dd96500c0bfce5a3e80bb060d5a2eddffa06ae39Leave Pool128639022024-03-05 12:54:422 hrs 21 mins agoCronos ID Name andrefox1680.cro IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.65035920
0x51bb8804ca42d7933018334ec5023dbbcf1165b6d7b6bb5021cb17271364b63cLeave Pool128637032024-03-05 12:36:122 hrs 40 mins ago0x7a9200498f2ec8b40d819d4db93472cfcc48cbb8 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.47777040
0x4fbdad45d71f5000598da3cae5d2b9540d11e4ebcb8fa9c086bd02de7aa0d977Enter Pool128636692024-03-05 12:33:012 hrs 43 mins ago0xd1c22e8618c1f06acc3e57ae66da470f9c3df60b IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.7246750
0x0c34620c939139813eafb84a117cc8dc326db19b4d18b23eb389f718f813b808Leave Pool128636232024-03-05 12:28:452 hrs 47 mins ago0x79205fbf5f31e8011c3e3f794b5ecf5bd59270a4 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.47764920
0x67d163a79323c98ed716349e32d06718e685eb7e9ce56d8258b8b7d9372f69f1Enter Pool128634442024-03-05 12:12:123 hrs 4 mins ago0xaacb7b70a4a088ecad953807ad50ca2f32c7cdbe IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0x36fcfe1fe47706408385560c2e858b64f42e1a172991142ec7f15bf7aa6205e3Enter Pool128630942024-03-05 11:39:443 hrs 36 mins ago0xb7c2892b180a75b90f294107d12ee0ea3b9a9fd5 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.7246750
0xf6371d900fead18028289583ed61ceb714e56b64803ccb33cdb3d9f7b8d4eceaEnter Pool128630932024-03-05 11:39:383 hrs 36 mins agoCronos ID Name bull.cro IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.498694793 10,001.5
0xf672937ac2ae53ab1679179bc4402e6e53d5e2b56e842d99200095e72f3a8180Leave Pool128630732024-03-05 11:37:473 hrs 38 mins ago0x7d5f95092b5c242ce8f788698776ca1340215952 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.47740680
0x68feaad9afbc51d073a280f824babefeb668f2957ec2ea961aa66ea391d0ef1cEnter Pool128628492024-03-05 11:17:013 hrs 59 mins ago0x40c9e684271a2be2b88f58c4d908a8fc800c8446 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.7246750
0x0cfb562fd59d1fd19ed8641a7c6732f6dbe26eb37cb2d31699fd39ff49f03d15Enter Pool128623752024-03-05 10:33:074 hrs 43 mins ago0xc2823ffa7d6d0cf3f09d91c85f753512166081fe IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0x3e2c6b2911487bf7ff0cb365d4b328256467edd4103771c9a3bc571b32c70d92Enter Pool128620152024-03-05 9:59:485 hrs 16 mins ago0xd3e556c28175dd79ced3e5bfc742ba920a566a5b IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.5519650
0x4f41fbca16e8037424ba4aae56ab9b02636255659b3fb93b055eeee14c8d9eedEnter Pool128617642024-03-05 9:36:335 hrs 39 mins ago0xb6ea9cc994ee72f7beb7c991db775441b7856ee7 IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0xc23f08894ceebb44fe0b05fc52168c0f8e05ed124f6cf3e47019ee96a3c4a708Enter Pool128614282024-03-05 9:05:306 hrs 10 mins ago0xd52786b86e36fe233462e4c0635d6a36fd8f1a7b IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0x79cb6ac8fa30874e3733bf688b5a03ee44eea87dc426a86a3d7ff0522c5d8867Enter Pool128613812024-03-05 9:01:106 hrs 15 mins agoCronos ID Name 0xe4a6cf0cba38d39cfda6766b3775bf461a800d95.cro IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.6761950
0x4d68b910f721dfd94c2a43e98ed085f672403ad4abc5fa9a5eb7c678b950a9c9Enter Pool128613692024-03-05 9:00:036 hrs 16 mins agoCronos ID Name 0xe4a6cf0cba38d39cfda6766b3775bf461a800d95.cro IN  0x6b82eace10f782487b61c616b623a78c965fdd880 CRO0.7246750
[ Download CSV Export 
Parent Txn Hash Block From To Value
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FerroBar

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : FerroBar.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

// FerroBar contract allows you to stake FER and receive xFER token, holding xFER entitles you to a share of the earnings from the platform swap
// ...in the form of an increase in value of xFER = FER ratio.

contract FerroBar is ERC20("FerroBar", "xFER") {
    using SafeERC20 for IERC20;
    IERC20 public immutable fer;

    // Define the Ferro token contract
    constructor(IERC20 _fer) {
        fer = _fer;
    }

    /// @notice Stake fer get xFER. xFER represents a yield-bearing receipt for your fer
    /// @dev Mints xFER in ratio of existing xFER to total staked fer
    /// @return xFERToMint number of xFER minted
    function enterPool(uint256 _amount) external returns (uint256 xFERToMint) {
        // Gets the amount of fer locked in the contract
        uint256 totalFer = fer.balanceOf(address(this));
        // Gets the amount of xFER in existence
        uint256 totalxFER = totalSupply();

        // If no xFER exists, mint it 1:1 to the amount put in
        if (totalxFER == 0 || totalFer == 0) {
            xFERToMint = _amount;
            _mint(msg.sender, xFERToMint);
        }
        // Calculate and mint the amount of xFER corresponding to the fer amount given. The ratio will change overtime,
        // ...as xFER is burned/minted and fer deposited + gained from fees / withdrawn.
        else {
            xFERToMint = (_amount * totalxFER) / totalFer;
            _mint(msg.sender, xFERToMint);
        }
        // Lock the fer in the contract
        fer.safeTransferFrom(msg.sender, address(this), _amount);
    }

    /// @notice Return your any amount of your xFER, claim back your corresponding fer + reward.
    /// @dev Unlocks the staked fer + gained fer and burns the xFER returned
    function leavePool(uint256 _share) external {
        // Gets the amount of xFER in existence
        uint256 totalShares = totalSupply();
        uint256 ferBal = fer.balanceOf(address(this));
        // Calculates the amount of fer the xFER is worth
        uint256 ferStakedPlusReward = (_share * ferBal) / totalShares;
        _burn(msg.sender, _share);
        fer.safeTransfer(msg.sender, ferStakedPlusReward);
    }
}

File 2 of 7 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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 7 : ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.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 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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 4 of 7 : SafeERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";
import "../../../utils/Address.sol";

/**
 * @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 5 of 7 : IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC20.sol";

/**
 * @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 6 of 7 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 7 of 7 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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);
            }
        }
    }
}

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

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_fer","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":"enterPool","outputs":[{"internalType":"uint256","name":"xFERToMint","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fer","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","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":"leavePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60a06040523480156200001157600080fd5b506040516200138d3803806200138d833981016040819052620000349162000155565b60408051808201825260088152672332b93937a130b960c11b6020808301918252835180850190945260048452633c2322a960e11b9084015281519192916200008091600391620000af565b50805162000096906004906020840190620000af565b50505060601b6001600160601b031916608052620001c2565b828054620000bd9062000185565b90600052602060002090601f016020900481019282620000e157600085556200012c565b82601f10620000fc57805160ff19168380011785556200012c565b828001600101855582156200012c579182015b828111156200012c5782518255916020019190600101906200010f565b506200013a9291506200013e565b5090565b5b808211156200013a57600081556001016200013f565b60006020828403121562000167578081fd5b81516001600160a01b03811681146200017e578182fd5b9392505050565b600181811c908216806200019a57607f821691505b60208210811415620001bc57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c611190620001fd600039600081816101350152818161039f01528181610478015281816104e4015261059001526111906000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635f951eab1161008c5780639ca53f82116100665780639ca53f82146101fa578063a457c2d71461020f578063a9059cbb14610222578063dd62ed3e1461023557600080fd5b80635f951eab146101b657806370a08231146101c957806395d89b41146101f257600080fd5b806318160ddd116100c857806318160ddd1461016f57806323b872dd14610181578063313ce5671461019457806339509351146101a357600080fd5b806306fdde03146100ef578063095ea7b31461010d5780630f86c24b14610130575b600080fd5b6100f761026e565b604051610104919061103c565b60405180910390f35b61012061011b366004610fa7565b610300565b6040519015158152602001610104565b6101577f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610104565b6002545b604051908152602001610104565b61012061018f366004610f6c565b610318565b60405160128152602001610104565b6101206101b1366004610fa7565b61033e565b6101736101c4366004610ff0565b61037d565b6101736101d7366004610f20565b6001600160a01b031660009081526020819052604090205490565b6100f76104a7565b61020d610208366004610ff0565b6104b6565b005b61012061021d366004610fa7565b6105bd565b610120610230366004610fa7565b61065f565b610173610243366004610f3a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461027d90611109565b80601f01602080910402602001604051908101604052809291908181526020018280546102a990611109565b80156102f65780601f106102cb576101008083540402835291602001916102f6565b820191906000526020600020905b8154815290600101906020018083116102d957829003601f168201915b5050505050905090565b60003361030e81858561066d565b5060019392505050565b600033610326858285610792565b61033185858561081e565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061030e908290869061037890879061106f565b61066d565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b1580156103e157600080fd5b505afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190611008565b9050600061042660025490565b9050801580610433575081155b1561044a5783925061044533846109ec565b61046b565b8161045582866110a7565b61045f9190611087565b925061046b33846109ec565b6104a06001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016333087610acb565b5050919050565b60606004805461027d90611109565b60006104c160025490565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561052657600080fd5b505afa15801561053a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055e9190611008565b905060008261056d83866110a7565b6105779190611087565b90506105833385610b36565b6105b76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383610c81565b50505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156106475760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610654828686840361066d565b506001949350505050565b60003361030e81858561081e565b6001600160a01b0383166106cf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161063e565b6001600160a01b0382166107305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161063e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105b757818110156108115760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161063e565b6105b7848484840361066d565b6001600160a01b0383166108825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161063e565b6001600160a01b0382166108e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161063e565b6001600160a01b0383166000908152602081905260409020548181101561095c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161063e565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061099390849061106f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109df91815260200190565b60405180910390a36105b7565b6001600160a01b038216610a425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161063e565b8060026000828254610a54919061106f565b90915550506001600160a01b03821660009081526020819052604081208054839290610a8190849061106f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526105b79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610cb1565b6001600160a01b038216610b965760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161063e565b6001600160a01b03821660009081526020819052604090205481811015610c0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161063e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610c399084906110c6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610785565b505050565b6040516001600160a01b038316602482015260448101829052610c7c90849063a9059cbb60e01b90606401610aff565b6000610d06826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d839092919063ffffffff16565b805190915015610c7c5780806020019051810190610d249190610fd0565b610c7c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063e565b6060610d928484600085610d9a565b949350505050565b606082471015610dfb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161063e565b6001600160a01b0385163b610e525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063e565b600080866001600160a01b03168587604051610e6e9190611020565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b5091509150610ec0828286610ecb565b979650505050505050565b60608315610eda575081610337565b825115610eea5782518084602001fd5b8160405162461bcd60e51b815260040161063e919061103c565b80356001600160a01b0381168114610f1b57600080fd5b919050565b600060208284031215610f31578081fd5b61033782610f04565b60008060408385031215610f4c578081fd5b610f5583610f04565b9150610f6360208401610f04565b90509250929050565b600080600060608486031215610f80578081fd5b610f8984610f04565b9250610f9760208501610f04565b9150604084013590509250925092565b60008060408385031215610fb9578182fd5b610fc283610f04565b946020939093013593505050565b600060208284031215610fe1578081fd5b81518015158114610337578182fd5b600060208284031215611001578081fd5b5035919050565b600060208284031215611019578081fd5b5051919050565b600082516110328184602087016110dd565b9190910192915050565b602081526000825180602084015261105b8160408501602087016110dd565b601f01601f19169190910160400192915050565b6000821982111561108257611082611144565b500190565b6000826110a257634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156110c1576110c1611144565b500290565b6000828210156110d8576110d8611144565b500390565b60005b838110156110f85781810151838201526020016110e0565b838111156105b75750506000910152565b600181811c9082168061111d57607f821691505b6020821081141561113e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea264697066735822122027b69e29161a1f19d083c13f20b972d95b185f95c485e80295f4fb66f890964364736f6c6343000804003300000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c782

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80635f951eab1161008c5780639ca53f82116100665780639ca53f82146101fa578063a457c2d71461020f578063a9059cbb14610222578063dd62ed3e1461023557600080fd5b80635f951eab146101b657806370a08231146101c957806395d89b41146101f257600080fd5b806318160ddd116100c857806318160ddd1461016f57806323b872dd14610181578063313ce5671461019457806339509351146101a357600080fd5b806306fdde03146100ef578063095ea7b31461010d5780630f86c24b14610130575b600080fd5b6100f761026e565b604051610104919061103c565b60405180910390f35b61012061011b366004610fa7565b610300565b6040519015158152602001610104565b6101577f00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c78281565b6040516001600160a01b039091168152602001610104565b6002545b604051908152602001610104565b61012061018f366004610f6c565b610318565b60405160128152602001610104565b6101206101b1366004610fa7565b61033e565b6101736101c4366004610ff0565b61037d565b6101736101d7366004610f20565b6001600160a01b031660009081526020819052604090205490565b6100f76104a7565b61020d610208366004610ff0565b6104b6565b005b61012061021d366004610fa7565b6105bd565b610120610230366004610fa7565b61065f565b610173610243366004610f3a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60606003805461027d90611109565b80601f01602080910402602001604051908101604052809291908181526020018280546102a990611109565b80156102f65780601f106102cb576101008083540402835291602001916102f6565b820191906000526020600020905b8154815290600101906020018083116102d957829003601f168201915b5050505050905090565b60003361030e81858561066d565b5060019392505050565b600033610326858285610792565b61033185858561081e565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061030e908290869061037890879061106f565b61066d565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c78216906370a082319060240160206040518083038186803b1580156103e157600080fd5b505afa1580156103f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104199190611008565b9050600061042660025490565b9050801580610433575081155b1561044a5783925061044533846109ec565b61046b565b8161045582866110a7565b61045f9190611087565b925061046b33846109ec565b6104a06001600160a01b037f00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c78216333087610acb565b5050919050565b60606004805461027d90611109565b60006104c160025490565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c78216906370a082319060240160206040518083038186803b15801561052657600080fd5b505afa15801561053a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055e9190611008565b905060008261056d83866110a7565b6105779190611087565b90506105833385610b36565b6105b76001600160a01b037f00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c782163383610c81565b50505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156106475760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b610654828686840361066d565b506001949350505050565b60003361030e81858561081e565b6001600160a01b0383166106cf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161063e565b6001600160a01b0382166107305760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161063e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146105b757818110156108115760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161063e565b6105b7848484840361066d565b6001600160a01b0383166108825760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161063e565b6001600160a01b0382166108e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161063e565b6001600160a01b0383166000908152602081905260409020548181101561095c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161063e565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061099390849061106f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109df91815260200190565b60405180910390a36105b7565b6001600160a01b038216610a425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161063e565b8060026000828254610a54919061106f565b90915550506001600160a01b03821660009081526020819052604081208054839290610a8190849061106f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526105b79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610cb1565b6001600160a01b038216610b965760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161063e565b6001600160a01b03821660009081526020819052604090205481811015610c0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161063e565b6001600160a01b0383166000908152602081905260408120838303905560028054849290610c399084906110c6565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610785565b505050565b6040516001600160a01b038316602482015260448101829052610c7c90849063a9059cbb60e01b90606401610aff565b6000610d06826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610d839092919063ffffffff16565b805190915015610c7c5780806020019051810190610d249190610fd0565b610c7c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063e565b6060610d928484600085610d9a565b949350505050565b606082471015610dfb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161063e565b6001600160a01b0385163b610e525760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063e565b600080866001600160a01b03168587604051610e6e9190611020565b60006040518083038185875af1925050503d8060008114610eab576040519150601f19603f3d011682016040523d82523d6000602084013e610eb0565b606091505b5091509150610ec0828286610ecb565b979650505050505050565b60608315610eda575081610337565b825115610eea5782518084602001fd5b8160405162461bcd60e51b815260040161063e919061103c565b80356001600160a01b0381168114610f1b57600080fd5b919050565b600060208284031215610f31578081fd5b61033782610f04565b60008060408385031215610f4c578081fd5b610f5583610f04565b9150610f6360208401610f04565b90509250929050565b600080600060608486031215610f80578081fd5b610f8984610f04565b9250610f9760208501610f04565b9150604084013590509250925092565b60008060408385031215610fb9578182fd5b610fc283610f04565b946020939093013593505050565b600060208284031215610fe1578081fd5b81518015158114610337578182fd5b600060208284031215611001578081fd5b5035919050565b600060208284031215611019578081fd5b5051919050565b600082516110328184602087016110dd565b9190910192915050565b602081526000825180602084015261105b8160408501602087016110dd565b601f01601f19169190910160400192915050565b6000821982111561108257611082611144565b500190565b6000826110a257634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156110c1576110c1611144565b500290565b6000828210156110d8576110d8611144565b500390565b60005b838110156110f85781810151838201526020016110e0565b838111156105b75750506000910152565b600181811c9082168061111d57607f821691505b6020821081141561113e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea264697066735822122027b69e29161a1f19d083c13f20b972d95b185f95c485e80295f4fb66f890964364736f6c63430008040033

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

00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c782

-----Decoded View---------------
Arg [0] : _fer (address): 0x39bc1e38c842c60775ce37566d03b41a7a66c782

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000039bc1e38c842c60775ce37566d03b41a7a66c782


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.