Skip to main content

Accountant.sol

Git Source

Will charge fees, issue refunds, and run health check on any reported gains or losses during a strategy's report.

State Variables

MAX_BPS

Constant defining the maximum basis points.

uint256 internal constant MAX_BPS = 10_000;

SECS_PER_YEAR

Constant defining the number of seconds in a year.

uint256 internal constant SECS_PER_YEAR = 31_556_952;

MANAGEMENT_FEE_THRESHOLD

Constant defining the management fee threshold.

uint16 public constant MANAGEMENT_FEE_THRESHOLD = 200;

PERFORMANCE_FEE_THRESHOLD

Constant defining the performance fee threshold.

uint16 public constant PERFORMANCE_FEE_THRESHOLD = 5_000;

maxLoss

The amount of max loss to use when redeeming from vaults.

uint256 public maxLoss;

feeManager

The address of the fee manager.

address public feeManager;

feeRecipient

The address of the fee recipient.

address public feeRecipient;

vaultManager

An address that can add or remove vaults.

address public vaultManager;

futureFeeManager

The address of the future fee manager.

address public futureFeeManager;

defaultConfig

The default fee configuration.

Fee public defaultConfig;

vaults

Mapping to track added vaults.

mapping(address => bool) public vaults;

customConfig

Mapping vault => custom Fee config if any.

mapping(address => Fee) public customConfig;

skipHealthCheck

Mapping vault => strategy => flag for one time healthcheck skips.

mapping(address => mapping(address => bool)) skipHealthCheck;

Functions

onlyFeeManager

modifier onlyFeeManager();

onlyVaultOrFeeManager

modifier onlyVaultOrFeeManager();

onlyFeeManagerOrRecipient

modifier onlyFeeManagerOrRecipient();

onlyAddedVaults

modifier onlyAddedVaults();

_checkFeeManager

function _checkFeeManager() internal view virtual;

_checkVaultOrFeeManager

function _checkVaultOrFeeManager() internal view virtual;

_checkFeeManagerOrRecipient

function _checkFeeManagerOrRecipient() internal view virtual;

_checkVaultIsAdded

function _checkVaultIsAdded() internal view virtual;

constructor

constructor(
address _feeManager,
address _feeRecipient,
uint16 defaultManagement,
uint16 defaultPerformance,
uint16 defaultRefund,
uint16 defaultMaxFee,
uint16 defaultMaxGain,
uint16 defaultMaxLoss
);

report

Called by a vault when a strategy is reporting.

The msg.sender must have been added to the vaults mapping.

function report(address strategy, uint256 gain, uint256 loss)
public
virtual
onlyAddedVaults
returns (uint256 totalFees, uint256 totalRefunds);

Parameters

NameTypeDescription
strategyaddressAddress of the strategy reporting.
gainuint256Amount of the gain if any.
lossuint256Amount of the loss if any.

Returns

NameTypeDescription
totalFeesuint256if any to charge.
totalRefundsuint256if any for the vault to pull.

addVault

Function to add a new vault for this accountant to charge fees for.

This is not used to set any of the fees for the specific vault or strategy. Each fee will be set separately.

function addVault(address vault) external virtual onlyVaultOrFeeManager;

Parameters

NameTypeDescription
vaultaddressThe address of a vault to allow to use this accountant.

removeVault

Function to remove a vault from this accountant's fee charging list.

function removeVault(address vault) external virtual onlyVaultOrFeeManager;

Parameters

NameTypeDescription
vaultaddressThe address of the vault to be removed from this accountant.

updateDefaultConfig

Function to update the default fee configuration used for all strategies that don't have a custom config set.

function updateDefaultConfig(
uint16 defaultManagement,
uint16 defaultPerformance,
uint16 defaultRefund,
uint16 defaultMaxFee,
uint16 defaultMaxGain,
uint16 defaultMaxLoss
) external virtual onlyFeeManager;

Parameters

NameTypeDescription
defaultManagementuint16Default annual management fee to charge.
defaultPerformanceuint16Default performance fee to charge.
defaultRefunduint16Default refund ratio to give back on losses.
defaultMaxFeeuint16Default max fee to allow as a percent of gain.
defaultMaxGainuint16Default max percent gain a strategy can report.
defaultMaxLossuint16Default max percent loss a strategy can report.

_updateDefaultConfig

Updates the Accountant's default fee config. Is used during deployment and during any future updates.

function _updateDefaultConfig(
uint16 defaultManagement,
uint16 defaultPerformance,
uint16 defaultRefund,
uint16 defaultMaxFee,
uint16 defaultMaxGain,
uint16 defaultMaxLoss
) internal virtual;

setCustomConfig

Function to set a custom fee configuration for a specific vault.

function setCustomConfig(
address vault,
uint16 customManagement,
uint16 customPerformance,
uint16 customRefund,
uint16 customMaxFee,
uint16 customMaxGain,
uint16 customMaxLoss
) external virtual onlyFeeManager;

Parameters

NameTypeDescription
vaultaddressThe vault the strategy is hooked up to.
customManagementuint16Custom annual management fee to charge.
customPerformanceuint16Custom performance fee to charge.
customRefunduint16Custom refund ratio to give back on losses.
customMaxFeeuint16Custom max fee to allow as a percent of gain.
customMaxGainuint16Custom max percent gain a strategy can report.
customMaxLossuint16Custom max percent loss a strategy can report.

removeCustomConfig

Function to remove a previously set custom fee configuration for a vault.

function removeCustomConfig(address vault) external virtual onlyFeeManager;

Parameters

NameTypeDescription
vaultaddressThe vault to remove custom setting for.

turnOffHealthCheck

Turn off the health check for a specific vault strategy combo.

This will only last for one report and get automatically turned back on.

function turnOffHealthCheck(address vault, address strategy) external virtual onlyFeeManager;

Parameters

NameTypeDescription
vaultaddressAddress of the vault.
strategyaddressAddress of the strategy.

useCustomConfig

Public getter to check for custom setting.

We use uint256 for the flag since its cheaper so this will convert it to a bool for easy view functions.

function useCustomConfig(address vault) external view virtual returns (bool);

Parameters

NameTypeDescription
vaultaddressAddress of the vault.

Returns

NameTypeDescription
<none>boolIf a custom fee config is set.

getVaultConfig

Get the full config used for a specific vault.

function getVaultConfig(address vault) external view returns (Fee memory fee);

Parameters

NameTypeDescription
vaultaddressAddress of the vault.

Returns

NameTypeDescription
feeFeeThe config that would be used during the report.

redeemUnderlying

Function to redeem the underlying asset from a vault.

Will default to using the full balance of the vault.

function redeemUnderlying(address vault) external virtual;

Parameters

NameTypeDescription
vaultaddressThe vault to redeem from.

redeemUnderlying

Function to redeem the underlying asset from a vault.

function redeemUnderlying(address vault, uint256 amount) public virtual onlyFeeManager;

Parameters

NameTypeDescription
vaultaddressThe vault to redeem from.
amountuint256The amount in vault shares to redeem.

setMaxLoss

Sets the maxLoss parameter to be used on redeems.

function setMaxLoss(uint256 _maxLoss) external virtual onlyFeeManager;

Parameters

NameTypeDescription
_maxLossuint256The amount in basis points to set as the maximum loss.

distribute

Function to distribute all accumulated fees to the designated recipient.

function distribute(address token) external virtual;

Parameters

NameTypeDescription
tokenaddressThe token to distribute.

distribute

Function to distribute accumulated fees to the designated recipient.

function distribute(address token, uint256 amount) public virtual onlyFeeManagerOrRecipient;

Parameters

NameTypeDescription
tokenaddressThe token to distribute.
amountuint256amount of token to distribute.

setFutureFeeManager

Function to set a future fee manager address.

function setFutureFeeManager(address _futureFeeManager) external virtual onlyFeeManager;

Parameters

NameTypeDescription
_futureFeeManageraddressThe address to set as the future fee manager.

acceptFeeManager

Function to accept the role change and become the new fee manager.

This function allows the future fee manager to accept the role change and become the new fee manager.

function acceptFeeManager() external virtual;

setVaultManager

Function to set a new vault manager.

function setVaultManager(address newVaultManager) external virtual onlyFeeManager;

Parameters

NameTypeDescription
newVaultManageraddressAddress to add or remove vaults.

setFeeRecipient

Function to set a new address to receive distributed rewards.

function setFeeRecipient(address newFeeRecipient) external virtual onlyFeeManager;

Parameters

NameTypeDescription
newFeeRecipientaddressAddress to receive distributed fees.

_checkAllowance

Internal safe function to make sure the contract you want to interact with has enough allowance to pull the desired tokens.

function _checkAllowance(address _contract, address _token, uint256 _amount) internal;

Parameters

NameTypeDescription
_contractaddressThe address of the contract that will move the token.
_tokenaddressThe ERC-20 token that will be getting spent.
_amountuint256The amount of _token to be spent.

Events

VaultChanged

An event emitted when a vault is added or removed.

event VaultChanged(address indexed vault, ChangeType change);

UpdateDefaultFeeConfig

An event emitted when the default fee configuration is updated.

event UpdateDefaultFeeConfig(Fee defaultFeeConfig);

SetFutureFeeManager

An event emitted when the future fee manager is set.

event SetFutureFeeManager(address indexed futureFeeManager);

NewFeeManager

An event emitted when a new fee manager is accepted.

event NewFeeManager(address indexed feeManager);

UpdateVaultManager

An event emitted when a new vault manager is set.

event UpdateVaultManager(address indexed newVaultManager);

UpdateFeeRecipient

An event emitted when the fee recipient is updated.

event UpdateFeeRecipient(address indexed oldFeeRecipient, address indexed newFeeRecipient);

UpdateCustomFeeConfig

An event emitted when a custom fee configuration is updated.

event UpdateCustomFeeConfig(address indexed vault, Fee custom_config);

RemovedCustomFeeConfig

An event emitted when a custom fee configuration is removed.

event RemovedCustomFeeConfig(address indexed vault);

UpdateMaxLoss

An event emitted when the maxLoss parameter is updated.

event UpdateMaxLoss(uint256 maxLoss);

DistributeRewards

An event emitted when rewards are distributed.

event DistributeRewards(address indexed token, uint256 rewards);

Structs

Fee

Struct representing fee details.

struct Fee {
uint16 managementFee;
uint16 performanceFee;
uint16 refundRatio;
uint16 maxFee;
uint16 maxGain;
uint16 maxLoss;
bool custom;
}

Enums

ChangeType

Enum defining change types (added or removed).

enum ChangeType {
NULL,
ADDED,
REMOVED
}