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)

Last updated