BaseStrategy
Overview
The BaseStrategy is the foundational abstract contract that all MaxApy strategies inherit from. Adapted from Yearn's v2 BaseStrategy, it defines core functionality and interfaces that strategies must implement for interacting with the MaxApy vault and external protocols.
Constants
uint256 public constant ADMIN_ROLE = _ROLE_0; // Admin role identifier
uint256 public constant EMERGENCY_ADMIN_ROLE = _ROLE_1; // Emergency admin role identifier
uint256 public constant VAULT_ROLE = _ROLE_2; // Vault role identifier
uint256 public constant KEEPER_ROLE = _ROLE_3; // Keeper role identifier
uint256 public constant MAX_BPS = 10_000; // Maximum basis points (100%)
Events
event Harvested(uint256 profit, uint256 loss, uint256 debtPayment, uint256 debtOutstanding);
event StrategyEmergencyExitUpdated(address indexed strategy, uint256 emergencyExitStatus);
event StrategistUpdated(address indexed strategy, address newStrategist);
event StrategyAutopilotUpdated(address indexed strategy, bool autoPilotStatus);
State Variables
IMaxApyVault public vault; // Associated MaxApy vault
address public underlyingAsset; // Strategy's underlying asset
uint256 public emergencyExit; // Emergency shutdown state
bytes32 public strategyName; // Strategy identifier
address public strategist; // Strategy manager address
uint256 public lastEstimatedTotalAssets; // Last recorded total assets
uint256[20] private __gap; // Upgradeability gap
Functions
Initialization Functions
__BaseStrategy_init
function __BaseStrategy_init(
IMaxApyVault _vault,
address[] calldata _keepers,
bytes32 _strategyName,
address _strategist
) internal virtual
Initializes the strategy with necessary components.
Parameters:
_vault
: MaxApy vault address_keepers
: Array of keeper addresses_strategyName
: Strategy identifier_strategist
: Strategist address
Core Functions
liquidate
function liquidate(uint256 amountNeeded) external virtual returns (uint256 loss)
Withdraws assets up to requested amount.
Parameters:
amountNeeded
: Amount of assets to withdraw
Returns:
Amount of loss incurred
liquidateExact
function liquidateExact(uint256 amountNeeded) external virtual returns (uint256 loss)
Withdraws exact amount of assets.
Parameters:
amountNeeded
: Exact amount of assets to withdraw
Returns:
Amount of loss incurred to achieve exact withdrawal
harvest
function harvest(
uint256 minExpectedBalance,
uint256 minOutputAfterInvestment,
address harvester,
uint256 deadline
) external
Harvests gains and reinvests.
Parameters:
minExpectedBalance
: Minimum balance expected after operationsminOutputAfterInvestment
: Minimum expected output from reinvestmentharvester
: Address to receive management feesdeadline
: Transaction deadline
Configuration Functions
setEmergencyExit
function setEmergencyExit(uint256 _emergencyExit) external
Sets emergency exit mode.
Parameters:
_emergencyExit
: Exit mode state (1=inactive, 2=active)
setStrategist
function setStrategist(address _newStrategist) external
Updates strategist address.
Parameters:
_newStrategist
: New strategist address
setAutopilot
function setAutopilot(bool _autoPilot) external
Enables/disables automated harvesting.
Parameters:
_autoPilot
: Autopilot state
View Functions
estimatedTotalAssets
function estimatedTotalAssets() public view returns (uint256)
Returns total assets under management.
Returns:
Current total assets value
isActive
function isActive() public view returns (bool)
Checks if strategy is actively managing positions.
Returns:
True if strategy is active
unharvestedAmount
function unharvestedAmount() external view virtual returns (int256)
Calculates unrealized gains/losses since last harvest.
Returns:
Net unrealized profit/loss
previewLiquidate
function previewLiquidate(uint256 requestedAmount) public view virtual returns (uint256)
Simulates withdrawal including losses.
Parameters:
requestedAmount
: Amount to withdraw
Returns:
Expected output amount
Required Virtual Functions
These functions must be implemented by inheriting strategies:
function _adjustPosition(uint256 debtOutstanding, uint256 minOutputAfterInvestment) internal virtual;
function _liquidatePosition(uint256 amountNeeded) internal virtual returns (uint256 liquidatedAmount, uint256 loss);
function _liquidateAllPositions() internal virtual returns (uint256 amountFreed);
function _prepareReturn(uint256 debtOutstanding, uint256 minExpectedBalance) internal virtual returns (uint256 unrealizedProfit, uint256 loss, uint256 debtPayment);
function _estimatedTotalAssets() internal view virtual returns (uint256);
function previewLiquidate(uint256 requestedAmount) public view virtual returns (uint256);
function previewLiquidateExact(uint256 liquidatedAmount) public view virtual returns (uint256);
function maxLiquidate() public view virtual returns (uint256);
function maxLiquidateExact() public view virtual returns (uint256);
Last updated