FeeSplit
FeeSplit Extensions are used to interact with the
StreamingFeeModule
(and any other module which collects fees). These extensions: - distribute fees to stakeholders
- make configuration calls to fee modules
- act as the fee recipient for fees collected by a module.
These extensions must be added to the
BaseManager
in order to be usedName | Type | Description |
setToken | ISetToken | SetToken address |
streamingFeeModule | IStreamingFeeModule | Address of StreamingFeeModule |
operatorFeeSplit | uint256 | Percent of fees in precise units (10^16 = 1%) sent to operator, rest to methodologist |
operatorFeeRecipient | address | Address which receives operator's share of fees when they're distributed |
function accrueFeesAndDistribute() public
Callable by anyone. Accrues fees from streaming fee module. Gets resulting balance after fee accrual, calculates fees for operator and methodologist, and sends to
operatorFeeRecipient
and methodologist respectively. function initializeModule(IStreamingFeeModule.FeeState memory _settings)
external
mutualUpgrade(operator, methodologist)
Must be called by both the operator and methodologist. Initializes the streaming fee module.
Name | Type | Description |
_settings | IStreamingFeeModule.FeeState | Fee settings |
function updateStreamingFee(uint256 _newFee)
external
mutualUpgrade(manager.operator(), manager.methodologist())
timeLockUpgrade
Must be called by both the operator and methodologist. Updates streaming fee percentage on StreamingFeeModule.
NOTE:
- Because the method is time-locked, each party must call it twice: once to set the lock and once to execute.settings.
- This method will accrue streaming fees though not send to operator fee recipient and methodologist.
Reverts:
- Fee is greater than the module's max streaming fee
Name | Type | Description |
_newFee | uint256 | Percent of Set accruing to manager annually (1% = 1e16, 100% = 1e18) |
function updateFeeRecipient(address _newFeeRecipient)
external
mutualUpgrade(manager, manager)
Must be called by both the operator and methodologist. Updates fee recipient on streaming fee module.
Reverts:
- Fee Recipient is not a non-zero address
Name | Type | Description |
_newFeeRecipient | address | Address which accrued fees are sent to prior to their distribution by the fee extension. (This is typically the address of the fee extension itself) |
function updateFeeSplit(uint256 _newFeeSplit)
external
mutualUpgrade(operator, methodologist)
Must be called by both the operator and methodologist. Updates the extension's fee split. The split is defined in precise units (1% = 10^16). Fees are accrued and distributed before the new split goes into effect.
Reverts:
- Fee is greater than 100%
Name | Type | Description |
_newFeeSplit | uint256 | Percent of fees in precise units (10^16 = 1%) sent to operator, (rest go to the methodologist). |
function updateOperatorFeeRecipient(address _newOperatorFeeRecipient)
external
onlyOperator
Must be called by the operator. Updates the operator fee recipient. The operator fee recipient is usually just the operator but sometimes it's preferable to send fees to a different address.
Reverts:
- Fee recipient address is not non-zero
Name | Type | Description |
_newOperatorFeeRecipient | address | Address to send operator's fees to. |
The functions above target the StreamingFeeModule. However, some products may collect fees from multiple modules.
It implements the following additional methods:
function initializeIssuanceModule(
uint256 _maxManagerFee,
uint256 _managerIssueFee,
uint256 _managerRedeemFee,
address _feeRecipient,
address _managerIssuanceHook
)
external
mutualUpgrade(operator, manager)
Must be called by both the operator and methodologist. Initializes the streaming fee module.
Name | Type | Description |
_maxManagerFee | uint256 | The maximum size issuance and redeem fees can be set at in precise units (10^16 = 1%). Set once on initialization. |
_managerIssueFee | uint256 | Manager issuance fees in precise units (10^16 = 1%) |
_managerRedeemFee | uint256 | Manager redeem fees in precise units (10^16 = 1%) |
_feeRecipient | address | Address that receives all manager issue and redeem fees |
_managerIsssuanceHook | address | Address of manager defined hook contract, can hold arbitrary logic |
function updateIssueFee(uint256 _newFee)
external
mutualUpgrade(operator, methodologist)
timeLockUpgrade
Must be called by both the operator and methodologist. Updates issue fee on IssuanceModule.
Note: Because the method is time-locked, each party must call it twice: once to set the lock and once to execute.
Reverts:
- Issue fee exceeds fee maximum (set on Issuance Module)
- New issue fee is identical to current issue fee
Name | Type | Description |
_newFee | uint256 | New fee amount in preciseUnits (1% = 10^16) |
function updateRedeemFee(uint256 _newFee)
external
mutualUpgrade(operator, methodologist)
timeLockUpgrade
Must be called by both the operator and methodologist. Updates issue fee on IssuanceModule.
Note: Because the method is time-locked, each party must call it twice: once to set the lock and once to execute.
Reverts:
- Redeem fee exceeds fee maximum (set on Issuance Module)
- New redeem fee is identical to current redeem fee
Name | Type | Description |
_newFee | uint256 | New fee amount in preciseUnits (1% = 10^16) |
Last modified 1yr ago