@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,123 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ addLiquidity,
9
+ wrapMATIC
10
+ } = require("../utilities/hh-utils.js");
11
+
12
+ const addresses = require("../test-config.js");
13
+ const { send } = require("@openzeppelin/test-helpers");
14
+ const BigNumber = require("bignumber.js");
15
+ const IERC20 = artifacts.require("IERC20");
16
+
17
+ //const Strategy = artifacts.require("");
18
+ const Strategy = artifacts.require("BalancerStrategyV2Mainnet_USDC_WETH");
19
+
20
+ // Developed and tested at blockNumber 28790300
21
+
22
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
23
+ describe("Polygon Mainnet Balancer USDC WETH V2", function() {
24
+ let accounts;
25
+
26
+ // external contracts
27
+ let underlying;
28
+ let bal;
29
+ let wmatic;
30
+
31
+ // external setup
32
+ let underlyingWhale = "0xA55EdeE4c007c31112674350800D95614Ee69814";
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("0x10f21C9bD8128a29Aa785Ab2dE0d044DCdd79436");
48
+ console.log("Fetching Underlying at: ", underlying.address);
49
+ }
50
+
51
+ async function setupBalance(){
52
+ let etherGiver = accounts[9];
53
+ await send.ether(etherGiver, underlyingWhale, "1" + "000000000000000000");
54
+
55
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
56
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
57
+ }
58
+
59
+ before(async function() {
60
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
61
+ accounts = await web3.eth.getAccounts();
62
+
63
+ farmer1 = accounts[1];
64
+
65
+ // impersonate accounts
66
+ await impersonates([governance, underlyingWhale]);
67
+
68
+ let etherGiver = accounts[9];
69
+ await send.ether(etherGiver, governance, "100" + "000000000000000000");
70
+
71
+ await setupExternalContracts();
72
+ [controller, vault, strategy] = await setupCoreProtocol({
73
+ "existingVaultAddress": "0x264B17DF8a79bFa830C1A94B90876CD3b0784b30",
74
+ "strategyArtifact": Strategy,
75
+ "strategyArtifactIsUpgradable": true,
76
+ "announceStrategy": true,
77
+ "underlying": underlying,
78
+ "governance": governance,
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
+ // Using half days is to simulate how we doHardwork in the real world
91
+ let hours = 10;
92
+ let blocksPerHour = 1565*5;
93
+ let oldSharePrice;
94
+ let newSharePrice;
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
+ await Utils.advanceNBlock(blocksPerHour);
107
+ }
108
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
109
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
110
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
111
+
112
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
113
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
114
+
115
+ console.log("earned!");
116
+ console.log("APR:", apr*100, "%");
117
+ console.log("APY:", (apy-1)*100, "%");
118
+
119
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
120
+
121
+ });
122
+ });
123
+ });
@@ -0,0 +1,123 @@
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("BalancerStrategyV3Mainnet_WBTC_ETH_USDC");
16
+
17
+ // Developed and tested at blockNumber 43206470
18
+
19
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
20
+ describe("Polygon Mainnet Balancer WBTC-ETH-USDC", function() {
21
+ let accounts;
22
+
23
+ // external contracts
24
+ let underlying;
25
+
26
+ // external setup
27
+ let underlyingWhale = "0x510d0E4DeF20c6BFd84f080BC424Bac5C66941f4";
28
+
29
+ // parties in the protocol
30
+ let governance;
31
+ let farmer1;
32
+
33
+ // numbers used in tests
34
+ let farmerBalance;
35
+
36
+ // Core protocol contracts
37
+ let controller;
38
+ let vault;
39
+ let strategy;
40
+
41
+ async function setupExternalContracts() {
42
+ underlying = await IERC20.at("0x03cD191F589d12b0582a99808cf19851E468E6B5");
43
+ console.log("Fetching Underlying at: ", underlying.address);
44
+ }
45
+
46
+ async function setupBalance(){
47
+ let etherGiver = accounts[9];
48
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 100e18});
49
+
50
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
51
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
52
+ }
53
+
54
+ before(async function() {
55
+ governance = addresses.Governance;
56
+ accounts = await web3.eth.getAccounts();
57
+
58
+ farmer1 = accounts[1];
59
+
60
+ // impersonate accounts
61
+ await impersonates([governance, underlyingWhale]);
62
+
63
+ let etherGiver = accounts[9];
64
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 100e18});
65
+
66
+ await setupExternalContracts();
67
+ [controller, vault, strategy] = await setupCoreProtocol({
68
+ "existingVaultAddress": null,
69
+ "strategyArtifact": Strategy,
70
+ "strategyArtifactIsUpgradable": true,
71
+ "underlying": underlying,
72
+ "governance": governance,
73
+ });
74
+
75
+ // whale send underlying to farmers
76
+ await setupBalance();
77
+ });
78
+
79
+ describe("Happy path", function() {
80
+ it("Farmer should earn money", async function() {
81
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
82
+ await depositVault(farmer1, underlying, vault, farmerBalance);
83
+
84
+ // Using half days is to simulate how we doHardwork in the real world
85
+ let hours = 10;
86
+ let blocksPerHour = 1565*5;
87
+ let oldSharePrice;
88
+ let newSharePrice;
89
+ for (let i = 0; i < hours; i++) {
90
+ console.log("loop ", i);
91
+
92
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
93
+ await controller.doHardWork(vault.address, { from: governance });
94
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
95
+
96
+ console.log("old shareprice: ", oldSharePrice.toFixed());
97
+ console.log("new shareprice: ", newSharePrice.toFixed());
98
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
99
+
100
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
101
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
102
+
103
+ console.log("instant APR:", apr*100, "%");
104
+ console.log("instant APY:", (apy-1)*100, "%");
105
+
106
+ await Utils.advanceNBlock(blocksPerHour);
107
+ }
108
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
109
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
110
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
111
+
112
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
113
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
114
+
115
+ console.log("earned!");
116
+ console.log("APR:", apr*100, "%");
117
+ console.log("APY:", (apy-1)*100, "%");
118
+
119
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
120
+
121
+ });
122
+ });
123
+ });
@@ -0,0 +1,136 @@
1
+ // Utilities
2
+ const Utils = require("../utilities/Utils.js");
3
+ const {
4
+ impersonates,
5
+ setupCoreProtocol,
6
+ depositVault,
7
+ swapMaticToToken,
8
+ addLiquidity,
9
+ wrapMATIC
10
+ } = require("../utilities/hh-utils.js");
11
+
12
+ const addresses = require("../test-config.js");
13
+ const { send } = require("@openzeppelin/test-helpers");
14
+ const BigNumber = require("bignumber.js");
15
+ const IERC20 = artifacts.require("IERC20");
16
+ const WMATIC = artifacts.require("WMATIC");
17
+
18
+ //const Strategy = artifacts.require("");
19
+ const Strategy = artifacts.require("BalancerStrategyMainnet_WBTC_WETH");
20
+
21
+ // Developed and tested at blockNumber 18886915
22
+
23
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
24
+ describe("Polygon Mainnet Balancer WBTC WETH", function() {
25
+ let accounts;
26
+
27
+ // external contracts
28
+ let underlying;
29
+ let bal;
30
+ let wmatic;
31
+
32
+ // external setup
33
+ let underlyingWhale = "0xc8a7c0F4C7dB68fF2E1A22FB85d9979A2b87BA04";
34
+ let balHolder = "0xc79dF9fe252Ac55AF8aECc3D93D20b6A4A84527B";
35
+ let balAddr = "0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3";
36
+
37
+ // parties in the protocol
38
+ let governance;
39
+ let farmer1;
40
+
41
+ // numbers used in tests
42
+ let farmerBalance;
43
+
44
+ // Core protocol contracts
45
+ let controller;
46
+ let vault;
47
+ let strategy;
48
+
49
+ async function setupExternalContracts() {
50
+ underlying = await IERC20.at("0xCF354603A9AEbD2Ff9f33E1B04246d8Ea204ae95");
51
+ bal = await IERC20.at(balAddr);
52
+ wmatic = await WMATIC.at(addresses.WMATIC);
53
+ console.log("Fetching Underlying at: ", underlying.address);
54
+ }
55
+
56
+ async function setupBalance(){
57
+ let etherGiver = accounts[9];
58
+ await send.ether(etherGiver, underlyingWhale, "1" + "000000000000000000");
59
+
60
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
61
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
62
+ }
63
+
64
+ before(async function() {
65
+ governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
66
+ accounts = await web3.eth.getAccounts();
67
+
68
+ farmer1 = accounts[1];
69
+
70
+ // impersonate accounts
71
+ await impersonates([governance, underlyingWhale, balHolder]);
72
+
73
+ let etherGiver = accounts[9];
74
+ await send.ether(etherGiver, governance, "100" + "000000000000000000");
75
+ await send.ether(etherGiver, balHolder, "100" + "000000000000000000");
76
+
77
+ await setupExternalContracts();
78
+ [controller, vault, strategy] = await setupCoreProtocol({
79
+ "existingVaultAddress": null,
80
+ "strategyArtifact": Strategy,
81
+ "strategyArtifactIsUpgradable": true,
82
+ "underlying": underlying,
83
+ "governance": governance,
84
+ });
85
+
86
+ await strategy.setSellFloor(1, {from:governance});
87
+
88
+ // whale send underlying to farmers
89
+ await setupBalance();
90
+ });
91
+
92
+ describe("Happy path", function() {
93
+ it("Farmer should earn money", async function() {
94
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
95
+ await depositVault(farmer1, underlying, vault, farmerBalance);
96
+
97
+ // Using half days is to simulate how we doHardwork in the real world
98
+ // The rewards are time based and Hardhat propagates the chain with a block time of 16s
99
+ // So we have 225 blocks per hour, 2700 blocks per 12 hours.
100
+ let hours = 10;
101
+ let blocksPerHour = 2700;
102
+ let oldSharePrice;
103
+ let newSharePrice;
104
+ for (let i = 0; i < hours; i++) {
105
+ console.log("loop ", i);
106
+
107
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
108
+ await controller.doHardWork(vault.address, { from: governance });
109
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
110
+
111
+ console.log("old shareprice: ", oldSharePrice.toFixed());
112
+ console.log("new shareprice: ", newSharePrice.toFixed());
113
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
114
+
115
+ await bal.transfer(strategy.address, "100" + "000000000000000000", {from: balHolder});
116
+ await wmatic.deposit({from: accounts[9], value: "100" + "000000000000000000"});
117
+ await wmatic.transfer(strategy.address, "100" + "000000000000000000", {from: accounts[9]});
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/225))*365;
126
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))+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,123 @@
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("BalancerStrategyV3Mainnet_wstETH_amWETH");
16
+
17
+ // Developed and tested at blockNumber 43206470
18
+
19
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
20
+ describe("Polygon Mainnet Balancer wstETH-amWETH", function() {
21
+ let accounts;
22
+
23
+ // external contracts
24
+ let underlying;
25
+
26
+ // external setup
27
+ let underlyingWhale = "0x854B004700885A61107B458f11eCC169A019b764";
28
+
29
+ // parties in the protocol
30
+ let governance;
31
+ let farmer1;
32
+
33
+ // numbers used in tests
34
+ let farmerBalance;
35
+
36
+ // Core protocol contracts
37
+ let controller;
38
+ let vault;
39
+ let strategy;
40
+
41
+ async function setupExternalContracts() {
42
+ underlying = await IERC20.at("0x4a77eF015ddcd972fd9BA2C7D5D658689D090f1A");
43
+ console.log("Fetching Underlying at: ", underlying.address);
44
+ }
45
+
46
+ async function setupBalance(){
47
+ let etherGiver = accounts[9];
48
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 100e18});
49
+
50
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
51
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
52
+ }
53
+
54
+ before(async function() {
55
+ governance = addresses.Governance;
56
+ accounts = await web3.eth.getAccounts();
57
+
58
+ farmer1 = accounts[1];
59
+
60
+ // impersonate accounts
61
+ await impersonates([governance, underlyingWhale]);
62
+
63
+ let etherGiver = accounts[9];
64
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 100e18});
65
+
66
+ await setupExternalContracts();
67
+ [controller, vault, strategy] = await setupCoreProtocol({
68
+ "existingVaultAddress": null,
69
+ "strategyArtifact": Strategy,
70
+ "strategyArtifactIsUpgradable": true,
71
+ "underlying": underlying,
72
+ "governance": governance,
73
+ });
74
+
75
+ // whale send underlying to farmers
76
+ await setupBalance();
77
+ });
78
+
79
+ describe("Happy path", function() {
80
+ it("Farmer should earn money", async function() {
81
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
82
+ await depositVault(farmer1, underlying, vault, farmerBalance);
83
+
84
+ // Using half days is to simulate how we doHardwork in the real world
85
+ let hours = 10;
86
+ let blocksPerHour = 1565*5;
87
+ let oldSharePrice;
88
+ let newSharePrice;
89
+ for (let i = 0; i < hours; i++) {
90
+ console.log("loop ", i);
91
+
92
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
93
+ await controller.doHardWork(vault.address, { from: governance });
94
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
95
+
96
+ console.log("old shareprice: ", oldSharePrice.toFixed());
97
+ console.log("new shareprice: ", newSharePrice.toFixed());
98
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
99
+
100
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
101
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
102
+
103
+ console.log("instant APR:", apr*100, "%");
104
+ console.log("instant APY:", (apy-1)*100, "%");
105
+
106
+ await Utils.advanceNBlock(blocksPerHour);
107
+ }
108
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
109
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
110
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
111
+
112
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
113
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
114
+
115
+ console.log("earned!");
116
+ console.log("APR:", apr*100, "%");
117
+ console.log("APY:", (apy-1)*100, "%");
118
+
119
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
120
+
121
+ });
122
+ });
123
+ });
@@ -0,0 +1,123 @@
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("BalancerStrategyV3Mainnet_wUSDR_USDC");
16
+
17
+ // Developed and tested at blockNumber 43206470
18
+
19
+ // Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
20
+ describe("Polygon Mainnet Balancer wUSDR-USDC V3", function() {
21
+ let accounts;
22
+
23
+ // external contracts
24
+ let underlying;
25
+
26
+ // external setup
27
+ let underlyingWhale = "0xD20eE08A92449bCFD1Eeb04C0fa6f6d03dfd1cBC";
28
+
29
+ // parties in the protocol
30
+ let governance;
31
+ let farmer1;
32
+
33
+ // numbers used in tests
34
+ let farmerBalance;
35
+
36
+ // Core protocol contracts
37
+ let controller;
38
+ let vault;
39
+ let strategy;
40
+
41
+ async function setupExternalContracts() {
42
+ underlying = await IERC20.at("0x34A81e8956BF20b7448b31990A2c06F96830a6e4");
43
+ console.log("Fetching Underlying at: ", underlying.address);
44
+ }
45
+
46
+ async function setupBalance(){
47
+ let etherGiver = accounts[9];
48
+ await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 100e18});
49
+
50
+ farmerBalance = await underlying.balanceOf(underlyingWhale);
51
+ await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
52
+ }
53
+
54
+ before(async function() {
55
+ governance = addresses.Governance;
56
+ accounts = await web3.eth.getAccounts();
57
+
58
+ farmer1 = accounts[1];
59
+
60
+ // impersonate accounts
61
+ await impersonates([governance, underlyingWhale]);
62
+
63
+ let etherGiver = accounts[9];
64
+ await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 100e18});
65
+
66
+ await setupExternalContracts();
67
+ [controller, vault, strategy] = await setupCoreProtocol({
68
+ "existingVaultAddress": null,
69
+ "strategyArtifact": Strategy,
70
+ "strategyArtifactIsUpgradable": true,
71
+ "underlying": underlying,
72
+ "governance": governance,
73
+ });
74
+
75
+ // whale send underlying to farmers
76
+ await setupBalance();
77
+ });
78
+
79
+ describe("Happy path", function() {
80
+ it("Farmer should earn money", async function() {
81
+ let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
82
+ await depositVault(farmer1, underlying, vault, farmerBalance);
83
+
84
+ // Using half days is to simulate how we doHardwork in the real world
85
+ let hours = 10;
86
+ let blocksPerHour = 1565*5;
87
+ let oldSharePrice;
88
+ let newSharePrice;
89
+ for (let i = 0; i < hours; i++) {
90
+ console.log("loop ", i);
91
+
92
+ oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
93
+ await controller.doHardWork(vault.address, { from: governance });
94
+ newSharePrice = new BigNumber(await vault.getPricePerFullShare());
95
+
96
+ console.log("old shareprice: ", oldSharePrice.toFixed());
97
+ console.log("new shareprice: ", newSharePrice.toFixed());
98
+ console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
99
+
100
+ apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
101
+ apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
102
+
103
+ console.log("instant APR:", apr*100, "%");
104
+ console.log("instant APY:", (apy-1)*100, "%");
105
+
106
+ await Utils.advanceNBlock(blocksPerHour);
107
+ }
108
+ await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
109
+ let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
110
+ Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
111
+
112
+ apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
113
+ apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
114
+
115
+ console.log("earned!");
116
+ console.log("APR:", apr*100, "%");
117
+ console.log("APY:", (apy-1)*100, "%");
118
+
119
+ await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
120
+
121
+ });
122
+ });
123
+ });