CommonReportTrigger
Inherits: Governance
Author: Yearn.finance
This is a central contract that keepers can use to decide if Yearn V3 strategies should report profits as well as when a V3 Vaults should record a strategies profits. It allows for a simple default flow that most strategies and vaults can use for easy integration with a keeper network. However, it is also customizable by the strategy and vaults management to allow complete customization if desired.
State Variables
name
string public name = "Yearn Common Report Trigger";
baseFeeProvider
address public baseFeeProvider;
acceptableBaseFee
uint256 public acceptableBaseFee;
customStrategyTrigger
mapping(address => address) public customStrategyTrigger;
customStrategyBaseFee
mapping(address => uint256) public customStrategyBaseFee;
customVaultTrigger
mapping(address => mapping(address => address)) public customVaultTrigger;
customVaultBaseFee
mapping(address => mapping(address => uint256)) public customVaultBaseFee;
Functions
constructor
constructor(address _governance) Governance(_governance);
setCustomStrategyTrigger
Set a custom report trigger contract for a strategy.
This gives the management
of a specific strategy the option
to enforce a custom report trigger for their strategy easily while
still using this standard contract for keepers to read the trigger
status from.
The custom trigger contract only needs to implement the reportTrigger
function to return true or false.
function setCustomStrategyTrigger(address _strategy, address _trigger) external virtual;
Parameters
Name | Type | Description |
---|---|---|
_strategy | address | The address of the strategy to set the trigger for. |
_trigger | address | The address of the custom trigger contract. |
setCustomStrategyBaseFee
Set a custom base fee for a specific strategy.
This can be set by a strategies management
to increase or
decrease the acceptable network base fee for a specific strategies
trigger to return true.
This can be used instead of a custom trigger contract.
This will have no effect if a custom trigger is set for the strategy.
function setCustomStrategyBaseFee(address _strategy, uint256 _baseFee) external virtual;
Parameters
Name | Type | Description |
---|---|---|
_strategy | address | The address of the strategy to customize. |
_baseFee | uint256 | The max acceptable network base fee. |
setCustomVaultTrigger
Set a custom report trigger contract for a vaults strategy.
This gives the management of a vault the option to enforce a
custom report trigger for a specific strategy attached to the vault
while still using this standard contract for keepers to read the
trigger status from.
The address calling must have the REPORTING_MANAGER
role on the vault.
The custom trigger contract only needs to implement the reportTrigger
function to return true or false.
function setCustomVaultTrigger(address _vault, address _strategy, address _trigger) external virtual;
Parameters
Name | Type | Description |
---|---|---|
_vault | address | The address of the vault |
_strategy | address | The address of the strategy to set the trigger for. |
_trigger | address | The address of the custom trigger contract. |
setCustomVaultBaseFee
Set a custom base fee for a vaults strategy.
This can be set by the vaults management to increase or
decrease the acceptable network base fee for a specific strategies
trigger to return true.
This can be used instead of a custom trigger contract.
This will have no effect if a custom trigger is set for the strategy.
The address calling must have the REPORTING_MANAGER
role on the vault.
function setCustomVaultBaseFee(address _vault, address _strategy, uint256 _baseFee) external virtual;
Parameters
Name | Type | Description |
---|---|---|
_vault | address | The address of the vault. |
_strategy | address | The address of the strategy to customize. |
_baseFee | uint256 | The max acceptable network base fee. |
strategyReportTrigger
Returns wether or not a strategy is ready for a keeper to call report
.
Will first check if a custom trigger is set. If not it will use the default trigger flow.
function strategyReportTrigger(address _strategy) external view virtual returns (bool, bytes memory);
Parameters
Name | Type | Description |
---|---|---|
_strategy | address | The address of the strategy to check the trigger for. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | . Bool representing if the strategy is ready to report. |
<none> | bytes | . Bytes with either the calldata or reason why False. |
defaultStrategyReportTrigger
The default trigger logic for a strategy.
*This is kept in a separate function so it can still be used by custom triggers even if extra checks are needed first or after. This will also check if a custom acceptable base fee has been set by the strategies management. In order for the default flow to return true the strategy must:
- Not be shutdown.
- Have funds.
- The current network base fee be below the
acceptableBaseFee
. - The time since the last report be > the strategies
profitMaxUnlockTime
.*
function defaultStrategyReportTrigger(address _strategy) public view virtual returns (bool, bytes memory);
Parameters
Name | Type | Description |
---|---|---|
_strategy | address | The address of the strategy to check the trigger for. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | . Bool representing if the strategy is ready to report. |
<none> | bytes | . Bytes with either the calldata or reason why False. |
vaultReportTrigger
Return wether or not a report should be called on a vault for a specific strategy.
Will first check if a custom trigger is set. If not it will use the default trigger flow.
function vaultReportTrigger(address _vault, address _strategy) external view virtual returns (bool, bytes memory);
Parameters
Name | Type | Description |
---|---|---|
_vault | address | The address of the vault. |
_strategy | address | The address of the strategy to report. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | . Bool if the strategy should report to the vault. |
<none> | bytes | . Bytes with either the calldata or reason why False. |
defaultVaultReportTrigger
The default trigger logic for a vault.
*This is kept in a separate function so it can still
be used by custom triggers even if extra checks are needed
before or after.
This will also check if a custom acceptable base fee has been set
by the vault management for the _strategy
.
In order for the default flow to return true:
- The vault must not be shutdown.
- The strategy must be active and have debt allocated.
- The current network base fee be below the
acceptableBaseFee
. - The time since the strategies last report be > the vaults
profitMaxUnlockTime
.*
function defaultVaultReportTrigger(address _vault, address _strategy)
public
view
virtual
returns (bool, bytes memory);
Parameters
Name | Type | Description |
---|---|---|
_vault | address | The address of the vault. |
_strategy | address | The address of the strategy to report. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | . Bool if the strategy should report to the vault. |
<none> | bytes | . Bytes with either the calldata or reason why False. |
strategyTendTrigger
Return whether or not a strategy should be tended by a keeper.
This can be used as an easy keeper integration for any strategy that implements a tendTrigger. It is expected that a strategy implement all needed checks such as isShutdown, totalAssets > 0 and base fee checks within the trigger.
function strategyTendTrigger(address _strategy) external view virtual returns (bool, bytes memory);
Parameters
Name | Type | Description |
---|---|---|
_strategy | address | Address of the strategy to check. |
Returns
Name | Type | Description |
---|---|---|
<none> | bool | . Bool if the strategy should be tended. |
<none> | bytes | . Bytes with the calldata. |
getCurrentBaseFee
Returns the current base fee from the provider.
Will return 0 if a base fee provider is not set.
function getCurrentBaseFee() public view virtual returns (uint256);
Returns
Name | Type | Description |
---|---|---|
<none> | uint256 | . The current base fee for the chain. |
isCurrentBaseFeeAcceptable
Returns wether or not the current base fee is acceptable
based on the default acceptableBaseFee
.
Can be used in custom triggers to easily still use this contracts
fee provider and acceptableBaseFee. And makes it backwards compatible to V2.
Will always return true
if no baseFeeProvider
is set.
function isCurrentBaseFeeAcceptable() external view virtual returns (bool);
Returns
Name | Type | Description |
---|---|---|
<none> | bool | . IF the current base fee is acceptable. |
setBaseFeeProvider
Sets the address used to pull the current network base fee.
Throws if the caller is not current governance.
function setBaseFeeProvider(address _baseFeeProvider) external virtual onlyGovernance;
Parameters
Name | Type | Description |
---|---|---|
_baseFeeProvider | address | The network's baseFeeProvider address. |
setAcceptableBaseFee
Sets the default acceptable current network base fee.
Throws if the caller is not current governance.
function setAcceptableBaseFee(uint256 _newAcceptableBaseFee) external virtual onlyGovernance;
Parameters
Name | Type | Description |
---|---|---|
_newAcceptableBaseFee | uint256 | The acceptable network base fee. |
Events
NewBaseFeeProvider
event NewBaseFeeProvider(address indexed provider);
UpdatedAcceptableBaseFee
event UpdatedAcceptableBaseFee(uint256 acceptableBaseFee);
UpdatedCustomStrategyTrigger
event UpdatedCustomStrategyTrigger(address indexed strategy, address indexed trigger);
UpdatedCustomStrategyBaseFee
event UpdatedCustomStrategyBaseFee(address indexed strategy, uint256 acceptableBaseFee);
UpdatedCustomVaultTrigger
event UpdatedCustomVaultTrigger(address indexed vault, address indexed strategy, address indexed trigger);
UpdatedCustomVaultBaseFee
event UpdatedCustomVaultBaseFee(address indexed vault, address indexed strategy, uint256 acceptableBaseFee);