@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,121 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+ pragma experimental ABIEncoderV2;
4
+
5
+ import "../Vault.sol";
6
+ import "../interface/curve/ICurveDeposit_2token.sol";
7
+ import "../../strategies/balancer/interface/IBVault.sol";
8
+ import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
9
+
10
+ import "hardhat/console.sol";
11
+
12
+ contract VaultMigratable_bal2EUR_agEUR is Vault {
13
+ using SafeERC20 for IERC20;
14
+
15
+ address public constant __token0 = address(0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c);
16
+ address public constant __token1 = address(0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4);
17
+ address public constant __lpOld = address(0x2fFbCE9099cBed86984286A54e5932414aF4B717);
18
+ address public constant __lpNew = address(0xa48D164F6eB0EDC68bd03B56fa59E12F24499aD1);
19
+ address public constant __governance = address(0xf00dD244228F51547f0563e60bCa65a30FBF5f7f);
20
+ address public constant __bVault = address(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
21
+ address public constant __newStrategy = address(0x044b1CfaDa044f9389DA761af520574E197dCCA4);
22
+
23
+ bytes32 public constant __poolIdNew = 0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4;
24
+
25
+ event Migrated(uint256 v1Liquidity, uint256 v2Liquidity);
26
+ event LiquidityRemoved(uint256 v1Liquidity, uint256 amountToken0, uint256 amountToken1);
27
+ event LiquidityProvided(uint256 amountToken0, uint256 amountToken1, uint256 v2Liquidity);
28
+
29
+ constructor() public {
30
+ }
31
+
32
+ function _approveIfNeed(address token, address spender, uint256 amount) internal {
33
+ uint256 allowance = IERC20(token).allowance(address(this), spender);
34
+ if (amount > allowance) {
35
+ IERC20(token).safeApprove(spender, 0);
36
+ IERC20(token).safeApprove(spender, amount);
37
+ }
38
+ }
39
+
40
+ function _balancerSwap(
41
+ address sellToken,
42
+ address buyToken,
43
+ bytes32 poolId,
44
+ uint256 amountIn,
45
+ uint256 minAmountOut
46
+ ) internal {
47
+ IBVault.SingleSwap memory singleSwap;
48
+ IBVault.SwapKind swapKind = IBVault.SwapKind.GIVEN_IN;
49
+
50
+ singleSwap.poolId = poolId;
51
+ singleSwap.kind = swapKind;
52
+ singleSwap.assetIn = IAsset(sellToken);
53
+ singleSwap.assetOut = IAsset(buyToken);
54
+ singleSwap.amount = amountIn;
55
+ singleSwap.userData = abi.encode(0);
56
+
57
+ IBVault.FundManagement memory funds;
58
+ funds.sender = address(this);
59
+ funds.fromInternalBalance = false;
60
+ funds.recipient = payable(address(this));
61
+ funds.toInternalBalance = false;
62
+
63
+ _approveIfNeed(sellToken, __bVault, amountIn);
64
+ IBVault(__bVault).swap(singleSwap, funds, minAmountOut, block.timestamp);
65
+ }
66
+
67
+ /**
68
+ * Migrates the vault from the old Curve LP underlying to new Balancer LP underlying
69
+ */
70
+ function migrateUnderlying(
71
+ uint256 minToken0Out,
72
+ uint256 minToken1Out,
73
+ uint256 minLPNewOut
74
+ ) public onlyControllerOrGovernance {
75
+ require(underlying() == __lpOld, "Can only migrate if the underlying is lpOld");
76
+ withdrawAll();
77
+
78
+ uint256 v1Liquidity = IERC20(__lpOld).balanceOf(address(this));
79
+ console.log("V1Liquidity: ", v1Liquidity);
80
+
81
+ ICurveDeposit_2token(__lpOld).remove_liquidity(v1Liquidity, [minToken0Out, minToken1Out]);
82
+ uint256 amount0 = IERC20(__token0).balanceOf(address(this));
83
+ uint256 amount1 = IERC20(__token1).balanceOf(address(this));
84
+ console.log("token0 out: ", amount0);
85
+ console.log("token1 out: ", amount1);
86
+
87
+ emit LiquidityRemoved(v1Liquidity, amount0, amount1);
88
+
89
+ require(IERC20(__lpOld).balanceOf(address(this)) == 0, "Not all underlying was converted");
90
+
91
+ _balancerSwap(__token0, __lpNew, __poolIdNew, amount0, 1);
92
+ _balancerSwap(__token1, __lpNew, __poolIdNew, amount1, 1);
93
+ uint256 v2Liquidity = IERC20(__lpNew).balanceOf(address(this));
94
+ require(v2Liquidity >= minLPNewOut, "Output amount too low");
95
+ console.log("V2Liquidity: ", v2Liquidity);
96
+
97
+ emit LiquidityProvided(amount0, amount1, v2Liquidity);
98
+
99
+ _setUnderlying(__lpNew);
100
+ require(underlying() == __lpNew, "underlying switch failed");
101
+ console.log("New underlying: ", underlying());
102
+ _setStrategy(__newStrategy);
103
+ require(strategy() == __newStrategy, "strategy switch failed");
104
+ console.log("New strategy: ", strategy());
105
+
106
+ // some steps that regular setStrategy does
107
+ IERC20(underlying()).safeApprove(address(strategy()), 0);
108
+ IERC20(underlying()).safeApprove(address(strategy()), uint256(~0));
109
+
110
+ uint256 token0Left = IERC20(__token0).balanceOf(address(this));
111
+ if (token0Left > 0) {
112
+ IERC20(__token0).transfer(strategy(), token0Left);
113
+ }
114
+ uint256 token1Left = IERC20(__token1).balanceOf(address(this));
115
+ if (token1Left > 0) {
116
+ IERC20(__token1).transfer(__governance, token1Left);
117
+ }
118
+
119
+ emit Migrated(v1Liquidity, v2Liquidity);
120
+ }
121
+ }
@@ -0,0 +1,153 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+ pragma experimental ABIEncoderV2;
4
+
5
+ import "../Vault.sol";
6
+ import "../../strategies/balancer/interface/IBVault.sol";
7
+ import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
8
+
9
+ import "hardhat/console.sol";
10
+
11
+ contract VaultMigratable_balMaticX is Vault {
12
+ using SafeERC20 for IERC20;
13
+
14
+ address public constant __wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
15
+ address public constant __maticx = address(0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6);
16
+ address public constant __lpOld = address(0xC17636e36398602dd37Bb5d1B3a9008c7629005f);
17
+ address public constant __lpNew = address(0xb20fC01D21A50d2C734C4a1262B4404d41fA7BF0);
18
+ address public constant __governance = address(0xf00dD244228F51547f0563e60bCa65a30FBF5f7f);
19
+ address public constant __bVault = address(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
20
+ address public constant __newStrategy = address(0x5A42FEDdD5e330AD857A17724543C5ef7FC7C9Cd);
21
+
22
+ bytes32 public constant __poolIdOld = 0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4;
23
+ bytes32 public constant __poolIdNew = 0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c;
24
+
25
+ event Migrated(uint256 v1Liquidity, uint256 v2Liquidity);
26
+ event LiquidityRemoved(uint256 v1Liquidity, uint256 amountToken0, uint256 amountToken1);
27
+ event LiquidityProvided(uint256 amountToken0, uint256 amountToken1, uint256 v2Liquidity);
28
+
29
+ constructor() public {
30
+ }
31
+
32
+ function _approveIfNeed(address token, address spender, uint256 amount) internal {
33
+ uint256 allowance = IERC20(token).allowance(address(this), spender);
34
+ if (amount > allowance) {
35
+ IERC20(token).safeApprove(spender, 0);
36
+ IERC20(token).safeApprove(spender, amount);
37
+ }
38
+ }
39
+
40
+ function _balancerWithdraw(
41
+ bytes32 poolId,
42
+ uint256 amountIn,
43
+ uint256[] memory minAmountsOut
44
+ ) internal {
45
+ (address[] memory poolTokens,,) = IBVault(__bVault).getPoolTokens(poolId);
46
+ uint256 _nTokens = poolTokens.length;
47
+
48
+ IAsset[] memory assets = new IAsset[](_nTokens);
49
+ for (uint256 i = 0; i < _nTokens; i++) {
50
+ assets[i] = IAsset(poolTokens[i]);
51
+ }
52
+
53
+ IBVault.ExitKind exitKind = IBVault.ExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;
54
+ bytes memory userData = abi.encode(exitKind, amountIn);
55
+
56
+ IBVault.ExitPoolRequest memory request;
57
+ request.assets = assets;
58
+ request.minAmountsOut = minAmountsOut;
59
+ request.userData = userData;
60
+
61
+ IBVault(__bVault).exitPool(
62
+ poolId,
63
+ address(this),
64
+ payable(address(this)),
65
+ request
66
+ );
67
+ }
68
+
69
+ function _balancerSwap(
70
+ address sellToken,
71
+ address buyToken,
72
+ bytes32 poolId,
73
+ uint256 amountIn,
74
+ uint256 minAmountOut
75
+ ) internal {
76
+ IBVault.SingleSwap memory singleSwap;
77
+ IBVault.SwapKind swapKind = IBVault.SwapKind.GIVEN_IN;
78
+
79
+ singleSwap.poolId = poolId;
80
+ singleSwap.kind = swapKind;
81
+ singleSwap.assetIn = IAsset(sellToken);
82
+ singleSwap.assetOut = IAsset(buyToken);
83
+ singleSwap.amount = amountIn;
84
+ singleSwap.userData = abi.encode(0);
85
+
86
+ IBVault.FundManagement memory funds;
87
+ funds.sender = address(this);
88
+ funds.fromInternalBalance = false;
89
+ funds.recipient = payable(address(this));
90
+ funds.toInternalBalance = false;
91
+
92
+ _approveIfNeed(sellToken, __bVault, amountIn);
93
+ IBVault(__bVault).swap(singleSwap, funds, minAmountOut, block.timestamp);
94
+ }
95
+
96
+ /**
97
+ * Migrates the vault from the old MaticX BPT underlying to new MaticX BPT underlying
98
+ */
99
+ function migrateUnderlying(
100
+ uint256 minWMaticOut,
101
+ uint256 minMaticXOut,
102
+ uint256 minLPNewOut
103
+ ) public onlyControllerOrGovernance {
104
+ require(underlying() == __lpOld, "Can only migrate if the underlying is 2JPY");
105
+ withdrawAll();
106
+
107
+ uint256 v1Liquidity = IERC20(__lpOld).balanceOf(address(this));
108
+ console.log("V1Liquidity: ", v1Liquidity);
109
+ uint256[] memory minOutput = new uint256[](2);
110
+ minOutput[0] = minWMaticOut;
111
+ minOutput[1] = minMaticXOut;
112
+
113
+ _balancerWithdraw(__poolIdOld, v1Liquidity, minOutput);
114
+ uint256 amountWMatic = IERC20(__wmatic).balanceOf(address(this));
115
+ uint256 amountMaticX = IERC20(__maticx).balanceOf(address(this));
116
+ console.log("WMatic out: ", amountWMatic);
117
+ console.log("MaticX out: ", amountMaticX);
118
+
119
+ emit LiquidityRemoved(v1Liquidity, amountWMatic, amountMaticX);
120
+
121
+ require(IERC20(__lpOld).balanceOf(address(this)) == 0, "Not all underlying was converted");
122
+
123
+ _balancerSwap(__wmatic, __lpNew, __poolIdNew, amountWMatic, 1);
124
+ _balancerSwap(__maticx, __lpNew, __poolIdNew, amountMaticX, 1);
125
+ uint256 v2Liquidity = IERC20(__lpNew).balanceOf(address(this));
126
+ require(v2Liquidity >= minLPNewOut, "Output amount too low");
127
+ console.log("V2Liquidity: ", v2Liquidity);
128
+
129
+ emit LiquidityProvided(amountWMatic, amountMaticX, v2Liquidity);
130
+
131
+ _setUnderlying(__lpNew);
132
+ require(underlying() == __lpNew, "underlying switch failed");
133
+ console.log("New underlying: ", underlying());
134
+ _setStrategy(__newStrategy);
135
+ require(strategy() == __newStrategy, "strategy switch failed");
136
+ console.log("New strategy: ", strategy());
137
+
138
+ // some steps that regular setStrategy does
139
+ IERC20(underlying()).safeApprove(address(strategy()), 0);
140
+ IERC20(underlying()).safeApprove(address(strategy()), uint256(~0));
141
+
142
+ uint256 wMaticLeft = IERC20(__wmatic).balanceOf(address(this));
143
+ if (wMaticLeft > 0) {
144
+ IERC20(__wmatic).transfer(strategy(), wMaticLeft);
145
+ }
146
+ uint256 maticXLeft = IERC20(__maticx).balanceOf(address(this));
147
+ if (maticXLeft > 0) {
148
+ IERC20(__maticx).transfer(__governance, maticXLeft);
149
+ }
150
+
151
+ emit Migrated(v1Liquidity, v2Liquidity);
152
+ }
153
+ }
@@ -0,0 +1,153 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+ pragma experimental ABIEncoderV2;
4
+
5
+ import "../Vault.sol";
6
+ import "../../strategies/balancer/interface/IBVault.sol";
7
+ import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
8
+
9
+ import "hardhat/console.sol";
10
+
11
+ contract VaultMigratable_balStMatic is Vault {
12
+ using SafeERC20 for IERC20;
13
+
14
+ address public constant __wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
15
+ address public constant __stmatic = address(0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4);
16
+ address public constant __lpOld = address(0xaF5E0B5425dE1F5a630A8cB5AA9D97B8141C908D);
17
+ address public constant __lpNew = address(0x8159462d255C1D24915CB51ec361F700174cD994);
18
+ address public constant __governance = address(0xf00dD244228F51547f0563e60bCa65a30FBF5f7f);
19
+ address public constant __bVault = address(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
20
+ address public constant __newStrategy = address(0x9674AdE8257BEeC0f8c6fbdEAE279EA92543D989);
21
+
22
+ bytes32 public constant __poolIdOld = 0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366;
23
+ bytes32 public constant __poolIdNew = 0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d;
24
+
25
+ event Migrated(uint256 v1Liquidity, uint256 v2Liquidity);
26
+ event LiquidityRemoved(uint256 v1Liquidity, uint256 amountToken0, uint256 amountToken1);
27
+ event LiquidityProvided(uint256 amountToken0, uint256 amountToken1, uint256 v2Liquidity);
28
+
29
+ constructor() public {
30
+ }
31
+
32
+ function _approveIfNeed(address token, address spender, uint256 amount) internal {
33
+ uint256 allowance = IERC20(token).allowance(address(this), spender);
34
+ if (amount > allowance) {
35
+ IERC20(token).safeApprove(spender, 0);
36
+ IERC20(token).safeApprove(spender, amount);
37
+ }
38
+ }
39
+
40
+ function _balancerWithdraw(
41
+ bytes32 poolId,
42
+ uint256 amountIn,
43
+ uint256[] memory minAmountsOut
44
+ ) internal {
45
+ (address[] memory poolTokens,,) = IBVault(__bVault).getPoolTokens(poolId);
46
+ uint256 _nTokens = poolTokens.length;
47
+
48
+ IAsset[] memory assets = new IAsset[](_nTokens);
49
+ for (uint256 i = 0; i < _nTokens; i++) {
50
+ assets[i] = IAsset(poolTokens[i]);
51
+ }
52
+
53
+ IBVault.ExitKind exitKind = IBVault.ExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;
54
+ bytes memory userData = abi.encode(exitKind, amountIn);
55
+
56
+ IBVault.ExitPoolRequest memory request;
57
+ request.assets = assets;
58
+ request.minAmountsOut = minAmountsOut;
59
+ request.userData = userData;
60
+
61
+ IBVault(__bVault).exitPool(
62
+ poolId,
63
+ address(this),
64
+ payable(address(this)),
65
+ request
66
+ );
67
+ }
68
+
69
+ function _balancerSwap(
70
+ address sellToken,
71
+ address buyToken,
72
+ bytes32 poolId,
73
+ uint256 amountIn,
74
+ uint256 minAmountOut
75
+ ) internal {
76
+ IBVault.SingleSwap memory singleSwap;
77
+ IBVault.SwapKind swapKind = IBVault.SwapKind.GIVEN_IN;
78
+
79
+ singleSwap.poolId = poolId;
80
+ singleSwap.kind = swapKind;
81
+ singleSwap.assetIn = IAsset(sellToken);
82
+ singleSwap.assetOut = IAsset(buyToken);
83
+ singleSwap.amount = amountIn;
84
+ singleSwap.userData = abi.encode(0);
85
+
86
+ IBVault.FundManagement memory funds;
87
+ funds.sender = address(this);
88
+ funds.fromInternalBalance = false;
89
+ funds.recipient = payable(address(this));
90
+ funds.toInternalBalance = false;
91
+
92
+ _approveIfNeed(sellToken, __bVault, amountIn);
93
+ IBVault(__bVault).swap(singleSwap, funds, minAmountOut, block.timestamp);
94
+ }
95
+
96
+ /**
97
+ * Migrates the vault from the old MaticX BPT underlying to new MaticX BPT underlying
98
+ */
99
+ function migrateUnderlying(
100
+ uint256 minWMaticOut,
101
+ uint256 minStMaticOut,
102
+ uint256 minLPNewOut
103
+ ) public onlyControllerOrGovernance {
104
+ require(underlying() == __lpOld, "Can only migrate if the underlying is 2JPY");
105
+ withdrawAll();
106
+
107
+ uint256 v1Liquidity = IERC20(__lpOld).balanceOf(address(this));
108
+ console.log("V1Liquidity: ", v1Liquidity);
109
+ uint256[] memory minOutput = new uint256[](2);
110
+ minOutput[0] = minWMaticOut;
111
+ minOutput[1] = minStMaticOut;
112
+
113
+ _balancerWithdraw(__poolIdOld, v1Liquidity, minOutput);
114
+ uint256 amountWMatic = IERC20(__wmatic).balanceOf(address(this));
115
+ uint256 amountStMatic = IERC20(__stmatic).balanceOf(address(this));
116
+ console.log("WMatic out: ", amountWMatic);
117
+ console.log("stMatic out: ", amountStMatic);
118
+
119
+ emit LiquidityRemoved(v1Liquidity, amountWMatic, amountStMatic);
120
+
121
+ require(IERC20(__lpOld).balanceOf(address(this)) == 0, "Not all underlying was converted");
122
+
123
+ _balancerSwap(__wmatic, __lpNew, __poolIdNew, amountWMatic, 1);
124
+ _balancerSwap(__stmatic, __lpNew, __poolIdNew, amountStMatic, 1);
125
+ uint256 v2Liquidity = IERC20(__lpNew).balanceOf(address(this));
126
+ require(v2Liquidity >= minLPNewOut, "Output amount too low");
127
+ console.log("V2Liquidity: ", v2Liquidity);
128
+
129
+ emit LiquidityProvided(amountWMatic, amountStMatic, v2Liquidity);
130
+
131
+ _setUnderlying(__lpNew);
132
+ require(underlying() == __lpNew, "underlying switch failed");
133
+ console.log("New underlying: ", underlying());
134
+ _setStrategy(__newStrategy);
135
+ require(strategy() == __newStrategy, "strategy switch failed");
136
+ console.log("New strategy: ", strategy());
137
+
138
+ // some steps that regular setStrategy does
139
+ IERC20(underlying()).safeApprove(address(strategy()), 0);
140
+ IERC20(underlying()).safeApprove(address(strategy()), uint256(~0));
141
+
142
+ uint256 wMaticLeft = IERC20(__wmatic).balanceOf(address(this));
143
+ if (wMaticLeft > 0) {
144
+ IERC20(__wmatic).transfer(strategy(), wMaticLeft);
145
+ }
146
+ uint256 stMaticLeft = IERC20(__stmatic).balanceOf(address(this));
147
+ if (stMaticLeft > 0) {
148
+ IERC20(__stmatic).transfer(__governance, stMaticLeft);
149
+ }
150
+
151
+ emit Migrated(v1Liquidity, v2Liquidity);
152
+ }
153
+ }
@@ -0,0 +1,89 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
5
+ import "@openzeppelin/contracts/utils/Address.sol";
6
+ import "@openzeppelin/contracts/math/SafeMath.sol";
7
+ import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
8
+ import "../inheritance/Controllable.sol";
9
+ import "../interface/IVault.sol";
10
+
11
+
12
+ contract NoopStrategy is Controllable {
13
+ using SafeERC20 for IERC20;
14
+ using Address for address;
15
+ using SafeMath for uint256;
16
+
17
+ IERC20 public underlying;
18
+ IVault public vault;
19
+
20
+ // These tokens cannot be claimed by the controller
21
+ mapping(address => bool) public unsalvagableTokens;
22
+
23
+ modifier restricted() {
24
+ require(msg.sender == address(vault) || msg.sender == address(controller()) || msg.sender == address(governance()),
25
+ "The sender has to be the controller or vault or governance");
26
+ _;
27
+ }
28
+
29
+ constructor(address _storage, address _vault) public
30
+ Controllable(_storage) {
31
+ address _underlying = IVault(_vault).underlying();
32
+ require(_underlying != address(0), "_underlying cannot be empty");
33
+ require(_vault != address(0), "_vault cannot be empty");
34
+ underlying = IERC20(_underlying);
35
+ vault = IVault(_vault);
36
+ unsalvagableTokens[_underlying] = true;
37
+ }
38
+
39
+ function depositArbCheck() public pure returns(bool) {
40
+ return true;
41
+ }
42
+
43
+ /*
44
+ * Returns the total invested amount.
45
+ */
46
+ function investedUnderlyingBalance() view public returns (uint256) {
47
+ // for real strategies, need to calculate the invested balance
48
+ return underlying.balanceOf(address(this));
49
+ }
50
+
51
+ /*
52
+ * Invests all tokens that were accumulated so far
53
+ */
54
+ function investAllUnderlying() external restricted {
55
+ // no-op
56
+ }
57
+
58
+ /*
59
+ * Cashes everything out and withdraws to the vault
60
+ */
61
+ function withdrawAllToVault() external restricted {
62
+ if (underlying.balanceOf(address(this)) > 0) {
63
+ underlying.safeTransfer(address(vault), underlying.balanceOf(address(this)));
64
+ }
65
+ }
66
+
67
+ /*
68
+ * Cashes some amount out and withdraws to the vault
69
+ */
70
+ function withdrawToVault(uint256 underlyingAmount) external restricted {
71
+ require(underlying.balanceOf(address(this)) >= underlyingAmount,
72
+ "insufficient balance for the withdrawal");
73
+ if (underlyingAmount > 0) {
74
+ underlying.safeTransfer(address(vault), underlyingAmount);
75
+ }
76
+ }
77
+
78
+ /*
79
+ * Honest harvesting. It's not much, but it pays off
80
+ */
81
+ function doHardWork() external restricted {
82
+ // a no-op
83
+ }
84
+
85
+ // should only be called by controller
86
+ function salvage(address destination, address token, uint256 amount) external onlyController {
87
+ IERC20(token).safeTransfer(destination, amount);
88
+ }
89
+ }
@@ -0,0 +1,92 @@
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 "../interface/IVault.sol";
8
+ import "../upgradability/BaseUpgradeableStrategy.sol";
9
+
10
+ contract NoopStrategyUpgradeable is BaseUpgradeableStrategy {
11
+
12
+ using SafeMath for uint256;
13
+ using SafeERC20 for IERC20;
14
+
15
+ constructor() public BaseUpgradeableStrategy() {}
16
+
17
+ function initializeBaseStrategy(
18
+ address _storage,
19
+ address _underlying,
20
+ address _vault
21
+ ) public initializer {
22
+
23
+ require(_vault != address(0), "_vault cannot be empty");
24
+ require(_underlying == IVault(_vault).underlying(), "underlying mismatch");
25
+
26
+ BaseUpgradeableStrategy.initialize(
27
+ _storage,
28
+ _underlying,
29
+ _vault,
30
+ address(0),
31
+ address(0),
32
+ 80, // profit sharing numerator
33
+ 1000, // profit sharing denominator
34
+ true, // sell
35
+ 1e18, // sell floor
36
+ 12 hours // implementation change delay
37
+ );
38
+ }
39
+
40
+ function depositArbCheck() public pure returns(bool) {
41
+ return true;
42
+ }
43
+
44
+ function investedUnderlyingBalance() external view returns (uint256 balance) {
45
+ balance = IERC20(underlying()).balanceOf(address(this));
46
+ }
47
+
48
+ function unsalvagableTokens(address token) public view returns (bool) {
49
+ return (token == rewardToken() || token == underlying());
50
+ }
51
+
52
+ /*
53
+ * Withdraws all the asset to the vault
54
+ */
55
+ function withdrawAllToVault() external restricted {
56
+ if (IERC20(underlying()).balanceOf(address(this)) > 0) {
57
+ IERC20(underlying()).safeTransfer(address(vault()), IERC20(underlying()).balanceOf(address(this)));
58
+ }
59
+ }
60
+
61
+ /*
62
+ * Cashes some amount out and withdraws to the vault
63
+ */
64
+ function withdrawToVault(uint256 amount) external restricted {
65
+ require(IERC20(underlying()).balanceOf(address(this)) >= amount,
66
+ "insufficient balance for the withdrawal");
67
+ if (amount > 0) {
68
+ IERC20(underlying()).safeTransfer(address(vault()), amount);
69
+ }
70
+ }
71
+
72
+ /*
73
+ * Governance or Controller can claim coins that are somehow transferred into the contract
74
+ * Note that they cannot come in take away coins that are used and defined in the strategy itself
75
+ */
76
+ function salvage(address recipient, address token, uint256 amount) external onlyControllerOrGovernance {
77
+ // To make sure that governance cannot come in and take away the coins
78
+ require(!unsalvagableTokens(token), "token is defined as not salvagable");
79
+ IERC20(token).safeTransfer(recipient, amount);
80
+ }
81
+
82
+ /*
83
+ * Honest harvesting. It's not much, but it pays off
84
+ */
85
+ function doHardWork() external restricted {
86
+ // a no-op
87
+ }
88
+
89
+ function finalizeUpgrade() external onlyGovernance {
90
+ _finalizeUpgrade();
91
+ }
92
+ }