Set Documentation
Search…
⌃K

FeeSplit

Overview

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 used

State Variables

Name
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

Functions

accrueFeesAndDistribute

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.

initializeModule

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

updateStreamingFee

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)

updateFeeRecipient

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)

updateFeeSplit

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).

updateOperatorFeeRecipient

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.

Additional Functions

The functions above target the StreamingFeeModule. However, some products may collect fees from multiple modules.
It implements the following additional methods:

initializeIssuanceModule

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

updateIssueFee

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)

updateRedeemFee

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)