Set Documentation
Search…
⌃K

DebtIssuanceModuleV2

The DebtIssuanceModuleV2 is a module that enables users to issue and redeem SetTokens that contain default and all external positions, including debt positions. Module hooks are added to allow for syncing of positions, and component level hooks are added to ensure positions are replicated correctly. The manager can define arbitrary issuance logic in the manager hook, as well as specify issue and redeem fees.
NOTE: DebtIssuanceModule contract confirmed increase/decrease in balance of component held by the SetToken after every transfer in/out for each component during issuance/redemption. This contract replaces those strict checks with slightly looser checks which ensure that the SetToken remains collateralized after every transfer in/out for each component during issuance/redemption. This module should be used to issue/redeem SetToken whose one or more components return a balance value with +/-1 wei error. For example, this module can be used to issue/redeem SetTokens which has one or more aTokens as its components.
One example use case for this module is to handle aToken positions. Due to how interest is accrued and balanceOf calculation mechanism in Aave, there are frequent failures with the strict check in DebtIssuanceModule V1. Therefore, SetTokens that contain aTokens should use this module instead.

Select Methods

issue()

function issue(ISetToken _setToken, uint256 _quantity, address _to)
Deposits components to the SetToken, replicates any external module component positions and mints the SetToken. If the token has a debt position all collateral will be transferred in first then debt will be returned to the minting address. If specified, a fee will be charged on issuance.
NOTE: Overrides DebtIssuanceModule#issue external function and adds undercollateralization checks in place of the previous default strict balances checks. The undercollateralization checks are implemented in IssuanceValidationUtils library and they revert upon undercollateralization of the SetToken post component transfer.
Parameter Name
Type
Description
_setToken
ISetToken
Instance of the SetToken
_quantity
uint256
Quantity of the SetToken to mint
_to
address
Address to mint SetToken to

redeem()

function redeem( ISetToken _setToken, uint256 _quantity,address _to)
Returns components from the SetToken, unwinds any external module component positions and burns the SetToken. If the token has debt positions, the module transfers in the required debt amounts from the caller and uses those funds to repay the debts on behalf of the SetToken. All debt will be paid down first then equity positions will be returned to the minting address. If specified, a fee will be charged on redeem.
NOTE: Overrides DebtIssuanceModule#redeem internal function and adds undercollateralization checks in place of the previous default strict balances checks. The undercollateralization checks are implemented in IssuanceValidationUtils library and they revert upon undercollateralization of the SetToken post component transfer.
Parameter Name
Type
Description
_setToken
ISetToken
Address of the SetToken
_quantity
uint256
Quantity of the SetToken toredeem
_to
address
Address to redeem components to‌

initialize()

function initialize(ISetToken _setToken, uint256 _maxManagerFee, uint256 _managerIssueFee, uint256 _managerRedeemFee, address _feeRecipient, IManagerIssuanceHook _managerIssuanceHook)
Manager only. Initializes this module to the SetToken with issuance-related hooks. 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
_maxManagerFee
uint256
Max manager fee
_managerIssueFee
uint256
Issuance fee
_managerRedeemFee
uint256
Redemption fee
_feeRecipient
address
Fee recipient address
_preIssueHook
IManagerIssuanceHook
Instance of the Manager Contract with the Pre-Issuance Hook function

Select View Methods

getRequiredComponentIssuanceUnits()

function getRequiredComponentIssuanceUnits(ISetToken _setToken, uint256 _quantity) view returns (address[] memory, uint256[] memory, uint256[] memory)
Retrieves the addresses and units required to mint a particular quantity of SetToken.
Parameter Name
Type
Description
_setToken
ISetToken
Address of the SetToken
_quantity
uint256
Quantity of the SetToken to issue
Return Name
Type
Description
componentAddresses
address[]
Array of component addresses making up the Set
equityNotional
uint256[]
Array of equity notional amounts of each component, respectively, represented as uint256
debtNotional
uint256[]
Array of debt notional amounts of each component, respectively, represented as uint256

getRequiredComponentRedemptionUnits()

function getRequiredComponentRedemptionUnits(ISetToken _setToken, uint256 _quantity) view returns (address[] memory, uint256[] memory, uint256[] memory)
Retrieves the addresses and units required to mint a particular quantity of SetToken.
Parameter Name
Type
Description
_setToken
ISetToken
Address of the SetToken
_quantity
uint256
Quantity of the SetToken to redeem
Return Name
Type
Description
componentAddresses
address[]
Array of component addresses making up the Set
equityNotional
uint256[]
Array of equity notional amounts of each component, respectively, represented as uint256
debtNotional
uint256[]
Array of debt notional amounts of each component, respectively, represented as uint256