@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,34 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_2JPY is JarvisHodlStrategyV3 {
7
+
8
+ address public jpy2_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0xE8dCeA7Fb2Baf7a9F4d9af608F06d78a687F8d9A);
17
+ address rewardLp_ = address(0x3b76F90A8ab3EA7f0EA717F34ec65d194E5e9737);
18
+ address rewardPool_ = address(0xeb4a4Ba3EF5e3A286Dc49408C27F9BDaA286db84);
19
+ address rewardToken_ = address(0x9120ECada8dc70Dc62cBD49f58e861a09bf83788);
20
+ address hodlVault_ = address(0x483d1e18E67bF69ef555c798807DaDbE7757311D);
21
+
22
+ JarvisHodlStrategyV3.initializeBaseStrategy({
23
+ __storage: __storage,
24
+ _underlying: underlying_,
25
+ _vault: _vault,
26
+ _rewardPool: rewardPool_,
27
+ _rewardToken: rewardToken_,
28
+ _poolId: 0,
29
+ _rewardLp: rewardLp_,
30
+ _hodlVault: hodlVault_,
31
+ _potPool: address(0x0000000000000000000000000000000000000000) // manually set it later
32
+ });
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_2JPYv2 is JarvisHodlStrategyV3 {
7
+
8
+ address public jpy2v2_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0xaA91CDD7abb47F821Cf07a2d38Cc8668DEAf1bdc);
17
+ address rewardLp_ = address(0x707C7f22d5E3C0234bCc53aeE51420d6cdD988f9);
18
+ address rewardPool_ = address(0xaB5053e1f6f7fb242f62091BEE8f15c81265EE05);
19
+ address rewardToken_ = address(0xD7f13BeE20D6848D9Ca2F26d9A244AB7bd6CDDc0);
20
+ address hodlVault_ = address(0xcFD80B11fefD581Fc45868ABD0d61e8437C050b1);
21
+
22
+ JarvisHodlStrategyV3.initializeBaseStrategy({
23
+ __storage: __storage,
24
+ _underlying: underlying_,
25
+ _vault: _vault,
26
+ _rewardPool: rewardPool_,
27
+ _rewardToken: rewardToken_,
28
+ _poolId: 0,
29
+ _rewardLp: rewardLp_,
30
+ _hodlVault: hodlVault_,
31
+ _potPool: address(0x0000000000000000000000000000000000000000) // manually set it later
32
+ });
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_2NZD is JarvisHodlStrategyV3 {
7
+
8
+ address public nzd2_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0x976A750168801F58E8AEdbCfF9328138D544cc09);
17
+ address rewardLp_ = address(0x707C7f22d5E3C0234bCc53aeE51420d6cdD988f9);
18
+ address rewardPool_ = address(0xaB5053e1f6f7fb242f62091BEE8f15c81265EE05);
19
+ address rewardToken_ = address(0xD7f13BeE20D6848D9Ca2F26d9A244AB7bd6CDDc0);
20
+ address hodlVault_ = address(0xcFD80B11fefD581Fc45868ABD0d61e8437C050b1);
21
+
22
+ JarvisHodlStrategyV3.initializeBaseStrategy({
23
+ __storage: __storage,
24
+ _underlying: underlying_,
25
+ _vault: _vault,
26
+ _rewardPool: rewardPool_,
27
+ _rewardToken: rewardToken_,
28
+ _poolId: 3,
29
+ _rewardLp: rewardLp_,
30
+ _hodlVault: hodlVault_,
31
+ _potPool: address(0x0000000000000000000000000000000000000000) // manually set it later
32
+ });
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_2SGD is JarvisHodlStrategyV3 {
7
+
8
+ address public sgd2_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0xeF75E9C7097842AcC5D0869E1dB4e5fDdf4BFDDA);
17
+ address rewardLp_ = address(0xdaa2C66B06B62bAd2E192be0A93f895c855484ee);
18
+ address rewardPool_ = address(0x0ff93e7CE954A7Ac2ADbBe8F635513cbDB497405);
19
+ address rewardToken_ = address(0xF5f480Edc68589B51F4217E6aA82Ef7Df5cf789e);
20
+ address hodlVault_ = address(0x95b730ED766F4e385016144fA30E96b78EBd09f5);
21
+
22
+ JarvisHodlStrategyV3.initializeBaseStrategy({
23
+ __storage: __storage,
24
+ _underlying: underlying_,
25
+ _vault: _vault,
26
+ _rewardPool: rewardPool_,
27
+ _rewardToken: rewardToken_,
28
+ _poolId: 2,
29
+ _rewardLp: rewardLp_,
30
+ _hodlVault: hodlVault_,
31
+ _potPool: address(0x0000000000000000000000000000000000000000) // manually set it later
32
+ });
33
+ }
34
+ }
@@ -0,0 +1,35 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_jCHF_USDC is JarvisHodlStrategyV3 {
7
+
8
+ address public jchf_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0x439E6A13a5ce7FdCA2CC03bF31Fb631b3f5EF157);
17
+ address rewardLp_ = address(0xF40E249737c510CCE832286e54cB30E60D4e4656);
18
+ address rewardPool_ = address(0xFAA0f413E67A56cbbE181024279bA5504Ce487EF);
19
+ address rewardToken_ = address(0xBF06D9b11126B140788D842a6ed8dC7885C722B3);
20
+ address hodlVault_ = address(0x102Df50dB22407B64a8A6b11734c8743B6AeF953);
21
+ address potPool_ = address(0x24Aa3547962872351c30F1127430172317C05FEC);
22
+
23
+ JarvisHodlStrategyV3.initializeBaseStrategy({
24
+ __storage: __storage,
25
+ _underlying: underlying_,
26
+ _vault: _vault,
27
+ _rewardPool: rewardPool_,
28
+ _rewardToken: rewardToken_,
29
+ _poolId: 1,
30
+ _rewardLp: rewardLp_,
31
+ _hodlVault: hodlVault_,
32
+ _potPool: potPool_
33
+ });
34
+ }
35
+ }
@@ -0,0 +1,35 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_jCHF_WETH is JarvisHodlStrategyV3 {
7
+
8
+ address public jchf_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0x95697B1b83E0F28017158BF2a2Adc6bA991088EC);
17
+ address rewardLp_ = address(0xF9Ce68A9E41f1e7cee5FDCbef99669653Aa61390);
18
+ address rewardPool_ = address(0x8b4D15670CaA3772a29AaC386AB924a0F54Abe48);
19
+ address rewardToken_ = address(0x8C56600D7D8f9239f124c7C52D3fa018fC801A76);
20
+ address hodlVault_ = address(0x3BB93BdEaF0906819e5D2Eccdc2E9Ce408296dD1);
21
+ address potPool_ = address(0x0000000000000000000000000000000000000000);
22
+
23
+ JarvisHodlStrategyV3.initializeBaseStrategy({
24
+ __storage: __storage,
25
+ _underlying: underlying_,
26
+ _vault: _vault,
27
+ _rewardPool: rewardPool_,
28
+ _rewardToken: rewardToken_,
29
+ _poolId: 1,
30
+ _rewardLp: rewardLp_,
31
+ _hodlVault: hodlVault_,
32
+ _potPool: potPool_
33
+ });
34
+ }
35
+ }
@@ -0,0 +1,35 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_jEUR_USDC is JarvisHodlStrategyV3 {
7
+
8
+ address public jeur_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0xa1219DBE76eEcBf7571Fed6b020Dd9154396B70e);
17
+ address rewardLp_ = address(0xF40E249737c510CCE832286e54cB30E60D4e4656);
18
+ address rewardPool_ = address(0xFAA0f413E67A56cbbE181024279bA5504Ce487EF);
19
+ address rewardToken_ = address(0xBF06D9b11126B140788D842a6ed8dC7885C722B3);
20
+ address hodlVault_ = address(0x102Df50dB22407B64a8A6b11734c8743B6AeF953);
21
+ address potPool_ = address(0xf25474FBf9812bE2ef76abf4297A27411C156403);
22
+
23
+ JarvisHodlStrategyV3.initializeBaseStrategy({
24
+ __storage: __storage,
25
+ _underlying: underlying_,
26
+ _vault: _vault,
27
+ _rewardPool: rewardPool_,
28
+ _rewardToken: rewardToken_,
29
+ _poolId: 0,
30
+ _rewardLp: rewardLp_,
31
+ _hodlVault: hodlVault_,
32
+ _potPool: potPool_
33
+ });
34
+ }
35
+ }
@@ -0,0 +1,35 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_jEUR_WETH is JarvisHodlStrategyV3 {
7
+
8
+ address public jeur_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0x7090f6f42EA9b07C85E46aD796f8C4A50E0f76fA);
17
+ address rewardLp_ = address(0xF9Ce68A9E41f1e7cee5FDCbef99669653Aa61390);
18
+ address rewardPool_ = address(0x8b4D15670CaA3772a29AaC386AB924a0F54Abe48);
19
+ address rewardToken_ = address(0x8C56600D7D8f9239f124c7C52D3fa018fC801A76);
20
+ address hodlVault_ = address(0x3BB93BdEaF0906819e5D2Eccdc2E9Ce408296dD1);
21
+ address potPool_ = address(0x0000000000000000000000000000000000000000);
22
+
23
+ JarvisHodlStrategyV3.initializeBaseStrategy({
24
+ __storage: __storage,
25
+ _underlying: underlying_,
26
+ _vault: _vault,
27
+ _rewardPool: rewardPool_,
28
+ _rewardToken: rewardToken_,
29
+ _poolId: 0,
30
+ _rewardLp: rewardLp_,
31
+ _hodlVault: hodlVault_,
32
+ _potPool: potPool_
33
+ });
34
+ }
35
+ }
@@ -0,0 +1,35 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisHodlStrategyV3.sol";
5
+
6
+ contract JarvisHodlStrategyV3Mainnet_jGBP_USDC is JarvisHodlStrategyV3 {
7
+
8
+ address public jgbp_unused; // just a differentiator for the bytecode
9
+
10
+ constructor() public {}
11
+
12
+ function initializeStrategy(
13
+ address __storage,
14
+ address _vault
15
+ ) public initializer {
16
+ address underlying_ = address(0xbb2d00675B775E0F8acd590e08DA081B2a36D3a6);
17
+ address rewardLp_ = address(0xF40E249737c510CCE832286e54cB30E60D4e4656);
18
+ address rewardPool_ = address(0xFAA0f413E67A56cbbE181024279bA5504Ce487EF);
19
+ address rewardToken_ = address(0xBF06D9b11126B140788D842a6ed8dC7885C722B3);
20
+ address hodlVault_ = address(0x102Df50dB22407B64a8A6b11734c8743B6AeF953);
21
+ address potPool_ = address(0x877635e68C1E943D6d6B777C0e847Cd7aE5A01BE);
22
+
23
+ JarvisHodlStrategyV3.initializeBaseStrategy({
24
+ __storage: __storage,
25
+ _underlying: underlying_,
26
+ _vault: _vault,
27
+ _rewardPool: rewardPool_,
28
+ _rewardToken: rewardToken_,
29
+ _poolId: 2,
30
+ _rewardLp: rewardLp_,
31
+ _hodlVault: hodlVault_,
32
+ _potPool: potPool_
33
+ });
34
+ }
35
+ }
@@ -0,0 +1,281 @@
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
+
8
+ import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
9
+ import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";
10
+
11
+ import "../../base/upgradability/BaseUpgradeableStrategy.sol";
12
+
13
+ import "./interface/IElysianFields.sol";
14
+
15
+ import "../../base/interface/IVault.sol";
16
+ import "../../base/interface/IStrategy.sol";
17
+ import "../../base/interface/kyber/IDMMRouter02.sol";
18
+ import "../../base/interface/kyber/IDMMPool.sol";
19
+ import "../../base/interface/kyber/IKyberZap.sol";
20
+
21
+ contract JarvisStrategyV3 is BaseUpgradeableStrategy {
22
+
23
+ using SafeMath for uint256;
24
+ using SafeERC20 for IERC20;
25
+
26
+ address public constant kyberZapper = address(0x83D4908c1B4F9Ca423BEE264163BC1d50F251c31);
27
+ address public constant msig = address(0x39cC360806b385C96969ce9ff26c23476017F652);
28
+
29
+ // additional storage slots (on top of BaseUpgradeableStrategy ones) are defined here
30
+ bytes32 internal constant _POOLID_SLOT = 0x3fd729bfa2e28b7806b03a6e014729f59477b530f995be4d51defc9dad94810b;
31
+ bytes32 internal constant _REWARD_LP_SLOT = 0x48141e8830aff32be47daedfc211bdc62d1652246e1c94ca6dfd96128ee259d2;
32
+ bytes32 internal constant _REWARD_LP_TOKEN1_SLOT = 0x39bbed0fce4dadfae510b0ff92e23dc8458ac86daafb72558e64503559b640ed;
33
+
34
+ constructor() public BaseUpgradeableStrategy() {
35
+ assert(_POOLID_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.poolId")) - 1));
36
+ assert(_REWARD_LP_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardLp")) - 1));
37
+ assert(_REWARD_LP_TOKEN1_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardLpToken1")) - 1));
38
+ }
39
+
40
+ function initializeBaseStrategy(
41
+ address __storage,
42
+ address _underlying,
43
+ address _vault,
44
+ address _rewardPool,
45
+ address _rewardToken,
46
+ uint256 _poolId
47
+ ) public initializer {
48
+ require(_rewardPool != address(0), "reward pool is empty");
49
+
50
+ BaseUpgradeableStrategy.initialize({
51
+ _storage: __storage,
52
+ _underlying: _underlying,
53
+ _vault: _vault,
54
+ _rewardPool: _rewardPool,
55
+ _rewardToken: _rewardToken,
56
+ _profitSharingNumerator: 80,
57
+ _profitSharingDenominator: 1000,
58
+ _sell: true,
59
+ _sellFloor: 1e18,
60
+ _implementationChangeDelay: 12 hours}
61
+ );
62
+
63
+ address _lpt;
64
+ (_lpt,,,) = IElysianFields(_rewardPool).poolInfo(_poolId);
65
+
66
+ require(_lpt == _underlying, "Pool Info does not match underlying");
67
+
68
+ _setPoolId(_poolId);
69
+
70
+ address token0 = IDMMPool(_underlying).token0();
71
+ address token1 = IDMMPool(_underlying).token1();
72
+ require(token0 == _rewardToken || token1 == _rewardToken, "One of the underlying DMM pool token is not equal to the rewardToken");
73
+
74
+ // select the token that isn't the rewardToken, s.t.
75
+ address rewardLpToken1 = (token0 == _rewardToken) ? token1 : token0;
76
+ setRewardLpToken1(rewardLpToken1);
77
+ }
78
+
79
+ /*///////////////////////////////////////////////////////////////
80
+ STORAGE SETTER AND GETTER
81
+ //////////////////////////////////////////////////////////////*/
82
+
83
+ function setRewardLpToken1(address _value) internal {
84
+ setAddress(_REWARD_LP_TOKEN1_SLOT, _value);
85
+ }
86
+
87
+ function rewardLpToken1() public view returns (address) {
88
+ return getAddress(_REWARD_LP_TOKEN1_SLOT);
89
+ }
90
+
91
+ // masterchef rewards pool ID
92
+ function _setPoolId(uint256 _value) internal {
93
+ setUint256(_POOLID_SLOT, _value);
94
+ }
95
+
96
+ function poolId() public view returns (uint256) {
97
+ return getUint256(_POOLID_SLOT);
98
+ }
99
+
100
+ /*///////////////////////////////////////////////////////////////
101
+ PROXY - FINALIZE UPGRADE
102
+ //////////////////////////////////////////////////////////////*/
103
+
104
+ function finalizeUpgrade() external onlyGovernance {
105
+ _finalizeUpgrade();
106
+ }
107
+
108
+ /*///////////////////////////////////////////////////////////////
109
+ INTERNAL HELPER FUNCTIONS
110
+ //////////////////////////////////////////////////////////////*/
111
+
112
+ function _rewardPoolBalance() internal view returns (uint256 bal) {
113
+ (bal,) = IElysianFields(rewardPool()).userInfo(poolId(), address(this));
114
+ }
115
+
116
+ function _exitRewardPool() internal {
117
+ uint256 bal = _rewardPoolBalance();
118
+ if (bal != 0) {
119
+ IElysianFields(rewardPool()).withdraw(poolId(), bal);
120
+ }
121
+ }
122
+
123
+ function _emergencyExitRewardPool() internal {
124
+ uint256 bal = _rewardPoolBalance();
125
+ if (bal != 0) {
126
+ IElysianFields(rewardPool()).emergencyWithdraw(poolId());
127
+ }
128
+ }
129
+
130
+ function _enterRewardPool() internal {
131
+ address underlying_ = underlying();
132
+ address rewardPool_ = rewardPool();
133
+ uint256 entireBalance = IERC20(underlying_).balanceOf(address(this));
134
+
135
+ IERC20(underlying_).safeApprove(rewardPool_, 0);
136
+ IERC20(underlying_).safeApprove(rewardPool_, entireBalance);
137
+
138
+ IElysianFields(rewardPool_).deposit(poolId(), entireBalance);
139
+ }
140
+
141
+ function _liquidateReward() internal {
142
+ address rewardToken_ = rewardToken();
143
+ uint256 rewardBalance = IERC20(rewardToken_).balanceOf(address(this));
144
+ if (rewardBalance == 0) {
145
+ return;
146
+ }
147
+ uint256 feeAmount = rewardBalance.mul(profitSharingNumerator()).div(profitSharingDenominator());
148
+ IERC20(rewardToken_).safeTransfer(msig, feeAmount);
149
+ uint256 remainingRewardBalance = IERC20(rewardToken_).balanceOf(address(this));
150
+
151
+ if (remainingRewardBalance == 0) {
152
+ return;
153
+ }
154
+
155
+ _rewardToLp();
156
+ }
157
+
158
+ function _rewardToLp() internal {
159
+ address rewardToken_ = rewardToken();
160
+ uint256 rewardBalance = IERC20(rewardToken_).balanceOf(address(this));
161
+
162
+ IERC20(rewardToken_).safeApprove(kyberZapper, 0);
163
+ IERC20(rewardToken_).safeApprove(kyberZapper, rewardBalance);
164
+
165
+ IKyberZap(kyberZapper).zapIn({tokenIn: rewardToken_, tokenOut: rewardLpToken1(), userIn: rewardBalance , pool: underlying(), to: address(this), minLpQty: 1, deadline: block.timestamp});
166
+ }
167
+
168
+ /*
169
+ * Stakes everything the strategy holds into the reward pool
170
+ */
171
+ function _investAllUnderlying() internal onlyNotPausedInvesting {
172
+ // this check is needed, because most of the SNX reward pools will revert if
173
+ // you try to stake(0).
174
+ if(IERC20(underlying()).balanceOf(address(this)) > 0) {
175
+ _enterRewardPool();
176
+ }
177
+ }
178
+
179
+ /*///////////////////////////////////////////////////////////////
180
+ PUBLIC EMERGENCY FUNCTIONS
181
+ //////////////////////////////////////////////////////////////*/
182
+
183
+ /*
184
+ * In case there are some issues discovered about the pool or underlying asset
185
+ * Governance can exit the pool properly
186
+ * The function is only used for emergency to exit the pool
187
+ */
188
+ function emergencyExit() public onlyGovernance {
189
+ _emergencyExitRewardPool();
190
+ _setPausedInvesting(true);
191
+ }
192
+
193
+ /*
194
+ * Resumes the ability to invest into the underlying reward pools
195
+ */
196
+ function continueInvesting() public onlyGovernance {
197
+ _setPausedInvesting(false);
198
+ }
199
+
200
+ /*///////////////////////////////////////////////////////////////
201
+ ISTRATEGY FUNCTION IMPLEMENTATIONS
202
+ //////////////////////////////////////////////////////////////*/
203
+
204
+ /*
205
+ * Withdraws all the asset to the vault
206
+ */
207
+ function withdrawAllToVault() public restricted {
208
+ _exitRewardPool();
209
+ _liquidateReward();
210
+ address underlying_ = underlying();
211
+ IERC20(underlying_).safeTransfer(vault(), IERC20(underlying_).balanceOf(address(this)));
212
+ }
213
+
214
+ /*
215
+ * Withdraws all the asset to the vault
216
+ */
217
+ function withdrawToVault(uint256 _amount) public restricted {
218
+ // Typically there wouldn't be any amount here
219
+ // however, it is possible because of the emergencyExit
220
+ address underlying_ = underlying();
221
+ uint256 entireBalance = IERC20(underlying_).balanceOf(address(this));
222
+
223
+ if(_amount > entireBalance){
224
+ // While we have the check above, we still using SafeMath below
225
+ // for the peace of mind (in case something gets changed in between)
226
+ uint256 needToWithdraw = _amount.sub(entireBalance);
227
+ uint256 toWithdraw = Math.min(_rewardPoolBalance(), needToWithdraw);
228
+ IElysianFields(rewardPool()).withdraw(poolId(), toWithdraw);
229
+ }
230
+
231
+ IERC20(underlying_).safeTransfer(vault(), _amount);
232
+ }
233
+
234
+ /*
235
+ * Note that we currently do not have a mechanism here to include the
236
+ * amount of reward that is accrued.
237
+ */
238
+ function investedUnderlyingBalance() external view returns (uint256) {
239
+ if (rewardPool() == address(0)) {
240
+ return IERC20(underlying()).balanceOf(address(this));
241
+ }
242
+ // Adding the amount locked in the reward pool and the amount that is somehow in this contract
243
+ // both are in the units of "underlying"
244
+ // The second part is needed because there is the emergency exit mechanism
245
+ // which would break the assumption that all the funds are always inside of the reward pool
246
+ return _rewardPoolBalance().add(IERC20(underlying()).balanceOf(address(this)));
247
+ }
248
+
249
+ /*
250
+ * Governance or Controller can claim coins that are somehow transferred into the contract
251
+ * Note that they cannot come in take away coins that are used and defined in the strategy itself
252
+ */
253
+ function salvage(address _recipient, address _token, uint256 _amount) external onlyControllerOrGovernance {
254
+ // To make sure that governance cannot come in and take away the coins
255
+ require(!unsalvagableTokens(_token), "token is defined as not salvagable");
256
+ IERC20(_token).safeTransfer(_recipient, _amount);
257
+ }
258
+
259
+ function unsalvagableTokens(address _token) public view returns (bool) {
260
+ return (_token == rewardToken() || _token == underlying());
261
+ }
262
+
263
+ /*
264
+ * Get the reward, sell it in exchange for underlying, invest what you got.
265
+ * It's not much, but it's honest work.
266
+ *
267
+ * Note that although `onlyNotPausedInvesting` is not added here,
268
+ * calling `_investAllUnderlying()` affectively blocks the usage of `doHardWork`
269
+ * when the investing is being paused by governance.
270
+ */
271
+ function doHardWork() external onlyNotPausedInvesting restricted {
272
+ IElysianFields(rewardPool()).withdraw(poolId(), 0);
273
+ _liquidateReward();
274
+ _investAllUnderlying();
275
+ }
276
+
277
+ function depositArbCheck() public pure returns(bool) {
278
+ return true;
279
+ }
280
+
281
+ }
@@ -0,0 +1,27 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisStrategyV3.sol";
5
+
6
+ contract JarvisStrategyV3Mainnet_AUR3_USDC is JarvisStrategyV3 {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address __storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying_ = address(0xF40E249737c510CCE832286e54cB30E60D4e4656);
15
+ address rewardPool_ = address(0xFAA0f413E67A56cbbE181024279bA5504Ce487EF);
16
+ address rewardToken_ = address(0xBF06D9b11126B140788D842a6ed8dC7885C722B3);
17
+
18
+ JarvisStrategyV3.initializeBaseStrategy({
19
+ __storage: __storage,
20
+ _underlying: underlying_,
21
+ _vault: _vault,
22
+ _rewardPool: rewardPool_,
23
+ _rewardToken: rewardToken_,
24
+ _poolId: 3
25
+ });
26
+ }
27
+ }
@@ -0,0 +1,27 @@
1
+ //SPDX-License-Identifier: Unlicense
2
+ pragma solidity 0.6.12;
3
+
4
+ import "./JarvisStrategyV3.sol";
5
+
6
+ contract JarvisStrategyV3Mainnet_AURJUL22_WETH is JarvisStrategyV3 {
7
+
8
+ constructor() public {}
9
+
10
+ function initializeStrategy(
11
+ address __storage,
12
+ address _vault
13
+ ) public initializer {
14
+ address underlying_ = address(0xF9Ce68A9E41f1e7cee5FDCbef99669653Aa61390);
15
+ address rewardPool_ = address(0x8b4D15670CaA3772a29AaC386AB924a0F54Abe48);
16
+ address rewardToken_ = address(0x8C56600D7D8f9239f124c7C52D3fa018fC801A76);
17
+
18
+ JarvisStrategyV3.initializeBaseStrategy({
19
+ __storage: __storage,
20
+ _underlying: underlying_,
21
+ _vault: _vault,
22
+ _rewardPool: rewardPool_,
23
+ _rewardToken: rewardToken_,
24
+ _poolId: 2
25
+ });
26
+ }
27
+ }