// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
pragma experimental ABIEncoderV2;
interface IStrategy {
// Return value for harvest, tend and balanceOfRewards
struct TokenAmount {
address token;
uint256 amount;
}
function balanceOf() external view returns (uint256 balance);
function balanceOfPool() external view returns (uint256 balance);
function balanceOfWant() external view returns (uint256 balance);
function earn() external;
function withdraw(uint256 amount) external;
function withdrawToVault() external returns (uint256 balance);
function withdrawOther(address _asset) external;
function harvest() external returns (TokenAmount[] memory harvested);
function tend() external returns (TokenAmount[] memory tended);
function balanceOfRewards() external view returns (TokenAmount[] memory rewards);
function emitNonProtectedToken(address _token) external;
}
The vault is used to track deposits and withdrawals as well as interact with the strategy
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface IVault {
function rewards() external view returns (address);
function reportHarvest(
uint256 _harvestedAmount
) external;
function reportAdditionalToken(address _token) external;
// Fees
function performanceFeeGovernance() external view returns (uint256);
function performanceFeeStrategist() external view returns (uint256);
function withdrawalFee() external view returns (uint256);
function managementFee() external view returns (uint256);
// Actors
function governance() external view returns (address);
function keeper() external view returns (address);
function guardian() external view returns (address);
function strategist() external view returns (address);
// External
function deposit(uint256 _amount) external;
}