MaxAPY is a yield farming gas-optimized and capital-efficient vault implemented in Solidity, designed to optimize yield through various strategies, and earn interest in ERC20 tokens. It relies on the safety of the battle-tested Yearn's yVault and the innovation of MaxAPY.
├── src
│ ├── helpers
│ │ ├── AddressBook.sol
│ │ └── VaultTypes.sol
│ ├── interfaces
│ │ ├── IBalancer.sol
│ │ ├── ICellar.sol
│ │ ├── IConvexBooster.sol
│ │ ├── IConvexRewards.sol
│ │ ├── ICurve.sol
│ │ ├── IMaxApyRouter.sol
│ │ ├── IMaxApyVault.sol
│ │ ├── IStakingRewardsMulti.sol
│ │ ├── IStrategy.sol
│ │ ├── IUniswap.sol
│ │ ├── IWETH.sol
│ │ ├── IWrappedTokenGateway.sol
│ │ ├── IWrappedToken.sol
│ │ ├── IYVault.sol
│ │ └── IYVaultV3.sol
│ ├── lib
│ │ ├── ERC20.sol
│ │ ├── Initializable.sol
│ │ ├── OracleLibrary.sol
│ │ └── ReentrancyGuard.sol
│ ├── MaxApyRouter.sol
│ ├── MaxApyVaultFactory.sol
│ ├── MaxApyVault.sol
│ ├── periphery
│ │ └── MaxApyHarvester.sol
│ └── strategies
│ ├── base
│ │ ├── BaseConvexStrategyPolygon.sol
│ │ ├── BaseConvexStrategy.sol
│ │ ├── BaseSommelierStrategy.sol
│ │ ├── BaseStrategy.sol
│ │ ├── BaseYearnV2Strategy.sol
│ │ └── BaseYearnV3Strategy.sol
│ ├── mainnet
│ │ ├── DAI
│ │ │ └── yearn
│ │ │ ├── YearnAjnaDAIStakingStrategy.sol
│ │ │ └── YearnDAIStrategy.sol
│ │ ├── USDC
│ │ │ ├── convex
│ │ │ │ └── ConvexCrvUSDWethCollateralStrategy.sol
│ │ │ ├── sommelier
│ │ │ │ └── SommelierTurboGHOStrategy.sol
│ │ │ └── yearn
│ │ │ ├── YearnLUSDStrategy.sol
│ │ │ └── YearnUSDCStrategy.sol
│ │ ├── USDT
│ │ │ └── yearn
│ │ │ └── YearnUSDTStrategy.sol
│ │ └── WETH
│ │ ├── convex
│ │ │ └── ConvexdETHFrxETHStrategy.sol
│ │ ├── sommelier
│ │ │ ├── SommelierMorphoEthMaximizerStrategy.sol
│ │ │ ├── SommelierStEthDepositTurboStEthStrategy.sol
│ │ │ ├── SommelierTurboDivEthStrategy.sol
│ │ │ ├── SommelierTurboEEthV2Strategy.sol
│ │ │ ├── SommelierTurboEthXStrategy.sol
│ │ │ ├── SommelierTurboEzEthStrategy.sol
│ │ │ ├── SommelierTurboRsEthStrategy.sol
│ │ │ ├── SommelierTurboStEthStrategy.sol
│ │ │ └── SommelierTurboSwEthStrategy.sol
│ │ └── yearn
│ │ ├── YearnAaveV3WETHLenderStrategy.sol
│ │ ├── YearnAjnaWETHStakingStrategy.sol
│ │ ├── YearnCompoundV3WETHLenderStrategy.sol
│ │ ├── YearnV3WETH2Strategy.sol
│ │ ├── YearnV3WETHStrategy.sol
│ │ └── YearnWETHStrategy.sol
│ └── polygon
│ └── USDCe
│ ├── convex
│ │ ├── ConvexUSDCCrvUSDStrategy.sol
│ │ └── ConvexUSDTCrvUSDStrategy.sol
│ └── yearn
│ ├── YearnAjnaUSDCStrategy.sol
│ ├── YearnCompoundUSDCeLenderStrategy.sol
│ ├── YearnDAILenderStrategy.sol
│ ├── YearnDAIStrategy.sol
│ ├── YearnMaticUSDCStakingStrategy.sol
│ ├── YearnUSDCeLenderStrategy.sol
│ ├── YearnUSDCeStrategy.sol
│ └── YearnUSDTStrategy.sol
To install Foundry:
curl -L https://foundry.paradigm.xyz | bash
This will download foundryup. To start Foundry, run:
foundryup
We are using a nightly version of Foundry, so you will need to run the following command to install the nightly version:
foundryup -v nightly-f625d0fa7c51e65b4bf1e8f7931cd1c6e2e285e9
To install Soldeer:
cargo install soldeer
git clone https://github.com/UnlockdFinance/maxapy.git
soldeer install
forge build
Create a .env
file and create the necessary environment variables following the example in env.example
.
To run the unit tests:
forge test --mt test
To run the invariant(stateful fuzz) tests:
forge test --mt invariant
To run the invariant(stateless fuzz) tests:
forge test --mt testFuzz
We created a custom suite to run and test the protocol in a mainnet local fork.This allows to interact with a mock protocol in the most realistic environment possible.
Fetch the local environment variables from the dotenv file:
source .env
Run the local fork:
anvil --fork-url $RPC_MAINNET --fork-block-number $FORK_BLOCK_NUMBER --accounts 10
Note: It's recommended using one of the private keys provided by anvil for testing
forge script script/local/MaxApy.s.sol:DeploymentScript --fork-url http://localhost:8545 --etherscan-api-key $ETHERSCAN_API_KEY --broadcast -vvv --legacy
Use the sh utils for easier interactions :
./script/local/utils/setupProtocol.sh
This project is licensed under the GPL License - see the LICENSE file for details.