@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,147 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ addLiquidity
9
+ } = require("../utilities/hh-utils.js");
10
+
11
+ const addresses = require("../test-config.js");
12
+ const { send } = require("@openzeppelin/test-helpers");
13
+ const BigNumber = require("bignumber.js");
14
+ const IERC20 = artifacts.require("IERC20");
15
+
16
+ //const Strategy = artifacts.require("");
17
+ const Strategy = artifacts.require("QuickStrategyMainnet_iFARM_QUICK");
18
+
19
+
20
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
21
+ describe("Polygon Mainnet Quickswap iFARM/QUICK", function() {
22
+ let accounts;
23
+
24
+ // external contracts
25
+ let underlying;
26
+
27
+ // external setup
28
+ let token0Addr = "0x831753DD7087CaC61aB5644b308642cc1c33Dc13"; //quick
29
+ let token1Addr = "0xab0b2ddB9C7e440fAc8E140A89c0dbCBf2d7Bbff"; //ifarm
30
+
31
+ // parties in the protocol
32
+ let governance;
33
+ let farmer1;
34
+
35
+ // numbers used in tests
36
+ let farmerBalance;
37
+
38
+ // Core protocol contracts
39
+ let controller;
40
+ let vault;
41
+ let strategy;
42
+
43
+ async function setupExternalContracts() {
44
+ underlying = await IERC20.at("0xD7668414BfD52DE6d59E16e5f647c9761992C435");
45
+ console.log("Fetching Underlying at: ", underlying.address);
46
+ }
47
+
48
+ async function setupBalance(){
49
+ token0 = await IERC20.at(token0Addr);
50
+ token1 = await IERC20.at(token1Addr);
51
+ await swapMaticToToken (
52
+ farmer1,
53
+ [addresses.WMATIC, token0.address],
54
+ "1000" + "000000000000000000",
55
+ addresses.QuickRouter
56
+ );
57
+ farmerToken0Balance = await token0.balanceOf(farmer1);
58
+
59
+ await swapMaticToToken (
60
+ farmer1,
61
+ [addresses.WMATIC, token0.address, token1.address],
62
+ "1000" + "000000000000000000",
63
+ addresses.QuickRouter
64
+ );
65
+ farmerToken1Balance = await token1.balanceOf(farmer1);
66
+
67
+ await addLiquidity (
68
+ farmer1,
69
+ token0,
70
+ token1,
71
+ farmerToken0Balance,
72
+ farmerToken1Balance,
73
+ addresses.QuickRouter
74
+ );
75
+ farmerBalance = await underlying.balanceOf(farmer1);
76
+ console.log(new BigNumber(farmerToken0Balance).toFixed());
77
+ console.log(new BigNumber(farmerToken1Balance).toFixed());
78
+ console.log(new BigNumber(farmerBalance).toFixed());
79
+ }
80
+
81
+ before(async function() {
82
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
83
+ accounts = await web3.eth.getAccounts();
84
+
85
+ farmer1 = accounts[1];
86
+
87
+ // impersonate accounts
88
+ await impersonates([governance]);
89
+
90
+ let etherGiver = accounts[9];
91
+ await send.ether(etherGiver, governance, "100" + "000000000000000000")
92
+
93
+ await setupExternalContracts();
94
+ [controller, vault, strategy] = await setupCoreProtocol({
95
+ "existingVaultAddress": null,
96
+ "strategyArtifact": Strategy,
97
+ "underlying": underlying,
98
+ "governance": governance,
99
+ });
100
+
101
+ await strategy.setSellFloor(0, {from:governance});
102
+
103
+ // whale send underlying to farmers
104
+ await setupBalance();
105
+ });
106
+
107
+ describe("Happy path", function() {
108
+ it("Farmer should earn money", async function() {
109
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
110
+ await depositVault(farmer1, underlying, vault, farmerBalance);
111
+
112
+ // Using half days is to simulate how we doHardwork in the real world
113
+ // The rewards are time based and Hardhat propagates the chain with a block time of 16s
114
+ // So we have 225 blocks per hour, 2700 blocks per 12 hours.
115
+ let hours = 10;
116
+ let blocksPerHour = 2700;
117
+ let oldSharePrice;
118
+ let newSharePrice;
119
+ for (let i = 0; i < hours; i++) {
120
+ console.log("loop ", i);
121
+
122
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
123
+ await controller.doHardWork(vault.address, { from: governance });
124
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
125
+
126
+ console.log("old shareprice: ", oldSharePrice.toFixed());
127
+ console.log("new shareprice: ", newSharePrice.toFixed());
128
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
129
+
130
+ await Utils.advanceNBlock(blocksPerHour);
131
+ }
132
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
133
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
134
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
135
+
136
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))*365;
137
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))+1)**365;
138
+
139
+ console.log("earned!");
140
+ console.log("APR:", apr*100, "%");
141
+ console.log("APY:", (apy-1)*100, "%");
142
+
143
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
144
+
145
+ });
146
+ });
147
+ });
@@ -0,0 +1,145 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ addLiquidity,
9
+ } = require("../utilities/hh-utils.js");
10
+
11
+ const addresses = require("../test-config.js");
12
+ const { send } = require("@openzeppelin/test-helpers");
13
+ const BigNumber = require("bignumber.js");
14
+ const IERC20 = artifacts.require("IERC20");
15
+
16
+ const Strategy = artifacts.require("QuickDualRewardStrategyMainnet_MATIC_USDC");
17
+
18
+ //This test was developed at blockNumber 29057700
19
+
20
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
21
+ describe("Polygon Mainnet Quickswap MATIC/USDC", function () {
22
+ let accounts;
23
+
24
+ // external contracts
25
+ let underlying;
26
+
27
+ // external setup
28
+ let underlyingWhale = "0x27C7e71AEF0dc5cbcF7af511f3aBAC8eE6845685";
29
+
30
+ // parties in the protocol
31
+ let governance;
32
+ let farmer1;
33
+
34
+ // numbers used in tests
35
+ let farmerBalance;
36
+
37
+ // Core protocol contracts
38
+ let controller;
39
+ let vault;
40
+ let strategy;
41
+
42
+ async function setupExternalContracts() {
43
+ underlying = await IERC20.at("0x6e7a5FAFcec6BB1e78bAE2A1F0B612012BF14827");
44
+ console.log("Fetching Underlying at: ", underlying.address);
45
+ }
46
+
47
+ async function setupBalance() {
48
+ let etherGiver = accounts[9];
49
+ await send.ether(etherGiver, underlyingWhale, "1" + "000000000000000000");
50
+
51
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
52
+ await underlying.transfer(farmer1, farmerBalance, {
53
+ from: underlyingWhale,
54
+ });
55
+ }
56
+
57
+ before(async function () {
58
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
59
+ accounts = await web3.eth.getAccounts();
60
+
61
+ farmer1 = accounts[1];
62
+
63
+ // impersonate accounts
64
+ await impersonates([governance, underlyingWhale]);
65
+
66
+ let etherGiver = accounts[9];
67
+ await send.ether(etherGiver, governance, "100" + "000000000000000000");
68
+
69
+ await setupExternalContracts();
70
+ [controller, vault, strategy] = await setupCoreProtocol({
71
+ existingVaultAddress: null,
72
+ strategyArtifact: Strategy,
73
+ strategyArtifactIsUpgradable: true,
74
+ underlying: underlying,
75
+ governance: governance,
76
+ });
77
+
78
+ // whale send underlying to farmers
79
+ await setupBalance();
80
+ });
81
+
82
+ describe("Happy path", function () {
83
+ it("Farmer should earn money", async function () {
84
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
85
+ await depositVault(farmer1, underlying, vault, farmerBalance);
86
+
87
+ // Using half days is to simulate how we doHardwork in the real world
88
+ let hours = 10;
89
+ let blocksPerHour = 1565;
90
+ let oldSharePrice;
91
+ let newSharePrice;
92
+ for (let i = 0; i < hours; i++) {
93
+ console.log("loop ", i);
94
+
95
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
96
+ await controller.doHardWork(vault.address, { from: governance });
97
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
98
+
99
+ console.log("old shareprice: ", oldSharePrice.toFixed());
100
+ console.log("new shareprice: ", newSharePrice.toFixed());
101
+ console.log(
102
+ "growth: ",
103
+ newSharePrice.toFixed() / oldSharePrice.toFixed()
104
+ );
105
+
106
+ apr =
107
+ (newSharePrice.toFixed() / oldSharePrice.toFixed() - 1) *
108
+ (24 / (blocksPerHour / 1565)) *
109
+ 365;
110
+ apy =
111
+ ((newSharePrice.toFixed() / oldSharePrice.toFixed() - 1) *
112
+ (24 / (blocksPerHour / 1565)) +
113
+ 1) **
114
+ 365;
115
+
116
+ console.log("instant APR:", apr * 100, "%");
117
+ console.log("instant APY:", (apy - 1) * 100, "%");
118
+
119
+ await Utils.advanceNBlock(blocksPerHour);
120
+ }
121
+ await vault.withdraw(
122
+ new BigNumber(await vault.balanceOf(farmer1)).toFixed(),
123
+ { from: farmer1 }
124
+ );
125
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
126
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
127
+
128
+ apr =
129
+ (farmerNewBalance.toFixed() / farmerOldBalance.toFixed() - 1) *
130
+ (24 / ((blocksPerHour * hours) / 1565)) *
131
+ 365;
132
+ apy =
133
+ ((farmerNewBalance.toFixed() / farmerOldBalance.toFixed() - 1) *
134
+ (24 / ((blocksPerHour * hours) / 1565)) +
135
+ 1) **
136
+ 365;
137
+
138
+ console.log("earned!");
139
+ console.log("APR:", apr * 100, "%");
140
+ console.log("APY:", (apy - 1) * 100, "%");
141
+
142
+ await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
143
+ });
144
+ });
145
+ });
@@ -0,0 +1,124 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ addLiquidity
9
+ } = require("../utilities/hh-utils.js");
10
+
11
+ const addresses = require("../test-config.js");
12
+ const { send } = require("@openzeppelin/test-helpers");
13
+ const BigNumber = require("bignumber.js");
14
+ const IERC20 = artifacts.require("IERC20");
15
+
16
+ const Strategy = artifacts.require("QuickDualRewardStrategyMainnet_PSP_MATIC");
17
+
18
+ //This test was developed at blockNumber 21935800
19
+
20
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
21
+ describe("Polygon Mainnet Quickswap PSP/MATIC", function() {
22
+ let accounts;
23
+
24
+ // external contracts
25
+ let underlying;
26
+
27
+ // external setup
28
+ let underlyingWhale = "0x909fdF2FEeA01276081253e2486DFbC81aB491d4";
29
+
30
+ // parties in the protocol
31
+ let governance;
32
+ let farmer1;
33
+
34
+ // numbers used in tests
35
+ let farmerBalance;
36
+
37
+ // Core protocol contracts
38
+ let controller;
39
+ let vault;
40
+ let strategy;
41
+
42
+ async function setupExternalContracts() {
43
+ underlying = await IERC20.at("0x7AfC060acCA7ec6985d982dD85cC62B111CAc7a7");
44
+ console.log("Fetching Underlying at: ", underlying.address);
45
+ }
46
+
47
+ async function setupBalance(){
48
+ let etherGiver = accounts[9];
49
+ await send.ether(etherGiver, underlyingWhale, "1" + "000000000000000000");
50
+
51
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
52
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
53
+ }
54
+
55
+ before(async function() {
56
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
57
+ accounts = await web3.eth.getAccounts();
58
+
59
+ farmer1 = accounts[1];
60
+
61
+ // impersonate accounts
62
+ await impersonates([governance, underlyingWhale]);
63
+
64
+ let etherGiver = accounts[9];
65
+ await send.ether(etherGiver, governance, "100" + "000000000000000000")
66
+
67
+ await setupExternalContracts();
68
+ [controller, vault, strategy] = await setupCoreProtocol({
69
+ "existingVaultAddress": null,
70
+ "strategyArtifact": Strategy,
71
+ "strategyArtifactIsUpgradable": true,
72
+ "underlying": underlying,
73
+ "governance": governance,
74
+ });
75
+
76
+ // whale send underlying to farmers
77
+ await setupBalance();
78
+ });
79
+
80
+ describe("Happy path", function() {
81
+ it("Farmer should earn money", async function() {
82
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
83
+ await depositVault(farmer1, underlying, vault, farmerBalance);
84
+
85
+ // Using half days is to simulate how we doHardwork in the real world
86
+ let hours = 10;
87
+ let blocksPerHour = 1565;
88
+ let oldSharePrice;
89
+ let newSharePrice;
90
+ for (let i = 0; i < hours; i++) {
91
+ console.log("loop ", i);
92
+
93
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
94
+ await controller.doHardWork(vault.address, { from: governance });
95
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
96
+
97
+ console.log("old shareprice: ", oldSharePrice.toFixed());
98
+ console.log("new shareprice: ", newSharePrice.toFixed());
99
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
100
+
101
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
102
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
103
+
104
+ console.log("instant APR:", apr*100, "%");
105
+ console.log("instant APY:", (apy-1)*100, "%");
106
+
107
+ await Utils.advanceNBlock(blocksPerHour);
108
+ }
109
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
110
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
111
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
112
+
113
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
114
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
115
+
116
+ console.log("earned!");
117
+ console.log("APR:", apr*100, "%");
118
+ console.log("APY:", (apy-1)*100, "%");
119
+
120
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
121
+
122
+ });
123
+ });
124
+ });
@@ -0,0 +1,145 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ addLiquidity
9
+ } = require("../utilities/hh-utils.js");
10
+
11
+ const addresses = require("../test-config.js");
12
+ const { send } = require("@openzeppelin/test-helpers");
13
+ const BigNumber = require("bignumber.js");
14
+ const IERC20 = artifacts.require("IERC20");
15
+
16
+ //const Strategy = artifacts.require("");
17
+ const Strategy = artifacts.require("QuickStrategyMainnet_WBTC_ETH");
18
+
19
+
20
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
21
+ describe("Polygon Mainnet Quickswap WBTC/ETH", function() {
22
+ let accounts;
23
+
24
+ // external contracts
25
+ let underlying;
26
+
27
+ // external setup
28
+ let token0Addr = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619"; //eth
29
+ let token1Addr = "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6"; //wbtc
30
+
31
+ // parties in the protocol
32
+ let governance;
33
+ let farmer1;
34
+
35
+ // numbers used in tests
36
+ let farmerBalance;
37
+
38
+ // Core protocol contracts
39
+ let controller;
40
+ let vault;
41
+ let strategy;
42
+
43
+ async function setupExternalContracts() {
44
+ underlying = await IERC20.at("0xdC9232E2Df177d7a12FdFf6EcBAb114E2231198D");
45
+ console.log("Fetching Underlying at: ", underlying.address);
46
+ }
47
+
48
+ async function setupBalance(){
49
+ token0 = await IERC20.at(token0Addr);
50
+ token1 = await IERC20.at(token1Addr);
51
+ await swapMaticToToken (
52
+ farmer1,
53
+ [addresses.WMATIC, token0.address],
54
+ "1000" + "000000000000000000",
55
+ addresses.QuickRouter
56
+ );
57
+ farmerToken0Balance = await token0.balanceOf(farmer1);
58
+
59
+ await swapMaticToToken (
60
+ farmer1,
61
+ [addresses.WMATIC, token0.address, token1.address],
62
+ "1000" + "000000000000000000",
63
+ addresses.QuickRouter
64
+ );
65
+ farmerToken1Balance = await token1.balanceOf(farmer1);
66
+
67
+ await addLiquidity (
68
+ farmer1,
69
+ token0,
70
+ token1,
71
+ farmerToken0Balance,
72
+ farmerToken1Balance,
73
+ addresses.QuickRouter
74
+ );
75
+ farmerBalance = await underlying.balanceOf(farmer1);
76
+ console.log(new BigNumber(farmerBalance).toFixed());
77
+ }
78
+
79
+ before(async function() {
80
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
81
+ accounts = await web3.eth.getAccounts();
82
+
83
+ farmer1 = accounts[1];
84
+
85
+ // impersonate accounts
86
+ await impersonates([governance]);
87
+
88
+ let etherGiver = accounts[9];
89
+ await send.ether(etherGiver, governance, "100" + "000000000000000000")
90
+
91
+ await setupExternalContracts();
92
+ [controller, vault, strategy] = await setupCoreProtocol({
93
+ "existingVaultAddress": null,
94
+ "strategyArtifact": Strategy,
95
+ "underlying": underlying,
96
+ "governance": governance,
97
+ });
98
+
99
+ await strategy.setSellFloor(0, {from:governance});
100
+
101
+ // whale send underlying to farmers
102
+ await setupBalance();
103
+ });
104
+
105
+ describe("Happy path", function() {
106
+ it("Farmer should earn money", async function() {
107
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
108
+ await depositVault(farmer1, underlying, vault, farmerBalance);
109
+
110
+ // Using half days is to simulate how we doHardwork in the real world
111
+ // The rewards are time based and Hardhat propagates the chain with a block time of 16s
112
+ // So we have 225 blocks per hour, 2700 blocks per 12 hours.
113
+ let hours = 10;
114
+ let blocksPerHour = 2700;
115
+ let oldSharePrice;
116
+ let newSharePrice;
117
+ for (let i = 0; i < hours; i++) {
118
+ console.log("loop ", i);
119
+
120
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
121
+ await controller.doHardWork(vault.address, { from: governance });
122
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
123
+
124
+ console.log("old shareprice: ", oldSharePrice.toFixed());
125
+ console.log("new shareprice: ", newSharePrice.toFixed());
126
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
127
+
128
+ await Utils.advanceNBlock(blocksPerHour);
129
+ }
130
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
131
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
132
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
133
+
134
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))*365;
135
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))+1)**365;
136
+
137
+ console.log("earned!");
138
+ console.log("APR:", apr*100, "%");
139
+ console.log("APY:", (apy-1)*100, "%");
140
+
141
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
142
+
143
+ });
144
+ });
145
+ });