@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,304 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+ pragma experimental ABIEncoderV2;
4
+
5
+ import "@openzeppelin/contracts/math/Math.sol";
6
+ import "@openzeppelin/contracts/math/SafeMath.sol";
7
+ import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
8
+ import "../../base/interface/uniswap/IUniswapV2Router02.sol";
9
+ import "../../base/interface/IVault.sol";
10
+ import "../../base/upgradability/BaseUpgradeableStrategy.sol";
11
+ import "../../base/interface/uniswap/IUniswapV2Pair.sol";
12
+ import "./interface/IExchange.sol";
13
+ import "./interface/IRouter.sol";
14
+
15
+ contract MeshswapStrategy is BaseUpgradeableStrategy {
16
+
17
+ using SafeMath for uint256;
18
+ using SafeERC20 for IERC20;
19
+
20
+ address public constant quickswapRouterV2 = address(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff);
21
+ address public constant sushiswapRouterV2 = address(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
22
+ address public constant meshRouter = address(0x10f4A785F458Bc144e3706575924889954946639);
23
+ address public constant WMATIC = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
24
+
25
+ // additional storage slots (on top of BaseUpgradeableStrategy ones) are defined here
26
+ bytes32 internal constant _TOKEN0_SLOT = 0x68243437d847411509893b84195df70ec4ea6f04c790e4d2129bda87e7c2ec78;
27
+ bytes32 internal constant _TOKEN1_SLOT = 0xf68c08c14f3bdc68eaf979694faddc9d918df59c282e12dd8102cf1fc77248c0;
28
+
29
+ // this would be reset on each upgrade
30
+ mapping (address => mapping (address => address[])) public swapRoutes;
31
+ mapping (address => mapping (address => address)) public routers;
32
+ address[] public rewardTokens;
33
+
34
+
35
+ constructor() public BaseUpgradeableStrategy() {
36
+ assert(_TOKEN0_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.token0")) - 1));
37
+ assert(_TOKEN1_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.token1")) - 1));
38
+ }
39
+
40
+ function initializeBaseStrategy(
41
+ address _storage,
42
+ address _underlying,
43
+ address _vault
44
+ ) public initializer {
45
+
46
+ BaseUpgradeableStrategy.initialize(
47
+ _storage,
48
+ _underlying,
49
+ _vault,
50
+ address(this),
51
+ WMATIC,
52
+ 80, // profit sharing numerator
53
+ 1000, // profit sharing denominator
54
+ true, // sell
55
+ 0, // sell floor
56
+ 12 hours // implementation change delay
57
+ );
58
+
59
+ address _token0 = IExchange(_underlying).token0();
60
+ address _token1 = IExchange(_underlying).token1();
61
+ _setToken0(_token0);
62
+ _setToken1(_token1);
63
+ }
64
+
65
+ function depositArbCheck() public pure returns(bool) {
66
+ return true;
67
+ }
68
+
69
+ function underlyingBalance() internal view returns (uint256 balance) {
70
+ balance = IERC20(underlying()).balanceOf(address(this));
71
+ }
72
+
73
+ function unsalvagableTokens(address token) public view returns (bool) {
74
+ return (token == rewardToken() || token == underlying());
75
+ }
76
+
77
+ function setDepositLiquidationPath(address [] memory _route, address _router) public onlyGovernance {
78
+ address tokenIn = _route[0];
79
+ address tokenOut = _route[_route.length-1];
80
+ require(tokenIn == WMATIC, "Path should start with WMATIC");
81
+ require(tokenOut == token0() || tokenOut == token1(), "Path should end with token0 or token1");
82
+ swapRoutes[tokenIn][tokenOut] = _route;
83
+ routers[tokenIn][tokenOut] = _router;
84
+ }
85
+
86
+ function setRewardLiquidationPath(address [] memory _route, address _router) public onlyGovernance {
87
+ address tokenIn = _route[0];
88
+ address tokenOut = _route[_route.length-1];
89
+ require(tokenOut == WMATIC, "Path should end with WMATIC");
90
+ bool isReward = false;
91
+ for(uint256 i = 0; i < rewardTokens.length; i++){
92
+ if (tokenIn == rewardTokens[i]) {
93
+ isReward = true;
94
+ }
95
+ }
96
+ require(isReward, "Path should start with a rewardToken");
97
+ swapRoutes[tokenIn][tokenOut] = _route;
98
+ routers[tokenIn][tokenOut] = _router;
99
+ }
100
+
101
+ function addRewardToken(address _token, address[] memory _path2WMATIC, address _router) public onlyGovernance {
102
+ rewardTokens.push(_token);
103
+ setRewardLiquidationPath(_path2WMATIC, _router);
104
+ }
105
+
106
+ function _liquidateReward() internal {
107
+ if (!sell()) {
108
+ // Profits can be disabled for possible simplified and rapid exit
109
+ emit ProfitsNotCollected(sell(), false);
110
+ return;
111
+ }
112
+
113
+ for(uint256 i = 0; i < rewardTokens.length; i++){
114
+ address token = rewardTokens[i];
115
+ uint256 rewardBalance = IERC20(token).balanceOf(address(this));
116
+
117
+ if (swapRoutes[token][WMATIC].length < 2 || rewardBalance == 0) {
118
+ continue;
119
+ }
120
+
121
+ address router = routers[token][WMATIC];
122
+ IERC20(token).safeApprove(router, 0);
123
+ IERC20(token).safeApprove(router, rewardBalance);
124
+ // we can accept 1 as the minimum because this will be called only by a trusted worker
125
+ IUniswapV2Router02(router).swapExactTokensForTokens(
126
+ rewardBalance, 1, swapRoutes[token][WMATIC], address(this), block.timestamp
127
+ );
128
+ }
129
+
130
+ address _rewardToken = rewardToken();
131
+ uint256 rewardBalance = IERC20(_rewardToken).balanceOf(address(this));
132
+ if (rewardBalance <= 10e12) {
133
+ return;
134
+ }
135
+ notifyProfitInRewardToken(rewardBalance);
136
+ uint256 remainingRewardBalance = IERC20(_rewardToken).balanceOf(address(this));
137
+ if (remainingRewardBalance <= 10e12) {
138
+ return;
139
+ }
140
+
141
+ address _token0 = token0();
142
+ address _token1 = token1();
143
+ uint256 toToken0 = remainingRewardBalance.div(2);
144
+ uint256 toToken1 = remainingRewardBalance.sub(toToken0);
145
+
146
+ // we can accept 1 as minimum because this is called only by a trusted role
147
+ uint256 amountOutMin = 1;
148
+
149
+ uint256 token0Amount;
150
+ if (swapRoutes[WMATIC][_token0].length > 1) {
151
+ address router = routers[WMATIC][_token0];
152
+ // allow to sell our reward
153
+ IERC20(rewardToken()).safeApprove(router, 0);
154
+ IERC20(rewardToken()).safeApprove(router, toToken0);
155
+
156
+ // if we need to liquidate the token0
157
+ IUniswapV2Router02(router).swapExactTokensForTokens(
158
+ toToken0,
159
+ amountOutMin,
160
+ swapRoutes[WMATIC][_token0],
161
+ address(this),
162
+ block.timestamp
163
+ );
164
+ token0Amount = IERC20(_token0).balanceOf(address(this));
165
+ } else {
166
+ // otherwise we assme token0 is the reward token itself
167
+ token0Amount = toToken0;
168
+ }
169
+
170
+ uint256 token1Amount;
171
+ if (swapRoutes[WMATIC][_token1].length > 1) {
172
+ address router = routers[WMATIC][_token1];
173
+ // allow to sell our reward
174
+ IERC20(rewardToken()).safeApprove(router, 0);
175
+ IERC20(rewardToken()).safeApprove(router, toToken1);
176
+
177
+ // if we need to liquidate the token0
178
+ IRouter(router).swapExactTokensForTokens(
179
+ toToken1,
180
+ amountOutMin,
181
+ swapRoutes[WMATIC][_token1],
182
+ address(this),
183
+ block.timestamp
184
+ );
185
+ token1Amount = IERC20(_token1).balanceOf(address(this));
186
+ } else {
187
+ // otherwise we assme token0 is the reward token itself
188
+ token1Amount = toToken1;
189
+ }
190
+
191
+ // provide token0 and token1 to MeshSwap
192
+ IERC20(_token0).safeApprove(meshRouter, 0);
193
+ IERC20(_token0).safeApprove(meshRouter, token0Amount);
194
+
195
+ IERC20(_token1).safeApprove(meshRouter, 0);
196
+ IERC20(_token1).safeApprove(meshRouter, token1Amount);
197
+
198
+ // we provide liquidity to MeshSwap
199
+ IUniswapV2Router02(meshRouter).addLiquidity(
200
+ _token0,
201
+ _token1,
202
+ token0Amount,
203
+ token1Amount,
204
+ 1, // we are willing to take whatever the pair gives us
205
+ 1, // we are willing to take whatever the pair gives us
206
+ address(this),
207
+ block.timestamp
208
+ );
209
+ }
210
+
211
+ /*
212
+ * Withdraws all the asset to the vault
213
+ */
214
+ function withdrawAllToVault() public restricted {
215
+ address _underlying = underlying();
216
+ IExchange(_underlying).claimReward();
217
+ _liquidateReward();
218
+ IERC20(underlying()).safeTransfer(vault(), IERC20(_underlying).balanceOf(address(this)));
219
+ }
220
+
221
+ /*
222
+ * Withdraws all the asset to the vault
223
+ */
224
+ function withdrawToVault(uint256 amount) public restricted {
225
+ address _underlying = underlying();
226
+ // Typically there wouldn't be any amount here
227
+ // however, it is possible because of the emergencyExit
228
+ uint256 entireBalance = IERC20(_underlying).balanceOf(address(this));
229
+
230
+ if (amount >= entireBalance){
231
+ withdrawAllToVault();
232
+ } else {
233
+ IERC20(_underlying).safeTransfer(vault(), amount);
234
+ }
235
+ }
236
+
237
+ /*
238
+ * Note that we currently do not have a mechanism here to include the
239
+ * amount of reward that is accrued.
240
+ */
241
+ function investedUnderlyingBalance() external view returns (uint256) {
242
+ return underlyingBalance();
243
+ }
244
+
245
+ /*
246
+ * Governance or Controller can claim coins that are somehow transferred into the contract
247
+ * Note that they cannot come in take away coins that are used and defined in the strategy itself
248
+ */
249
+ function salvage(address recipient, address token, uint256 amount) external onlyControllerOrGovernance {
250
+ // To make sure that governance cannot come in and take away the coins
251
+ require(!unsalvagableTokens(token), "token is defined as not salvagable");
252
+ IERC20(token).safeTransfer(recipient, amount);
253
+ }
254
+
255
+ /*
256
+ * Get the reward, sell it in exchange for underlying, invest what you got.
257
+ * It's not much, but it's honest work.
258
+ *
259
+ * Note that although `onlyNotPausedInvesting` is not added here,
260
+ * calling `investAllUnderlying()` affectively blocks the usage of `doHardWork`
261
+ * when the investing is being paused by governance.
262
+ */
263
+ function doHardWork() external onlyNotPausedInvesting restricted {
264
+ IExchange(underlying()).claimReward();
265
+ _liquidateReward();
266
+ }
267
+
268
+ /**
269
+ * Can completely disable claiming UNI rewards and selling. Good for emergency withdraw in the
270
+ * simplest possible way.
271
+ */
272
+ function setSell(bool s) public onlyGovernance {
273
+ _setSell(s);
274
+ }
275
+
276
+ /**
277
+ * Sets the minimum amount of CRV needed to trigger a sale.
278
+ */
279
+ function setSellFloor(uint256 floor) public onlyGovernance {
280
+ _setSellFloor(floor);
281
+ }
282
+
283
+ function _setToken0(address _address) internal {
284
+ setAddress(_TOKEN0_SLOT, _address);
285
+ }
286
+
287
+ function token0() public view returns (address) {
288
+ return getAddress(_TOKEN0_SLOT);
289
+ }
290
+
291
+ function _setToken1(address _address) internal {
292
+ setAddress(_TOKEN1_SLOT, _address);
293
+ }
294
+
295
+ function token1() public view returns (address) {
296
+ return getAddress(_TOKEN1_SLOT);
297
+ }
298
+
299
+ function finalizeUpgrade() external onlyGovernance {
300
+ _finalizeUpgrade();
301
+ }
302
+
303
+ receive() external payable {} // this is needed for the receiving Matic
304
+ }
@@ -0,0 +1,30 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_MESH_oMOOI is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x5b1E475933C802117212ce2A4240A4e7999a52A2);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ address oMooi = address(0x746351AB4B9d4f802B7b770f33184d0A6B17363D);
17
+ MeshswapStrategy.initializeBaseStrategy(
18
+ _storage,
19
+ underlying,
20
+ _vault
21
+ );
22
+ rewardTokens = [oMooi];
23
+ swapRoutes[oMooi][WMATIC] = [oMooi, WMATIC];
24
+ routers[oMooi][WMATIC] = meshRouter;
25
+ swapRoutes[WMATIC][mesh] = [WMATIC, mesh];
26
+ routers[WMATIC][mesh] = meshRouter;
27
+ swapRoutes[WMATIC][oMooi] = [WMATIC, oMooi];
28
+ routers[WMATIC][oMooi] = meshRouter;
29
+ }
30
+ }
@@ -0,0 +1,30 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_MESH_oZEMIT is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x6fC01D72960Af0De3dD97D544FE785b751D752E2);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ address oZemit = address(0xA34E0eaCB7fbB0b0d45da89b083E0f87fcdf6157);
17
+ MeshswapStrategy.initializeBaseStrategy(
18
+ _storage,
19
+ underlying,
20
+ _vault
21
+ );
22
+ rewardTokens = [oZemit];
23
+ swapRoutes[oZemit][WMATIC] = [oZemit, WMATIC];
24
+ routers[oZemit][WMATIC] = meshRouter;
25
+ swapRoutes[WMATIC][mesh] = [WMATIC, mesh];
26
+ routers[WMATIC][mesh] = meshRouter;
27
+ swapRoutes[WMATIC][oZemit] = [WMATIC, oZemit];
28
+ routers[WMATIC][oZemit] = meshRouter;
29
+ }
30
+ }
@@ -0,0 +1,31 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_USDC_oUSDC is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x111D7a73b40Aa5EE52BF651e8F07Aa26F8e9EFe8);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ address usdc = address(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174);
17
+ address oUsdc = address(0x5bEF2617eCCA9a39924c09017c5F1E25Efbb3bA8);
18
+ MeshswapStrategy.initializeBaseStrategy(
19
+ _storage,
20
+ underlying,
21
+ _vault
22
+ );
23
+ rewardTokens = [mesh];
24
+ swapRoutes[mesh][WMATIC] = [mesh, WMATIC];
25
+ routers[mesh][WMATIC] = meshRouter;
26
+ swapRoutes[WMATIC][usdc] = [WMATIC, usdc];
27
+ routers[WMATIC][usdc] = meshRouter;
28
+ swapRoutes[WMATIC][oUsdc] = [WMATIC, usdc, oUsdc];
29
+ routers[WMATIC][oUsdc] = meshRouter;
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_USDT_oUSDT is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x58A7AaC84560F994d191e78aEB690855eB2D5B88);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ address usdt = address(0xc2132D05D31c914a87C6611C10748AEb04B58e8F);
17
+ address oUsdt = address(0x957da9EbbCdC97DC4a8C274dD762EC2aB665E15F);
18
+ MeshswapStrategy.initializeBaseStrategy(
19
+ _storage,
20
+ underlying,
21
+ _vault
22
+ );
23
+ rewardTokens = [mesh];
24
+ swapRoutes[mesh][WMATIC] = [mesh, WMATIC];
25
+ routers[mesh][WMATIC] = meshRouter;
26
+ swapRoutes[WMATIC][usdt] = [WMATIC, usdt];
27
+ routers[WMATIC][usdt] = meshRouter;
28
+ swapRoutes[WMATIC][oUsdt] = [WMATIC, usdt, oUsdt];
29
+ routers[WMATIC][oUsdt] = meshRouter;
30
+ }
31
+ }
@@ -0,0 +1,27 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_WMATIC_MESH is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x07A7Ab21b582058B71d2AEe1b1719926E3451ADF);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ MeshswapStrategy.initializeBaseStrategy(
17
+ _storage,
18
+ underlying,
19
+ _vault
20
+ );
21
+ rewardTokens = [mesh];
22
+ swapRoutes[mesh][WMATIC] = [mesh, WMATIC];
23
+ routers[mesh][WMATIC] = meshRouter;
24
+ swapRoutes[WMATIC][mesh] = [WMATIC, mesh];
25
+ routers[WMATIC][mesh] = meshRouter;
26
+ }
27
+ }
@@ -0,0 +1,28 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_WMATIC_USDC is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x6Ffe747579eD4E807Dec9B40dBA18D15226c32dC);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ address usdc = address(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174);
17
+ MeshswapStrategy.initializeBaseStrategy(
18
+ _storage,
19
+ underlying,
20
+ _vault
21
+ );
22
+ rewardTokens = [mesh];
23
+ swapRoutes[mesh][WMATIC] = [mesh, WMATIC];
24
+ routers[mesh][WMATIC] = meshRouter;
25
+ swapRoutes[WMATIC][usdc] = [WMATIC, usdc];
26
+ routers[WMATIC][usdc] = meshRouter;
27
+ }
28
+ }
@@ -0,0 +1,28 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./MeshswapStrategy.sol";
5
+
6
+ contract MeshswapStrategyMainnet_WMATIC_USDT is MeshswapStrategy {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address _storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying = address(0x24af68fF6e3501EAf8b52a9F7935225E524FE617);
15
+ address mesh = address(0x82362Ec182Db3Cf7829014Bc61E9BE8a2E82868a);
16
+ address usdt = address(0xc2132D05D31c914a87C6611C10748AEb04B58e8F);
17
+ MeshswapStrategy.initializeBaseStrategy(
18
+ _storage,
19
+ underlying,
20
+ _vault
21
+ );
22
+ rewardTokens = [mesh];
23
+ swapRoutes[mesh][WMATIC] = [mesh, WMATIC];
24
+ routers[mesh][WMATIC] = meshRouter;
25
+ swapRoutes[WMATIC][usdt] = [WMATIC, usdt];
26
+ routers[WMATIC][usdt] = meshRouter;
27
+ }
28
+ }
@@ -0,0 +1,9 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+
3
+ pragma solidity 0.6.12;
4
+
5
+ interface IExchange {
6
+ function token0() external view returns (address);
7
+ function token1() external view returns (address);
8
+ function claimReward() external;
9
+ }
@@ -0,0 +1,68 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.5.0;
3
+
4
+ interface IRouter {
5
+ function addLiquidity(
6
+ address tokenA,
7
+ address tokenB,
8
+ uint amountADesired,
9
+ uint amountBDesired,
10
+ uint amountAMin,
11
+ uint amountBMin,
12
+ address to,
13
+ uint deadline
14
+ ) external returns (uint amountA, uint amountB, uint liquidity);
15
+ function addLiquidityETH(
16
+ address token,
17
+ uint amountTokenDesired,
18
+ uint amountTokenMin,
19
+ uint amountETHMin,
20
+ address to,
21
+ uint deadline
22
+ ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
23
+ function removeLiquidity(
24
+ address tokenA,
25
+ address tokenB,
26
+ uint liquidity,
27
+ uint amountAMin,
28
+ uint amountBMin,
29
+ address to,
30
+ uint deadline
31
+ ) external returns (uint amountA, uint amountB);
32
+ function removeLiquidityETH(
33
+ address token,
34
+ uint liquidity,
35
+ uint amountTokenMin,
36
+ uint amountETHMin,
37
+ address to,
38
+ uint deadline
39
+ ) external returns (uint amountToken, uint amountETH);
40
+ function swapExactTokensForTokens(
41
+ uint amountIn,
42
+ uint amountOutMin,
43
+ address[] calldata path,
44
+ address to,
45
+ uint deadline
46
+ ) external returns (uint[] memory amounts);
47
+ function swapTokensForExactTokens(
48
+ uint amountOut,
49
+ uint amountInMax,
50
+ address[] calldata path,
51
+ address to,
52
+ uint deadline
53
+ ) external returns (uint[] memory amounts);
54
+ function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
55
+ external
56
+ payable
57
+ returns (uint[] memory amounts);
58
+ function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
59
+ external
60
+ returns (uint[] memory amounts);
61
+ function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
62
+ external
63
+ returns (uint[] memory amounts);
64
+ function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
65
+ external
66
+ payable
67
+ returns (uint[] memory amounts);
68
+ }