@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.
- package/README.md +110 -5
- package/contracts/base/Controller.sol +125 -0
- package/contracts/base/ControllerV2.sol +363 -0
- package/contracts/base/FeeRewardForwarder.sol +163 -0
- package/contracts/base/PotPool.sol +360 -0
- package/contracts/base/ProfitSharingReceiver.sol +39 -0
- package/contracts/base/RewardForwarderV2.sol +109 -0
- package/contracts/base/Vault.sol +344 -0
- package/contracts/base/VaultERC4626.sol +113 -0
- package/contracts/base/VaultProxy.sol +35 -0
- package/contracts/base/VaultStorage.sol +199 -0
- package/contracts/base/VaultStorageV2.sol +196 -0
- package/contracts/base/VaultV2.sol +369 -0
- package/contracts/base/ape-base/MiniApeV2Strategy.sol +322 -0
- package/contracts/base/ape-base/interface/IMiniChefV2.sol +31 -0
- package/contracts/base/ape-base/interface/IRewarder.sol +10 -0
- package/contracts/base/factory/MegaFactory.sol +120 -0
- package/contracts/base/factory/interface/IPoolFactory.sol +6 -0
- package/contracts/base/factory/interface/IStrategyFactory.sol +6 -0
- package/contracts/base/factory/interface/IVaultFactory.sol +7 -0
- package/contracts/base/factory/pool/PotPoolFactory.sol +43 -0
- package/contracts/base/factory/strategy/UpgradableStrategyFactory.sol +19 -0
- package/contracts/base/factory/vault/RegularVaultFactory.sol +34 -0
- package/contracts/base/incentives/GlobalIncentivesHelper.sol +167 -0
- package/contracts/base/incentives/NotifyHelperGeneric.sol +61 -0
- package/contracts/base/incentives/NotifyHelperStateful.sol +290 -0
- package/contracts/base/inheritance/Controllable.sol +26 -0
- package/contracts/base/inheritance/ControllableInit.sol +31 -0
- package/contracts/base/inheritance/Governable.sol +29 -0
- package/contracts/base/inheritance/GovernableInit.sol +51 -0
- package/contracts/base/inheritance/IUpgradeSource.sol +8 -0
- package/contracts/base/inheritance/OwnableWhitelist.sol +17 -0
- package/contracts/base/inheritance/RewardTokenProfitNotifier.sol +48 -0
- package/contracts/base/inheritance/Storage.sol +36 -0
- package/contracts/base/interface/IController.sol +30 -0
- package/contracts/base/interface/IControllerV2.sol +135 -0
- package/contracts/base/interface/IERC4626.sol +263 -0
- package/contracts/base/interface/IFeeRewardForwarder.sol +9 -0
- package/contracts/base/interface/IProfitSharingReceiver.sol +10 -0
- package/contracts/base/interface/IRewardForwarder.sol +58 -0
- package/contracts/base/interface/IRewardPool.sol +34 -0
- package/contracts/base/interface/IStrategy.sol +25 -0
- package/contracts/base/interface/IUniversalLiquidator.sol +21 -0
- package/contracts/base/interface/IUniversalLiquidatorRegistry.sol +20 -0
- package/contracts/base/interface/IUpgradeSource.sol +8 -0
- package/contracts/base/interface/IVault.sol +35 -0
- package/contracts/base/interface/aave/DataTypes.sol +266 -0
- package/contracts/base/interface/aave/IAToken.sol +37 -0
- package/contracts/base/interface/aave/IPool.sol +13 -0
- package/contracts/base/interface/balancer/Gauge.sol +22 -0
- package/contracts/base/interface/balancer/IBVault.sol +557 -0
- package/contracts/base/interface/balancer/IBalancerMinter.sol +114 -0
- package/contracts/base/interface/balancer/linearPool/ILinearPool.sol +185 -0
- package/contracts/base/interface/balancer/linearPool/ILinearPoolFactory.sol +16 -0
- package/contracts/base/interface/balancer/linearPool/ILinearPoolRebalancer.sol +8 -0
- package/contracts/base/interface/balancer/linearPool/IPoolSwapStructs.sol +57 -0
- package/contracts/base/interface/caviar/ICaviarChef.sol +16 -0
- package/contracts/base/interface/compound/IComet.sol +114 -0
- package/contracts/base/interface/compound/ICometRewards.sol +17 -0
- package/contracts/base/interface/curve/Gauge.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_2token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_2token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_3token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_3token_meta.sol +20 -0
- package/contracts/base/interface/curve/ICurveDeposit_3token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_4token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_4token_meta.sol +20 -0
- package/contracts/base/interface/curve/ICurveDeposit_4token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_5token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_5token_meta.sol +20 -0
- package/contracts/base/interface/curve/ICurveDeposit_5token_underlying.sol +31 -0
- package/contracts/base/interface/curve/ICurveDeposit_6token.sol +25 -0
- package/contracts/base/interface/curve/ICurveDeposit_6token_meta.sol +20 -0
- package/contracts/base/interface/gamma/IClearing.sol +8 -0
- package/contracts/base/interface/gamma/IHypervisor.sol +17 -0
- package/contracts/base/interface/gamma/IStakingRewards.sol +35 -0
- package/contracts/base/interface/gamma/IUniProxy.sol +15 -0
- package/contracts/base/interface/kyber/IDMMExchangeRouter.sol +69 -0
- package/contracts/base/interface/kyber/IDMMFactory.sol +35 -0
- package/contracts/base/interface/kyber/IDMMLiquidityRouter.sol +204 -0
- package/contracts/base/interface/kyber/IDMMPool.sol +42 -0
- package/contracts/base/interface/kyber/IDMMRouter01.sol +12 -0
- package/contracts/base/interface/kyber/IDMMRouter02.sol +55 -0
- package/contracts/base/interface/kyber/IKyberZap.sol +7 -0
- package/contracts/base/interface/merkl/IDistributor.sol +6 -0
- package/contracts/base/interface/morpho/IMetaMorpho.sol +7 -0
- package/contracts/base/interface/pearl/IGauge.sol +13 -0
- package/contracts/base/interface/pearl/IPair.sol +44 -0
- package/contracts/base/interface/pearl/IRouter.sol +305 -0
- package/contracts/base/interface/quickswap/IDragonLair.sol +25 -0
- package/contracts/base/interface/quickswap/IMasterChef.sol +13 -0
- package/contracts/base/interface/uniswap/IUniswapV2Factory.sol +15 -0
- package/contracts/base/interface/uniswap/IUniswapV2Migrator.sol +6 -0
- package/contracts/base/interface/uniswap/IUniswapV2Pair.sol +59 -0
- package/contracts/base/interface/uniswap/IUniswapV2Router01.sol +96 -0
- package/contracts/base/interface/uniswap/IUniswapV2Router02.sol +137 -0
- package/contracts/base/interface/uniswap/IUniswapV3Pool.sol +24 -0
- package/contracts/base/interface/uniswap/IUniswapV3Router.sol +64 -0
- package/contracts/base/interface/uniswap/IWETH.sol +8 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolActions.sol +103 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolDerivedState.sol +40 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolEvents.sol +121 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolImmutables.sol +35 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolOwnerActions.sol +23 -0
- package/contracts/base/interface/uniswap/pool/IUniswapV3PoolState.sol +116 -0
- package/contracts/base/masterchef-base/MasterChefHodlStrategy.sol +240 -0
- package/contracts/base/masterchef-base/MasterChefStrategy.sol +364 -0
- package/contracts/base/masterchef-base/interfaces/IMasterChef.sol +12 -0
- package/contracts/base/migration/vaultMigratable_2JPYv2.sol +87 -0
- package/contracts/base/migration/vaultMigratable_bal2EUR_PAR.sol +121 -0
- package/contracts/base/migration/vaultMigratable_bal2EUR_agEUR.sol +121 -0
- package/contracts/base/migration/vaultMigratable_balMaticX.sol +153 -0
- package/contracts/base/migration/vaultMigratable_balStMatic.sol +153 -0
- package/contracts/base/noop/NoopStrategy.sol +89 -0
- package/contracts/base/noop/NoopStrategyUpgradeable.sol +92 -0
- package/contracts/base/sushi-base/MiniChefV2Strategy.sol +380 -0
- package/contracts/base/sushi-base/interface/IMiniChefV2.sol +31 -0
- package/contracts/base/sushi-base/interface/IRewarder.sol +9 -0
- package/contracts/base/sushi-base/lib/BoringERC20.sol +30 -0
- package/contracts/base/upgradability/Address.sol +33 -0
- package/contracts/base/upgradability/BaseUpgradeabilityProxy.sol +61 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategy.sol +111 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategyStorage.sol +176 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategyStorageV2.sol +290 -0
- package/contracts/base/upgradability/BaseUpgradeableStrategyV2.sol +145 -0
- package/contracts/base/upgradability/IUpgradable.sol +7 -0
- package/contracts/base/upgradability/Proxy.sol +71 -0
- package/contracts/base/upgradability/ReentrancyGuard.sol +57 -0
- package/contracts/base/upgradability/ReentrancyGuardUpgradeable.sol +51 -0
- package/contracts/base/upgradability/StrategyProxy.sol +35 -0
- package/contracts/base/wmatic/WMATIC.sol +8 -0
- package/contracts/strategies/aave/AaveSupplyStrategy.sol +213 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_DAI.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_EURS.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDC.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDCe.sol +23 -0
- package/contracts/strategies/aave/AaveSupplyStrategyMainnet_USDT.sol +23 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_BANANA_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_BNB_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_BTC_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_DAI_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_DAI_USDC.sol +37 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_ETH_MATIC.sol +36 -0
- package/contracts/strategies/ape/ApeStrategyMainnet_USDT_MATIC.sol +36 -0
- package/contracts/strategies/aura/AuraStrategy.sol +347 -0
- package/contracts/strategies/aura/AuraStrategyMainnet_jEUR_PAR.sol +30 -0
- package/contracts/strategies/aura/interface/IAuraBaseRewardPool.sol +25 -0
- package/contracts/strategies/aura/interface/IAuraBooster.sol +17 -0
- package/contracts/strategies/aura/interface/IAuraDepositor.sol +7 -0
- package/contracts/strategies/balancer/BalancerStrategyV3.sol +509 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2BRL.sol +39 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2BRLUSD.sol +38 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_PAR.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_PARv2.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_2EUR_agEUR.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MATIC_USDC_ETH_BAL.sol +32 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MaticX.sol +37 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_MaticX_amMatic.sol +38 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_SPHERE_MATIC.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_TNGBL_USDC.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_WBTC_ETH_USDC.sol +32 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_bbamusd.sol +36 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_frxETH.sol +32 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_frxETH_amWETH.sol +35 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stETH.sol +35 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stMatic.sol +36 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_stMatic_amMatic.sol +39 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_tetuBal.sol +36 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_wUSDR_USDC.sol +34 -0
- package/contracts/strategies/balancer/BalancerStrategyV3Mainnet_wstETH_amWETH.sol +37 -0
- package/contracts/strategies/balancer/interface/Gauge.sol +26 -0
- package/contracts/strategies/balancer/interface/IBVault.sol +557 -0
- package/contracts/strategies/balancer/interface/IBalanceMinter.sol +114 -0
- package/contracts/strategies/complifi/ComplifiDerivStrategy.sol +381 -0
- package/contracts/strategies/complifi/ComplifiDerivStrategyMainnet_ETH5x.sol +35 -0
- package/contracts/strategies/complifi/ComplifiStrategy.sol +362 -0
- package/contracts/strategies/complifi/ComplifiStrategyMainnet_COMFI_WETH.sol +34 -0
- package/contracts/strategies/complifi/interfaces/ILiquidityMining.sol +13 -0
- package/contracts/strategies/complifi/interfaces/ILiquidityPool.sol +63 -0
- package/contracts/strategies/complifi/interfaces/IProxyActions.sol +10 -0
- package/contracts/strategies/complifi/interfaces/IUSDCVault.sol +55 -0
- package/contracts/strategies/compound/CompoundStrategy.sol +296 -0
- package/contracts/strategies/compound/CompoundStrategyMainnet_USDC.sol +28 -0
- package/contracts/strategies/compound/CompoundStrategyMainnet_USDT.sol +28 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategy.sol +292 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_ETH.sol +27 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_USDC.sol +27 -0
- package/contracts/strategies/compound-blue/CompoundBlueStrategyMainnet_USDT.sol +27 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_3CRV.sol +40 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_3CRYPTO.sol +37 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_CRV_3CRYPTO copy.sol +37 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_MATIC_3CRYPTO.sol +37 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_USDR.sol +40 -0
- package/contracts/strategies/convex/ConvexStrategyMainnet_aCRV.sol +38 -0
- package/contracts/strategies/convex/base/ConvexStrategy.sol +480 -0
- package/contracts/strategies/convex/interface/IBaseRewardPool.sol +13 -0
- package/contracts/strategies/convex/interface/IBooster.sol +10 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategy.sol +272 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_ETH_USDC.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_ETH_USDT.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_MATIC_USDT.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_TBTC_ETH.sol +25 -0
- package/contracts/strategies/gamma-merkl/GammaMerklStrategyMainnet_QS_WBTC_ETH_w.sol +25 -0
- package/contracts/strategies/genomes/NoopStrategy_GENE_ETH.sol +23 -0
- package/contracts/strategies/genomes/NoopStrategy_GNOME_ETH.sol +23 -0
- package/contracts/strategies/idle/IdleFinanceStrategy.sol +240 -0
- package/contracts/strategies/idle/IdleStrategyDAIMainnet.sol +33 -0
- package/contracts/strategies/idle/IdleStrategyUSDCMainnet.sol +33 -0
- package/contracts/strategies/idle/IdleStrategyWETHMainnet.sol +30 -0
- package/contracts/strategies/idle/interface/IdleToken.sol +58 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3.sol +351 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2CAD.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_EURT.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_EURe.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2EUR_PAR.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2JPY.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2JPYv2.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2NZD.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_2SGD.sol +34 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jCHF_USDC.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jCHF_WETH.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jEUR_USDC.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jEUR_WETH.sol +35 -0
- package/contracts/strategies/jarvis/JarvisHodlStrategyV3Mainnet_jGBP_USDC.sol +35 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3.sol +281 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_AUR3_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_AURJUL22_WETH.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN2_4EUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN3_4EUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_DEN4_4EUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTANGLENOV22_2EURagEUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTANGLE_2EURagEUR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTJUL22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMAY22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMIMONOV22_2EURPAR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTMIMO_2EURPAR.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTNOV22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_JRTSEP22_USDC.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_QUI_2CAD.sol +27 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_SES_2JPY.sol +28 -0
- package/contracts/strategies/jarvis/JarvisStrategyV3Mainnet_agDEN_2EUR.sol +27 -0
- package/contracts/strategies/jarvis/interface/IElysianFields.sol +11 -0
- package/contracts/strategies/jarvis/interface/IKyberFairLaunch.sol +13 -0
- package/contracts/strategies/jarvis/interface/IKyberRewardLocker.sol +9 -0
- package/contracts/strategies/meshswap/MeshswapStrategy.sol +304 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_MESH_oMOOI.sol +30 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_MESH_oZEMIT.sol +30 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_USDC_oUSDC.sol +31 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_USDT_oUSDT.sol +31 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_MESH.sol +27 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_USDC.sol +28 -0
- package/contracts/strategies/meshswap/MeshswapStrategyMainnet_WMATIC_USDT.sol +28 -0
- package/contracts/strategies/meshswap/interface/IExchange.sol +9 -0
- package/contracts/strategies/meshswap/interface/IRouter.sol +68 -0
- package/contracts/strategies/pearl/CaviarStrategy.sol +244 -0
- package/contracts/strategies/pearl/CaviarStrategyMainnet_CVR.sol +26 -0
- package/contracts/strategies/pearl/PearlHodlStrategy.sol +254 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_CVR_PEARL.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_DAI_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_ETH_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_MATIC_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_PEARL_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_STAR_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_TNGBL_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_USDC_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_USDT_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_WBTC_USDR.sol +27 -0
- package/contracts/strategies/pearl/PearlHodlStrategyMainnet_wUSDR_USDR.sol +27 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategy.sol +400 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_ETH_narrow.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_ETH_wide.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_USDC_narrow.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_MATIC_USDC_wide.sol +31 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_USDC_ETH_narrow.sol +34 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyMainnet_USDC_ETH_wide.sol +34 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2.sol +348 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_USDC_DAI.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_USDC_USDT.sol +29 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_WBTC_ETH_narrow.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_WBTC_USDC_narrow.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_cbETH_ETH.sol +28 -0
- package/contracts/strategies/quick-gamma/QuickGammaStrategyV2Mainnet_wstETH_ETH.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategy.sol +312 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_DAI.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_USDT.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_USDC_WETH.sol +28 -0
- package/contracts/strategies/uniswap-gamma/UniswapGammaStrategyMainnet_WMATIC_USDC.sol +28 -0
- package/contracts/strategies/yel/YelStrategy.sol +350 -0
- package/contracts/strategies/yel/YelStrategyMainnet_YEL_WETH.sol +29 -0
- package/hardhat.config.js +58 -0
- package/index.js +42 -0
- package/package.json +56 -6
- package/scripts/01-deploy-vault-regular-with-upgradable-strategy.js +41 -0
- package/scripts/02-deploy-vault-regular.js +35 -0
- package/scripts/03-deploy-upgradable-strategy.js +34 -0
- package/scripts/04-deploy-new-implementation.js +24 -0
- package/scripts/README.md +55 -0
- package/scripts/utils.js +42 -0
- package/test/aave/dai.js +207 -0
- package/test/aave/eurs.js +207 -0
- package/test/aave/usdc.js +206 -0
- package/test/aave/usdce.js +206 -0
- package/test/aave/usdt.js +206 -0
- package/test/ape/banana-matic.js +157 -0
- package/test/ape/bnb-matic.js +159 -0
- package/test/ape/btc-matic.js +159 -0
- package/test/ape/dai-matic.js +159 -0
- package/test/ape/dai-usdc.js +163 -0
- package/test/ape/eth-matic.js +158 -0
- package/test/ape/usdt-matic.js +159 -0
- package/test/aura/jeur-par.js +135 -0
- package/test/balancer/2brl_v3.js +123 -0
- package/test/balancer/2brlusd_v3.js +123 -0
- package/test/balancer/2eur_ageur.js +141 -0
- package/test/balancer/2eur_par.js +141 -0
- package/test/balancer/2eur_par_v2.js +123 -0
- package/test/balancer/bbamusd_v3.js +124 -0
- package/test/balancer/btc.js +131 -0
- package/test/balancer/frxETH.js +123 -0
- package/test/balancer/frxeth_amweth.js +123 -0
- package/test/balancer/matic_usdc_eth_bal.js +123 -0
- package/test/balancer/maticx_ammatic.js +123 -0
- package/test/balancer/maticx_v2.js +120 -0
- package/test/balancer/maticx_v3.js +141 -0
- package/test/balancer/polybase.js +131 -0
- package/test/balancer/polybase_v2.js +121 -0
- package/test/balancer/polydefi.js +131 -0
- package/test/balancer/polydefi2.js +131 -0
- package/test/balancer/qipool.js +136 -0
- package/test/balancer/sphere_matic.js +123 -0
- package/test/balancer/stETH.js +123 -0
- package/test/balancer/stable.js +131 -0
- package/test/balancer/stable_v2.js +121 -0
- package/test/balancer/stmatic_ammatic.js +123 -0
- package/test/balancer/stmatic_v2.js +120 -0
- package/test/balancer/stmatic_v3.js +141 -0
- package/test/balancer/tetubal_v3.js +123 -0
- package/test/balancer/tngbl_usdc.js +123 -0
- package/test/balancer/tricrypto.js +131 -0
- package/test/balancer/tusd_stable.js +142 -0
- package/test/balancer/usdc_weth.js +136 -0
- package/test/balancer/usdc_weth_v2.js +123 -0
- package/test/balancer/wbtc_eth_usdc.js +123 -0
- package/test/balancer/wbtc_weth.js +136 -0
- package/test/balancer/wsteth_amweth.js +123 -0
- package/test/balancer/wusdr_usdc.js +123 -0
- package/test/compound/usdc.js +127 -0
- package/test/compound/usdt.js +129 -0
- package/test/compound-blue/eth.js +136 -0
- package/test/compound-blue/usdc.js +136 -0
- package/test/compound-blue/usdt.js +136 -0
- package/test/convex/3crv.js +123 -0
- package/test/convex/3crypto.js +123 -0
- package/test/convex/acrv.js +123 -0
- package/test/convex/crv_3crypto.js +123 -0
- package/test/convex/matic_3crypto.js +123 -0
- package/test/convex/usdr.js +123 -0
- package/test/core/emission-fork.js +197 -0
- package/test/core/emission.js +209 -0
- package/test/core/vault_upgrade.js +129 -0
- package/test/curve/aave.js +132 -0
- package/test/curve/atricrypto3.js +135 -0
- package/test/curve/eurtusd.js +135 -0
- package/test/gamma-merkl/qs-eth-usdc.js +212 -0
- package/test/gamma-merkl/qs-eth-usdt.js +213 -0
- package/test/gamma-merkl/qs-matic-usdt.js +213 -0
- package/test/gamma-merkl/qs-tbtc-eth.js +213 -0
- package/test/gamma-merkl/qs-wbtc-eth-w.js +213 -0
- package/test/genomes/gene-eth.js +115 -0
- package/test/genomes/gnome-eth.js +115 -0
- package/test/idle/dai.js +129 -0
- package/test/idle/usdc.js +128 -0
- package/test/idle/weth.js +128 -0
- package/test/jarvis/2cad-hodl.js +183 -0
- package/test/jarvis/2cad-update-nov22.js +182 -0
- package/test/jarvis/2cad-update.js +177 -0
- package/test/jarvis/2cad-update2.js +182 -0
- package/test/jarvis/2cad-update3.js +182 -0
- package/test/jarvis/2eur-ageur-update-nov22.js +182 -0
- package/test/jarvis/2eur-ageur-update.js +182 -0
- package/test/jarvis/2eur-eure-hodl.js +176 -0
- package/test/jarvis/2eur-eurt-hodl.js +176 -0
- package/test/jarvis/2eur-eurt-update-nov22.js +182 -0
- package/test/jarvis/2eur-hodl.js +176 -0
- package/test/jarvis/2eur-par-hodl.js +176 -0
- package/test/jarvis/2eur-par-update-nov22.js +182 -0
- package/test/jarvis/2jpy-hodl.js +244 -0
- package/test/jarvis/2jpy-update-nov22.js +182 -0
- package/test/jarvis/2jpy-update.js +177 -0
- package/test/jarvis/2jpy-update2.js +182 -0
- package/test/jarvis/2jpyv2-upgrade.js +184 -0
- package/test/jarvis/2nzd-hodl.js +176 -0
- package/test/jarvis/2nzd-update.js +182 -0
- package/test/jarvis/2sgd-hodl.js +176 -0
- package/test/jarvis/2sgd-update-nov22.js +182 -0
- package/test/jarvis/2sgd-update.js +182 -0
- package/test/jarvis/2sgd-update2.js +182 -0
- package/test/jarvis/4eur-hodl-upgrade.js +177 -0
- package/test/jarvis/4eur-hodl.js +183 -0
- package/test/jarvis/4eur-update.js +181 -0
- package/test/jarvis/4eur-update2.js +181 -0
- package/test/jarvis/agden-2eur.js +222 -0
- package/test/jarvis/aur-usdc-v2.js +115 -0
- package/test/jarvis/aur-usdc.js +127 -0
- package/test/jarvis/aur3-usdc.js +115 -0
- package/test/jarvis/aurjul22-weth.js +222 -0
- package/test/jarvis/den-4eur.js +115 -0
- package/test/jarvis/den2-4eur.js +220 -0
- package/test/jarvis/den3-4eur.js +220 -0
- package/test/jarvis/den4-4eur.js +220 -0
- package/test/jarvis/jchf-usdc-hodl-v2.js +184 -0
- package/test/jarvis/jchf-usdc-hodl-v3.js +178 -0
- package/test/jarvis/jchf-usdc-hodl.js +193 -0
- package/test/jarvis/jchf-weth-hodl.js +176 -0
- package/test/jarvis/jeur-usdc-hodl-v2.js +184 -0
- package/test/jarvis/jeur-usdc-hodl-v3.js +178 -0
- package/test/jarvis/jeur-usdc-hodl.js +193 -0
- package/test/jarvis/jeur-weth-hodl.js +176 -0
- package/test/jarvis/jgbp-usdc-hodl-v2.js +184 -0
- package/test/jarvis/jgbp-usdc-hodl-v3.js +178 -0
- package/test/jarvis/jgbp-usdc-hodl.js +193 -0
- package/test/jarvis/jrtangle-2eurageur.js +220 -0
- package/test/jarvis/jrtanglenov22-2eurageur.js +220 -0
- package/test/jarvis/jrtjul22-usdc.js +115 -0
- package/test/jarvis/jrtmay22-usdc.js +115 -0
- package/test/jarvis/jrtmimo-2eurpar.js +220 -0
- package/test/jarvis/jrtmimonov22-2eurpar.js +220 -0
- package/test/jarvis/jrtnov22-usdc.js +220 -0
- package/test/jarvis/jrtsep22-usdc.js +220 -0
- package/test/jarvis/qui-2cad.js +218 -0
- package/test/jarvis/ses-2jpy.js +222 -0
- package/test/meshswap/mesh-omooi.js +197 -0
- package/test/meshswap/mesh-ozemit.js +197 -0
- package/test/meshswap/usdc-ousdc.js +197 -0
- package/test/meshswap/usdt-ousdt.js +197 -0
- package/test/meshswap/wmatic-mesh.js +197 -0
- package/test/meshswap/wmatic-usdc.js +197 -0
- package/test/meshswap/wmatic-usdt.js +197 -0
- package/test/mstable/musd.js +123 -0
- package/test/pearl/cvr-pearl.js +198 -0
- package/test/pearl/cvr.js +133 -0
- package/test/pearl/dai-usdr.js +198 -0
- package/test/pearl/eth-usdr.js +198 -0
- package/test/pearl/matic-usdr.js +198 -0
- package/test/pearl/pearl-usdr.js +198 -0
- package/test/pearl/star-usdr.js +186 -0
- package/test/pearl/tngbl-usdr.js +198 -0
- package/test/pearl/usdc-usdr.js +198 -0
- package/test/pearl/usdt-usdr.js +198 -0
- package/test/pearl/wbtc-usdr.js +198 -0
- package/test/pearl/wusdr-usdr.js +198 -0
- package/test/popsicle/ice-weth.js +128 -0
- package/test/quick/eth-matic.js +132 -0
- package/test/quick/eth-usdt.js +140 -0
- package/test/quick/ifarm-quick.js +147 -0
- package/test/quick/matic-usdc.js +145 -0
- package/test/quick/psp-matic.js +124 -0
- package/test/quick/wbtc-eth.js +145 -0
- package/test/quick-gamma/cbeth-eth.js +207 -0
- package/test/quick-gamma/matic-eth-narrow.js +201 -0
- package/test/quick-gamma/matic-eth-wide.js +197 -0
- package/test/quick-gamma/matic-usdc-narrow.js +197 -0
- package/test/quick-gamma/matic-usdc-wide.js +197 -0
- package/test/quick-gamma/upgrade/matic-eth-narrow.js +204 -0
- package/test/quick-gamma/upgrade/matic-usdc-narrow.js +199 -0
- package/test/quick-gamma/usdc-dai.js +209 -0
- package/test/quick-gamma/usdc-eth-narrow.js +197 -0
- package/test/quick-gamma/usdc-eth-wide.js +197 -0
- package/test/quick-gamma/usdc-usdt.js +209 -0
- package/test/quick-gamma/wbtc-eth-narrow.js +207 -0
- package/test/quick-gamma/wbtc-usdc-narrow.js +209 -0
- package/test/quick-gamma/wsteth-eth.js +207 -0
- package/test/sushi/eth-usdt.js +153 -0
- package/test/sushi/matic-eth.js +138 -0
- package/test/sushi/usdc-eth.js +153 -0
- package/test/test-config.js +24 -0
- package/test/uniswap-gamma/usdc-dai.js +212 -0
- package/test/uniswap-gamma/usdc-usdt.js +212 -0
- package/test/uniswap-gamma/usdc-weth.js +212 -0
- package/test/uniswap-gamma/wmatic-usdc.js +210 -0
- package/test/utilities/Utils.js +96 -0
- package/test/utilities/hh-utils.js +242 -0
- package/test/utilities/make-vault.js +10 -0
- package/test/yel/yel-wmatic.js +129 -0
@@ -0,0 +1,197 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const { impersonates, setupCoreProtocol, depositVault } = require("../utilities/hh-utils.js");
|
4
|
+
|
5
|
+
const addresses = require("../test-config.js");
|
6
|
+
const BigNumber = require("bignumber.js");
|
7
|
+
const IERC20 = artifacts.require("@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20");
|
8
|
+
|
9
|
+
const Strategy = artifacts.require("MeshswapStrategyMainnet_WMATIC_USDT");
|
10
|
+
|
11
|
+
//This test was developed at blockNumber 34577850
|
12
|
+
|
13
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
14
|
+
describe("Mainnet Meshswap wMATIC-USDT", function() {
|
15
|
+
let accounts;
|
16
|
+
|
17
|
+
// external contracts
|
18
|
+
let underlying;
|
19
|
+
|
20
|
+
// external setup
|
21
|
+
let underlyingWhale = "0xC70f26184fc556bBbA9c3078ee35411e42E7B1ac";
|
22
|
+
|
23
|
+
// parties in the protocol
|
24
|
+
let governance;
|
25
|
+
let farmer1;
|
26
|
+
|
27
|
+
// numbers used in tests
|
28
|
+
let farmerBalance;
|
29
|
+
|
30
|
+
// Core protocol contracts
|
31
|
+
let controller;
|
32
|
+
let vault;
|
33
|
+
let strategy;
|
34
|
+
|
35
|
+
async function setupExternalContracts() {
|
36
|
+
underlying = await IERC20.at("0x24af68fF6e3501EAf8b52a9F7935225E524FE617");
|
37
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
38
|
+
}
|
39
|
+
|
40
|
+
async function setupBalance(){
|
41
|
+
let etherGiver = accounts[9];
|
42
|
+
// Give whale some ether to make sure the following actions are good
|
43
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 1e18});
|
44
|
+
|
45
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
46
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
47
|
+
}
|
48
|
+
|
49
|
+
before(async function() {
|
50
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
51
|
+
accounts = await web3.eth.getAccounts();
|
52
|
+
|
53
|
+
farmer1 = accounts[1];
|
54
|
+
|
55
|
+
// impersonate accounts
|
56
|
+
await impersonates([governance, underlyingWhale]);
|
57
|
+
|
58
|
+
await setupExternalContracts();
|
59
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
60
|
+
"existingVaultAddress": null,
|
61
|
+
"strategyArtifact": Strategy,
|
62
|
+
"strategyArtifactIsUpgradable": true,
|
63
|
+
"underlying": underlying,
|
64
|
+
"governance": governance,
|
65
|
+
});
|
66
|
+
|
67
|
+
// whale send underlying to farmers
|
68
|
+
await setupBalance();
|
69
|
+
});
|
70
|
+
|
71
|
+
describe("Happy path", function() {
|
72
|
+
it("Farmer should earn money", async function() {
|
73
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
74
|
+
console.log("Farmer old balance:", farmerOldBalance.toFixed());
|
75
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
76
|
+
let fTokenBalance = new BigNumber(await vault.balanceOf(farmer1));
|
77
|
+
console.log("Farmer fToken balance:", fTokenBalance.toFixed());
|
78
|
+
|
79
|
+
// Using half days is to simulate how we doHardwork in the real world
|
80
|
+
let hours = 10;
|
81
|
+
let blocksPerHour = 1565*5;
|
82
|
+
let oldSharePrice;
|
83
|
+
let newSharePrice;
|
84
|
+
for (let i = 0; i < hours; i++) {
|
85
|
+
console.log("loop ", i);
|
86
|
+
|
87
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
88
|
+
await controller.doHardWork(vault.address, { from: governance });
|
89
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
90
|
+
|
91
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
92
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
93
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
94
|
+
|
95
|
+
apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
96
|
+
apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
97
|
+
|
98
|
+
console.log("instant APR:", apr*100, "%");
|
99
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
100
|
+
|
101
|
+
await Utils.advanceNBlock(blocksPerHour);
|
102
|
+
}
|
103
|
+
await vault.withdraw(fTokenBalance, { from: farmer1 });
|
104
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
105
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
106
|
+
|
107
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
108
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
109
|
+
|
110
|
+
console.log("earned!");
|
111
|
+
console.log("Overall APR:", apr*100, "%");
|
112
|
+
console.log("Overall APY:", (apy-1)*100, "%");
|
113
|
+
|
114
|
+
await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
|
115
|
+
});
|
116
|
+
});
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
describe("Basic strategy functionality checks", function () {
|
121
|
+
it("Deposit to vault", async function () {
|
122
|
+
// deposit to vault such that we have something to work with
|
123
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
124
|
+
|
125
|
+
// check vault has at least farmerBalance (there could be some dust etc., so no exact check)
|
126
|
+
let vaultUnderlying = new BigNumber(await vault.underlyingBalanceInVault());
|
127
|
+
Utils.assertBNGte(vaultUnderlying, farmerBalance)
|
128
|
+
});
|
129
|
+
|
130
|
+
it("withdrawAllToVault()", async function () {
|
131
|
+
let vaultUnderlying = new BigNumber(await vault.underlyingBalanceInVault());
|
132
|
+
// doHardwork invests all underlying from the vault
|
133
|
+
await controller.doHardWork(vault.address, { from: governance });
|
134
|
+
let investedUnderlyingBalance = new BigNumber(await strategy.investedUnderlyingBalance());
|
135
|
+
|
136
|
+
// strategy invested amount must be greater or equal than the initial vault underlying amount
|
137
|
+
Utils.assertBNGte(investedUnderlyingBalance, vaultUnderlying)
|
138
|
+
|
139
|
+
// move all invested underlying back to the vault
|
140
|
+
await strategy.withdrawAllToVault({ from: governance });
|
141
|
+
|
142
|
+
// strategy has no underlying left
|
143
|
+
let investedUnderlyingBalanceNew = new BigNumber(await strategy.investedUnderlyingBalance());
|
144
|
+
assert.equal(investedUnderlyingBalanceNew.eq(BigNumber(0)), true);
|
145
|
+
|
146
|
+
// vault has all of the underlying from the strategy
|
147
|
+
let vaultUnderlyingNew = new BigNumber(await vault.underlyingBalanceInVault());
|
148
|
+
Utils.assertBNGte(vaultUnderlyingNew, investedUnderlyingBalance)
|
149
|
+
});
|
150
|
+
|
151
|
+
it("withdrawToVault(uint256 _amount)", async function () {
|
152
|
+
let vaultUnderlying = new BigNumber(await vault.underlyingBalanceInVault());
|
153
|
+
// doHardwork invests all underlying from the vault
|
154
|
+
await controller.doHardWork(vault.address, { from: governance });
|
155
|
+
let investedUnderlyingBalance = new BigNumber(await strategy.investedUnderlyingBalance());
|
156
|
+
|
157
|
+
// strategy invested amount must be greater or equal than the initial vault underlying amount
|
158
|
+
Utils.assertBNGte(investedUnderlyingBalance, vaultUnderlying)
|
159
|
+
|
160
|
+
let amount = 1;
|
161
|
+
// move amount of underlying to vault
|
162
|
+
await strategy.withdrawToVault(amount, { from: governance });
|
163
|
+
|
164
|
+
// vault has exactly amount of underlying
|
165
|
+
let vaultUnderlyingNew = new BigNumber(await vault.underlyingBalanceInVault());
|
166
|
+
assert.equal(new BigNumber(amount).eq(vaultUnderlyingNew), true);
|
167
|
+
});
|
168
|
+
|
169
|
+
it("unsalvagableTokens(address _token)", async function () {
|
170
|
+
// underlying is unsalvageable
|
171
|
+
let isUnderlyingUnsalvagable = await strategy.unsalvagableTokens(underlying.address);
|
172
|
+
assert.equal(isUnderlyingUnsalvagable, true);
|
173
|
+
|
174
|
+
// rewardToken is unsalvageable
|
175
|
+
let isRewardTokenUnsalvagable = await strategy.unsalvagableTokens(await strategy.rewardToken());
|
176
|
+
assert.equal(isRewardTokenUnsalvagable, true);
|
177
|
+
|
178
|
+
});
|
179
|
+
|
180
|
+
it("Remove all deposited LP tokens", async function () {
|
181
|
+
// remove all deposited LP tokens
|
182
|
+
let fTokenBalance = await vault.balanceOf(farmer1);
|
183
|
+
await vault.withdraw(fTokenBalance, { from: farmer1 });
|
184
|
+
|
185
|
+
//check that there is nothing left in the strategy or vault
|
186
|
+
let strategyBalance = new BigNumber(await underlying.balanceOf(strategy.address));
|
187
|
+
assert.equal(strategyBalance.eq(BigNumber(0)), true);
|
188
|
+
|
189
|
+
let vaultBalance = new BigNumber(await underlying.balanceOf(vault.address));
|
190
|
+
assert.equal(vaultBalance.eq(BigNumber(0)), true);
|
191
|
+
|
192
|
+
let totalUnderlyingVaultAndStrategy = new BigNumber(await vault.underlyingBalanceWithInvestment());
|
193
|
+
assert.equal(totalUnderlyingVaultAndStrategy.eq(BigNumber(0)), true);
|
194
|
+
});
|
195
|
+
});
|
196
|
+
|
197
|
+
});
|
@@ -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("MStableStrategyMainnet_mUSD");
|
18
|
+
|
19
|
+
// Developed and tested at blockNumber 23439275
|
20
|
+
|
21
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
22
|
+
describe("Polygon Mainnet mStable mUSD", function() {
|
23
|
+
let accounts;
|
24
|
+
|
25
|
+
// external contracts
|
26
|
+
let underlying;
|
27
|
+
|
28
|
+
// external setup
|
29
|
+
let underlyingWhale = "0x5084f622cbDf1E22E473d66d97916524745B9b6e";
|
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("0xE840B73E5287865EEc17d250bFb1536704B43B21");
|
45
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
46
|
+
}
|
47
|
+
|
48
|
+
async function setupBalance(){
|
49
|
+
let etherGiver = accounts[9];
|
50
|
+
// Give whale some ether to make sure the following actions are good
|
51
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 1e18});
|
52
|
+
|
53
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
54
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
55
|
+
}
|
56
|
+
|
57
|
+
before(async function() {
|
58
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
59
|
+
accounts = await web3.eth.getAccounts();
|
60
|
+
|
61
|
+
farmer1 = accounts[1];
|
62
|
+
|
63
|
+
// impersonate accounts
|
64
|
+
await impersonates([governance, underlyingWhale]);
|
65
|
+
|
66
|
+
let etherGiver = accounts[9];
|
67
|
+
await send.ether(etherGiver, governance, "100" + "000000000000000000");
|
68
|
+
|
69
|
+
await setupExternalContracts();
|
70
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
71
|
+
"existingVaultAddress": null,
|
72
|
+
"strategyArtifact": Strategy,
|
73
|
+
"strategyArtifactIsUpgradable": true,
|
74
|
+
"underlying": underlying,
|
75
|
+
"governance": governance,
|
76
|
+
});
|
77
|
+
|
78
|
+
await strategy.setSellFloor(1, {from:governance});
|
79
|
+
|
80
|
+
// whale send underlying to farmers
|
81
|
+
await setupBalance();
|
82
|
+
});
|
83
|
+
|
84
|
+
describe("Happy path", function() {
|
85
|
+
it("Farmer should earn money", async function() {
|
86
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
87
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
88
|
+
|
89
|
+
// Using half days is to simulate how we doHardwork in the real world
|
90
|
+
// The rewards are time based and Hardhat propagates the chain with a block time of 16s
|
91
|
+
// So we have 225 blocks per hour, 2700 blocks per 12 hours.
|
92
|
+
let hours = 10;
|
93
|
+
let blocksPerHour = 2700;
|
94
|
+
let oldSharePrice;
|
95
|
+
let newSharePrice;
|
96
|
+
for (let i = 0; i < hours; i++) {
|
97
|
+
console.log("loop ", i);
|
98
|
+
|
99
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
100
|
+
await controller.doHardWork(vault.address, { from: governance });
|
101
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
102
|
+
|
103
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
104
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
105
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
106
|
+
|
107
|
+
await Utils.advanceNBlock(blocksPerHour);
|
108
|
+
}
|
109
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
110
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
111
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
112
|
+
|
113
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))*365;
|
114
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/225))+1)**365;
|
115
|
+
|
116
|
+
console.log("earned!");
|
117
|
+
console.log("APR:", apr*100, "%");
|
118
|
+
console.log("APY:", (apy-1)*100, "%");
|
119
|
+
|
120
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
121
|
+
});
|
122
|
+
});
|
123
|
+
});
|
@@ -0,0 +1,198 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const { impersonates, setupCoreProtocol, depositVault } = require("../utilities/hh-utils.js");
|
4
|
+
|
5
|
+
const addresses = require("../test-config.js");
|
6
|
+
const { send } = require("@openzeppelin/test-helpers");
|
7
|
+
const BigNumber = require("bignumber.js");
|
8
|
+
const IERC20 = artifacts.require("@openzeppelin/contracts/token/ERC20/IERC20.sol:IERC20");
|
9
|
+
|
10
|
+
const HodlStrategy = artifacts.require("CaviarStrategyMainnet_CVR");
|
11
|
+
const Strategy = artifacts.require("PearlHodlStrategyMainnet_CVR_PEARL");
|
12
|
+
|
13
|
+
const D18 = new BigNumber(Math.pow(10, 18));
|
14
|
+
|
15
|
+
//This test was developed at blockNumber 47099100
|
16
|
+
|
17
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
18
|
+
describe("Mainnet Pearl CVR-PEARL HODL in CVR", function() {
|
19
|
+
let accounts;
|
20
|
+
|
21
|
+
// external contracts
|
22
|
+
let underlying;
|
23
|
+
|
24
|
+
// external setup
|
25
|
+
let underlyingWhale = "0x747276019e3340104C96397bF6537aD01F93D7df";
|
26
|
+
let hodlUnderlying = "0x6AE96Cc93331c19148541D4D2f31363684917092";
|
27
|
+
let cvr = "0x6AE96Cc93331c19148541D4D2f31363684917092";
|
28
|
+
let pearl = "0x7238390d5f6F64e67c3211C343A410E2A3DEc142";
|
29
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
30
|
+
let usdr = "0x40379a439D4F6795B6fc9aa5687dB461677A2dBa";
|
31
|
+
|
32
|
+
// parties in the protocol
|
33
|
+
let governance;
|
34
|
+
let farmer1;
|
35
|
+
|
36
|
+
// numbers used in tests
|
37
|
+
let farmerBalance;
|
38
|
+
|
39
|
+
// Core protocol contracts
|
40
|
+
let controller;
|
41
|
+
let vault;
|
42
|
+
let strategy;
|
43
|
+
|
44
|
+
async function setupExternalContracts() {
|
45
|
+
underlying = await IERC20.at("0x700D6E1167472bDc312D9cBBdc7c58C7f4F45120");
|
46
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
47
|
+
}
|
48
|
+
|
49
|
+
async function setupBalance(){
|
50
|
+
let etherGiver = accounts[9];
|
51
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
|
52
|
+
|
53
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
54
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
55
|
+
}
|
56
|
+
|
57
|
+
before(async function() {
|
58
|
+
governance = addresses.Governance;
|
59
|
+
accounts = await web3.eth.getAccounts();
|
60
|
+
|
61
|
+
farmer1 = accounts[1];
|
62
|
+
|
63
|
+
// impersonate accounts
|
64
|
+
await impersonates([governance, underlyingWhale]);
|
65
|
+
|
66
|
+
let etherGiver = accounts[9];
|
67
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
|
68
|
+
|
69
|
+
await setupExternalContracts();
|
70
|
+
[controller, hodlVault, hodlStrategy] = await setupCoreProtocol({
|
71
|
+
"existingVaultAddress": null,
|
72
|
+
"strategyArtifact": HodlStrategy,
|
73
|
+
"strategyArtifactIsUpgradable": true,
|
74
|
+
"underlying": await IERC20.at(hodlUnderlying),
|
75
|
+
"governance": governance,
|
76
|
+
"liquidation": [
|
77
|
+
{"pearl": [cvr, pearl, usdr]},
|
78
|
+
{"pearl": [usdr, pearl, cvr]},
|
79
|
+
{"pearl": [usdr, weth]},
|
80
|
+
]
|
81
|
+
});
|
82
|
+
[controller, vault, strategy, potPool] = await setupCoreProtocol({
|
83
|
+
"existingVaultAddress": null,
|
84
|
+
"strategyArtifact": Strategy,
|
85
|
+
"strategyArtifactIsUpgradable": true,
|
86
|
+
"underlying": underlying,
|
87
|
+
"governance": governance,
|
88
|
+
"rewardPool" : true,
|
89
|
+
"rewardPoolConfig": {
|
90
|
+
type: 'PotPool',
|
91
|
+
rewardTokens: [
|
92
|
+
hodlVault.address // fCVR
|
93
|
+
]
|
94
|
+
},
|
95
|
+
"liquidation": [
|
96
|
+
{"pearl": [pearl, cvr]},
|
97
|
+
{"pearl": [pearl, usdr, weth]},
|
98
|
+
]
|
99
|
+
});
|
100
|
+
|
101
|
+
await strategy.setHodlVault(hodlVault.address, {from: governance});
|
102
|
+
await strategy.setPotPool(potPool.address, {from: governance});
|
103
|
+
await potPool.setRewardDistribution([strategy.address], true, {from: governance});
|
104
|
+
await controller.addToWhitelist(strategy.address, {from: governance});
|
105
|
+
|
106
|
+
// whale send underlying to farmers
|
107
|
+
await setupBalance();
|
108
|
+
});
|
109
|
+
|
110
|
+
describe("Happy path", function() {
|
111
|
+
it("Farmer should earn money", async function() {
|
112
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
113
|
+
let farmerOldHodlBalance = new BigNumber(await hodlVault.balanceOf(farmer1));
|
114
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
115
|
+
let fTokenBalance = new BigNumber(await vault.balanceOf(farmer1));
|
116
|
+
|
117
|
+
let erc20Vault = await IERC20.at(vault.address);
|
118
|
+
await erc20Vault.approve(potPool.address, fTokenBalance, {from: farmer1});
|
119
|
+
await potPool.stake(fTokenBalance, {from: farmer1});
|
120
|
+
|
121
|
+
// Using half days is to simulate how we doHardwork in the real world
|
122
|
+
let hours = 10;
|
123
|
+
let blocksPerHour = 1565*5;
|
124
|
+
let oldSharePrice;
|
125
|
+
let newSharePrice;
|
126
|
+
let oldHodlSharePrice;
|
127
|
+
let newHodlSharePrice;
|
128
|
+
let oldPotPoolBalance;
|
129
|
+
let newPotPoolBalance;
|
130
|
+
let hodlPrice;
|
131
|
+
let lpPrice;
|
132
|
+
let oldValue;
|
133
|
+
let newValue;
|
134
|
+
for (let i = 0; i < hours; i++) {
|
135
|
+
console.log("loop ", i);
|
136
|
+
|
137
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
138
|
+
oldHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
139
|
+
oldPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
140
|
+
await controller.doHardWork(vault.address, {from: governance});
|
141
|
+
await controller.doHardWork(hodlVault.address, {from: governance});
|
142
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
143
|
+
newHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
144
|
+
newPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
145
|
+
|
146
|
+
hodlPrice = new BigNumber(0.334770).times(D18);
|
147
|
+
lpPrice = new BigNumber(0.66955).times(D18);
|
148
|
+
console.log("Hodl price:", hodlPrice.toFixed()/D18.toFixed());
|
149
|
+
console.log("LP price:", lpPrice.toFixed()/D18.toFixed());
|
150
|
+
|
151
|
+
oldValue = (fTokenBalance.times(oldSharePrice).times(lpPrice)).div(1e36).plus((oldPotPoolBalance.times(oldHodlSharePrice).times(hodlPrice)).div(1e36));
|
152
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((newPotPoolBalance.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
153
|
+
|
154
|
+
console.log("old value: ", oldValue.toFixed()/D18.toFixed());
|
155
|
+
console.log("new value: ", newValue.toFixed()/D18.toFixed());
|
156
|
+
console.log("growth: ", newValue.toFixed() / oldValue.toFixed());
|
157
|
+
|
158
|
+
console.log("HODL token in potpool: ", newPotPoolBalance.toFixed());
|
159
|
+
|
160
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
161
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
162
|
+
|
163
|
+
console.log("instant APR:", apr*100, "%");
|
164
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
165
|
+
|
166
|
+
await Utils.advanceNBlock(blocksPerHour);
|
167
|
+
}
|
168
|
+
// withdrawAll to make sure no doHardwork is called when we do withdraw later.
|
169
|
+
await vault.withdrawAll({ from: governance });
|
170
|
+
|
171
|
+
// wait until all reward can be claimed by the farmer
|
172
|
+
await Utils.waitTime(86400 * 30 * 1000);
|
173
|
+
console.log("vaultBalance: ", fTokenBalance.toFixed());
|
174
|
+
await potPool.exit({from: farmer1});
|
175
|
+
await vault.withdraw(fTokenBalance.toFixed(), { from: farmer1 });
|
176
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
177
|
+
let farmerNewHodlBalance = new BigNumber(await hodlVault.balanceOf(farmer1));
|
178
|
+
Utils.assertBNGte(farmerNewBalance, farmerOldBalance);
|
179
|
+
Utils.assertBNGt(farmerNewHodlBalance, farmerOldHodlBalance);
|
180
|
+
|
181
|
+
oldValue = (fTokenBalance.times(1e18).times(lpPrice)).div(1e36);
|
182
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((farmerNewHodlBalance.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
183
|
+
|
184
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
185
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
186
|
+
|
187
|
+
console.log("Overall APR:", apr*100, "%");
|
188
|
+
console.log("Overall APY:", (apy-1)*100, "%");
|
189
|
+
|
190
|
+
console.log("potpool totalShare: ", (new BigNumber(await potPool.totalSupply())).toFixed());
|
191
|
+
console.log("HODL token in potpool: ", (new BigNumber(await hodlVault.balanceOf(potPool.address))).toFixed() );
|
192
|
+
console.log("Farmer got HODL token from potpool: ", farmerNewHodlBalance.toFixed());
|
193
|
+
console.log("earned!");
|
194
|
+
|
195
|
+
await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
|
196
|
+
});
|
197
|
+
});
|
198
|
+
});
|
@@ -0,0 +1,133 @@
|
|
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("CaviarStrategyMainnet_CVR");
|
16
|
+
|
17
|
+
// Developed and tested at blockNumber 47097600
|
18
|
+
|
19
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
20
|
+
describe("Arbitrum Mainnet Caviar CVR", function() {
|
21
|
+
let accounts;
|
22
|
+
|
23
|
+
// external contracts
|
24
|
+
let underlying;
|
25
|
+
|
26
|
+
// external setup
|
27
|
+
let underlyingWhale = "0xbDC1851f669f1E2Fef5990e86C2Fb2CbCC8552B6";
|
28
|
+
let cvr = "0x6AE96Cc93331c19148541D4D2f31363684917092";
|
29
|
+
let usdr = "0x40379a439D4F6795B6fc9aa5687dB461677A2dBa";
|
30
|
+
let pearl = "0x7238390d5f6F64e67c3211C343A410E2A3DEc142";
|
31
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
32
|
+
|
33
|
+
// parties in the protocol
|
34
|
+
let governance;
|
35
|
+
let farmer1;
|
36
|
+
|
37
|
+
// numbers used in tests
|
38
|
+
let farmerBalance;
|
39
|
+
|
40
|
+
// Core protocol contracts
|
41
|
+
let controller;
|
42
|
+
let vault;
|
43
|
+
let strategy;
|
44
|
+
|
45
|
+
async function setupExternalContracts() {
|
46
|
+
underlying = await IERC20.at("0x6AE96Cc93331c19148541D4D2f31363684917092");
|
47
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
48
|
+
}
|
49
|
+
|
50
|
+
async function setupBalance(){
|
51
|
+
let etherGiver = accounts[9];
|
52
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 10e18});
|
53
|
+
|
54
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
55
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
56
|
+
}
|
57
|
+
|
58
|
+
before(async function() {
|
59
|
+
governance = addresses.Governance;
|
60
|
+
accounts = await web3.eth.getAccounts();
|
61
|
+
|
62
|
+
farmer1 = accounts[1];
|
63
|
+
|
64
|
+
// impersonate accounts
|
65
|
+
await impersonates([governance, underlyingWhale]);
|
66
|
+
|
67
|
+
let etherGiver = accounts[9];
|
68
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
|
69
|
+
|
70
|
+
await setupExternalContracts();
|
71
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
72
|
+
"existingVaultAddress": "0xCB2f2895208c36F38c9B13aB0C9e49Ad69B14e9d",
|
73
|
+
"strategyArtifact": Strategy,
|
74
|
+
"strategyArtifactIsUpgradable": true,
|
75
|
+
"announceStrategy": true,
|
76
|
+
"underlying": underlying,
|
77
|
+
"governance": governance,
|
78
|
+
"liquidation": [
|
79
|
+
{"pearl": [cvr, pearl, usdr]},
|
80
|
+
{"pearl": [usdr, pearl, cvr]},
|
81
|
+
{"pearl": [usdr, weth]},
|
82
|
+
]
|
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
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
103
|
+
await controller.doHardWork(vault.address, { from: governance });
|
104
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
105
|
+
|
106
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
107
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
108
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
109
|
+
|
110
|
+
apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))*365;
|
111
|
+
apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1800))+1)**365;
|
112
|
+
|
113
|
+
console.log("instant APR:", apr*100, "%");
|
114
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
115
|
+
|
116
|
+
await Utils.advanceNBlock(blocksPerHour);
|
117
|
+
}
|
118
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
119
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
120
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
121
|
+
|
122
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))*365;
|
123
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1800))+1)**365;
|
124
|
+
|
125
|
+
console.log("earned!");
|
126
|
+
console.log("APR:", apr*100, "%");
|
127
|
+
console.log("APY:", (apy-1)*100, "%");
|
128
|
+
|
129
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
130
|
+
|
131
|
+
});
|
132
|
+
});
|
133
|
+
});
|