@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,163 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ wrapMATIC,
9
+ addLiquidity
10
+ } = require("../utilities/hh-utils.js");
11
+
12
+ const addresses = require("../test-config.js");
13
+ const { send } = require("@openzeppelin/test-helpers");
14
+ const BigNumber = require("bignumber.js");
15
+ const IERC20 = artifacts.require("IERC20");
16
+
17
+ //const Strategy = artifacts.require("");
18
+ const Strategy = artifacts.require("ApeStrategyMainnet_DAI_USDC");
19
+ const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
20
+
21
+ const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
22
+
23
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
24
+ describe("Polygon Mainnet ApeSwap DAI/USDC", function() {
25
+ let accounts;
26
+
27
+ // external contracts
28
+ let underlying;
29
+
30
+ // external setup
31
+ let token0Addr = "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063"; //dai
32
+ let token1Addr = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; //usdc
33
+ let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
34
+ let banana = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C";
35
+ let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
36
+ let wmatic = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
37
+
38
+ // parties in the protocol
39
+ let governance;
40
+ let farmer1;
41
+
42
+ // numbers used in tests
43
+ let farmerBalance;
44
+
45
+ // Core protocol contracts
46
+ let controller;
47
+ let vault;
48
+ let strategy;
49
+ let token0;
50
+ let farmerToken0Balance;
51
+ let token1;
52
+ let farmerToken1Balance;
53
+
54
+ async function setupExternalContracts() {
55
+ underlying = await IERC20.at("0x5b13B583D4317aB15186Ed660A1E4C65C10da659"); //dai-usdc
56
+ console.log("Fetching Underlying at: ", underlying.address);
57
+ }
58
+
59
+ async function setupBalance(){
60
+ token0 = await IERC20.at(token0Addr);
61
+ token1 = await IERC20.at(token1Addr);
62
+
63
+ await swapMaticToToken (
64
+ farmer1,
65
+ [addresses.WMATIC, token0.address],
66
+ "1000" + "000000000000000000",
67
+ apeRouterAddress
68
+ );
69
+ farmerToken0Balance = await token0.balanceOf(farmer1);
70
+
71
+ await swapMaticToToken (
72
+ farmer1,
73
+ [addresses.WMATIC, token1.address],
74
+ "1000" + "000000000000000000",
75
+ apeRouterAddress
76
+ );
77
+ farmerToken1Balance = await token1.balanceOf(farmer1);
78
+
79
+ await addLiquidity (
80
+ farmer1,
81
+ token0,
82
+ token1,
83
+ farmerToken0Balance,
84
+ farmerToken1Balance,
85
+ apeRouterAddress
86
+ );
87
+ farmerBalance = await underlying.balanceOf(farmer1);
88
+
89
+ console.log("farmerBalance: ");
90
+ console.log(new BigNumber(farmerBalance).toFixed());
91
+ }
92
+
93
+ before(async function() {
94
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
95
+ accounts = await web3.eth.getAccounts();
96
+
97
+ farmer1 = accounts[1];
98
+
99
+ // impersonate accounts
100
+ await impersonates([governance]);
101
+
102
+ let etherGiver = accounts[9];
103
+ await send.ether(etherGiver, governance, "100" + "000000000000000000")
104
+
105
+ await setupExternalContracts();
106
+ [controller, vault, strategy] = await setupCoreProtocol({
107
+ "existingVaultAddress": null,
108
+ "strategyArtifact": Strategy,
109
+ "underlying": underlying,
110
+ "governance": governance,
111
+ "strategyArtifactIsUpgradable": true
112
+ });
113
+
114
+ feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
115
+ let path = [banana, wmatic, weth];
116
+ let dexes = [apeRouterAddress];
117
+ await feeForwarder.setConversionPath(path, dexes, { from: governance });
118
+
119
+ await strategy.setSellFloor(0, {from:governance});
120
+
121
+ // whale send underlying to farmers
122
+ await setupBalance();
123
+ });
124
+
125
+ describe("Happy path", function() {
126
+ it("Farmer should earn money", async function() {
127
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
128
+ await depositVault(farmer1, underlying, vault, farmerBalance);
129
+
130
+ // Using half days is to simulate how we doHardwork in the real world
131
+ let hours = 10;
132
+ let blocksPerHour = 1565*5;
133
+ let oldSharePrice;
134
+ let newSharePrice;
135
+ for (let i = 0; i < hours; i++) {
136
+ console.log("loop ", i);
137
+
138
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
139
+ await controller.doHardWork(vault.address, { from: governance });
140
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
141
+
142
+ console.log("old shareprice: ", oldSharePrice.toFixed());
143
+ console.log("new shareprice: ", newSharePrice.toFixed());
144
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
145
+
146
+ await Utils.advanceNBlock(blocksPerHour);
147
+ }
148
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
149
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
150
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
151
+
152
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
153
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
154
+
155
+ console.log("earned!");
156
+ console.log("APR:", apr*100, "%");
157
+ console.log("APY:", (apy-1)*100, "%");
158
+
159
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
160
+
161
+ });
162
+ });
163
+ });
@@ -0,0 +1,158 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ wrapMATIC,
9
+ addLiquidity
10
+ } = require("../utilities/hh-utils.js");
11
+
12
+ const addresses = require("../test-config.js");
13
+ const { send } = require("@openzeppelin/test-helpers");
14
+ const BigNumber = require("bignumber.js");
15
+ const IERC20 = artifacts.require("IERC20");
16
+
17
+ //const Strategy = artifacts.require("");
18
+ const Strategy = artifacts.require("ApeStrategyMainnet_ETH_MATIC");
19
+ const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
20
+
21
+ const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
22
+
23
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
24
+ describe("Polygon Mainnet ApeSwap ETH/MATIC", function() {
25
+ let accounts;
26
+
27
+ // external contracts
28
+ let underlying;
29
+
30
+ // external setup
31
+ let token0Addr = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619"; //weth
32
+ let token1Addr = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; //wmatic
33
+ let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
34
+ let banana = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C";
35
+
36
+
37
+ // parties in the protocol
38
+ let governance;
39
+ let farmer1;
40
+
41
+ // numbers used in tests
42
+ let farmerBalance;
43
+
44
+ // Core protocol contracts
45
+ let controller;
46
+ let vault;
47
+ let strategy;
48
+ let token0;
49
+ let farmerToken0Balance;
50
+ let token1;
51
+ let farmerToken1Balance;
52
+
53
+ async function setupExternalContracts() {
54
+ underlying = await IERC20.at("0x6Cf8654e85AB489cA7e70189046D507ebA233613"); //eth-matic
55
+ console.log("Fetching Underlying at: ", underlying.address);
56
+ }
57
+
58
+ async function setupBalance(){
59
+ token0 = await IERC20.at(token0Addr);
60
+ token1 = await IERC20.at(token1Addr);
61
+
62
+ await swapMaticToToken (
63
+ farmer1,
64
+ [addresses.WMATIC, token0.address],
65
+ "1000" + "000000000000000000",
66
+ apeRouterAddress
67
+ );
68
+ farmerToken0Balance = await token0.balanceOf(farmer1);
69
+
70
+ await wrapMATIC(farmer1, "1000" + "000000000000000000");
71
+ farmerToken1Balance = await token1.balanceOf(farmer1);
72
+
73
+
74
+ await addLiquidity (
75
+ farmer1,
76
+ token0,
77
+ token1,
78
+ farmerToken0Balance,
79
+ farmerToken1Balance,
80
+ apeRouterAddress
81
+ );
82
+ farmerBalance = await underlying.balanceOf(farmer1);
83
+
84
+ console.log("farmerBalance: ");
85
+ console.log(new BigNumber(farmerBalance).toFixed());
86
+ }
87
+
88
+ before(async function() {
89
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
90
+ accounts = await web3.eth.getAccounts();
91
+
92
+ farmer1 = accounts[1];
93
+
94
+ // impersonate accounts
95
+ await impersonates([governance]);
96
+
97
+ let etherGiver = accounts[9];
98
+ await send.ether(etherGiver, governance, "100" + "000000000000000000")
99
+
100
+ await setupExternalContracts();
101
+ [controller, vault, strategy] = await setupCoreProtocol({
102
+ "existingVaultAddress": null,
103
+ "strategyArtifact": Strategy,
104
+ "underlying": underlying,
105
+ "governance": governance,
106
+ "strategyArtifactIsUpgradable": true
107
+ });
108
+
109
+ feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
110
+ let path = [banana, token1Addr, token0Addr];
111
+ let dexes = [apeRouterAddress];
112
+ await feeForwarder.setConversionPath(path, dexes, { from: governance });
113
+
114
+ await strategy.setSellFloor(0, {from:governance});
115
+
116
+ // whale send underlying to farmers
117
+ await setupBalance();
118
+ });
119
+
120
+ describe("Happy path", function() {
121
+ it("Farmer should earn money", async function() {
122
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
123
+ await depositVault(farmer1, underlying, vault, farmerBalance);
124
+
125
+ // Using half days is to simulate how we doHardwork in the real world
126
+ let hours = 10;
127
+ let blocksPerHour = 1565*5;
128
+ let oldSharePrice;
129
+ let newSharePrice;
130
+ for (let i = 0; i < hours; i++) {
131
+ console.log("loop ", i);
132
+
133
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
134
+ await controller.doHardWork(vault.address, { from: governance });
135
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
136
+
137
+ console.log("old shareprice: ", oldSharePrice.toFixed());
138
+ console.log("new shareprice: ", newSharePrice.toFixed());
139
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
140
+
141
+ await Utils.advanceNBlock(blocksPerHour);
142
+ }
143
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
144
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
145
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
146
+
147
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
148
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
149
+
150
+ console.log("earned!");
151
+ console.log("APR:", apr*100, "%");
152
+ console.log("APY:", (apy-1)*100, "%");
153
+
154
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
155
+
156
+ });
157
+ });
158
+ });
@@ -0,0 +1,159 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ wrapMATIC,
9
+ addLiquidity
10
+ } = require("../utilities/hh-utils.js");
11
+
12
+ const addresses = require("../test-config.js");
13
+ const { send } = require("@openzeppelin/test-helpers");
14
+ const BigNumber = require("bignumber.js");
15
+ const IERC20 = artifacts.require("IERC20");
16
+
17
+ //const Strategy = artifacts.require("");
18
+ const Strategy = artifacts.require("ApeStrategyMainnet_USDT_MATIC");
19
+ const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
20
+
21
+ const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
22
+
23
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
24
+ describe("Polygon Mainnet ApeSwap USDT/MATIC", function() {
25
+ let accounts;
26
+
27
+ // external contracts
28
+ let underlying;
29
+
30
+ // external setup
31
+ let token0Addr = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"; //usdt
32
+ let token1Addr = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; //wmatic
33
+ let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
34
+ let banana = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C";
35
+ let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
36
+
37
+
38
+ // parties in the protocol
39
+ let governance;
40
+ let farmer1;
41
+
42
+ // numbers used in tests
43
+ let farmerBalance;
44
+
45
+ // Core protocol contracts
46
+ let controller;
47
+ let vault;
48
+ let strategy;
49
+ let token0;
50
+ let farmerToken0Balance;
51
+ let token1;
52
+ let farmerToken1Balance;
53
+
54
+ async function setupExternalContracts() {
55
+ underlying = await IERC20.at("0x65D43B64E3B31965Cd5EA367D4c2b94c03084797"); //usdt-matic
56
+ console.log("Fetching Underlying at: ", underlying.address);
57
+ }
58
+
59
+ async function setupBalance(){
60
+ token0 = await IERC20.at(token0Addr);
61
+ token1 = await IERC20.at(token1Addr);
62
+
63
+ await swapMaticToToken (
64
+ farmer1,
65
+ [addresses.WMATIC, token0.address],
66
+ "1000" + "000000000000000000",
67
+ apeRouterAddress
68
+ );
69
+ farmerToken0Balance = await token0.balanceOf(farmer1);
70
+
71
+ await wrapMATIC(farmer1, "1000" + "000000000000000000");
72
+ farmerToken1Balance = await token1.balanceOf(farmer1);
73
+
74
+
75
+ await addLiquidity (
76
+ farmer1,
77
+ token0,
78
+ token1,
79
+ farmerToken0Balance,
80
+ farmerToken1Balance,
81
+ apeRouterAddress
82
+ );
83
+ farmerBalance = await underlying.balanceOf(farmer1);
84
+
85
+ console.log("farmerBalance: ");
86
+ console.log(new BigNumber(farmerBalance).toFixed());
87
+ }
88
+
89
+ before(async function() {
90
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
91
+ accounts = await web3.eth.getAccounts();
92
+
93
+ farmer1 = accounts[1];
94
+
95
+ // impersonate accounts
96
+ await impersonates([governance]);
97
+
98
+ let etherGiver = accounts[9];
99
+ await send.ether(etherGiver, governance, "100" + "000000000000000000")
100
+
101
+ await setupExternalContracts();
102
+ [controller, vault, strategy] = await setupCoreProtocol({
103
+ "existingVaultAddress": null,
104
+ "strategyArtifact": Strategy,
105
+ "underlying": underlying,
106
+ "governance": governance,
107
+ "strategyArtifactIsUpgradable": true
108
+ });
109
+
110
+ feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
111
+ let path = [banana, token1Addr, weth];
112
+ let dexes = [apeRouterAddress];
113
+ await feeForwarder.setConversionPath(path, dexes, { from: governance });
114
+
115
+ await strategy.setSellFloor(0, {from:governance});
116
+
117
+ // whale send underlying to farmers
118
+ await setupBalance();
119
+ });
120
+
121
+ describe("Happy path", function() {
122
+ it("Farmer should earn money", async function() {
123
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
124
+ await depositVault(farmer1, underlying, vault, farmerBalance);
125
+
126
+ // Using half days is to simulate how we doHardwork in the real world
127
+ let hours = 10;
128
+ let blocksPerHour = 1565*5;
129
+ let oldSharePrice;
130
+ let newSharePrice;
131
+ for (let i = 0; i < hours; i++) {
132
+ console.log("loop ", i);
133
+
134
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
135
+ await controller.doHardWork(vault.address, { from: governance });
136
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
137
+
138
+ console.log("old shareprice: ", oldSharePrice.toFixed());
139
+ console.log("new shareprice: ", newSharePrice.toFixed());
140
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
141
+
142
+ await Utils.advanceNBlock(blocksPerHour);
143
+ }
144
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
145
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
146
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
147
+
148
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
149
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
150
+
151
+ console.log("earned!");
152
+ console.log("APR:", apr*100, "%");
153
+ console.log("APY:", (apy-1)*100, "%");
154
+
155
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
156
+
157
+ });
158
+ });
159
+ });
@@ -0,0 +1,135 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ } = require("../utilities/hh-utils.js");
8
+
9
+ const addresses = require("../test-config.js");
10
+ const { send } = require("@openzeppelin/test-helpers");
11
+ const BigNumber = require("bignumber.js");
12
+ const IERC20 = artifacts.require("IERC20");
13
+
14
+ //const Strategy = artifacts.require("");
15
+ const Strategy = artifacts.require("AuraStrategyMainnet_jEUR_PAR");
16
+
17
+ // Developed and tested at blockNumber 46661610
18
+
19
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
20
+ describe("Polygon Mainnet Balancer 2EUR PAR", function() {
21
+ let accounts;
22
+
23
+ // external contracts
24
+ let underlying;
25
+
26
+ // external setup
27
+ let underlyingWhale = "0xD927cE147f098cE634301e6c4281541b1939a132";
28
+ let aura = "0x1509706a6c66CA549ff0cB464de88231DDBe213B";
29
+ let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
30
+ let jeur = "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c";
31
+ let usdc = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174";
32
+ let bal = "0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3";
33
+
34
+ // parties in the protocol
35
+ let governance;
36
+ let farmer1;
37
+
38
+ // numbers used in tests
39
+ let farmerBalance;
40
+
41
+ // Core protocol contracts
42
+ let controller;
43
+ let vault;
44
+ let strategy;
45
+
46
+ async function setupExternalContracts() {
47
+ underlying = await IERC20.at("0x513CdEE00251F39DE280d9E5f771A6eaFebCc88E");
48
+ console.log("Fetching Underlying at: ", underlying.address);
49
+ }
50
+
51
+ async function setupBalance(){
52
+ let etherGiver = accounts[9];
53
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 100e18});
54
+
55
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
56
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
57
+ }
58
+
59
+ before(async function() {
60
+ governance = addresses.Governance;
61
+ accounts = await web3.eth.getAccounts();
62
+
63
+ farmer1 = accounts[1];
64
+
65
+ // impersonate accounts
66
+ await impersonates([governance, underlyingWhale]);
67
+
68
+ let etherGiver = accounts[9];
69
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 100e18});
70
+
71
+ await setupExternalContracts();
72
+ [controller, vault, strategy] = await setupCoreProtocol({
73
+ "existingVaultAddress": "0x41f36BB5B26F2E8646E6ADC97FAA5E2844a6c842",
74
+ "announceStrategy": true,
75
+ "strategyArtifact": Strategy,
76
+ "strategyArtifactIsUpgradable": true,
77
+ "underlying": underlying,
78
+ "governance": governance,
79
+ "liquidation": [
80
+ {"uniV3": [aura, weth]},
81
+ {"uniV3": [weth, usdc, jeur]},
82
+ {"balancer": [jeur, underlying.address]},
83
+ {"uniV3": [bal, weth]},
84
+ ],
85
+ });
86
+
87
+ // whale send underlying to farmers
88
+ await setupBalance();
89
+ });
90
+
91
+ describe("Happy path", function() {
92
+ it("Farmer should earn money", async function() {
93
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
94
+ await depositVault(farmer1, underlying, vault, farmerBalance);
95
+
96
+ // Using half days is to simulate how we doHardwork in the real world
97
+ let hours = 10;
98
+ let blocksPerHour = 1565*5;
99
+ let oldSharePrice;
100
+ let newSharePrice;
101
+ for (let i = 0; i < hours; i++) {
102
+ console.log("loop ", i);
103
+
104
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
105
+ await controller.doHardWork(vault.address, { from: governance });
106
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
107
+
108
+ console.log("old shareprice: ", oldSharePrice.toFixed());
109
+ console.log("new shareprice: ", newSharePrice.toFixed());
110
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
111
+
112
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
113
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
114
+
115
+ console.log("instant APR:", apr*100, "%");
116
+ console.log("instant APY:", (apy-1)*100, "%");
117
+
118
+ await Utils.advanceNBlock(blocksPerHour);
119
+ }
120
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
121
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
122
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
123
+
124
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
125
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
126
+
127
+ console.log("earned!");
128
+ console.log("APR:", apr*100, "%");
129
+ console.log("APY:", (apy-1)*100, "%");
130
+
131
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
132
+
133
+ });
134
+ });
135
+ });