@harvest-finance/harvest-strategy-polygon 0.0.1-security → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @harvest-finance/harvest-strategy-polygon might be problematic. Click here for more details.
- package/README.md +110 -5
- package/contracts/base/Controller.sol +125 -0
- package/contracts/base/ControllerV2.sol +363 -0
- package/contracts/base/FeeRewardForwarder.sol +163 -0
- package/contracts/base/PotPool.sol +360 -0
- package/contracts/base/ProfitSharingReceiver.sol +39 -0
- package/contracts/base/RewardForwarderV2.sol +109 -0
- package/contracts/base/Vault.sol +344 -0
- package/contracts/base/VaultERC4626.sol +113 -0
- package/contracts/base/VaultProxy.sol +35 -0
- package/contracts/base/VaultStorage.sol +199 -0
- package/contracts/base/VaultStorageV2.sol +196 -0
- package/contracts/base/VaultV2.sol +369 -0
- package/contracts/base/ape-base/MiniApeV2Strategy.sol +322 -0
- package/contracts/base/ape-base/interface/IMiniChefV2.sol +31 -0
- package/contracts/base/ape-base/interface/IRewarder.sol +10 -0
- package/contracts/base/factory/MegaFactory.sol +120 -0
- package/contracts/base/factory/interface/IPoolFactory.sol +6 -0
- package/contracts/base/factory/interface/IStrategyFactory.sol +6 -0
- package/contracts/base/factory/interface/IVaultFactory.sol +7 -0
- package/contracts/base/factory/pool/PotPoolFactory.sol +43 -0
- package/contracts/base/factory/strategy/UpgradableStrategyFactory.sol +19 -0
- package/contracts/base/factory/vault/RegularVaultFactory.sol +34 -0
- package/contracts/base/incentives/GlobalIncentivesHelper.sol +167 -0
- package/contracts/base/incentives/NotifyHelperGeneric.sol +61 -0
- package/contracts/base/incentives/NotifyHelperStateful.sol +290 -0
- package/contracts/base/inheritance/Controllable.sol +26 -0
- package/contracts/base/inheritance/ControllableInit.sol +31 -0
- package/contracts/base/inheritance/Governable.sol +29 -0
- package/contracts/base/inheritance/GovernableInit.sol +51 -0
- package/contracts/base/inheritance/IUpgradeSource.sol +8 -0
- package/contracts/base/inheritance/OwnableWhitelist.sol +17 -0
- package/contracts/base/inheritance/RewardTokenProfitNotifier.sol +48 -0
- package/contracts/base/inheritance/Storage.sol +36 -0
- package/contracts/base/interface/IController.sol +30 -0
- package/contracts/base/interface/IControllerV2.sol +135 -0
- package/contracts/base/interface/IERC4626.sol +263 -0
- package/contracts/base/interface/IFeeRewardForwarder.sol +9 -0
- package/contracts/base/interface/IProfitSharingReceiver.sol +10 -0
- package/contracts/base/interface/IRewardForwarder.sol +58 -0
- package/contracts/base/interface/IRewardPool.sol +34 -0
- package/contracts/base/interface/IStrategy.sol +25 -0
- package/contracts/base/interface/IUniversalLiquidator.sol +21 -0
- package/contracts/base/interface/IUniversalLiquidatorRegistry.sol +20 -0
- package/contracts/base/interface/IUpgradeSource.sol +8 -0
- package/contracts/base/interface/IVault.sol +35 -0
- package/contracts/base/interface/aave/DataTypes.sol +266 -0
- package/contracts/base/interface/aave/IAToken.sol +37 -0
- package/contracts/base/interface/aave/IPool.sol +13 -0
- package/contracts/base/interface/balancer/Gauge.sol +22 -0
- package/contracts/base/interface/balancer/IBVault.sol +557 -0
- package/contracts/base/interface/balancer/IBalancerMinter.sol +114 -0
- package/contracts/base/interface/balancer/linearPool/ILinearPool.sol +185 -0
- package/contracts/base/interface/balancer/linearPool/ILinearPoolFactory.sol +16 -0
- package/contracts/base/interface/balancer/linearPool/ILinearPoolRebalancer.sol +8 -0
- package/contracts/base/interface/balancer/linearPool/IPoolSwapStructs.sol +57 -0
- package/contracts/base/interface/caviar/ICaviarChef.sol +16 -0
- package/contracts/base/interface/compound/IComet.sol +114 -0
- package/contracts/base/interface/compound/ICometRewards.sol +17 -0
- package/contracts/base/interface/curve/Gauge.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_2token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_2token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_3token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_3token_meta.sol +20 -0
- package/contracts/base/interface/curve/ICurveDeposit_3token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_4token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_4token_meta.sol +20 -0
- package/contracts/base/interface/curve/ICurveDeposit_4token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_5token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_5token_meta.sol +20 -0
- package/contracts/base/interface/curve/ICurveDeposit_5token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_6token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_6token_meta.sol +20 -0
- package/contracts/base/interface/gamma/IClearing.sol +8 -0
- package/contracts/base/interface/gamma/IHypervisor.sol +17 -0
- package/contracts/base/interface/gamma/IStakingRewards.sol +35 -0
- package/contracts/base/interface/gamma/IUniProxy.sol +15 -0
- package/contracts/base/interface/kyber/IDMMExchangeRouter.sol +69 -0
- package/contracts/base/interface/kyber/IDMMFactory.sol +35 -0
- package/contracts/base/interface/kyber/IDMMLiquidityRouter.sol +204 -0
- package/contracts/base/interface/kyber/IDMMPool.sol +42 -0
- package/contracts/base/interface/kyber/IDMMRouter01.sol +12 -0
- package/contracts/base/interface/kyber/IDMMRouter02.sol +55 -0
- package/contracts/base/interface/kyber/IKyberZap.sol +7 -0
- package/contracts/base/interface/merkl/IDistributor.sol +6 -0
- package/contracts/base/interface/morpho/IMetaMorpho.sol +7 -0
- package/contracts/base/interface/pearl/IGauge.sol +13 -0
- package/contracts/base/interface/pearl/IPair.sol +44 -0
- package/contracts/base/interface/pearl/IRouter.sol +305 -0
- package/contracts/base/interface/quickswap/IDragonLair.sol +25 -0
- package/contracts/base/interface/quickswap/IMasterChef.sol +13 -0
- package/contracts/base/interface/uniswap/IUniswapV2Factory.sol +15 -0
- package/contracts/base/interface/uniswap/IUniswapV2Migrator.sol +6 -0
- package/contracts/base/interface/uniswap/IUniswapV2Pair.sol +59 -0
- package/contracts/base/interface/uniswap/IUniswapV2Router01.sol +96 -0
- package/contracts/base/interface/uniswap/IUniswapV2Router02.sol +137 -0
- package/contracts/base/interface/uniswap/IUniswapV3Pool.sol +24 -0
- package/contracts/base/interface/uniswap/IUniswapV3Router.sol +64 -0
- package/contracts/base/interface/uniswap/IWETH.sol +8 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolActions.sol +103 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolDerivedState.sol +40 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolEvents.sol +121 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolImmutables.sol +35 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolOwnerActions.sol +23 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolState.sol +116 -0
- package/contracts/base/masterchef-base/MasterChefHodlStrategy.sol +240 -0
- package/contracts/base/masterchef-base/MasterChefStrategy.sol +364 -0
- package/contracts/base/masterchef-base/interfaces/IMasterChef.sol +12 -0
- package/contracts/base/migration/vaultMigratable_2JPYv2.sol +87 -0
- package/contracts/base/migration/vaultMigratable_bal2EUR_PAR.sol +121 -0
- package/contracts/base/migration/vaultMigratable_bal2EUR_agEUR.sol +121 -0
- package/contracts/base/migration/vaultMigratable_balMaticX.sol +153 -0
- package/contracts/base/migration/vaultMigratable_balStMatic.sol +153 -0
- package/contracts/base/noop/NoopStrategy.sol +89 -0
- package/contracts/base/noop/NoopStrategyUpgradeable.sol +92 -0
- package/contracts/base/sushi-base/MiniChefV2Strategy.sol +380 -0
- package/contracts/base/sushi-base/interface/IMiniChefV2.sol +31 -0
- package/contracts/base/sushi-base/interface/IRewarder.sol +9 -0
- package/contracts/base/sushi-base/lib/BoringERC20.sol +30 -0
- package/contracts/base/upgradability/Address.sol +33 -0
- package/contracts/base/upgradability/BaseUpgradeabilityProxy.sol +61 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategy.sol +111 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategyStorage.sol +176 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategyStorageV2.sol +290 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategyV2.sol +145 -0
- package/contracts/base/upgradability/IUpgradable.sol +7 -0
- package/contracts/base/upgradability/Proxy.sol +71 -0
- package/contracts/base/upgradability/ReentrancyGuard.sol +57 -0
- package/contracts/base/upgradability/ReentrancyGuardUpgradeable.sol +51 -0
- package/contracts/base/upgradability/StrategyProxy.sol +35 -0
- package/contracts/base/wmatic/WMATIC.sol +8 -0
- package/contracts/strategies/aave/AaveSupplyStrategy.sol +213 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_DAI.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_EURS.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDC.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDCe.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDT.sol +23 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_BANANA_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_BNB_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_BTC_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_DAI_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_DAI_USDC.sol +37 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_ETH_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_USDT_MATIC.sol +36 -0
- package/contracts/strategies/aura/AuraStrategy.sol +347 -0
- package/contracts/strategies/aura/AuraStrategyMainnet_jEUR_PAR.sol +30 -0
- package/contracts/strategies/aura/interface/IAuraBaseRewardPool.sol +25 -0
- package/contracts/strategies/aura/interface/IAuraBooster.sol +17 -0
- package/contracts/strategies/aura/interface/IAuraDepositor.sol +7 -0
- package/contracts/strategies/balancer/BalancerStrategyV3.sol +509 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2BRL.sol +39 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2BRLUSD.sol +38 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_PAR.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_PARv2.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_agEUR.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MATIC_USDC_ETH_BAL.sol +32 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MaticX.sol +37 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MaticX_amMatic.sol +38 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_SPHERE_MATIC.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_TNGBL_USDC.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_WBTC_ETH_USDC.sol +32 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_bbamusd.sol +36 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_frxETH.sol +32 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_frxETH_amWETH.sol +35 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stETH.sol +35 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stMatic.sol +36 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stMatic_amMatic.sol +39 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_tetuBal.sol +36 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_wUSDR_USDC.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_wstETH_amWETH.sol +37 -0
- package/contracts/strategies/balancer/interface/Gauge.sol +26 -0
- package/contracts/strategies/balancer/interface/IBVault.sol +557 -0
- package/contracts/strategies/balancer/interface/IBalanceMinter.sol +114 -0
- package/contracts/strategies/complifi/ComplifiDerivStrategy.sol +381 -0
- package/contracts/strategies/complifi/ComplifiDerivStrategyMainnet_ETH5x.sol +35 -0
- package/contracts/strategies/complifi/ComplifiStrategy.sol +362 -0
- package/contracts/strategies/complifi/ComplifiStrategyMainnet_COMFI_WETH.sol +34 -0
- package/contracts/strategies/complifi/interfaces/ILiquidityMining.sol +13 -0
- package/contracts/strategies/complifi/interfaces/ILiquidityPool.sol +63 -0
- package/contracts/strategies/complifi/interfaces/IProxyActions.sol +10 -0
- package/contracts/strategies/complifi/interfaces/IUSDCVault.sol +55 -0
- package/contracts/strategies/compound/CompoundStrategy.sol +296 -0
- package/contracts/strategies/compound/CompoundStrategyMainnet_USDC.sol +28 -0
- package/contracts/strategies/compound/CompoundStrategyMainnet_USDT.sol +28 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategy.sol +292 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_ETH.sol +27 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_USDC.sol +27 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_USDT.sol +27 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_3CRV.sol +40 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_3CRYPTO.sol +37 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_CRV_3CRYPTO copy.sol +37 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_MATIC_3CRYPTO.sol +37 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_USDR.sol +40 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_aCRV.sol +38 -0
- package/contracts/strategies/convex/base/ConvexStrategy.sol +480 -0
- package/contracts/strategies/convex/interface/IBaseRewardPool.sol +13 -0
- package/contracts/strategies/convex/interface/IBooster.sol +10 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategy.sol +272 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_ETH_USDC.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_ETH_USDT.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_MATIC_USDT.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_TBTC_ETH.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_WBTC_ETH_w.sol +25 -0
- package/contracts/strategies/genomes/NoopStrategy_GENE_ETH.sol +23 -0
- package/contracts/strategies/genomes/NoopStrategy_GNOME_ETH.sol +23 -0
- package/contracts/strategies/idle/IdleFinanceStrategy.sol +240 -0
- package/contracts/strategies/idle/IdleStrategyDAIMainnet.sol +33 -0
- package/contracts/strategies/idle/IdleStrategyUSDCMainnet.sol +33 -0
- package/contracts/strategies/idle/IdleStrategyWETHMainnet.sol +30 -0
- package/contracts/strategies/idle/interface/IdleToken.sol +58 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3.sol +351 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2CAD.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_EURT.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_EURe.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_PAR.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2JPY.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2JPYv2.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2NZD.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2SGD.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jCHF_USDC.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jCHF_WETH.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jEUR_USDC.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jEUR_WETH.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jGBP_USDC.sol +35 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3.sol +281 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_AUR3_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_AURJUL22_WETH.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN2_4EUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN3_4EUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN4_4EUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTANGLENOV22_2EURagEUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTANGLE_2EURagEUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTJUL22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMAY22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMIMONOV22_2EURPAR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMIMO_2EURPAR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTNOV22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTSEP22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_QUI_2CAD.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_SES_2JPY.sol +28 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_agDEN_2EUR.sol +27 -0
- package/contracts/strategies/jarvis/interface/IElysianFields.sol +11 -0
- package/contracts/strategies/jarvis/interface/IKyberFairLaunch.sol +13 -0
- package/contracts/strategies/jarvis/interface/IKyberRewardLocker.sol +9 -0
- package/contracts/strategies/meshswap/MeshswapStrategy.sol +304 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_MESH_oMOOI.sol +30 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_MESH_oZEMIT.sol +30 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_USDC_oUSDC.sol +31 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_USDT_oUSDT.sol +31 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_MESH.sol +27 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_USDC.sol +28 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_USDT.sol +28 -0
- package/contracts/strategies/meshswap/interface/IExchange.sol +9 -0
- package/contracts/strategies/meshswap/interface/IRouter.sol +68 -0
- package/contracts/strategies/pearl/CaviarStrategy.sol +244 -0
- package/contracts/strategies/pearl/CaviarStrategyMainnet_CVR.sol +26 -0
- package/contracts/strategies/pearl/PearlHodlStrategy.sol +254 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_CVR_PEARL.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_DAI_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_ETH_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_MATIC_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_PEARL_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_STAR_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_TNGBL_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_USDC_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_USDT_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_WBTC_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_wUSDR_USDR.sol +27 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategy.sol +400 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_ETH_narrow.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_ETH_wide.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_USDC_narrow.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_USDC_wide.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_USDC_ETH_narrow.sol +34 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_USDC_ETH_wide.sol +34 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2.sol +348 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_USDC_DAI.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_USDC_USDT.sol +29 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_WBTC_ETH_narrow.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_WBTC_USDC_narrow.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_cbETH_ETH.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_wstETH_ETH.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategy.sol +312 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_DAI.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_USDT.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_WETH.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_WMATIC_USDC.sol +28 -0
- package/contracts/strategies/yel/YelStrategy.sol +350 -0
- package/contracts/strategies/yel/YelStrategyMainnet_YEL_WETH.sol +29 -0
- package/hardhat.config.js +58 -0
- package/index.js +42 -0
- package/package.json +56 -6
- package/scripts/01-deploy-vault-regular-with-upgradable-strategy.js +41 -0
- package/scripts/02-deploy-vault-regular.js +35 -0
- package/scripts/03-deploy-upgradable-strategy.js +34 -0
- package/scripts/04-deploy-new-implementation.js +24 -0
- package/scripts/README.md +55 -0
- package/scripts/utils.js +42 -0
- package/test/aave/dai.js +207 -0
- package/test/aave/eurs.js +207 -0
- package/test/aave/usdc.js +206 -0
- package/test/aave/usdce.js +206 -0
- package/test/aave/usdt.js +206 -0
- package/test/ape/banana-matic.js +157 -0
- package/test/ape/bnb-matic.js +159 -0
- package/test/ape/btc-matic.js +159 -0
- package/test/ape/dai-matic.js +159 -0
- package/test/ape/dai-usdc.js +163 -0
- package/test/ape/eth-matic.js +158 -0
- package/test/ape/usdt-matic.js +159 -0
- package/test/aura/jeur-par.js +135 -0
- package/test/balancer/2brl_v3.js +123 -0
- package/test/balancer/2brlusd_v3.js +123 -0
- package/test/balancer/2eur_ageur.js +141 -0
- package/test/balancer/2eur_par.js +141 -0
- package/test/balancer/2eur_par_v2.js +123 -0
- package/test/balancer/bbamusd_v3.js +124 -0
- package/test/balancer/btc.js +131 -0
- package/test/balancer/frxETH.js +123 -0
- package/test/balancer/frxeth_amweth.js +123 -0
- package/test/balancer/matic_usdc_eth_bal.js +123 -0
- package/test/balancer/maticx_ammatic.js +123 -0
- package/test/balancer/maticx_v2.js +120 -0
- package/test/balancer/maticx_v3.js +141 -0
- package/test/balancer/polybase.js +131 -0
- package/test/balancer/polybase_v2.js +121 -0
- package/test/balancer/polydefi.js +131 -0
- package/test/balancer/polydefi2.js +131 -0
- package/test/balancer/qipool.js +136 -0
- package/test/balancer/sphere_matic.js +123 -0
- package/test/balancer/stETH.js +123 -0
- package/test/balancer/stable.js +131 -0
- package/test/balancer/stable_v2.js +121 -0
- package/test/balancer/stmatic_ammatic.js +123 -0
- package/test/balancer/stmatic_v2.js +120 -0
- package/test/balancer/stmatic_v3.js +141 -0
- package/test/balancer/tetubal_v3.js +123 -0
- package/test/balancer/tngbl_usdc.js +123 -0
- package/test/balancer/tricrypto.js +131 -0
- package/test/balancer/tusd_stable.js +142 -0
- package/test/balancer/usdc_weth.js +136 -0
- package/test/balancer/usdc_weth_v2.js +123 -0
- package/test/balancer/wbtc_eth_usdc.js +123 -0
- package/test/balancer/wbtc_weth.js +136 -0
- package/test/balancer/wsteth_amweth.js +123 -0
- package/test/balancer/wusdr_usdc.js +123 -0
- package/test/compound/usdc.js +127 -0
- package/test/compound/usdt.js +129 -0
- package/test/compound-blue/eth.js +136 -0
- package/test/compound-blue/usdc.js +136 -0
- package/test/compound-blue/usdt.js +136 -0
- package/test/convex/3crv.js +123 -0
- package/test/convex/3crypto.js +123 -0
- package/test/convex/acrv.js +123 -0
- package/test/convex/crv_3crypto.js +123 -0
- package/test/convex/matic_3crypto.js +123 -0
- package/test/convex/usdr.js +123 -0
- package/test/core/emission-fork.js +197 -0
- package/test/core/emission.js +209 -0
- package/test/core/vault_upgrade.js +129 -0
- package/test/curve/aave.js +132 -0
- package/test/curve/atricrypto3.js +135 -0
- package/test/curve/eurtusd.js +135 -0
- package/test/gamma-merkl/qs-eth-usdc.js +212 -0
- package/test/gamma-merkl/qs-eth-usdt.js +213 -0
- package/test/gamma-merkl/qs-matic-usdt.js +213 -0
- package/test/gamma-merkl/qs-tbtc-eth.js +213 -0
- package/test/gamma-merkl/qs-wbtc-eth-w.js +213 -0
- package/test/genomes/gene-eth.js +115 -0
- package/test/genomes/gnome-eth.js +115 -0
- package/test/idle/dai.js +129 -0
- package/test/idle/usdc.js +128 -0
- package/test/idle/weth.js +128 -0
- package/test/jarvis/2cad-hodl.js +183 -0
- package/test/jarvis/2cad-update-nov22.js +182 -0
- package/test/jarvis/2cad-update.js +177 -0
- package/test/jarvis/2cad-update2.js +182 -0
- package/test/jarvis/2cad-update3.js +182 -0
- package/test/jarvis/2eur-ageur-update-nov22.js +182 -0
- package/test/jarvis/2eur-ageur-update.js +182 -0
- package/test/jarvis/2eur-eure-hodl.js +176 -0
- package/test/jarvis/2eur-eurt-hodl.js +176 -0
- package/test/jarvis/2eur-eurt-update-nov22.js +182 -0
- package/test/jarvis/2eur-hodl.js +176 -0
- package/test/jarvis/2eur-par-hodl.js +176 -0
- package/test/jarvis/2eur-par-update-nov22.js +182 -0
- package/test/jarvis/2jpy-hodl.js +244 -0
- package/test/jarvis/2jpy-update-nov22.js +182 -0
- package/test/jarvis/2jpy-update.js +177 -0
- package/test/jarvis/2jpy-update2.js +182 -0
- package/test/jarvis/2jpyv2-upgrade.js +184 -0
- package/test/jarvis/2nzd-hodl.js +176 -0
- package/test/jarvis/2nzd-update.js +182 -0
- package/test/jarvis/2sgd-hodl.js +176 -0
- package/test/jarvis/2sgd-update-nov22.js +182 -0
- package/test/jarvis/2sgd-update.js +182 -0
- package/test/jarvis/2sgd-update2.js +182 -0
- package/test/jarvis/4eur-hodl-upgrade.js +177 -0
- package/test/jarvis/4eur-hodl.js +183 -0
- package/test/jarvis/4eur-update.js +181 -0
- package/test/jarvis/4eur-update2.js +181 -0
- package/test/jarvis/agden-2eur.js +222 -0
- package/test/jarvis/aur-usdc-v2.js +115 -0
- package/test/jarvis/aur-usdc.js +127 -0
- package/test/jarvis/aur3-usdc.js +115 -0
- package/test/jarvis/aurjul22-weth.js +222 -0
- package/test/jarvis/den-4eur.js +115 -0
- package/test/jarvis/den2-4eur.js +220 -0
- package/test/jarvis/den3-4eur.js +220 -0
- package/test/jarvis/den4-4eur.js +220 -0
- package/test/jarvis/jchf-usdc-hodl-v2.js +184 -0
- package/test/jarvis/jchf-usdc-hodl-v3.js +178 -0
- package/test/jarvis/jchf-usdc-hodl.js +193 -0
- package/test/jarvis/jchf-weth-hodl.js +176 -0
- package/test/jarvis/jeur-usdc-hodl-v2.js +184 -0
- package/test/jarvis/jeur-usdc-hodl-v3.js +178 -0
- package/test/jarvis/jeur-usdc-hodl.js +193 -0
- package/test/jarvis/jeur-weth-hodl.js +176 -0
- package/test/jarvis/jgbp-usdc-hodl-v2.js +184 -0
- package/test/jarvis/jgbp-usdc-hodl-v3.js +178 -0
- package/test/jarvis/jgbp-usdc-hodl.js +193 -0
- package/test/jarvis/jrtangle-2eurageur.js +220 -0
- package/test/jarvis/jrtanglenov22-2eurageur.js +220 -0
- package/test/jarvis/jrtjul22-usdc.js +115 -0
- package/test/jarvis/jrtmay22-usdc.js +115 -0
- package/test/jarvis/jrtmimo-2eurpar.js +220 -0
- package/test/jarvis/jrtmimonov22-2eurpar.js +220 -0
- package/test/jarvis/jrtnov22-usdc.js +220 -0
- package/test/jarvis/jrtsep22-usdc.js +220 -0
- package/test/jarvis/qui-2cad.js +218 -0
- package/test/jarvis/ses-2jpy.js +222 -0
- package/test/meshswap/mesh-omooi.js +197 -0
- package/test/meshswap/mesh-ozemit.js +197 -0
- package/test/meshswap/usdc-ousdc.js +197 -0
- package/test/meshswap/usdt-ousdt.js +197 -0
- package/test/meshswap/wmatic-mesh.js +197 -0
- package/test/meshswap/wmatic-usdc.js +197 -0
- package/test/meshswap/wmatic-usdt.js +197 -0
- package/test/mstable/musd.js +123 -0
- package/test/pearl/cvr-pearl.js +198 -0
- package/test/pearl/cvr.js +133 -0
- package/test/pearl/dai-usdr.js +198 -0
- package/test/pearl/eth-usdr.js +198 -0
- package/test/pearl/matic-usdr.js +198 -0
- package/test/pearl/pearl-usdr.js +198 -0
- package/test/pearl/star-usdr.js +186 -0
- package/test/pearl/tngbl-usdr.js +198 -0
- package/test/pearl/usdc-usdr.js +198 -0
- package/test/pearl/usdt-usdr.js +198 -0
- package/test/pearl/wbtc-usdr.js +198 -0
- package/test/pearl/wusdr-usdr.js +198 -0
- package/test/popsicle/ice-weth.js +128 -0
- package/test/quick/eth-matic.js +132 -0
- package/test/quick/eth-usdt.js +140 -0
- package/test/quick/ifarm-quick.js +147 -0
- package/test/quick/matic-usdc.js +145 -0
- package/test/quick/psp-matic.js +124 -0
- package/test/quick/wbtc-eth.js +145 -0
- package/test/quick-gamma/cbeth-eth.js +207 -0
- package/test/quick-gamma/matic-eth-narrow.js +201 -0
- package/test/quick-gamma/matic-eth-wide.js +197 -0
- package/test/quick-gamma/matic-usdc-narrow.js +197 -0
- package/test/quick-gamma/matic-usdc-wide.js +197 -0
- package/test/quick-gamma/upgrade/matic-eth-narrow.js +204 -0
- package/test/quick-gamma/upgrade/matic-usdc-narrow.js +199 -0
- package/test/quick-gamma/usdc-dai.js +209 -0
- package/test/quick-gamma/usdc-eth-narrow.js +197 -0
- package/test/quick-gamma/usdc-eth-wide.js +197 -0
- package/test/quick-gamma/usdc-usdt.js +209 -0
- package/test/quick-gamma/wbtc-eth-narrow.js +207 -0
- package/test/quick-gamma/wbtc-usdc-narrow.js +209 -0
- package/test/quick-gamma/wsteth-eth.js +207 -0
- package/test/sushi/eth-usdt.js +153 -0
- package/test/sushi/matic-eth.js +138 -0
- package/test/sushi/usdc-eth.js +153 -0
- package/test/test-config.js +24 -0
- package/test/uniswap-gamma/usdc-dai.js +212 -0
- package/test/uniswap-gamma/usdc-usdt.js +212 -0
- package/test/uniswap-gamma/usdc-weth.js +212 -0
- package/test/uniswap-gamma/wmatic-usdc.js +210 -0
- package/test/utilities/Utils.js +96 -0
- package/test/utilities/hh-utils.js +242 -0
- package/test/utilities/make-vault.js +10 -0
- package/test/yel/yel-wmatic.js +129 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
2
|
+
|
3
|
+
pragma solidity 0.6.12;
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @dev Contract module that helps prevent reentrant calls to a function.
|
7
|
+
*
|
8
|
+
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
|
9
|
+
* available, which can be applied to functions to make sure there are no nested
|
10
|
+
* (reentrant) calls to them.
|
11
|
+
*
|
12
|
+
* Note that because there is a single `nonReentrant` guard, functions marked as
|
13
|
+
* `nonReentrant` may not call one another. This can be worked around by making
|
14
|
+
* those functions `private`, and then adding `external` `nonReentrant` entry
|
15
|
+
* points to them.
|
16
|
+
*
|
17
|
+
* TIP: If you would like to learn more about reentrancy and alternative ways
|
18
|
+
* to protect against it, check out our blog post
|
19
|
+
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
|
20
|
+
*
|
21
|
+
* _Since v2.5.0:_ this module is now much more gas efficient, given net gas
|
22
|
+
* metering changes introduced in the Istanbul hardfork.
|
23
|
+
*/
|
24
|
+
contract ReentrancyGuard {
|
25
|
+
bool private _notEntered;
|
26
|
+
|
27
|
+
constructor () internal {
|
28
|
+
// Storing an initial non-zero value makes deployment a bit more
|
29
|
+
// expensive, but in exchange the refund on every call to nonReentrant
|
30
|
+
// will be lower in amount. Since refunds are capped to a percetange of
|
31
|
+
// the total transaction's gas, it is best to keep them low in cases
|
32
|
+
// like this one, to increase the likelihood of the full refund coming
|
33
|
+
// into effect.
|
34
|
+
_notEntered = true;
|
35
|
+
}
|
36
|
+
|
37
|
+
/**
|
38
|
+
* @dev Prevents a contract from calling itself, directly or indirectly.
|
39
|
+
* Calling a `nonReentrant` function from another `nonReentrant`
|
40
|
+
* function is not supported. It is possible to prevent this from happening
|
41
|
+
* by making the `nonReentrant` function external, and make it call a
|
42
|
+
* `private` function that does the actual work.
|
43
|
+
*/
|
44
|
+
modifier nonReentrant() {
|
45
|
+
// On the first call to nonReentrant, _notEntered will be true
|
46
|
+
require(_notEntered, "ReentrancyGuard: reentrant call");
|
47
|
+
|
48
|
+
// Any calls to nonReentrant after this point will fail
|
49
|
+
_notEntered = false;
|
50
|
+
|
51
|
+
_;
|
52
|
+
|
53
|
+
// By storing the original value once again, a refund is triggered (see
|
54
|
+
// https://eips.ethereum.org/EIPS/eip-2200)
|
55
|
+
_notEntered = true;
|
56
|
+
}
|
57
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol";
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Same old `ReentrancyGuard`, but can be used by upgradable contracts
|
8
|
+
*/
|
9
|
+
contract ReentrancyGuardUpgradeable is Initializable {
|
10
|
+
|
11
|
+
bytes32 internal constant _NOT_ENTERED_SLOT = 0x62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe25;
|
12
|
+
|
13
|
+
modifier nonReentrant() {
|
14
|
+
// On the first call to nonReentrant, _notEntered will be true
|
15
|
+
require(_getNotEntered(_NOT_ENTERED_SLOT), "ReentrancyGuard: reentrant call");
|
16
|
+
|
17
|
+
// Any calls to nonReentrant after this point will fail
|
18
|
+
_setNotEntered(_NOT_ENTERED_SLOT, false);
|
19
|
+
|
20
|
+
_;
|
21
|
+
|
22
|
+
// By storing the original value once again, a refund is triggered (see
|
23
|
+
// https://eips.ethereum.org/EIPS/eip-2200)
|
24
|
+
_setNotEntered(_NOT_ENTERED_SLOT, true);
|
25
|
+
}
|
26
|
+
|
27
|
+
constructor() public {
|
28
|
+
assert(_NOT_ENTERED_SLOT == bytes32(uint256(keccak256("eip1967.reentrancyGuard.notEntered")) - 1));
|
29
|
+
}
|
30
|
+
|
31
|
+
function initialize() public initializer {
|
32
|
+
_setNotEntered(_NOT_ENTERED_SLOT, true);
|
33
|
+
}
|
34
|
+
|
35
|
+
function _getNotEntered(bytes32 slot) internal view returns (bool) {
|
36
|
+
uint str;
|
37
|
+
// solhint-disable-next-line no-inline-assembly
|
38
|
+
assembly {
|
39
|
+
str := sload(slot)
|
40
|
+
}
|
41
|
+
return str == 1;
|
42
|
+
}
|
43
|
+
|
44
|
+
function _setNotEntered(bytes32 slot, bool _value) internal {
|
45
|
+
// solhint-disable-next-line no-inline-assembly
|
46
|
+
assembly {
|
47
|
+
sstore(slot, _value)
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
|
3
|
+
pragma solidity 0.6.12;
|
4
|
+
|
5
|
+
import "../inheritance/IUpgradeSource.sol";
|
6
|
+
import "./BaseUpgradeabilityProxy.sol";
|
7
|
+
|
8
|
+
contract StrategyProxy is BaseUpgradeabilityProxy {
|
9
|
+
|
10
|
+
constructor(address _implementation) public {
|
11
|
+
_setImplementation(_implementation);
|
12
|
+
}
|
13
|
+
|
14
|
+
/**
|
15
|
+
* The main logic. If the timer has elapsed and there is a schedule upgrade,
|
16
|
+
* the governance can upgrade the strategy
|
17
|
+
*/
|
18
|
+
function upgrade() external {
|
19
|
+
(bool should, address newImplementation) = IUpgradeSource(address(this)).shouldUpgrade();
|
20
|
+
require(should, "Upgrade not scheduled");
|
21
|
+
_upgradeTo(newImplementation);
|
22
|
+
|
23
|
+
// the finalization needs to be executed on itself to update the storage of this proxy
|
24
|
+
// it also needs to be invoked by the governance, not by address(this), so delegatecall is needed
|
25
|
+
(bool success,) = address(this).delegatecall(
|
26
|
+
abi.encodeWithSignature("finalizeUpgrade()")
|
27
|
+
);
|
28
|
+
|
29
|
+
require(success, "Issue when finalizing the upgrade");
|
30
|
+
}
|
31
|
+
|
32
|
+
function implementation() external view returns (address) {
|
33
|
+
return _implementation();
|
34
|
+
}
|
35
|
+
}
|
@@ -0,0 +1,213 @@
|
|
1
|
+
// SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "@openzeppelin/contracts/math/Math.sol";
|
5
|
+
import "@openzeppelin/contracts/math/SafeMath.sol";
|
6
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
7
|
+
import "../../base/interface/IUniversalLiquidator.sol";
|
8
|
+
import "../../base/interface/IVault.sol";
|
9
|
+
import "../../base/upgradability/BaseUpgradeableStrategyV2.sol";
|
10
|
+
import "../../base/interface/aave/IAToken.sol";
|
11
|
+
import "../../base/interface/aave/IPool.sol";
|
12
|
+
|
13
|
+
contract AaveSupplyStrategy is BaseUpgradeableStrategyV2 {
|
14
|
+
|
15
|
+
using SafeMath for uint256;
|
16
|
+
using SafeERC20 for IERC20;
|
17
|
+
|
18
|
+
address public constant harvestMSIG = address(0x39cC360806b385C96969ce9ff26c23476017F652);
|
19
|
+
|
20
|
+
// additional storage slots (on top of BaseUpgradeableStrategy ones) are defined here
|
21
|
+
bytes32 internal constant _ATOKEN_SLOT = 0x8cdee58637b787efaa2d78bb1da1e053a2c91e61640b32339bfbba65c00abd68;
|
22
|
+
bytes32 internal constant _STORED_SUPPLIED_SLOT = 0x280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a2;
|
23
|
+
bytes32 internal constant _PENDING_FEE_SLOT = 0x0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd97;
|
24
|
+
|
25
|
+
constructor() public BaseUpgradeableStrategyV2() {
|
26
|
+
assert(_ATOKEN_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.aToken")) - 1));
|
27
|
+
assert(_STORED_SUPPLIED_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.storedSupplied")) - 1));
|
28
|
+
assert(_PENDING_FEE_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.pendingFee")) - 1));
|
29
|
+
}
|
30
|
+
|
31
|
+
function initializeBaseStrategy(
|
32
|
+
address _storage,
|
33
|
+
address _underlying,
|
34
|
+
address _vault,
|
35
|
+
address _aToken
|
36
|
+
)
|
37
|
+
public initializer {
|
38
|
+
BaseUpgradeableStrategyV2.initialize(
|
39
|
+
_storage,
|
40
|
+
_underlying,
|
41
|
+
_vault,
|
42
|
+
_aToken,
|
43
|
+
_underlying,
|
44
|
+
harvestMSIG
|
45
|
+
);
|
46
|
+
|
47
|
+
require(IAToken(_aToken).UNDERLYING_ASSET_ADDRESS() == _underlying, "Underlying mismatch");
|
48
|
+
_setAToken(_aToken);
|
49
|
+
}
|
50
|
+
|
51
|
+
function currentSupplied() public view returns (uint256) {
|
52
|
+
return IAToken(aToken()).balanceOf(address(this));
|
53
|
+
}
|
54
|
+
|
55
|
+
function storedSupplied() public view returns (uint256) {
|
56
|
+
return getUint256(_STORED_SUPPLIED_SLOT);
|
57
|
+
}
|
58
|
+
|
59
|
+
function _updateStoredSupplied() internal {
|
60
|
+
setUint256(_STORED_SUPPLIED_SLOT, currentSupplied());
|
61
|
+
}
|
62
|
+
|
63
|
+
function totalFeeNumerator() public view returns (uint256) {
|
64
|
+
return strategistFeeNumerator().add(platformFeeNumerator()).add(profitSharingNumerator());
|
65
|
+
}
|
66
|
+
|
67
|
+
function pendingFee() public view returns (uint256) {
|
68
|
+
return getUint256(_PENDING_FEE_SLOT);
|
69
|
+
}
|
70
|
+
|
71
|
+
function _accrueFee() internal {
|
72
|
+
uint256 fee;
|
73
|
+
if (currentSupplied() > storedSupplied()) {
|
74
|
+
uint256 balanceIncrease = currentSupplied().sub(storedSupplied());
|
75
|
+
fee = balanceIncrease.mul(totalFeeNumerator()).div(feeDenominator());
|
76
|
+
}
|
77
|
+
setUint256(_PENDING_FEE_SLOT, pendingFee().add(fee));
|
78
|
+
_updateStoredSupplied();
|
79
|
+
}
|
80
|
+
|
81
|
+
function _handleFee() internal {
|
82
|
+
_accrueFee();
|
83
|
+
uint256 fee = pendingFee();
|
84
|
+
if (fee > 100) {
|
85
|
+
uint256 balanceIncrease = fee.mul(feeDenominator()).div(totalFeeNumerator());
|
86
|
+
_redeem(fee);
|
87
|
+
address _underlying = underlying();
|
88
|
+
if (IERC20(_underlying).balanceOf(address(this)) < fee) {
|
89
|
+
balanceIncrease = IERC20(_underlying).balanceOf(address(this)).mul(feeDenominator()).div(totalFeeNumerator());
|
90
|
+
}
|
91
|
+
_notifyProfitInRewardToken(_underlying, balanceIncrease);
|
92
|
+
setUint256(_PENDING_FEE_SLOT, 0);
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
function depositArbCheck() public pure returns (bool) {
|
97
|
+
// there's no arb here.
|
98
|
+
return true;
|
99
|
+
}
|
100
|
+
|
101
|
+
function unsalvagableTokens(address token) public view returns (bool) {
|
102
|
+
return (token == underlying() || token == aToken());
|
103
|
+
}
|
104
|
+
|
105
|
+
/**
|
106
|
+
* Exits Moonwell and transfers everything to the vault.
|
107
|
+
*/
|
108
|
+
function withdrawAllToVault() public restricted {
|
109
|
+
address _underlying = underlying();
|
110
|
+
_handleFee();
|
111
|
+
_redeemMaximum();
|
112
|
+
if (IERC20(_underlying).balanceOf(address(this)) > 0) {
|
113
|
+
IERC20(_underlying).safeTransfer(vault(), IERC20(_underlying).balanceOf(address(this)));
|
114
|
+
}
|
115
|
+
_updateStoredSupplied();
|
116
|
+
}
|
117
|
+
|
118
|
+
function emergencyExit() external onlyGovernance {
|
119
|
+
_accrueFee();
|
120
|
+
_redeemMaximum();
|
121
|
+
_updateStoredSupplied();
|
122
|
+
}
|
123
|
+
|
124
|
+
function withdrawToVault(uint256 amountUnderlying) public restricted {
|
125
|
+
_accrueFee();
|
126
|
+
address _underlying = underlying();
|
127
|
+
uint256 balance = IERC20(_underlying).balanceOf(address(this));
|
128
|
+
if (amountUnderlying <= balance) {
|
129
|
+
IERC20(_underlying).safeTransfer(vault(), amountUnderlying);
|
130
|
+
return;
|
131
|
+
}
|
132
|
+
uint256 toRedeem = amountUnderlying.sub(balance);
|
133
|
+
// get some of the underlying
|
134
|
+
_redeem(toRedeem);
|
135
|
+
// transfer the amount requested (or the amount we have) back to vault()
|
136
|
+
IERC20(_underlying).safeTransfer(vault(), amountUnderlying);
|
137
|
+
balance = IERC20(_underlying).balanceOf(address(this));
|
138
|
+
if (balance > 0) {
|
139
|
+
_supply(balance);
|
140
|
+
}
|
141
|
+
_updateStoredSupplied();
|
142
|
+
}
|
143
|
+
|
144
|
+
/**
|
145
|
+
* Withdraws all assets, liquidates XVS, and invests again in the required ratio.
|
146
|
+
*/
|
147
|
+
function doHardWork() public restricted {
|
148
|
+
_handleFee();
|
149
|
+
_supply(IERC20(underlying()).balanceOf(address(this)));
|
150
|
+
_updateStoredSupplied();
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Salvages a token.
|
155
|
+
*/
|
156
|
+
function salvage(address recipient, address token, uint256 amount) public onlyGovernance {
|
157
|
+
// To make sure that governance cannot come in and take away the coins
|
158
|
+
require(!unsalvagableTokens(token), "token is defined as not salvagable");
|
159
|
+
IERC20(token).safeTransfer(recipient, amount);
|
160
|
+
}
|
161
|
+
|
162
|
+
/**
|
163
|
+
* Returns the current balance.
|
164
|
+
*/
|
165
|
+
function investedUnderlyingBalance() public view returns (uint256) {
|
166
|
+
// underlying in this strategy + underlying redeemable from Radiant - debt
|
167
|
+
return IERC20(underlying()).balanceOf(address(this))
|
168
|
+
.add(storedSupplied())
|
169
|
+
.sub(pendingFee());
|
170
|
+
}
|
171
|
+
|
172
|
+
/**
|
173
|
+
* Supplies to Moonwel
|
174
|
+
*/
|
175
|
+
function _supply(uint256 amount) internal {
|
176
|
+
if (amount == 0){
|
177
|
+
return;
|
178
|
+
}
|
179
|
+
address _underlying = underlying();
|
180
|
+
address _pool = IAToken(aToken()).POOL();
|
181
|
+
IERC20(_underlying).safeApprove(_pool, 0);
|
182
|
+
IERC20(_underlying).safeApprove(_pool, amount);
|
183
|
+
IPool(_pool).supply(_underlying, amount, address(this), 0);
|
184
|
+
}
|
185
|
+
|
186
|
+
function _redeem(uint256 amountUnderlying) internal {
|
187
|
+
if (amountUnderlying == 0){
|
188
|
+
return;
|
189
|
+
}
|
190
|
+
address _pool = IAToken(aToken()).POOL();
|
191
|
+
IPool(_pool).withdraw(underlying(), amountUnderlying, address(this));
|
192
|
+
}
|
193
|
+
|
194
|
+
function _redeemMaximum() internal {
|
195
|
+
if (currentSupplied() > 0) {
|
196
|
+
_redeem(currentSupplied().sub(pendingFee().add(1)));
|
197
|
+
}
|
198
|
+
}
|
199
|
+
|
200
|
+
function _setAToken (address _target) internal {
|
201
|
+
setAddress(_ATOKEN_SLOT, _target);
|
202
|
+
}
|
203
|
+
|
204
|
+
function aToken() public view returns (address) {
|
205
|
+
return getAddress(_ATOKEN_SLOT);
|
206
|
+
}
|
207
|
+
|
208
|
+
function finalizeUpgrade() external onlyGovernance {
|
209
|
+
_finalizeUpgrade();
|
210
|
+
}
|
211
|
+
|
212
|
+
receive() external payable {}
|
213
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "./AaveSupplyStrategy.sol";
|
5
|
+
|
6
|
+
contract AaveSupplyStrategyMainnet_DAI is AaveSupplyStrategy {
|
7
|
+
|
8
|
+
constructor() public {}
|
9
|
+
|
10
|
+
function initializeStrategy(
|
11
|
+
address _storage,
|
12
|
+
address _vault
|
13
|
+
) public initializer {
|
14
|
+
address underlying = address(0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063);
|
15
|
+
address aToken = address(0x82E64f49Ed5EC1bC6e43DAD4FC8Af9bb3A2312EE);
|
16
|
+
AaveSupplyStrategy.initializeBaseStrategy(
|
17
|
+
_storage,
|
18
|
+
underlying,
|
19
|
+
_vault,
|
20
|
+
aToken
|
21
|
+
);
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "./AaveSupplyStrategy.sol";
|
5
|
+
|
6
|
+
contract AaveSupplyStrategyMainnet_EURS is AaveSupplyStrategy {
|
7
|
+
|
8
|
+
constructor() public {}
|
9
|
+
|
10
|
+
function initializeStrategy(
|
11
|
+
address _storage,
|
12
|
+
address _vault
|
13
|
+
) public initializer {
|
14
|
+
address underlying = address(0xE111178A87A3BFf0c8d18DECBa5798827539Ae99);
|
15
|
+
address aToken = address(0x38d693cE1dF5AaDF7bC62595A37D667aD57922e5);
|
16
|
+
AaveSupplyStrategy.initializeBaseStrategy(
|
17
|
+
_storage,
|
18
|
+
underlying,
|
19
|
+
_vault,
|
20
|
+
aToken
|
21
|
+
);
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "./AaveSupplyStrategy.sol";
|
5
|
+
|
6
|
+
contract AaveSupplyStrategyMainnet_USDC is AaveSupplyStrategy {
|
7
|
+
|
8
|
+
constructor() public {}
|
9
|
+
|
10
|
+
function initializeStrategy(
|
11
|
+
address _storage,
|
12
|
+
address _vault
|
13
|
+
) public initializer {
|
14
|
+
address underlying = address(0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359);
|
15
|
+
address aToken = address(0xA4D94019934D8333Ef880ABFFbF2FDd611C762BD);
|
16
|
+
AaveSupplyStrategy.initializeBaseStrategy(
|
17
|
+
_storage,
|
18
|
+
underlying,
|
19
|
+
_vault,
|
20
|
+
aToken
|
21
|
+
);
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "./AaveSupplyStrategy.sol";
|
5
|
+
|
6
|
+
contract AaveSupplyStrategyMainnet_USDCe is AaveSupplyStrategy {
|
7
|
+
|
8
|
+
constructor() public {}
|
9
|
+
|
10
|
+
function initializeStrategy(
|
11
|
+
address _storage,
|
12
|
+
address _vault
|
13
|
+
) public initializer {
|
14
|
+
address underlying = address(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174);
|
15
|
+
address aToken = address(0x625E7708f30cA75bfd92586e17077590C60eb4cD);
|
16
|
+
AaveSupplyStrategy.initializeBaseStrategy(
|
17
|
+
_storage,
|
18
|
+
underlying,
|
19
|
+
_vault,
|
20
|
+
aToken
|
21
|
+
);
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "./AaveSupplyStrategy.sol";
|
5
|
+
|
6
|
+
contract AaveSupplyStrategyMainnet_USDT is AaveSupplyStrategy {
|
7
|
+
|
8
|
+
constructor() public {}
|
9
|
+
|
10
|
+
function initializeStrategy(
|
11
|
+
address _storage,
|
12
|
+
address _vault
|
13
|
+
) public initializer {
|
14
|
+
address underlying = address(0xc2132D05D31c914a87C6611C10748AEb04B58e8F);
|
15
|
+
address aToken = address(0x6ab707Aca953eDAeFBc4fD23bA73294241490620);
|
16
|
+
AaveSupplyStrategy.initializeBaseStrategy(
|
17
|
+
_storage,
|
18
|
+
underlying,
|
19
|
+
_vault,
|
20
|
+
aToken
|
21
|
+
);
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "../../base/interface/IVault.sol";
|
5
|
+
import "../../base/ape-base/MiniApeV2Strategy.sol";
|
6
|
+
|
7
|
+
contract ApeStrategyMainnet_BANANA_MATIC is MiniApeV2Strategy {
|
8
|
+
|
9
|
+
address constant public weth = address(0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619);
|
10
|
+
address constant public banana = address(0x5d47bAbA0d66083C52009271faF3F50DCc01023C);
|
11
|
+
address constant public banana_matic = address(0x034293F21F1cCE5908BC605CE5850dF2b1059aC0);
|
12
|
+
address constant public wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
13
|
+
address constant public miniApe = address(0x54aff400858Dcac39797a81894D9920f16972D1D);
|
14
|
+
|
15
|
+
constructor() public {}
|
16
|
+
|
17
|
+
function initializeStrategy(
|
18
|
+
address _storage,
|
19
|
+
address _vault
|
20
|
+
) public initializer {
|
21
|
+
|
22
|
+
MiniApeV2Strategy.initializeBaseStrategy(
|
23
|
+
_storage,
|
24
|
+
banana_matic,
|
25
|
+
_vault,
|
26
|
+
miniApe,
|
27
|
+
banana,
|
28
|
+
0
|
29
|
+
);
|
30
|
+
|
31
|
+
require(IVault(_vault).underlying() == banana_matic, "Underlying mismatch");
|
32
|
+
|
33
|
+
uniswapRoutes[wmatic] = [banana, wmatic];
|
34
|
+
uniswapRoutes[weth] = [banana, wmatic, weth];
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "../../base/interface/IVault.sol";
|
5
|
+
import "../../base/ape-base/MiniApeV2Strategy.sol";
|
6
|
+
|
7
|
+
contract ApeStrategyMainnet_BNB_MATIC is MiniApeV2Strategy {
|
8
|
+
|
9
|
+
address constant public bnb = address(0xA649325Aa7C5093d12D6F98EB4378deAe68CE23F);
|
10
|
+
address constant public banana = address(0x5d47bAbA0d66083C52009271faF3F50DCc01023C);
|
11
|
+
address constant public bnb_matic = address(0x0359001070cF696D5993E0697335157a6f7dB289);
|
12
|
+
address constant public wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
13
|
+
address constant public miniApe = address(0x54aff400858Dcac39797a81894D9920f16972D1D);
|
14
|
+
|
15
|
+
constructor() public {}
|
16
|
+
|
17
|
+
function initializeStrategy(
|
18
|
+
address _storage,
|
19
|
+
address _vault
|
20
|
+
) public initializer {
|
21
|
+
|
22
|
+
MiniApeV2Strategy.initializeBaseStrategy(
|
23
|
+
_storage,
|
24
|
+
bnb_matic,
|
25
|
+
_vault,
|
26
|
+
miniApe,
|
27
|
+
banana,
|
28
|
+
6
|
29
|
+
);
|
30
|
+
|
31
|
+
require(IVault(_vault).underlying() == bnb_matic, "Underlying mismatch");
|
32
|
+
|
33
|
+
uniswapRoutes[bnb] = [banana, wmatic, bnb];
|
34
|
+
uniswapRoutes[wmatic] = [banana, wmatic];
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "../../base/interface/IVault.sol";
|
5
|
+
import "../../base/ape-base/MiniApeV2Strategy.sol";
|
6
|
+
|
7
|
+
contract ApeStrategyMainnet_BTC_MATIC is MiniApeV2Strategy {
|
8
|
+
|
9
|
+
address constant public wbtc = address(0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6);
|
10
|
+
address constant public banana = address(0x5d47bAbA0d66083C52009271faF3F50DCc01023C);
|
11
|
+
address constant public btc_matic = address(0xe82635a105c520fd58e597181cBf754961d51E3e);
|
12
|
+
address constant public wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
13
|
+
address constant public miniApe = address(0x54aff400858Dcac39797a81894D9920f16972D1D);
|
14
|
+
|
15
|
+
constructor() public {}
|
16
|
+
|
17
|
+
function initializeStrategy(
|
18
|
+
address _storage,
|
19
|
+
address _vault
|
20
|
+
) public initializer {
|
21
|
+
|
22
|
+
MiniApeV2Strategy.initializeBaseStrategy(
|
23
|
+
_storage,
|
24
|
+
btc_matic,
|
25
|
+
_vault,
|
26
|
+
miniApe,
|
27
|
+
banana,
|
28
|
+
4
|
29
|
+
);
|
30
|
+
|
31
|
+
require(IVault(_vault).underlying() == btc_matic, "Underlying mismatch");
|
32
|
+
|
33
|
+
uniswapRoutes[wmatic] = [banana, wmatic];
|
34
|
+
uniswapRoutes[wbtc] = [banana, wmatic, wbtc];
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "../../base/interface/IVault.sol";
|
5
|
+
import "../../base/ape-base/MiniApeV2Strategy.sol";
|
6
|
+
|
7
|
+
contract ApeStrategyMainnet_DAI_MATIC is MiniApeV2Strategy {
|
8
|
+
|
9
|
+
address constant public dai = address(0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063);
|
10
|
+
address constant public banana = address(0x5d47bAbA0d66083C52009271faF3F50DCc01023C);
|
11
|
+
address constant public dai_matic = address(0xd32f3139A214034A0f9777c87eE0a064c1FF6AE2);
|
12
|
+
address constant public wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
13
|
+
address constant public miniApe = address(0x54aff400858Dcac39797a81894D9920f16972D1D);
|
14
|
+
|
15
|
+
constructor() public {}
|
16
|
+
|
17
|
+
function initializeStrategy(
|
18
|
+
address _storage,
|
19
|
+
address _vault
|
20
|
+
) public initializer {
|
21
|
+
|
22
|
+
MiniApeV2Strategy.initializeBaseStrategy(
|
23
|
+
_storage,
|
24
|
+
dai_matic,
|
25
|
+
_vault,
|
26
|
+
miniApe,
|
27
|
+
banana,
|
28
|
+
2
|
29
|
+
);
|
30
|
+
|
31
|
+
require(IVault(_vault).underlying() == dai_matic, "Underlying mismatch");
|
32
|
+
|
33
|
+
uniswapRoutes[wmatic] = [banana, wmatic];
|
34
|
+
uniswapRoutes[dai] = [banana, wmatic, dai];
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "../../base/interface/IVault.sol";
|
5
|
+
import "../../base/ape-base/MiniApeV2Strategy.sol";
|
6
|
+
|
7
|
+
contract ApeStrategyMainnet_DAI_USDC is MiniApeV2Strategy {
|
8
|
+
|
9
|
+
address constant public dai = address(0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063);
|
10
|
+
address constant public usdc = address(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174);
|
11
|
+
address constant public banana = address(0x5d47bAbA0d66083C52009271faF3F50DCc01023C);
|
12
|
+
address constant public dai_usdc = address(0x5b13B583D4317aB15186Ed660A1E4C65C10da659);
|
13
|
+
address constant public wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
14
|
+
address constant public miniApe = address(0x54aff400858Dcac39797a81894D9920f16972D1D);
|
15
|
+
|
16
|
+
constructor() public {}
|
17
|
+
|
18
|
+
function initializeStrategy(
|
19
|
+
address _storage,
|
20
|
+
address _vault
|
21
|
+
) public initializer {
|
22
|
+
|
23
|
+
MiniApeV2Strategy.initializeBaseStrategy(
|
24
|
+
_storage,
|
25
|
+
dai_usdc,
|
26
|
+
_vault,
|
27
|
+
miniApe,
|
28
|
+
banana,
|
29
|
+
5
|
30
|
+
);
|
31
|
+
|
32
|
+
require(IVault(_vault).underlying() == dai_usdc, "Underlying mismatch");
|
33
|
+
|
34
|
+
uniswapRoutes[dai] = [banana, wmatic, dai];
|
35
|
+
uniswapRoutes[usdc] = [banana, wmatic, dai, usdc];
|
36
|
+
}
|
37
|
+
}
|