MaxApyHarvester
Overview
The MaxApyHarvester contract serves as an internal mechanism to execute harvests atomically. It manages strategy allocations and harvests for the MaxApy protocol, handling batch operations for multiple strategies.
Constants
uint256 public constant ADMIN_ROLE = _ROLE_0; // Role for administrative functions
uint256 public constant KEEPER_ROLE = _ROLE_1; // Role for keeper functions
address public constant DEFAULT_HARVESTER = address(0); // Default harvester address
Errors
error AddStrategyFailed(); // Strategy addition failed
error CantReceiveETH(); // Contract cannot receive ETH
error Fallback(); // Fallback function called
error HarvestFailed(); // Harvest operation failed
error NotOwner(); // Caller is not the owner
error MaximumStrategiesReached(); // Maximum strategy limit reached
State Variables
IStrategy strategy; // Reference to the current strategy being processed
Structs
struct AllocationData {
address strategyAddress; // Address of the strategy
uint256 debtRatio; // Debt ratio for the strategy
uint256 maxDebtPerHarvest; // Maximum debt per harvest
uint256 minDebtPerHarvest; // Minimum debt per harvest
uint256 performanceFee; // Performance fee percentage
}
struct HarvestData {
address strategyAddress; // Strategy address to harvest
uint256 minExpectedBalance; // Minimum expected balance after harvest
uint256 minOutputAfterInvestment; // Minimum output after investment
uint256 deadline; // Deadline for harvest operation
}
Functions
Constructor
constructor(address admin, address[] memory keepers)
Initializes the contract with admin and keeper roles.
Parameters:
admin
: Address of the adminkeepers
: Array of keeper addresses to be granted roles
Fallback Functions
fallback
fallback() external payable
Reverts any direct calls to the contract.
receive
receive() external payable
Reverts any ETH transfers to the contract.
Core Functions
batchAllocate
function batchAllocate(IMaxApyVault vault, AllocationData[] calldata strategies) public checkRoles(KEEPER_ROLE)
Executes batch strategy allocation for the MaxApy protocol.
Parameters:
vault
: MaxApyVault contract instancestrategies
: Array of strategy allocation data
batchHarvest
function batchHarvest(IMaxApyVault vault, HarvestData[] calldata harvests) public checkRoles(KEEPER_ROLE)
Executes batch harvesting operations for multiple strategies.
Parameters:
vault
: MaxApyVault contract instanceharvests
: Array of harvest data for strategies
batchAllocateAndHarvest
function batchAllocateAndHarvest(
IMaxApyVault vault,
AllocationData[] calldata allocations,
HarvestData[] calldata harvests
) external returns (bool)
Combines batch allocation and harvesting in a single transaction.
Parameters:
vault
: MaxApyVault contract instanceallocations
: Array of strategy allocation dataharvests
: Array of harvest data
Returns:
Boolean indicating success
Simulation Functions
_simulateBatchAllocateAndHarvest
solidityCopyfunction _simulateBatchAllocateAndHarvest(
IMaxApyVault vault,
AllocationData[] calldata allocations,
HarvestData[] calldata harvests
) public
Internal function that performs a dry-run of batch allocation and harvest operations. It simulates the entire process of adding new strategies and harvesting, capturing the state changes without permanently altering the blockchain state.
This function works by:
Recording initial total assets
Simulating strategy allocations
Simulating harvests for each strategy
Collecting detailed simulation results
Reverting with encoded data containing all simulation outcomes
Parameters:
vault
: MaxApyVault contract instanceallocations
: Array of strategy allocation dataharvests
: Array of harvest data
simulateBatchAllocateAndHarvest
solidityCopyfunction simulateBatchAllocateAndHarvest(
IMaxApyVault vault,
AllocationData[] calldata allocations,
HarvestData[] calldata harvests
) external returns (
uint256 totalAssetsBefore,
uint256 totalAssetsAfter,
bytes[] memory simulationResults
)
An external function that provides a safe way to preview the outcomes of strategy changes and harvests before actually executing them. This function is crucial for risk management and optimization of strategy allocations.
Key benefits:
Allows analysis of potential returns before committing funds
It helps in comparing different strategy combinations
Provides insights into expected asset value changes
Enables validation of allocation decisions before execution
Assists in optimizing harvest parameters
Parameters:
vault
: MaxApyVault contract instanceallocations
: Array of strategy allocation dataharvests
: Array of harvest data
Returns:
totalAssetsBefore
: Total vault assets before simulated operationstotalAssetsAfter
: Projected total assets after operationssimulationResults
: Detailed results for each strategy, including:Expected balances
Investment outputs
Intended vs actual invest/divest amounts
Strategy-specific performance metrics
Usage: This simulation mechanism is essential for protocol management, allowing operators to:
Test new strategy combinations safely
Validate allocation ratios
Preview harvest outcomes
Optimize timing and parameters of operations
Minimize risks when adjusting strategy allocations
Modifiers
checkRoles
modifier checkRoles(uint256 roles)
Ensures caller has required roles.
Parameters:
roles
: Required role permissions
Last updated