UNPKG

@ohgeez/fsushi

Version:

fSUSHI is a protocol built on top of [FlashStake](http://flashstake.io/) and [SushiSwap](https://sushi.com) that enables stakers to get instant, upfront yield without waiting for it to accrue.

671 lines (387 loc) 12.6 kB
# ERC4626 *Implementation of the ERC4626 "Tokenized Vault Standard" as defined in https://eips.ethereum.org/EIPS/eip-4626[EIP-4626]. This extension allows the minting and burning of "shares" (represented using the ERC20 inheritance) in exchange for underlying "assets" through standardized {deposit}, {mint}, {redeem} and {burn} workflows. This contract extends the ERC20 standard. Any additional extensions included along it would affect the "shares" token represented by this contract and not the "assets" token which is an independent contract. CAUTION: Deposits and withdrawals may incur unexpected slippage. Users should verify that the amount received of shares or assets is as expected. EOAs should operate through a wrapper that performs these checks such as https://github.com/fei-protocol/ERC4626#erc4626router-and-base[ERC4626Router]. _Available since v4.7._* ## Methods ### allowance ```solidity function allowance(address owner, address spender) external view returns (uint256) ``` *See {IERC20-allowance}.* #### Parameters | Name | Type | Description | |---|---|---| | owner | address | undefined | | spender | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### approve ```solidity function approve(address spender, uint256 amount) external nonpayable returns (bool) ``` *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.* #### Parameters | Name | Type | Description | |---|---|---| | spender | address | undefined | | amount | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | bool | undefined | ### asset ```solidity function asset() external view returns (address) ``` *See {IERC4626-asset}. * #### Returns | Name | Type | Description | |---|---|---| | _0 | address | undefined | ### balanceOf ```solidity function balanceOf(address account) external view returns (uint256) ``` *See {IERC20-balanceOf}.* #### Parameters | Name | Type | Description | |---|---|---| | account | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### convertToAssets ```solidity function convertToAssets(uint256 shares) external view returns (uint256 assets) ``` *See {IERC4626-convertToAssets}. * #### Parameters | Name | Type | Description | |---|---|---| | shares | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | assets | uint256 | undefined | ### convertToShares ```solidity function convertToShares(uint256 assets) external view returns (uint256 shares) ``` *See {IERC4626-convertToShares}. * #### Parameters | Name | Type | Description | |---|---|---| | assets | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | shares | uint256 | undefined | ### decimals ```solidity function decimals() external view returns (uint8) ``` *Decimals are read from the underlying asset in the constructor and cached. If this fails (e.g., the asset has not been created yet), the cached value is set to a default obtained by `super.decimals()` (which depends on inheritance but is most likely 18). Override this function in order to set a guaranteed hardcoded value. See {IERC20Metadata-decimals}.* #### Returns | Name | Type | Description | |---|---|---| | _0 | uint8 | undefined | ### decreaseAllowance ```solidity function decreaseAllowance(address spender, uint256 subtractedValue) external nonpayable returns (bool) ``` *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`.* #### Parameters | Name | Type | Description | |---|---|---| | spender | address | undefined | | subtractedValue | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | bool | undefined | ### deposit ```solidity function deposit(uint256 assets, address receiver) external nonpayable returns (uint256) ``` *See {IERC4626-deposit}. * #### Parameters | Name | Type | Description | |---|---|---| | assets | uint256 | undefined | | receiver | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### increaseAllowance ```solidity function increaseAllowance(address spender, uint256 addedValue) external nonpayable returns (bool) ``` *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.* #### Parameters | Name | Type | Description | |---|---|---| | spender | address | undefined | | addedValue | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | bool | undefined | ### maxDeposit ```solidity function maxDeposit(address) external view returns (uint256) ``` *See {IERC4626-maxDeposit}. * #### Parameters | Name | Type | Description | |---|---|---| | _0 | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### maxMint ```solidity function maxMint(address) external view returns (uint256) ``` *See {IERC4626-maxMint}. * #### Parameters | Name | Type | Description | |---|---|---| | _0 | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### maxRedeem ```solidity function maxRedeem(address owner) external view returns (uint256) ``` *See {IERC4626-maxRedeem}. * #### Parameters | Name | Type | Description | |---|---|---| | owner | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### maxWithdraw ```solidity function maxWithdraw(address owner) external view returns (uint256) ``` *See {IERC4626-maxWithdraw}. * #### Parameters | Name | Type | Description | |---|---|---| | owner | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### mint ```solidity function mint(uint256 shares, address receiver) external nonpayable returns (uint256) ``` *See {IERC4626-mint}. * #### Parameters | Name | Type | Description | |---|---|---| | shares | uint256 | undefined | | receiver | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### name ```solidity function name() external view returns (string) ``` *Returns the name of the token.* #### Returns | Name | Type | Description | |---|---|---| | _0 | string | undefined | ### previewDeposit ```solidity function previewDeposit(uint256 assets) external view returns (uint256) ``` *See {IERC4626-previewDeposit}. * #### Parameters | Name | Type | Description | |---|---|---| | assets | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### previewMint ```solidity function previewMint(uint256 shares) external view returns (uint256) ``` *See {IERC4626-previewMint}. * #### Parameters | Name | Type | Description | |---|---|---| | shares | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### previewRedeem ```solidity function previewRedeem(uint256 shares) external view returns (uint256) ``` *See {IERC4626-previewRedeem}. * #### Parameters | Name | Type | Description | |---|---|---| | shares | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### previewWithdraw ```solidity function previewWithdraw(uint256 assets) external view returns (uint256) ``` *See {IERC4626-previewWithdraw}. * #### Parameters | Name | Type | Description | |---|---|---| | assets | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### redeem ```solidity function redeem(uint256 shares, address receiver, address owner) external nonpayable returns (uint256) ``` *See {IERC4626-redeem}. * #### Parameters | Name | Type | Description | |---|---|---| | shares | uint256 | undefined | | receiver | address | undefined | | owner | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### symbol ```solidity function symbol() external view returns (string) ``` *Returns the symbol of the token, usually a shorter version of the name.* #### Returns | Name | Type | Description | |---|---|---| | _0 | string | undefined | ### totalAssets ```solidity function totalAssets() external view returns (uint256) ``` *See {IERC4626-totalAssets}. * #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### totalSupply ```solidity function totalSupply() external view returns (uint256) ``` *See {IERC20-totalSupply}.* #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ### transfer ```solidity function transfer(address to, uint256 amount) external nonpayable returns (bool) ``` *See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`.* #### Parameters | Name | Type | Description | |---|---|---| | to | address | undefined | | amount | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | bool | undefined | ### transferFrom ```solidity function transferFrom(address from, address to, uint256 amount) external nonpayable returns (bool) ``` *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`.* #### Parameters | Name | Type | Description | |---|---|---| | from | address | undefined | | to | address | undefined | | amount | uint256 | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | bool | undefined | ### withdraw ```solidity function withdraw(uint256 assets, address receiver, address owner) external nonpayable returns (uint256) ``` *See {IERC4626-withdraw}. * #### Parameters | Name | Type | Description | |---|---|---| | assets | uint256 | undefined | | receiver | address | undefined | | owner | address | undefined | #### Returns | Name | Type | Description | |---|---|---| | _0 | uint256 | undefined | ## Events ### Approval ```solidity event Approval(address indexed owner, address indexed spender, uint256 value) ``` #### Parameters | Name | Type | Description | |---|---|---| | owner `indexed` | address | undefined | | spender `indexed` | address | undefined | | value | uint256 | undefined | ### Deposit ```solidity event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares) ``` #### Parameters | Name | Type | Description | |---|---|---| | sender `indexed` | address | undefined | | owner `indexed` | address | undefined | | assets | uint256 | undefined | | shares | uint256 | undefined | ### Transfer ```solidity event Transfer(address indexed from, address indexed to, uint256 value) ``` #### Parameters | Name | Type | Description | |---|---|---| | from `indexed` | address | undefined | | to `indexed` | address | undefined | | value | uint256 | undefined | ### Withdraw ```solidity event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares) ``` #### Parameters | Name | Type | Description | |---|---|---| | sender `indexed` | address | undefined | | receiver `indexed` | address | undefined | | owner `indexed` | address | undefined | | assets | uint256 | undefined | | shares | uint256 | undefined |