NAV Issuance Module
The NAVIssuanceModule is a smart contract that enables issuance and redemption of a SetToken with any valid ERC20 token or ETH if allowed by the manager. Sender receives a proportional amount of SetTokens on issuance or ERC20 token on redemption based on the calculated net asset value (NAV) using Price Oracles. The manager is able to enforce a premium/discount on issuance/redemption to avoid arbitrage and front-running when relying on oracle prices.
Select Methods
issue()
issue(ISetToken _setToken, address _reserveAsset, uint256 _reserveAssetQuantity, uint256 _minSetTokenReceiveQuantity, address _to)
Deposits the allowed reserve asset into the SetToken and mints the appropriate % of Net Asset Value of the SetToken to the specified _to
address.
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_reserveAsset | address | Address of the reserve asset to issue with |
_reserveAssetQuantity | uint256 | Quantity of the reserve asset to issue with |
_minSetTokenReceiveQuantity | uint256 | Min quantity of SetToken to receive after issuance |
_to | address | Address to mint SetToken to |
issueWithEther()
issue(ISetToken _setToken, uint256 _minSetTokenReceiveQuantity, address _to)
Wraps ETH and deposits WETH if allowed into the SetToken and mints the appropriate % of Net Asset Value of the SetToken to the specified _to
address.
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_minSetTokenReceiveQuantity | uint256 | Min quantity of SetToken to receive after issuance |
_to | address | Address to mint SetToken to |
redeem()
redeem(ISetToken _setToken, address _reserveAsset, uint256 _setTokenQuantity, uint256 _minReserveReceiveQuantity, address _to)
Redeems a SetToken into a valid reserve asset representing the appropriate % of Net Asset Value of the SetToken to the specified _to address. Only valid if there are available reserve units on the SetToken.
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_reserveAsset | address | Address of the reserve asset to redeem |
_reserveAssetQuantity | uint256 | Quantity of the reserve asset to redeem |
_minSetTokenReceiveQuantity | uint256 | Min quantity of reserve asset to receive |
_to | address | Address to redeem reserve asset to |
redeemIntoEther()
redeemIntoEther(ISetToken _setToken, uint256 _setTokenQuantity, uint256 _minReserveReceiveQuantity, address _to)
Redeems a SetToken into Ether (if WETH is valid) representing the appropriate % of Net Asset Value of the SetToken to the specified _to address. Only valid if there are available WETH units on the SetToken.
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_reserveAssetQuantity | uint256 | Quantity of the reserve asset to redeem |
_minSetTokenReceiveQuantity | uint256 | Min quantity of reserve asset to receive |
_to | address | Address to redeem reserve asset to |
initialize()
function initialize(ISetToken _setToken, NAVIssuanceSettings _navIssuanceSettings)
Manager only. Initializes this module to the SetToken with hooks, allowed reserve assets, fees and issuance premium. Only callable by the SetToken's manager. Hook addresses are optional. Address(0) means that no hook will be called.
Parameter Name | Type | Description |
_setToken | ISetToken | Address of the SetToken |
_navIssuanceSettings | NAVIssuanceSettings | NAVIssuanceSettings struct defining parameters |
The NAVIssuanceSettings struct is constructed as follows:
addReserveAsset()
function addReserveAsset(ISetToken _setToken, address _reserveAsset)
Manager only. Add an allowed reserve asset
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_reserveAsset | address | Address of the reserve asset to add |
removeReserveAsset()
function removeReserveAsset(ISetToken _setToken, address _reserveAsset)
Manager only. Add an allowed reserve asset
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_reserveAsset | address | Address of the reserve asset to remove |
editPremium()
function editPremium(ISetToken _setToken, uint256 _premiumPercentage)
Manager only. Edit the premium percentage. Learn more about what the premium percentage is here.
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_premiumPercentage | uint256 | Premium percentage in 10e16 (e.g. 10e16 = 1%) |
editManagerFee()
function editManagerFee(ISetToken _setToken, uint256 _managerFeePercentage, uint256 _managerFeeIndex)
Manager only. Edit manager fee
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_managerFeePercentage | uint256 | Manager fee percentage in 10e16 (e.g. 10e16 = 1%) |
_managerFeeIndex | uint256 | Manager fee index. 0 index is issue fee, 1 index is redeem fee |
editFeeRecipient()
function editFeeRecipient(ISetToken _setToken, address _managerFeeRecipient)
Manager only. Edit fee recipient
Parameter Name | Type | Description |
_setToken | ISetToken | Instance of the SetToken |
_managerFeeRecipient | uint256 | Manager fee recipient |
Select View Methods
getReserveAssets()
function getReserveAssets(ISetToken _setToken) external view returns (address[] memory)
Returns reserve assets for a given SetToken.
Return Name | Type | Description |
reserveAssets | address[] | Address array of reserve assets |
getExpectedSetTokenIssueQuantity()
function getExpectedSetTokenIssueQuantity(ISetToken _setToken, address _reserveAsset, uint256 _reserveAssetQuantity) external view returns (uint256)
Get the expected SetTokens minted to recipient on issuance
Parameter Name | Type | Description |
_setToken | ISetToken | Address of the SetToken |
_reserveAsset | address | Address of the reserve asset to redeem |
_reserveAssetQuantity | uint256 | Quantity of the reserve asset to redeem |
Return Name | Type | Description |
setTokenQuantity | uint256 | Expected SetTokens to be minted to recipient |
getExpectedReserveRedeemQuantity()
function getExpectedReserveRedeemQuantity(ISetToken _setToken, address _reserveAsset, uint256 _setTokenQuantity) external view returns (uint256)
Get the expected reserve asset to be redeemed
Parameter Name | Type | Description |
_setToken | ISetToken | Address of the SetToken |
_reserveAsset | address | Address of the reserve asset to redeem |
_setTokenQuantity | uint256 | Quantity of SetTokens to redeem |
Return Name | Type | Description |
reserveAssetQuantity | uint256 | Expected reserve asset quantity redeemed |
Last updated