@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.

Files changed (485) hide show
  1. package/README.md +110 -5
  2. package/contracts/base/Controller.sol +125 -0
  3. package/contracts/base/ControllerV2.sol +363 -0
  4. package/contracts/base/FeeRewardForwarder.sol +163 -0
  5. package/contracts/base/PotPool.sol +360 -0
  6. package/contracts/base/ProfitSharingReceiver.sol +39 -0
  7. package/contracts/base/RewardForwarderV2.sol +109 -0
  8. package/contracts/base/Vault.sol +344 -0
  9. package/contracts/base/VaultERC4626.sol +113 -0
  10. package/contracts/base/VaultProxy.sol +35 -0
  11. package/contracts/base/VaultStorage.sol +199 -0
  12. package/contracts/base/VaultStorageV2.sol +196 -0
  13. package/contracts/base/VaultV2.sol +369 -0
  14. package/contracts/base/ape-base/MiniApeV2Strategy.sol +322 -0
  15. package/contracts/base/ape-base/interface/IMiniChefV2.sol +31 -0
  16. package/contracts/base/ape-base/interface/IRewarder.sol +10 -0
  17. package/contracts/base/factory/MegaFactory.sol +120 -0
  18. package/contracts/base/factory/interface/IPoolFactory.sol +6 -0
  19. package/contracts/base/factory/interface/IStrategyFactory.sol +6 -0
  20. package/contracts/base/factory/interface/IVaultFactory.sol +7 -0
  21. package/contracts/base/factory/pool/PotPoolFactory.sol +43 -0
  22. package/contracts/base/factory/strategy/UpgradableStrategyFactory.sol +19 -0
  23. package/contracts/base/factory/vault/RegularVaultFactory.sol +34 -0
  24. package/contracts/base/incentives/GlobalIncentivesHelper.sol +167 -0
  25. package/contracts/base/incentives/NotifyHelperGeneric.sol +61 -0
  26. package/contracts/base/incentives/NotifyHelperStateful.sol +290 -0
  27. package/contracts/base/inheritance/Controllable.sol +26 -0
  28. package/contracts/base/inheritance/ControllableInit.sol +31 -0
  29. package/contracts/base/inheritance/Governable.sol +29 -0
  30. package/contracts/base/inheritance/GovernableInit.sol +51 -0
  31. package/contracts/base/inheritance/IUpgradeSource.sol +8 -0
  32. package/contracts/base/inheritance/OwnableWhitelist.sol +17 -0
  33. package/contracts/base/inheritance/RewardTokenProfitNotifier.sol +48 -0
  34. package/contracts/base/inheritance/Storage.sol +36 -0
  35. package/contracts/base/interface/IController.sol +30 -0
  36. package/contracts/base/interface/IControllerV2.sol +135 -0
  37. package/contracts/base/interface/IERC4626.sol +263 -0
  38. package/contracts/base/interface/IFeeRewardForwarder.sol +9 -0
  39. package/contracts/base/interface/IProfitSharingReceiver.sol +10 -0
  40. package/contracts/base/interface/IRewardForwarder.sol +58 -0
  41. package/contracts/base/interface/IRewardPool.sol +34 -0
  42. package/contracts/base/interface/IStrategy.sol +25 -0
  43. package/contracts/base/interface/IUniversalLiquidator.sol +21 -0
  44. package/contracts/base/interface/IUniversalLiquidatorRegistry.sol +20 -0
  45. package/contracts/base/interface/IUpgradeSource.sol +8 -0
  46. package/contracts/base/interface/IVault.sol +35 -0
  47. package/contracts/base/interface/aave/DataTypes.sol +266 -0
  48. package/contracts/base/interface/aave/IAToken.sol +37 -0
  49. package/contracts/base/interface/aave/IPool.sol +13 -0
  50. package/contracts/base/interface/balancer/Gauge.sol +22 -0
  51. package/contracts/base/interface/balancer/IBVault.sol +557 -0
  52. package/contracts/base/interface/balancer/IBalancerMinter.sol +114 -0
  53. package/contracts/base/interface/balancer/linearPool/ILinearPool.sol +185 -0
  54. package/contracts/base/interface/balancer/linearPool/ILinearPoolFactory.sol +16 -0
  55. package/contracts/base/interface/balancer/linearPool/ILinearPoolRebalancer.sol +8 -0
  56. package/contracts/base/interface/balancer/linearPool/IPoolSwapStructs.sol +57 -0
  57. package/contracts/base/interface/caviar/ICaviarChef.sol +16 -0
  58. package/contracts/base/interface/compound/IComet.sol +114 -0
  59. package/contracts/base/interface/compound/ICometRewards.sol +17 -0
  60. package/contracts/base/interface/curve/Gauge.sol +25 -0
  61. package/contracts/base/interface/curve/ICurveDeposit_2token.sol +25 -0
  62. package/contracts/base/interface/curve/ICurveDeposit_2token_underlying.sol +31 -0
  63. package/contracts/base/interface/curve/ICurveDeposit_3token.sol +25 -0
  64. package/contracts/base/interface/curve/ICurveDeposit_3token_meta.sol +20 -0
  65. package/contracts/base/interface/curve/ICurveDeposit_3token_underlying.sol +31 -0
  66. package/contracts/base/interface/curve/ICurveDeposit_4token.sol +25 -0
  67. package/contracts/base/interface/curve/ICurveDeposit_4token_meta.sol +20 -0
  68. package/contracts/base/interface/curve/ICurveDeposit_4token_underlying.sol +31 -0
  69. package/contracts/base/interface/curve/ICurveDeposit_5token.sol +25 -0
  70. package/contracts/base/interface/curve/ICurveDeposit_5token_meta.sol +20 -0
  71. package/contracts/base/interface/curve/ICurveDeposit_5token_underlying.sol +31 -0
  72. package/contracts/base/interface/curve/ICurveDeposit_6token.sol +25 -0
  73. package/contracts/base/interface/curve/ICurveDeposit_6token_meta.sol +20 -0
  74. package/contracts/base/interface/gamma/IClearing.sol +8 -0
  75. package/contracts/base/interface/gamma/IHypervisor.sol +17 -0
  76. package/contracts/base/interface/gamma/IStakingRewards.sol +35 -0
  77. package/contracts/base/interface/gamma/IUniProxy.sol +15 -0
  78. package/contracts/base/interface/kyber/IDMMExchangeRouter.sol +69 -0
  79. package/contracts/base/interface/kyber/IDMMFactory.sol +35 -0
  80. package/contracts/base/interface/kyber/IDMMLiquidityRouter.sol +204 -0
  81. package/contracts/base/interface/kyber/IDMMPool.sol +42 -0
  82. package/contracts/base/interface/kyber/IDMMRouter01.sol +12 -0
  83. package/contracts/base/interface/kyber/IDMMRouter02.sol +55 -0
  84. package/contracts/base/interface/kyber/IKyberZap.sol +7 -0
  85. package/contracts/base/interface/merkl/IDistributor.sol +6 -0
  86. package/contracts/base/interface/morpho/IMetaMorpho.sol +7 -0
  87. package/contracts/base/interface/pearl/IGauge.sol +13 -0
  88. package/contracts/base/interface/pearl/IPair.sol +44 -0
  89. package/contracts/base/interface/pearl/IRouter.sol +305 -0
  90. package/contracts/base/interface/quickswap/IDragonLair.sol +25 -0
  91. package/contracts/base/interface/quickswap/IMasterChef.sol +13 -0
  92. package/contracts/base/interface/uniswap/IUniswapV2Factory.sol +15 -0
  93. package/contracts/base/interface/uniswap/IUniswapV2Migrator.sol +6 -0
  94. package/contracts/base/interface/uniswap/IUniswapV2Pair.sol +59 -0
  95. package/contracts/base/interface/uniswap/IUniswapV2Router01.sol +96 -0
  96. package/contracts/base/interface/uniswap/IUniswapV2Router02.sol +137 -0
  97. package/contracts/base/interface/uniswap/IUniswapV3Pool.sol +24 -0
  98. package/contracts/base/interface/uniswap/IUniswapV3Router.sol +64 -0
  99. package/contracts/base/interface/uniswap/IWETH.sol +8 -0
  100. package/contracts/base/interface/uniswap/pool/IUniswapV3PoolActions.sol +103 -0
  101. package/contracts/base/interface/uniswap/pool/IUniswapV3PoolDerivedState.sol +40 -0
  102. package/contracts/base/interface/uniswap/pool/IUniswapV3PoolEvents.sol +121 -0
  103. package/contracts/base/interface/uniswap/pool/IUniswapV3PoolImmutables.sol +35 -0
  104. package/contracts/base/interface/uniswap/pool/IUniswapV3PoolOwnerActions.sol +23 -0
  105. package/contracts/base/interface/uniswap/pool/IUniswapV3PoolState.sol +116 -0
  106. package/contracts/base/masterchef-base/MasterChefHodlStrategy.sol +240 -0
  107. package/contracts/base/masterchef-base/MasterChefStrategy.sol +364 -0
  108. package/contracts/base/masterchef-base/interfaces/IMasterChef.sol +12 -0
  109. package/contracts/base/migration/vaultMigratable_2JPYv2.sol +87 -0
  110. package/contracts/base/migration/vaultMigratable_bal2EUR_PAR.sol +121 -0
  111. package/contracts/base/migration/vaultMigratable_bal2EUR_agEUR.sol +121 -0
  112. package/contracts/base/migration/vaultMigratable_balMaticX.sol +153 -0
  113. package/contracts/base/migration/vaultMigratable_balStMatic.sol +153 -0
  114. package/contracts/base/noop/NoopStrategy.sol +89 -0
  115. package/contracts/base/noop/NoopStrategyUpgradeable.sol +92 -0
  116. package/contracts/base/sushi-base/MiniChefV2Strategy.sol +380 -0
  117. package/contracts/base/sushi-base/interface/IMiniChefV2.sol +31 -0
  118. package/contracts/base/sushi-base/interface/IRewarder.sol +9 -0
  119. package/contracts/base/sushi-base/lib/BoringERC20.sol +30 -0
  120. package/contracts/base/upgradability/Address.sol +33 -0
  121. package/contracts/base/upgradability/BaseUpgradeabilityProxy.sol +61 -0
  122. package/contracts/base/upgradability/BaseUpgradeableStrategy.sol +111 -0
  123. package/contracts/base/upgradability/BaseUpgradeableStrategyStorage.sol +176 -0
  124. package/contracts/base/upgradability/BaseUpgradeableStrategyStorageV2.sol +290 -0
  125. package/contracts/base/upgradability/BaseUpgradeableStrategyV2.sol +145 -0
  126. package/contracts/base/upgradability/IUpgradable.sol +7 -0
  127. package/contracts/base/upgradability/Proxy.sol +71 -0
  128. package/contracts/base/upgradability/ReentrancyGuard.sol +57 -0
  129. package/contracts/base/upgradability/ReentrancyGuardUpgradeable.sol +51 -0
  130. package/contracts/base/upgradability/StrategyProxy.sol +35 -0
  131. package/contracts/base/wmatic/WMATIC.sol +8 -0
  132. package/contracts/strategies/aave/AaveSupplyStrategy.sol +213 -0
  133. package/contracts/strategies/aave/AaveSupplyStrategyMainnet_DAI.sol +23 -0
  134. package/contracts/strategies/aave/AaveSupplyStrategyMainnet_EURS.sol +23 -0
  135. package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDC.sol +23 -0
  136. package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDCe.sol +23 -0
  137. package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDT.sol +23 -0
  138. package/contracts/strategies/ape/ApeStrategyMainnet_BANANA_MATIC.sol +36 -0
  139. package/contracts/strategies/ape/ApeStrategyMainnet_BNB_MATIC.sol +36 -0
  140. package/contracts/strategies/ape/ApeStrategyMainnet_BTC_MATIC.sol +36 -0
  141. package/contracts/strategies/ape/ApeStrategyMainnet_DAI_MATIC.sol +36 -0
  142. package/contracts/strategies/ape/ApeStrategyMainnet_DAI_USDC.sol +37 -0
  143. package/contracts/strategies/ape/ApeStrategyMainnet_ETH_MATIC.sol +36 -0
  144. package/contracts/strategies/ape/ApeStrategyMainnet_USDT_MATIC.sol +36 -0
  145. package/contracts/strategies/aura/AuraStrategy.sol +347 -0
  146. package/contracts/strategies/aura/AuraStrategyMainnet_jEUR_PAR.sol +30 -0
  147. package/contracts/strategies/aura/interface/IAuraBaseRewardPool.sol +25 -0
  148. package/contracts/strategies/aura/interface/IAuraBooster.sol +17 -0
  149. package/contracts/strategies/aura/interface/IAuraDepositor.sol +7 -0
  150. package/contracts/strategies/balancer/BalancerStrategyV3.sol +509 -0
  151. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2BRL.sol +39 -0
  152. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2BRLUSD.sol +38 -0
  153. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_PAR.sol +34 -0
  154. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_PARv2.sol +34 -0
  155. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_agEUR.sol +34 -0
  156. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MATIC_USDC_ETH_BAL.sol +32 -0
  157. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MaticX.sol +37 -0
  158. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MaticX_amMatic.sol +38 -0
  159. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_SPHERE_MATIC.sol +34 -0
  160. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_TNGBL_USDC.sol +34 -0
  161. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_WBTC_ETH_USDC.sol +32 -0
  162. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_bbamusd.sol +36 -0
  163. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_frxETH.sol +32 -0
  164. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_frxETH_amWETH.sol +35 -0
  165. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stETH.sol +35 -0
  166. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stMatic.sol +36 -0
  167. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stMatic_amMatic.sol +39 -0
  168. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_tetuBal.sol +36 -0
  169. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_wUSDR_USDC.sol +34 -0
  170. package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_wstETH_amWETH.sol +37 -0
  171. package/contracts/strategies/balancer/interface/Gauge.sol +26 -0
  172. package/contracts/strategies/balancer/interface/IBVault.sol +557 -0
  173. package/contracts/strategies/balancer/interface/IBalanceMinter.sol +114 -0
  174. package/contracts/strategies/complifi/ComplifiDerivStrategy.sol +381 -0
  175. package/contracts/strategies/complifi/ComplifiDerivStrategyMainnet_ETH5x.sol +35 -0
  176. package/contracts/strategies/complifi/ComplifiStrategy.sol +362 -0
  177. package/contracts/strategies/complifi/ComplifiStrategyMainnet_COMFI_WETH.sol +34 -0
  178. package/contracts/strategies/complifi/interfaces/ILiquidityMining.sol +13 -0
  179. package/contracts/strategies/complifi/interfaces/ILiquidityPool.sol +63 -0
  180. package/contracts/strategies/complifi/interfaces/IProxyActions.sol +10 -0
  181. package/contracts/strategies/complifi/interfaces/IUSDCVault.sol +55 -0
  182. package/contracts/strategies/compound/CompoundStrategy.sol +296 -0
  183. package/contracts/strategies/compound/CompoundStrategyMainnet_USDC.sol +28 -0
  184. package/contracts/strategies/compound/CompoundStrategyMainnet_USDT.sol +28 -0
  185. package/contracts/strategies/compound-blue/CompoundBlueStrategy.sol +292 -0
  186. package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_ETH.sol +27 -0
  187. package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_USDC.sol +27 -0
  188. package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_USDT.sol +27 -0
  189. package/contracts/strategies/convex/ConvexStrategyMainnet_3CRV.sol +40 -0
  190. package/contracts/strategies/convex/ConvexStrategyMainnet_3CRYPTO.sol +37 -0
  191. package/contracts/strategies/convex/ConvexStrategyMainnet_CRV_3CRYPTO copy.sol +37 -0
  192. package/contracts/strategies/convex/ConvexStrategyMainnet_MATIC_3CRYPTO.sol +37 -0
  193. package/contracts/strategies/convex/ConvexStrategyMainnet_USDR.sol +40 -0
  194. package/contracts/strategies/convex/ConvexStrategyMainnet_aCRV.sol +38 -0
  195. package/contracts/strategies/convex/base/ConvexStrategy.sol +480 -0
  196. package/contracts/strategies/convex/interface/IBaseRewardPool.sol +13 -0
  197. package/contracts/strategies/convex/interface/IBooster.sol +10 -0
  198. package/contracts/strategies/gamma-merkl/GammaMerklStrategy.sol +272 -0
  199. package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_ETH_USDC.sol +25 -0
  200. package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_ETH_USDT.sol +25 -0
  201. package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_MATIC_USDT.sol +25 -0
  202. package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_TBTC_ETH.sol +25 -0
  203. package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_WBTC_ETH_w.sol +25 -0
  204. package/contracts/strategies/genomes/NoopStrategy_GENE_ETH.sol +23 -0
  205. package/contracts/strategies/genomes/NoopStrategy_GNOME_ETH.sol +23 -0
  206. package/contracts/strategies/idle/IdleFinanceStrategy.sol +240 -0
  207. package/contracts/strategies/idle/IdleStrategyDAIMainnet.sol +33 -0
  208. package/contracts/strategies/idle/IdleStrategyUSDCMainnet.sol +33 -0
  209. package/contracts/strategies/idle/IdleStrategyWETHMainnet.sol +30 -0
  210. package/contracts/strategies/idle/interface/IdleToken.sol +58 -0
  211. package/contracts/strategies/jarvis/JarvisHodlStrategyV3.sol +351 -0
  212. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2CAD.sol +34 -0
  213. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR.sol +34 -0
  214. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_EURT.sol +34 -0
  215. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_EURe.sol +34 -0
  216. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_PAR.sol +34 -0
  217. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2JPY.sol +34 -0
  218. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2JPYv2.sol +34 -0
  219. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2NZD.sol +34 -0
  220. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2SGD.sol +34 -0
  221. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jCHF_USDC.sol +35 -0
  222. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jCHF_WETH.sol +35 -0
  223. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jEUR_USDC.sol +35 -0
  224. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jEUR_WETH.sol +35 -0
  225. package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jGBP_USDC.sol +35 -0
  226. package/contracts/strategies/jarvis/JarvisStrategyV3.sol +281 -0
  227. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_AUR3_USDC.sol +27 -0
  228. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_AURJUL22_WETH.sol +27 -0
  229. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN2_4EUR.sol +27 -0
  230. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN3_4EUR.sol +27 -0
  231. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN4_4EUR.sol +27 -0
  232. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTANGLENOV22_2EURagEUR.sol +27 -0
  233. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTANGLE_2EURagEUR.sol +27 -0
  234. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTJUL22_USDC.sol +27 -0
  235. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMAY22_USDC.sol +27 -0
  236. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMIMONOV22_2EURPAR.sol +27 -0
  237. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMIMO_2EURPAR.sol +27 -0
  238. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTNOV22_USDC.sol +27 -0
  239. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTSEP22_USDC.sol +27 -0
  240. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_QUI_2CAD.sol +27 -0
  241. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_SES_2JPY.sol +28 -0
  242. package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_agDEN_2EUR.sol +27 -0
  243. package/contracts/strategies/jarvis/interface/IElysianFields.sol +11 -0
  244. package/contracts/strategies/jarvis/interface/IKyberFairLaunch.sol +13 -0
  245. package/contracts/strategies/jarvis/interface/IKyberRewardLocker.sol +9 -0
  246. package/contracts/strategies/meshswap/MeshswapStrategy.sol +304 -0
  247. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_MESH_oMOOI.sol +30 -0
  248. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_MESH_oZEMIT.sol +30 -0
  249. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_USDC_oUSDC.sol +31 -0
  250. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_USDT_oUSDT.sol +31 -0
  251. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_MESH.sol +27 -0
  252. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_USDC.sol +28 -0
  253. package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_USDT.sol +28 -0
  254. package/contracts/strategies/meshswap/interface/IExchange.sol +9 -0
  255. package/contracts/strategies/meshswap/interface/IRouter.sol +68 -0
  256. package/contracts/strategies/pearl/CaviarStrategy.sol +244 -0
  257. package/contracts/strategies/pearl/CaviarStrategyMainnet_CVR.sol +26 -0
  258. package/contracts/strategies/pearl/PearlHodlStrategy.sol +254 -0
  259. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_CVR_PEARL.sol +27 -0
  260. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_DAI_USDR.sol +27 -0
  261. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_ETH_USDR.sol +27 -0
  262. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_MATIC_USDR.sol +27 -0
  263. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_PEARL_USDR.sol +27 -0
  264. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_STAR_USDR.sol +27 -0
  265. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_TNGBL_USDR.sol +27 -0
  266. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_USDC_USDR.sol +27 -0
  267. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_USDT_USDR.sol +27 -0
  268. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_WBTC_USDR.sol +27 -0
  269. package/contracts/strategies/pearl/PearlHodlStrategyMainnet_wUSDR_USDR.sol +27 -0
  270. package/contracts/strategies/quick-gamma/QuickGammaStrategy.sol +400 -0
  271. package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_ETH_narrow.sol +31 -0
  272. package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_ETH_wide.sol +31 -0
  273. package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_USDC_narrow.sol +31 -0
  274. package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_USDC_wide.sol +31 -0
  275. package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_USDC_ETH_narrow.sol +34 -0
  276. package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_USDC_ETH_wide.sol +34 -0
  277. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2.sol +348 -0
  278. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_USDC_DAI.sol +28 -0
  279. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_USDC_USDT.sol +29 -0
  280. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_WBTC_ETH_narrow.sol +28 -0
  281. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_WBTC_USDC_narrow.sol +28 -0
  282. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_cbETH_ETH.sol +28 -0
  283. package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_wstETH_ETH.sol +28 -0
  284. package/contracts/strategies/uniswap-gamma/UniswapGammaStrategy.sol +312 -0
  285. package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_DAI.sol +28 -0
  286. package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_USDT.sol +28 -0
  287. package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_WETH.sol +28 -0
  288. package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_WMATIC_USDC.sol +28 -0
  289. package/contracts/strategies/yel/YelStrategy.sol +350 -0
  290. package/contracts/strategies/yel/YelStrategyMainnet_YEL_WETH.sol +29 -0
  291. package/hardhat.config.js +58 -0
  292. package/index.js +42 -0
  293. package/package.json +56 -6
  294. package/scripts/01-deploy-vault-regular-with-upgradable-strategy.js +41 -0
  295. package/scripts/02-deploy-vault-regular.js +35 -0
  296. package/scripts/03-deploy-upgradable-strategy.js +34 -0
  297. package/scripts/04-deploy-new-implementation.js +24 -0
  298. package/scripts/README.md +55 -0
  299. package/scripts/utils.js +42 -0
  300. package/test/aave/dai.js +207 -0
  301. package/test/aave/eurs.js +207 -0
  302. package/test/aave/usdc.js +206 -0
  303. package/test/aave/usdce.js +206 -0
  304. package/test/aave/usdt.js +206 -0
  305. package/test/ape/banana-matic.js +157 -0
  306. package/test/ape/bnb-matic.js +159 -0
  307. package/test/ape/btc-matic.js +159 -0
  308. package/test/ape/dai-matic.js +159 -0
  309. package/test/ape/dai-usdc.js +163 -0
  310. package/test/ape/eth-matic.js +158 -0
  311. package/test/ape/usdt-matic.js +159 -0
  312. package/test/aura/jeur-par.js +135 -0
  313. package/test/balancer/2brl_v3.js +123 -0
  314. package/test/balancer/2brlusd_v3.js +123 -0
  315. package/test/balancer/2eur_ageur.js +141 -0
  316. package/test/balancer/2eur_par.js +141 -0
  317. package/test/balancer/2eur_par_v2.js +123 -0
  318. package/test/balancer/bbamusd_v3.js +124 -0
  319. package/test/balancer/btc.js +131 -0
  320. package/test/balancer/frxETH.js +123 -0
  321. package/test/balancer/frxeth_amweth.js +123 -0
  322. package/test/balancer/matic_usdc_eth_bal.js +123 -0
  323. package/test/balancer/maticx_ammatic.js +123 -0
  324. package/test/balancer/maticx_v2.js +120 -0
  325. package/test/balancer/maticx_v3.js +141 -0
  326. package/test/balancer/polybase.js +131 -0
  327. package/test/balancer/polybase_v2.js +121 -0
  328. package/test/balancer/polydefi.js +131 -0
  329. package/test/balancer/polydefi2.js +131 -0
  330. package/test/balancer/qipool.js +136 -0
  331. package/test/balancer/sphere_matic.js +123 -0
  332. package/test/balancer/stETH.js +123 -0
  333. package/test/balancer/stable.js +131 -0
  334. package/test/balancer/stable_v2.js +121 -0
  335. package/test/balancer/stmatic_ammatic.js +123 -0
  336. package/test/balancer/stmatic_v2.js +120 -0
  337. package/test/balancer/stmatic_v3.js +141 -0
  338. package/test/balancer/tetubal_v3.js +123 -0
  339. package/test/balancer/tngbl_usdc.js +123 -0
  340. package/test/balancer/tricrypto.js +131 -0
  341. package/test/balancer/tusd_stable.js +142 -0
  342. package/test/balancer/usdc_weth.js +136 -0
  343. package/test/balancer/usdc_weth_v2.js +123 -0
  344. package/test/balancer/wbtc_eth_usdc.js +123 -0
  345. package/test/balancer/wbtc_weth.js +136 -0
  346. package/test/balancer/wsteth_amweth.js +123 -0
  347. package/test/balancer/wusdr_usdc.js +123 -0
  348. package/test/compound/usdc.js +127 -0
  349. package/test/compound/usdt.js +129 -0
  350. package/test/compound-blue/eth.js +136 -0
  351. package/test/compound-blue/usdc.js +136 -0
  352. package/test/compound-blue/usdt.js +136 -0
  353. package/test/convex/3crv.js +123 -0
  354. package/test/convex/3crypto.js +123 -0
  355. package/test/convex/acrv.js +123 -0
  356. package/test/convex/crv_3crypto.js +123 -0
  357. package/test/convex/matic_3crypto.js +123 -0
  358. package/test/convex/usdr.js +123 -0
  359. package/test/core/emission-fork.js +197 -0
  360. package/test/core/emission.js +209 -0
  361. package/test/core/vault_upgrade.js +129 -0
  362. package/test/curve/aave.js +132 -0
  363. package/test/curve/atricrypto3.js +135 -0
  364. package/test/curve/eurtusd.js +135 -0
  365. package/test/gamma-merkl/qs-eth-usdc.js +212 -0
  366. package/test/gamma-merkl/qs-eth-usdt.js +213 -0
  367. package/test/gamma-merkl/qs-matic-usdt.js +213 -0
  368. package/test/gamma-merkl/qs-tbtc-eth.js +213 -0
  369. package/test/gamma-merkl/qs-wbtc-eth-w.js +213 -0
  370. package/test/genomes/gene-eth.js +115 -0
  371. package/test/genomes/gnome-eth.js +115 -0
  372. package/test/idle/dai.js +129 -0
  373. package/test/idle/usdc.js +128 -0
  374. package/test/idle/weth.js +128 -0
  375. package/test/jarvis/2cad-hodl.js +183 -0
  376. package/test/jarvis/2cad-update-nov22.js +182 -0
  377. package/test/jarvis/2cad-update.js +177 -0
  378. package/test/jarvis/2cad-update2.js +182 -0
  379. package/test/jarvis/2cad-update3.js +182 -0
  380. package/test/jarvis/2eur-ageur-update-nov22.js +182 -0
  381. package/test/jarvis/2eur-ageur-update.js +182 -0
  382. package/test/jarvis/2eur-eure-hodl.js +176 -0
  383. package/test/jarvis/2eur-eurt-hodl.js +176 -0
  384. package/test/jarvis/2eur-eurt-update-nov22.js +182 -0
  385. package/test/jarvis/2eur-hodl.js +176 -0
  386. package/test/jarvis/2eur-par-hodl.js +176 -0
  387. package/test/jarvis/2eur-par-update-nov22.js +182 -0
  388. package/test/jarvis/2jpy-hodl.js +244 -0
  389. package/test/jarvis/2jpy-update-nov22.js +182 -0
  390. package/test/jarvis/2jpy-update.js +177 -0
  391. package/test/jarvis/2jpy-update2.js +182 -0
  392. package/test/jarvis/2jpyv2-upgrade.js +184 -0
  393. package/test/jarvis/2nzd-hodl.js +176 -0
  394. package/test/jarvis/2nzd-update.js +182 -0
  395. package/test/jarvis/2sgd-hodl.js +176 -0
  396. package/test/jarvis/2sgd-update-nov22.js +182 -0
  397. package/test/jarvis/2sgd-update.js +182 -0
  398. package/test/jarvis/2sgd-update2.js +182 -0
  399. package/test/jarvis/4eur-hodl-upgrade.js +177 -0
  400. package/test/jarvis/4eur-hodl.js +183 -0
  401. package/test/jarvis/4eur-update.js +181 -0
  402. package/test/jarvis/4eur-update2.js +181 -0
  403. package/test/jarvis/agden-2eur.js +222 -0
  404. package/test/jarvis/aur-usdc-v2.js +115 -0
  405. package/test/jarvis/aur-usdc.js +127 -0
  406. package/test/jarvis/aur3-usdc.js +115 -0
  407. package/test/jarvis/aurjul22-weth.js +222 -0
  408. package/test/jarvis/den-4eur.js +115 -0
  409. package/test/jarvis/den2-4eur.js +220 -0
  410. package/test/jarvis/den3-4eur.js +220 -0
  411. package/test/jarvis/den4-4eur.js +220 -0
  412. package/test/jarvis/jchf-usdc-hodl-v2.js +184 -0
  413. package/test/jarvis/jchf-usdc-hodl-v3.js +178 -0
  414. package/test/jarvis/jchf-usdc-hodl.js +193 -0
  415. package/test/jarvis/jchf-weth-hodl.js +176 -0
  416. package/test/jarvis/jeur-usdc-hodl-v2.js +184 -0
  417. package/test/jarvis/jeur-usdc-hodl-v3.js +178 -0
  418. package/test/jarvis/jeur-usdc-hodl.js +193 -0
  419. package/test/jarvis/jeur-weth-hodl.js +176 -0
  420. package/test/jarvis/jgbp-usdc-hodl-v2.js +184 -0
  421. package/test/jarvis/jgbp-usdc-hodl-v3.js +178 -0
  422. package/test/jarvis/jgbp-usdc-hodl.js +193 -0
  423. package/test/jarvis/jrtangle-2eurageur.js +220 -0
  424. package/test/jarvis/jrtanglenov22-2eurageur.js +220 -0
  425. package/test/jarvis/jrtjul22-usdc.js +115 -0
  426. package/test/jarvis/jrtmay22-usdc.js +115 -0
  427. package/test/jarvis/jrtmimo-2eurpar.js +220 -0
  428. package/test/jarvis/jrtmimonov22-2eurpar.js +220 -0
  429. package/test/jarvis/jrtnov22-usdc.js +220 -0
  430. package/test/jarvis/jrtsep22-usdc.js +220 -0
  431. package/test/jarvis/qui-2cad.js +218 -0
  432. package/test/jarvis/ses-2jpy.js +222 -0
  433. package/test/meshswap/mesh-omooi.js +197 -0
  434. package/test/meshswap/mesh-ozemit.js +197 -0
  435. package/test/meshswap/usdc-ousdc.js +197 -0
  436. package/test/meshswap/usdt-ousdt.js +197 -0
  437. package/test/meshswap/wmatic-mesh.js +197 -0
  438. package/test/meshswap/wmatic-usdc.js +197 -0
  439. package/test/meshswap/wmatic-usdt.js +197 -0
  440. package/test/mstable/musd.js +123 -0
  441. package/test/pearl/cvr-pearl.js +198 -0
  442. package/test/pearl/cvr.js +133 -0
  443. package/test/pearl/dai-usdr.js +198 -0
  444. package/test/pearl/eth-usdr.js +198 -0
  445. package/test/pearl/matic-usdr.js +198 -0
  446. package/test/pearl/pearl-usdr.js +198 -0
  447. package/test/pearl/star-usdr.js +186 -0
  448. package/test/pearl/tngbl-usdr.js +198 -0
  449. package/test/pearl/usdc-usdr.js +198 -0
  450. package/test/pearl/usdt-usdr.js +198 -0
  451. package/test/pearl/wbtc-usdr.js +198 -0
  452. package/test/pearl/wusdr-usdr.js +198 -0
  453. package/test/popsicle/ice-weth.js +128 -0
  454. package/test/quick/eth-matic.js +132 -0
  455. package/test/quick/eth-usdt.js +140 -0
  456. package/test/quick/ifarm-quick.js +147 -0
  457. package/test/quick/matic-usdc.js +145 -0
  458. package/test/quick/psp-matic.js +124 -0
  459. package/test/quick/wbtc-eth.js +145 -0
  460. package/test/quick-gamma/cbeth-eth.js +207 -0
  461. package/test/quick-gamma/matic-eth-narrow.js +201 -0
  462. package/test/quick-gamma/matic-eth-wide.js +197 -0
  463. package/test/quick-gamma/matic-usdc-narrow.js +197 -0
  464. package/test/quick-gamma/matic-usdc-wide.js +197 -0
  465. package/test/quick-gamma/upgrade/matic-eth-narrow.js +204 -0
  466. package/test/quick-gamma/upgrade/matic-usdc-narrow.js +199 -0
  467. package/test/quick-gamma/usdc-dai.js +209 -0
  468. package/test/quick-gamma/usdc-eth-narrow.js +197 -0
  469. package/test/quick-gamma/usdc-eth-wide.js +197 -0
  470. package/test/quick-gamma/usdc-usdt.js +209 -0
  471. package/test/quick-gamma/wbtc-eth-narrow.js +207 -0
  472. package/test/quick-gamma/wbtc-usdc-narrow.js +209 -0
  473. package/test/quick-gamma/wsteth-eth.js +207 -0
  474. package/test/sushi/eth-usdt.js +153 -0
  475. package/test/sushi/matic-eth.js +138 -0
  476. package/test/sushi/usdc-eth.js +153 -0
  477. package/test/test-config.js +24 -0
  478. package/test/uniswap-gamma/usdc-dai.js +212 -0
  479. package/test/uniswap-gamma/usdc-usdt.js +212 -0
  480. package/test/uniswap-gamma/usdc-weth.js +212 -0
  481. package/test/uniswap-gamma/wmatic-usdc.js +210 -0
  482. package/test/utilities/Utils.js +96 -0
  483. package/test/utilities/hh-utils.js +242 -0
  484. package/test/utilities/make-vault.js +10 -0
  485. 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,8 @@
1
+ // SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ interface WMATIC {
5
+ function deposit() external payable;
6
+ function withdraw(uint wad) external;
7
+ function transfer(address dts, uint wad) external payable;
8
+ }
@@ -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
+ }