@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,127 @@
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("CompoundStrategyMainnet_USDC");
16
+
17
+ // Developed and tested at blockNumber 64590290
18
+
19
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
20
+ describe("Arbitrum Mainnet Compound USDC", function() {
21
+ let accounts;
22
+
23
+ // external contracts
24
+ let underlying;
25
+
26
+ // external setup
27
+ let underlyingWhale = "0x858F99B06eF1d116FF7A8306F504888584AAa83d";
28
+ let comp = "0x8505b9d2254A7Ae468c0E9dd10Ccea3A837aef5c";
29
+ let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
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("0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174");
45
+ console.log("Fetching Underlying at: ", underlying.address);
46
+ }
47
+
48
+ async function setupBalance(){
49
+ let etherGiver = accounts[9];
50
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
51
+
52
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
53
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
54
+ }
55
+
56
+ before(async function() {
57
+ governance = addresses.Governance;
58
+ accounts = await web3.eth.getAccounts();
59
+
60
+ farmer1 = accounts[1];
61
+
62
+ // impersonate accounts
63
+ await impersonates([governance, underlyingWhale]);
64
+
65
+ let etherGiver = accounts[9];
66
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
67
+
68
+ await setupExternalContracts();
69
+ [controller, vault, strategy] = await setupCoreProtocol({
70
+ "existingVaultAddress": "0x60d2cEb7F8d323414a1B927Ee2D9A2A2A54A9824",
71
+ "announceStrategy": true,
72
+ "strategyArtifact": Strategy,
73
+ "strategyArtifactIsUpgradable": true,
74
+ "underlying": underlying,
75
+ "governance": governance,
76
+ "liquidation": [{"uniV3": [comp, underlying.address, weth]}, {"uniV3": [comp, underlying.address]}]
77
+ });
78
+
79
+ // whale send underlying to farmers
80
+ await setupBalance();
81
+ });
82
+
83
+ describe("Happy path", function() {
84
+ it("Farmer should earn money", async function() {
85
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
86
+ await depositVault(farmer1, underlying, vault, farmerBalance);
87
+
88
+ let hours = 10;
89
+ let blocksPerHour = 3600;
90
+ let oldSharePrice;
91
+ let newSharePrice;
92
+
93
+ for (let i = 0; i < hours; i++) {
94
+ console.log("loop ", i);
95
+
96
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
97
+ await controller.doHardWork(vault.address, { from: governance });
98
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
99
+
100
+ console.log("old shareprice: ", oldSharePrice.toFixed());
101
+ console.log("new shareprice: ", newSharePrice.toFixed());
102
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
103
+
104
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))*365;
105
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))+1)**365;
106
+
107
+ console.log("instant APR:", apr*100, "%");
108
+ console.log("instant APY:", (apy-1)*100, "%");
109
+
110
+ await Utils.advanceNBlock(blocksPerHour);
111
+ }
112
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
113
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
114
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
115
+
116
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))*365;
117
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))+1)**365;
118
+
119
+ console.log("earned!");
120
+ console.log("APR:", apr*100, "%");
121
+ console.log("APY:", (apy-1)*100, "%");
122
+
123
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
124
+
125
+ });
126
+ });
127
+ });
@@ -0,0 +1,129 @@
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("CompoundStrategyMainnet_USDT");
16
+
17
+ // Developed and tested at blockNumber 64590770
18
+
19
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
20
+ describe("Arbitrum Mainnet Compound USDT", function() {
21
+ let accounts;
22
+
23
+ // external contracts
24
+ let underlying;
25
+
26
+ // external setup
27
+ let underlyingWhale = "0x010C01cf5a9ddb7D14df0900572d998Cad65E64D";
28
+ let comp = "0x8505b9d2254A7Ae468c0E9dd10Ccea3A837aef5c";
29
+ let usdc = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174";
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("0xc2132D05D31c914a87C6611C10748AEb04B58e8F");
45
+ console.log("Fetching Underlying at: ", underlying.address);
46
+ }
47
+
48
+ async function setupBalance(){
49
+ let etherGiver = accounts[9];
50
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
51
+
52
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
53
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
54
+ }
55
+
56
+ before(async function() {
57
+ governance = addresses.Governance;
58
+ accounts = await web3.eth.getAccounts();
59
+
60
+ farmer1 = accounts[1];
61
+
62
+ // impersonate accounts
63
+ await impersonates([governance, underlyingWhale]);
64
+
65
+ let etherGiver = accounts[9];
66
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
67
+
68
+ await setupExternalContracts();
69
+ [controller, vault, strategy] = await setupCoreProtocol({
70
+ "existingVaultAddress": null,
71
+ "strategyArtifact": Strategy,
72
+ "strategyArtifactIsUpgradable": true,
73
+ "underlying": underlying,
74
+ "governance": governance,
75
+ "liquidation": [
76
+ {"uniV3": [comp, usdc, underlying.address]},
77
+ // {"uniV3": [usdc, underlying.address]},
78
+ ]
79
+ });
80
+
81
+ // whale send underlying to farmers
82
+ await setupBalance();
83
+ });
84
+
85
+ describe("Happy path", function() {
86
+ it("Farmer should earn money", async function() {
87
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
88
+ await depositVault(farmer1, underlying, vault, farmerBalance);
89
+
90
+ let hours = 10;
91
+ let blocksPerHour = 3600;
92
+ let oldSharePrice;
93
+ let newSharePrice;
94
+
95
+ for (let i = 0; i < hours; i++) {
96
+ console.log("loop ", i);
97
+
98
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
99
+ await controller.doHardWork(vault.address, { from: governance });
100
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
101
+
102
+ console.log("old shareprice: ", oldSharePrice.toFixed());
103
+ console.log("new shareprice: ", newSharePrice.toFixed());
104
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
105
+
106
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))*365;
107
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))+1)**365;
108
+
109
+ console.log("instant APR:", apr*100, "%");
110
+ console.log("instant APY:", (apy-1)*100, "%");
111
+
112
+ await Utils.advanceNBlock(blocksPerHour);
113
+ }
114
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
115
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
116
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
117
+
118
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))*365;
119
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))+1)**365;
120
+
121
+ console.log("earned!");
122
+ console.log("APR:", apr*100, "%");
123
+ console.log("APY:", (apy-1)*100, "%");
124
+
125
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
126
+
127
+ });
128
+ });
129
+ });
@@ -0,0 +1,136 @@
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 BigNumber = require("bignumber.js");
11
+ const IERC20 = artifacts.require("IERC20");
12
+
13
+ //const Strategy = artifacts.require("");
14
+ const Strategy = artifacts.require("CompoundBlueStrategyMainnet_ETH");
15
+
16
+ // Developed and tested at blockNumber 69281150
17
+
18
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
19
+ describe("Arbitrum Mainnet Compound Morpho ETH", function() {
20
+ let accounts;
21
+
22
+ // external contracts
23
+ let underlying;
24
+
25
+ // external setup
26
+ let underlyingWhale = "0x231E59DB4fe9d7316617E0d2853f9a0f8A9bcBfc";
27
+ let comp = "0x8505b9d2254A7Ae468c0E9dd10Ccea3A837aef5c";
28
+ let wpol = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
29
+ let compToken;
30
+ let wpolToken;
31
+ let compWhale = "0x95082939e1644c0ec25992BC9b6C4395e1Bf146F";
32
+ let wpolWhale = "0x1Ac4C4Cb73CaaB3A6433509B5CC16b73383c18f7";
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("0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619");
48
+ console.log("Fetching Underlying at: ", underlying.address);
49
+ compToken = await IERC20.at(comp);
50
+ wpolToken = await IERC20.at(wpol);
51
+ }
52
+
53
+ async function setupBalance(){
54
+ let etherGiver = accounts[9];
55
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
56
+ await web3.eth.sendTransaction({ from: etherGiver, to: compWhale, value: 10e18});
57
+ await web3.eth.sendTransaction({ from: etherGiver, to: wpolWhale, value: 10e18});
58
+
59
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
60
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
61
+ }
62
+
63
+ before(async function() {
64
+ governance = addresses.Governance;
65
+ accounts = await web3.eth.getAccounts();
66
+
67
+ farmer1 = accounts[1];
68
+
69
+ // impersonate accounts
70
+ await impersonates([governance, underlyingWhale, compWhale, wpolWhale]);
71
+
72
+ let etherGiver = accounts[9];
73
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
74
+
75
+ await setupExternalContracts();
76
+ [controller, vault, strategy] = await setupCoreProtocol({
77
+ "existingVaultAddress": null,
78
+ "strategyArtifact": Strategy,
79
+ "strategyArtifactIsUpgradable": true,
80
+ "underlying": underlying,
81
+ "governance": governance,
82
+ // "liquidation": [{"uniV3": [comp, underlying.address, weth]}, {"uniV3": [comp, underlying.address]}]
83
+ });
84
+
85
+ // whale send underlying to farmers
86
+ await setupBalance();
87
+ });
88
+
89
+ describe("Happy path", function() {
90
+ it("Farmer should earn money", async function() {
91
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
92
+ await depositVault(farmer1, underlying, vault, farmerBalance);
93
+
94
+ let hours = 10;
95
+ let blocksPerHour = 3600;
96
+ let oldSharePrice;
97
+ let newSharePrice;
98
+
99
+ for (let i = 0; i < hours; i++) {
100
+ console.log("loop ", i);
101
+
102
+ await compToken.transfer(strategy.address, new BigNumber(1e17), {from: compWhale});
103
+ await wpolToken.transfer(strategy.address, new BigNumber(2e19), {from: wpolWhale});
104
+
105
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
106
+ await controller.doHardWork(vault.address, { from: governance });
107
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
108
+
109
+ console.log("old shareprice: ", oldSharePrice.toFixed());
110
+ console.log("new shareprice: ", newSharePrice.toFixed());
111
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
112
+
113
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))*365;
114
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))+1)**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(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
122
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
123
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
124
+
125
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))*365;
126
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))+1)**365;
127
+
128
+ console.log("earned!");
129
+ console.log("APR:", apr*100, "%");
130
+ console.log("APY:", (apy-1)*100, "%");
131
+
132
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
133
+
134
+ });
135
+ });
136
+ });
@@ -0,0 +1,136 @@
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 BigNumber = require("bignumber.js");
11
+ const IERC20 = artifacts.require("IERC20");
12
+
13
+ //const Strategy = artifacts.require("");
14
+ const Strategy = artifacts.require("CompoundBlueStrategyMainnet_USDC");
15
+
16
+ // Developed and tested at blockNumber 69281150
17
+
18
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
19
+ describe("Arbitrum Mainnet Compound Morpho USDC", function() {
20
+ let accounts;
21
+
22
+ // external contracts
23
+ let underlying;
24
+
25
+ // external setup
26
+ let underlyingWhale = "0x264bd8291fAE1D75DB2c5F573b07faA6715997B5";
27
+ let comp = "0x8505b9d2254A7Ae468c0E9dd10Ccea3A837aef5c";
28
+ let wpol = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
29
+ let compToken;
30
+ let wpolToken;
31
+ let compWhale = "0x95082939e1644c0ec25992BC9b6C4395e1Bf146F";
32
+ let wpolWhale = "0x1Ac4C4Cb73CaaB3A6433509B5CC16b73383c18f7";
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("0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359");
48
+ console.log("Fetching Underlying at: ", underlying.address);
49
+ compToken = await IERC20.at(comp);
50
+ wpolToken = await IERC20.at(wpol);
51
+ }
52
+
53
+ async function setupBalance(){
54
+ let etherGiver = accounts[9];
55
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
56
+ await web3.eth.sendTransaction({ from: etherGiver, to: compWhale, value: 10e18});
57
+ await web3.eth.sendTransaction({ from: etherGiver, to: wpolWhale, value: 10e18});
58
+
59
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
60
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
61
+ }
62
+
63
+ before(async function() {
64
+ governance = addresses.Governance;
65
+ accounts = await web3.eth.getAccounts();
66
+
67
+ farmer1 = accounts[1];
68
+
69
+ // impersonate accounts
70
+ await impersonates([governance, underlyingWhale, compWhale, wpolWhale]);
71
+
72
+ let etherGiver = accounts[9];
73
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
74
+
75
+ await setupExternalContracts();
76
+ [controller, vault, strategy] = await setupCoreProtocol({
77
+ "existingVaultAddress": null,
78
+ "strategyArtifact": Strategy,
79
+ "strategyArtifactIsUpgradable": true,
80
+ "underlying": underlying,
81
+ "governance": governance,
82
+ // "liquidation": [{"uniV3": [comp, underlying.address, weth]}, {"uniV3": [comp, underlying.address]}]
83
+ });
84
+
85
+ // whale send underlying to farmers
86
+ await setupBalance();
87
+ });
88
+
89
+ describe("Happy path", function() {
90
+ it("Farmer should earn money", async function() {
91
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
92
+ await depositVault(farmer1, underlying, vault, farmerBalance);
93
+
94
+ let hours = 10;
95
+ let blocksPerHour = 3600;
96
+ let oldSharePrice;
97
+ let newSharePrice;
98
+
99
+ for (let i = 0; i < hours; i++) {
100
+ console.log("loop ", i);
101
+
102
+ await compToken.transfer(strategy.address, new BigNumber(1e17), {from: compWhale});
103
+ await wpolToken.transfer(strategy.address, new BigNumber(2e19), {from: wpolWhale});
104
+
105
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
106
+ await controller.doHardWork(vault.address, { from: governance });
107
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
108
+
109
+ console.log("old shareprice: ", oldSharePrice.toFixed());
110
+ console.log("new shareprice: ", newSharePrice.toFixed());
111
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
112
+
113
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))*365;
114
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))+1)**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(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
122
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
123
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
124
+
125
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))*365;
126
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))+1)**365;
127
+
128
+ console.log("earned!");
129
+ console.log("APR:", apr*100, "%");
130
+ console.log("APY:", (apy-1)*100, "%");
131
+
132
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
133
+
134
+ });
135
+ });
136
+ });
@@ -0,0 +1,136 @@
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 BigNumber = require("bignumber.js");
11
+ const IERC20 = artifacts.require("IERC20");
12
+
13
+ //const Strategy = artifacts.require("");
14
+ const Strategy = artifacts.require("CompoundBlueStrategyMainnet_USDT");
15
+
16
+ // Developed and tested at blockNumber 69281150
17
+
18
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
19
+ describe("Arbitrum Mainnet Compound Morpho USDT", function() {
20
+ let accounts;
21
+
22
+ // external contracts
23
+ let underlying;
24
+
25
+ // external setup
26
+ let underlyingWhale = "0x5e64cad8cF42F9d499A62a5990b428b2C36F322A";
27
+ let comp = "0x8505b9d2254A7Ae468c0E9dd10Ccea3A837aef5c";
28
+ let wpol = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
29
+ let compToken;
30
+ let wpolToken;
31
+ let compWhale = "0x95082939e1644c0ec25992BC9b6C4395e1Bf146F";
32
+ let wpolWhale = "0x1Ac4C4Cb73CaaB3A6433509B5CC16b73383c18f7";
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("0xc2132D05D31c914a87C6611C10748AEb04B58e8F");
48
+ console.log("Fetching Underlying at: ", underlying.address);
49
+ compToken = await IERC20.at(comp);
50
+ wpolToken = await IERC20.at(wpol);
51
+ }
52
+
53
+ async function setupBalance(){
54
+ let etherGiver = accounts[9];
55
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
56
+ await web3.eth.sendTransaction({ from: etherGiver, to: compWhale, value: 10e18});
57
+ await web3.eth.sendTransaction({ from: etherGiver, to: wpolWhale, value: 10e18});
58
+
59
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
60
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
61
+ }
62
+
63
+ before(async function() {
64
+ governance = addresses.Governance;
65
+ accounts = await web3.eth.getAccounts();
66
+
67
+ farmer1 = accounts[1];
68
+
69
+ // impersonate accounts
70
+ await impersonates([governance, underlyingWhale, compWhale, wpolWhale]);
71
+
72
+ let etherGiver = accounts[9];
73
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
74
+
75
+ await setupExternalContracts();
76
+ [controller, vault, strategy] = await setupCoreProtocol({
77
+ "existingVaultAddress": null,
78
+ "strategyArtifact": Strategy,
79
+ "strategyArtifactIsUpgradable": true,
80
+ "underlying": underlying,
81
+ "governance": governance,
82
+ // "liquidation": [{"uniV3": [comp, underlying.address, weth]}, {"uniV3": [comp, underlying.address]}]
83
+ });
84
+
85
+ // whale send underlying to farmers
86
+ await setupBalance();
87
+ });
88
+
89
+ describe("Happy path", function() {
90
+ it("Farmer should earn money", async function() {
91
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
92
+ await depositVault(farmer1, underlying, vault, farmerBalance);
93
+
94
+ let hours = 10;
95
+ let blocksPerHour = 3600;
96
+ let oldSharePrice;
97
+ let newSharePrice;
98
+
99
+ for (let i = 0; i < hours; i++) {
100
+ console.log("loop ", i);
101
+
102
+ await compToken.transfer(strategy.address, new BigNumber(1e17), {from: compWhale});
103
+ await wpolToken.transfer(strategy.address, new BigNumber(2e19), {from: wpolWhale});
104
+
105
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
106
+ await controller.doHardWork(vault.address, { from: governance });
107
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
108
+
109
+ console.log("old shareprice: ", oldSharePrice.toFixed());
110
+ console.log("new shareprice: ", newSharePrice.toFixed());
111
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
112
+
113
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))*365;
114
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))+1)**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(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
122
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
123
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
124
+
125
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))*365;
126
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))+1)**365;
127
+
128
+ console.log("earned!");
129
+ console.log("APR:", apr*100, "%");
130
+ console.log("APY:", (apy-1)*100, "%");
131
+
132
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
133
+
134
+ });
135
+ });
136
+ });