@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,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("ConvexStrategyMainnet_USDR");
|
16
|
+
|
17
|
+
// Developed and tested at blockNumber 41679900
|
18
|
+
|
19
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
20
|
+
describe("Polygon Mainnet Convex USDR", function() {
|
21
|
+
let accounts;
|
22
|
+
|
23
|
+
// external contracts
|
24
|
+
let underlying;
|
25
|
+
|
26
|
+
// external setup
|
27
|
+
let underlyingWhale = "0xD60ACbaC798F146e4B7080E9a1f93977200f5cff";
|
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("0xa138341185a9D0429B0021A11FB717B225e13e1F");
|
43
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
44
|
+
}
|
45
|
+
|
46
|
+
async function setupBalance(){
|
47
|
+
let etherGiver = accounts[9];
|
48
|
+
await send.ether(etherGiver, underlyingWhale, "100" + "000000000000000000");
|
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 send.ether(etherGiver, governance, "100" + "000000000000000000");
|
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,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("../../../matic-config/matic-addresses.json");
|
6
|
+
const { send, expectRevert, time } = require("@openzeppelin/test-helpers");
|
7
|
+
const BigNumber = require("bignumber.js");
|
8
|
+
const IERC20Upgradeable = artifacts.require("IERC20Upgradeable");
|
9
|
+
|
10
|
+
const Storage = artifacts.require("Storage");
|
11
|
+
const NotifyHelperStateful = artifacts.require("NotifyHelperStateful");
|
12
|
+
const NotifyHelperGeneric = artifacts.require("NotifyHelperGeneric");
|
13
|
+
const GlobalIncentivesHelper = artifacts.require("GlobalIncentivesHelper");
|
14
|
+
const Governable = artifacts.require("Governable");
|
15
|
+
const Controllable = artifacts.require("Controllable");
|
16
|
+
const PotPool = artifacts.require("PotPool");
|
17
|
+
|
18
|
+
|
19
|
+
// block 21829169
|
20
|
+
describe("Emission tests", function() {
|
21
|
+
let accounts;
|
22
|
+
|
23
|
+
let storage = addresses.Storage;
|
24
|
+
let governance = addresses.GOVERNANCE;
|
25
|
+
let notifyHelperRegular;
|
26
|
+
let nobody;
|
27
|
+
|
28
|
+
let usdcEurHolder = "0x08ac9c15aaf98563a4b19ddbd0153ff3516d65a8";
|
29
|
+
let usdcGbpHolder = "0x420674a75e1e158a3c675f13df1f26d51f22b502";
|
30
|
+
let usdcEurContract;
|
31
|
+
let usdcGbpContract;
|
32
|
+
|
33
|
+
let NotificationType = {
|
34
|
+
VOID : 0, AMPLIFARM : 1, FARM : 2, TRANSFER : 3, PROFIT_SHARE : 4, TOKEN: 5
|
35
|
+
}
|
36
|
+
|
37
|
+
// contracts
|
38
|
+
let miFARM;
|
39
|
+
let statefulHelper;
|
40
|
+
let helperStorage;
|
41
|
+
let globalIncentivesHelper;
|
42
|
+
|
43
|
+
let emission = [
|
44
|
+
{
|
45
|
+
address: "0xf25474FBf9812bE2ef76abf4297A27411C156403", // Jarvis: EUR-USDC
|
46
|
+
percentage: "1"
|
47
|
+
},
|
48
|
+
{
|
49
|
+
address: "0x877635e68C1E943D6d6B777C0e847Cd7aE5A01BE", // Jarvis: GBP-USDC
|
50
|
+
percentage: "2"
|
51
|
+
},
|
52
|
+
]
|
53
|
+
let emissionMatic = [
|
54
|
+
{
|
55
|
+
address: "0xf25474FBf9812bE2ef76abf4297A27411C156403", // Jarvis: EUR-USDC
|
56
|
+
percentage: "1"
|
57
|
+
},
|
58
|
+
{
|
59
|
+
address: "0x877635e68C1E943D6d6B777C0e847Cd7aE5A01BE", // Jarvis: GBP-USDC
|
60
|
+
percentage: "2"
|
61
|
+
},
|
62
|
+
]
|
63
|
+
|
64
|
+
async function setupExternalContracts() {
|
65
|
+
miFARM = await IERC20Upgradeable.at(addresses.miFARM);
|
66
|
+
wMATIC = await IERC20Upgradeable.at(addresses.WMATIC);
|
67
|
+
}
|
68
|
+
|
69
|
+
async function setupBalance() {
|
70
|
+
let etherGiver = accounts[9];
|
71
|
+
|
72
|
+
let usdcEur = "0xa832926e3f6a3339ae68f70d76860d212959e0e7";
|
73
|
+
let usdcGbp = "0xe94D89243a7Aeaf88857461ce555caEB344765Fc";
|
74
|
+
|
75
|
+
usdcEurContract = await IERC20Upgradeable.at(usdcEur);
|
76
|
+
usdcGbpContract = await IERC20Upgradeable.at(usdcGbp);
|
77
|
+
await usdcEurContract.transfer(nobody, await usdcEurContract.balanceOf(usdcEurHolder), {from: usdcEurHolder});
|
78
|
+
await usdcGbpContract.transfer(nobody, await usdcGbpContract.balanceOf(usdcGbpHolder), {from: usdcGbpHolder});
|
79
|
+
}
|
80
|
+
|
81
|
+
before(async function() {
|
82
|
+
accounts = await web3.eth.getAccounts();
|
83
|
+
nobody = accounts[7];
|
84
|
+
await setupExternalContracts();
|
85
|
+
|
86
|
+
// impersonate accounts
|
87
|
+
await impersonates([governance, usdcEurHolder, usdcGbpHolder]);
|
88
|
+
await setupBalance();
|
89
|
+
|
90
|
+
// set the governance
|
91
|
+
notifyHelperRegular = await NotifyHelperGeneric.new(storage);
|
92
|
+
statefulHelper = await NotifyHelperStateful.new(storage,
|
93
|
+
notifyHelperRegular.address,
|
94
|
+
addresses.miFARM,
|
95
|
+
notifyHelperRegular.address,
|
96
|
+
"0xFEd53aA679C2C1948473A08202f6203EBDA20FD6",
|
97
|
+
"0xd00FCE4966821Da1EdD1221a02aF0AFc876365e4");
|
98
|
+
|
99
|
+
helperStorage = await Storage.new({from: governance});
|
100
|
+
await notifyHelperRegular.setWhitelist(statefulHelper.address, {from : governance});
|
101
|
+
|
102
|
+
// whitelist generic helper on the pools
|
103
|
+
for (let i = 0; i < emission.length; i++) {
|
104
|
+
let pool = emission[i];
|
105
|
+
let poolContract = await PotPool.at(pool.address);
|
106
|
+
await poolContract.setRewardDistribution([notifyHelperRegular.address], true, {from: governance});
|
107
|
+
}
|
108
|
+
|
109
|
+
globalIncentivesHelper = await GlobalIncentivesHelper.new(storage, addresses.miFARM, statefulHelper.address, notifyHelperRegular.address,
|
110
|
+
"0xFEd53aA679C2C1948473A08202f6203EBDA20FD6",
|
111
|
+
"0xd00FCE4966821Da1EdD1221a02aF0AFc876365e4");
|
112
|
+
await notifyHelperRegular.setWhitelist(globalIncentivesHelper.address, true, {from: governance});
|
113
|
+
await globalIncentivesHelper.newToken(addresses.WMATIC, {from: governance});
|
114
|
+
|
115
|
+
// link the references
|
116
|
+
await statefulHelper.setNotifier(globalIncentivesHelper.address, true, {from: governance});
|
117
|
+
await statefulHelper.setChanger(globalIncentivesHelper.address, true, {from: governance});
|
118
|
+
await globalIncentivesHelper.setChanger(governance, true, {from: governance});
|
119
|
+
await globalIncentivesHelper.setNotifier(governance, true, {from: governance});
|
120
|
+
});
|
121
|
+
|
122
|
+
describe.only("Happy Path with assertions", function() {
|
123
|
+
it("Configure emission for two pot pools", async function() {
|
124
|
+
let tokens = [];
|
125
|
+
let pools = [];
|
126
|
+
let percentages = [];
|
127
|
+
let types = [];
|
128
|
+
let vesting = [];
|
129
|
+
for (let i = 0; i < emission.length; i++) {
|
130
|
+
let pool = emission[i];
|
131
|
+
tokens.push(addresses.miFARM);
|
132
|
+
pools.push(pool.address);
|
133
|
+
percentages.push(pool.percentage);
|
134
|
+
types.push(NotificationType.FARM);
|
135
|
+
vesting.push(false);
|
136
|
+
}
|
137
|
+
for (let i = 0; i < emissionMatic.length; i++) {
|
138
|
+
let pool = emissionMatic[i];
|
139
|
+
tokens.push(addresses.WMATIC);
|
140
|
+
pools.push(pool.address);
|
141
|
+
percentages.push(pool.percentage);
|
142
|
+
types.push(NotificationType.TOKEN);
|
143
|
+
vesting.push(false);
|
144
|
+
}
|
145
|
+
console.log(tokens, pools, percentages, types, vesting);
|
146
|
+
await globalIncentivesHelper.setPoolBatch(tokens, pools, percentages, types, vesting, {from: governance});
|
147
|
+
|
148
|
+
assert.notEqual(
|
149
|
+
await globalIncentivesHelper.tokenToHelper(wMATIC.address),
|
150
|
+
await globalIncentivesHelper.tokenToHelper(miFARM.address)
|
151
|
+
);
|
152
|
+
|
153
|
+
// user nobody stakes
|
154
|
+
let gbpPool = await PotPool.at("0x877635e68C1E943D6d6B777C0e847Cd7aE5A01BE");
|
155
|
+
let eurPool = await PotPool.at("0xf25474FBf9812bE2ef76abf4297A27411C156403");
|
156
|
+
await usdcEurContract.approve(eurPool.address, await usdcEurContract.balanceOf(nobody), {from: nobody});
|
157
|
+
await usdcGbpContract.approve(gbpPool.address, await usdcGbpContract.balanceOf(nobody), {from: nobody});
|
158
|
+
await gbpPool.stake(await usdcGbpContract.balanceOf(nobody), {from: nobody});
|
159
|
+
await eurPool.stake(await usdcEurContract.balanceOf(nobody), {from: nobody});
|
160
|
+
|
161
|
+
await miFARM.transfer(globalIncentivesHelper.address, "50" + "0".repeat(18), {from: governance});
|
162
|
+
await wMATIC.transfer(globalIncentivesHelper.address, "120" + "0".repeat(18), {from: governance});
|
163
|
+
await globalIncentivesHelper.notifyPools([addresses.miFARM, addresses.WMATIC], ["30" + "0".repeat(18), "60" + "0".repeat(18)], "1637694000")
|
164
|
+
|
165
|
+
assert.equal(await miFARM.balanceOf(gbpPool.address), "20" + "0".repeat(18));
|
166
|
+
assert.equal(await wMATIC.balanceOf(gbpPool.address), "40" + "0".repeat(18));
|
167
|
+
assert.equal(await miFARM.balanceOf(eurPool.address), "10" + "0".repeat(18));
|
168
|
+
assert.equal(await wMATIC.balanceOf(eurPool.address), "20" + "0".repeat(18));
|
169
|
+
assert.equal(await miFARM.balanceOf(globalIncentivesHelper.address), "20" + "0".repeat(18));
|
170
|
+
assert.equal(await wMATIC.balanceOf(globalIncentivesHelper.address), "60" + "0".repeat(18));
|
171
|
+
|
172
|
+
assert.notEqual(await gbpPool.rewardRateForToken(miFARM.address), "0");
|
173
|
+
assert.notEqual(await gbpPool.rewardRateForToken(wMATIC.address), "0");
|
174
|
+
assert.notEqual(await eurPool.rewardRateForToken(miFARM.address), "0");
|
175
|
+
assert.notEqual(await eurPool.rewardRateForToken(wMATIC.address), "0");
|
176
|
+
|
177
|
+
// mind blank transactions to increase the time
|
178
|
+
await time.increase(time.duration.days(8));
|
179
|
+
await time.advanceBlock();
|
180
|
+
|
181
|
+
// assert.equal(await gbpPool.earned(miFARM.address, nobody), "20" + "0".repeat(18));
|
182
|
+
// assert.equal(await gbpPool.earned(wMATIC.address, nobody), "40" + "0".repeat(18));
|
183
|
+
// assert.equal(await eurPool.earned(miFARM.address, nobody), "10" + "0".repeat(18));
|
184
|
+
// assert.equal(await eurPool.earned(wMATIC.address, nobody), "20" + "0".repeat(18));
|
185
|
+
|
186
|
+
await gbpPool.exit({from: nobody});
|
187
|
+
await eurPool.exit({from: nobody});
|
188
|
+
|
189
|
+
console.log(new BigNumber(await miFARM.balanceOf(nobody)).toFixed());
|
190
|
+
console.log(new BigNumber(await wMATIC.balanceOf(nobody)).toFixed());
|
191
|
+
assert.equal(await miFARM.balanceOf(nobody), "30" + "0".repeat(18));
|
192
|
+
assert.equal(await wMATIC.balanceOf(nobody), "60" + "0".repeat(18));
|
193
|
+
|
194
|
+
});
|
195
|
+
|
196
|
+
});
|
197
|
+
});
|
@@ -0,0 +1,209 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const { impersonates, setupCoreProtocol, depositVault } = require("../utilities/hh-utils.js");
|
4
|
+
|
5
|
+
const addresses = require("../../../matic-config/matic-addresses.json");
|
6
|
+
const { send, expectRevert, time } = require("@openzeppelin/test-helpers");
|
7
|
+
const BigNumber = require("bignumber.js");
|
8
|
+
const IERC20Upgradeable = artifacts.require("IERC20Upgradeable");
|
9
|
+
|
10
|
+
const Storage = artifacts.require("Storage");
|
11
|
+
const NotifyHelperStateful = artifacts.require("NotifyHelperStateful");
|
12
|
+
const NotifyHelperGeneric = artifacts.require("NotifyHelperGeneric");
|
13
|
+
const GlobalIncentivesHelper = artifacts.require("GlobalIncentivesHelper");
|
14
|
+
const Governable = artifacts.require("Governable");
|
15
|
+
const Controllable = artifacts.require("Controllable");
|
16
|
+
const PotPool = artifacts.require("PotPool");
|
17
|
+
|
18
|
+
describe("Emission tests", function() {
|
19
|
+
let accounts;
|
20
|
+
|
21
|
+
let storage = addresses.Storage;
|
22
|
+
let governance = addresses.GOVERNANCE;
|
23
|
+
let bridge = "0x0b2c3d2709900db4a73055c2150d346dd54cb427";
|
24
|
+
let notifyHelperRegular;
|
25
|
+
|
26
|
+
let NotificationType = {
|
27
|
+
VOID : 0, AMPLIFARM : 1, FARM : 2, TRANSFER : 3, PROFIT_SHARE : 4, TOKEN: 5
|
28
|
+
}
|
29
|
+
|
30
|
+
// contracts
|
31
|
+
let miFARM;
|
32
|
+
let statefulHelper;
|
33
|
+
let helperStorage;
|
34
|
+
let globalIncentivesHelper;
|
35
|
+
|
36
|
+
let emission = [
|
37
|
+
{
|
38
|
+
address: addresses.V2.quickswap_IFARM_QUICK.NewPool,
|
39
|
+
percentage: "2"
|
40
|
+
},
|
41
|
+
{
|
42
|
+
address: addresses.V2.quickswap_ETH_USDT.NewPool,
|
43
|
+
percentage: "1"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
address: addresses.V2.sushiswap_USDC_ETH.NewPool,
|
47
|
+
percentage: "2"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
address: addresses.V2.balancer_STABLE.NewPool,
|
51
|
+
percentage: "3"
|
52
|
+
},
|
53
|
+
{
|
54
|
+
address: addresses.V2.balancer_TRICRYPTO.NewPool,
|
55
|
+
percentage: "2"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
address: addresses.V2.balancer_POLYBASE.NewPool,
|
59
|
+
percentage: "3"
|
60
|
+
},
|
61
|
+
{
|
62
|
+
address: addresses.V2.jarvis_AUR_USDC.NewPool,
|
63
|
+
percentage: "2"
|
64
|
+
},
|
65
|
+
{
|
66
|
+
address: addresses.V2.jarvis_JCHF_USDC_HODL.NewPool,
|
67
|
+
percentage: "2"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
address: addresses.V2.jarvis_JEUR_USDC_HODL.NewPool,
|
71
|
+
percentage: "2"
|
72
|
+
},
|
73
|
+
{
|
74
|
+
address: addresses.V2.jarvis_JGBP_USDC_HODL.NewPool,
|
75
|
+
percentage: "2"
|
76
|
+
},
|
77
|
+
|
78
|
+
]
|
79
|
+
let emissionMatic = [
|
80
|
+
{
|
81
|
+
address: addresses.V2.balancer_STABLE.NewPool,
|
82
|
+
percentage: "3"
|
83
|
+
},
|
84
|
+
{
|
85
|
+
address: addresses.V2.balancer_TRICRYPTO.NewPool,
|
86
|
+
percentage: "2"
|
87
|
+
},
|
88
|
+
{
|
89
|
+
address: addresses.V2.balancer_POLYBASE.NewPool,
|
90
|
+
percentage: "3"
|
91
|
+
},
|
92
|
+
{
|
93
|
+
address: addresses.V2.jarvis_AUR_USDC.NewPool,
|
94
|
+
percentage: "2"
|
95
|
+
},
|
96
|
+
{
|
97
|
+
address: addresses.V2.jarvis_JCHF_USDC_HODL.NewPool,
|
98
|
+
percentage: "2"
|
99
|
+
},
|
100
|
+
{
|
101
|
+
address: addresses.V2.jarvis_JEUR_USDC_HODL.NewPool,
|
102
|
+
percentage: "2"
|
103
|
+
},
|
104
|
+
{
|
105
|
+
address: addresses.V2.jarvis_JGBP_USDC_HODL.NewPool,
|
106
|
+
percentage: "2"
|
107
|
+
},
|
108
|
+
|
109
|
+
]
|
110
|
+
|
111
|
+
async function setupExternalContracts() {
|
112
|
+
miFARM = await IERC20Upgradeable.at(addresses.miFARM);
|
113
|
+
wMATIC = await IERC20Upgradeable.at(addresses.WMATIC);
|
114
|
+
}
|
115
|
+
|
116
|
+
async function setupBalance() {
|
117
|
+
let etherGiver = accounts[9];
|
118
|
+
// Give whale some ether to make sure the following actions are good
|
119
|
+
await send.ether(etherGiver, underlyingWhale, "1" + "000000000000000000");
|
120
|
+
await send.ether(etherGiver, bridge, "1" + "000000000000000000");
|
121
|
+
|
122
|
+
farmerBalance = "1000" + "0".repeat(6);
|
123
|
+
await underlying.transfer(farmer, farmerBalance, {from: underlyingWhale});
|
124
|
+
}
|
125
|
+
|
126
|
+
before(async function() {
|
127
|
+
accounts = await web3.eth.getAccounts();
|
128
|
+
let nobody = accounts[7];
|
129
|
+
await setupExternalContracts();
|
130
|
+
await send.ether(nobody, bridge, "1" + "000000000000000000");
|
131
|
+
|
132
|
+
// impersonate accounts
|
133
|
+
await impersonates([governance, bridge]);
|
134
|
+
|
135
|
+
// set the governance
|
136
|
+
notifyHelperRegular = await NotifyHelperGeneric.new(storage);
|
137
|
+
statefulHelper = await NotifyHelperStateful.new(storage,
|
138
|
+
notifyHelperRegular.address,
|
139
|
+
addresses.miFARM,
|
140
|
+
notifyHelperRegular.address,
|
141
|
+
"0xFEd53aA679C2C1948473A08202f6203EBDA20FD6",
|
142
|
+
"0xd00FCE4966821Da1EdD1221a02aF0AFc876365e4");
|
143
|
+
|
144
|
+
helperStorage = await Storage.new({from: governance});
|
145
|
+
await notifyHelperRegular.setWhitelist(statefulHelper.address, {from : governance});
|
146
|
+
|
147
|
+
// whitelist generic helper on the pools
|
148
|
+
for (let i = 0; i < emission.length; i++) {
|
149
|
+
let pool = emission[i];
|
150
|
+
let poolContract = await PotPool.at(pool.address);
|
151
|
+
await poolContract.setRewardDistribution([notifyHelperRegular.address], true, {from: governance});
|
152
|
+
}
|
153
|
+
|
154
|
+
globalIncentivesHelper = await GlobalIncentivesHelper.new(storage, addresses.miFARM, statefulHelper.address, notifyHelperRegular.address,
|
155
|
+
"0xFEd53aA679C2C1948473A08202f6203EBDA20FD6",
|
156
|
+
"0xd00FCE4966821Da1EdD1221a02aF0AFc876365e4");
|
157
|
+
await notifyHelperRegular.setWhitelist(globalIncentivesHelper.address, true, {from: governance});
|
158
|
+
await globalIncentivesHelper.newToken(addresses.WMATIC, {from: governance});
|
159
|
+
|
160
|
+
// link the references
|
161
|
+
await statefulHelper.setNotifier(globalIncentivesHelper.address, true, {from: governance});
|
162
|
+
await statefulHelper.setChanger(globalIncentivesHelper.address, true, {from: governance});
|
163
|
+
await globalIncentivesHelper.setChanger(governance, true, {from: governance});
|
164
|
+
await globalIncentivesHelper.setNotifier(governance, true, {from: governance});
|
165
|
+
});
|
166
|
+
|
167
|
+
describe.only("Happy Path with math", function() {
|
168
|
+
it("Configure emission", async function() {
|
169
|
+
let tokens = [];
|
170
|
+
let pools = [];
|
171
|
+
let percentages = [];
|
172
|
+
let types = [];
|
173
|
+
let vesting = [];
|
174
|
+
for (let i = 0; i < emission.length; i++) {
|
175
|
+
let pool = emission[i];
|
176
|
+
tokens.push(addresses.miFARM);
|
177
|
+
pools.push(pool.address);
|
178
|
+
percentages.push(pool.percentage);
|
179
|
+
types.push(NotificationType.FARM);
|
180
|
+
vesting.push(false);
|
181
|
+
}
|
182
|
+
for (let i = 0; i < emissionMatic.length; i++) {
|
183
|
+
let pool = emissionMatic[i];
|
184
|
+
tokens.push(addresses.WMATIC);
|
185
|
+
pools.push(pool.address);
|
186
|
+
percentages.push(pool.percentage);
|
187
|
+
types.push(NotificationType.TOKEN);
|
188
|
+
vesting.push(false);
|
189
|
+
}
|
190
|
+
console.log(tokens, pools, percentages, types, vesting);
|
191
|
+
await globalIncentivesHelper.setPoolBatch(tokens, pools, percentages, types, vesting, {from: governance});
|
192
|
+
|
193
|
+
let config = await statefulHelper.getConfig("50" + "0".repeat(18));
|
194
|
+
for (let i = 0; i < config[0].length; i++) {
|
195
|
+
console.log(config[0][i]);
|
196
|
+
console.log(config[1][i].toString());
|
197
|
+
console.log(config[2][i].toString());
|
198
|
+
console.log("");
|
199
|
+
}
|
200
|
+
|
201
|
+
await miFARM.approve(globalIncentivesHelper.address, "50" + "0".repeat(18), {from: governance});
|
202
|
+
await miFARM.transfer(governance, "50" + "0".repeat(18), {from: bridge});
|
203
|
+
await wMATIC.approve(globalIncentivesHelper.address, "50" + "0".repeat(18), {from: governance});
|
204
|
+
await globalIncentivesHelper.notifyPools([addresses.miFARM, addresses.WMATIC], ["50" + "0".repeat(18), "50" + "0".repeat(18)], "1637694000")
|
205
|
+
|
206
|
+
});
|
207
|
+
|
208
|
+
});
|
209
|
+
});
|
@@ -0,0 +1,129 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const {
|
4
|
+
impersonates,
|
5
|
+
setupCoreProtocol,
|
6
|
+
depositVault,
|
7
|
+
} = require("../utilities/hh-utils.js");
|
8
|
+
|
9
|
+
const addresses = require("../test-config.js");
|
10
|
+
const BigNumber = require("bignumber.js");
|
11
|
+
const IERC20 = artifacts.require("IERC20");
|
12
|
+
|
13
|
+
//const Strategy = artifacts.require("");
|
14
|
+
const Strategy = artifacts.require("AuraStrategyMainnet_jEUR_PAR");
|
15
|
+
const VaultProxyContract = artifacts.require("VaultProxy");
|
16
|
+
const VaultImplContract = artifacts.require("VaultERC4626");
|
17
|
+
|
18
|
+
// Developed and tested at blockNumber 51325000
|
19
|
+
|
20
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
21
|
+
describe("Polygon Mainnet Balancer 2EUR PAR", function() {
|
22
|
+
let accounts;
|
23
|
+
|
24
|
+
// external contracts
|
25
|
+
let underlying;
|
26
|
+
|
27
|
+
// external setup
|
28
|
+
let underlyingWhale = "0xD927cE147f098cE634301e6c4281541b1939a132";
|
29
|
+
|
30
|
+
// parties in the protocol
|
31
|
+
let governance;
|
32
|
+
let farmer1;
|
33
|
+
|
34
|
+
// numbers used in tests
|
35
|
+
let farmerBalance;
|
36
|
+
|
37
|
+
// Core protocol contracts
|
38
|
+
let controller;
|
39
|
+
let vault;
|
40
|
+
let strategy;
|
41
|
+
|
42
|
+
async function setupExternalContracts() {
|
43
|
+
underlying = await IERC20.at("0x513CdEE00251F39DE280d9E5f771A6eaFebCc88E");
|
44
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
45
|
+
}
|
46
|
+
|
47
|
+
async function setupBalance(){
|
48
|
+
let etherGiver = accounts[9];
|
49
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 100e18});
|
50
|
+
|
51
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
52
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
53
|
+
}
|
54
|
+
|
55
|
+
before(async function() {
|
56
|
+
governance = addresses.Governance;
|
57
|
+
accounts = await web3.eth.getAccounts();
|
58
|
+
|
59
|
+
farmer1 = accounts[1];
|
60
|
+
|
61
|
+
// impersonate accounts
|
62
|
+
await impersonates([governance, underlyingWhale]);
|
63
|
+
|
64
|
+
let etherGiver = accounts[9];
|
65
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 100e18});
|
66
|
+
|
67
|
+
await setupExternalContracts();
|
68
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
69
|
+
"existingVaultAddress": "0x41f36BB5B26F2E8646E6ADC97FAA5E2844a6c842",
|
70
|
+
"announceStrategy": true,
|
71
|
+
"strategyArtifact": Strategy,
|
72
|
+
"strategyArtifactIsUpgradable": true,
|
73
|
+
"underlying": underlying,
|
74
|
+
"governance": governance,
|
75
|
+
});
|
76
|
+
const newImpl = await VaultImplContract.new()
|
77
|
+
await vault.scheduleUpgrade(newImpl.address, {from: governance});
|
78
|
+
await Utils.waitHours(13);
|
79
|
+
const vaultProxy = await VaultProxyContract.at(vault.address);
|
80
|
+
await vaultProxy.upgrade({from: governance});
|
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
|
+
vault.withdraw(farmerOldBalance.div(10), {from: farmer1})
|
98
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
99
|
+
await controller.doHardWork(vault.address, { from: governance });
|
100
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
101
|
+
|
102
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
103
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
104
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
105
|
+
|
106
|
+
apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
107
|
+
apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
108
|
+
|
109
|
+
console.log("instant APR:", apr*100, "%");
|
110
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
111
|
+
|
112
|
+
await Utils.advanceNBlock(blocksPerHour);
|
113
|
+
}
|
114
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
115
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
116
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
117
|
+
|
118
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
119
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
120
|
+
|
121
|
+
console.log("earned!");
|
122
|
+
console.log("APR:", apr*100, "%");
|
123
|
+
console.log("APY:", (apy-1)*100, "%");
|
124
|
+
|
125
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
126
|
+
|
127
|
+
});
|
128
|
+
});
|
129
|
+
});
|