@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,182 @@
|
|
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
|
+
const IController = artifacts.require("IController");
|
10
|
+
const Vault = artifacts.require("Vault");
|
11
|
+
const PotPool = artifacts.require("PotPool");
|
12
|
+
|
13
|
+
const Strategy = artifacts.require("JarvisHodlStrategyV3Mainnet_2SGD");
|
14
|
+
|
15
|
+
const D18 = new BigNumber(Math.pow(10, 18));
|
16
|
+
|
17
|
+
//This test was developed at blockNumber 31157200
|
18
|
+
|
19
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
20
|
+
describe("Mainnet Jarvis 2SGD HODL in LP - Update rewardPool", function() {
|
21
|
+
let accounts;
|
22
|
+
|
23
|
+
// external contracts
|
24
|
+
let underlying;
|
25
|
+
|
26
|
+
// external setup
|
27
|
+
let underlyingWhale = "0xb10d235a3d9ad05443c6cd6b21cddd004a549d23";
|
28
|
+
let vaultAddr = "0x5AC8afa262C617bBA8Aa65a04E16CCfAc9e92350";
|
29
|
+
let potPoolAddr = "0x917D36698F7195B32C3dF66Af45556eD447C79Fe";
|
30
|
+
let hodlVaultAddr = "0x587155256938F081D6e48829d45849BD856Fd969";
|
31
|
+
|
32
|
+
let rewardPoolAddr = "0x2FAe83B3916e1467C970C113399ee91B31412bCD";
|
33
|
+
let rewardTokenAddr = "0xcE0248f30d565555B793f42e46E58879F2cDCCa4";
|
34
|
+
let rewardLPAddr = "0x2623D9a6cceb732f9e86125e107A18e7832B27e5";
|
35
|
+
let pid = 2;
|
36
|
+
|
37
|
+
// parties in the protocol
|
38
|
+
let governance;
|
39
|
+
let farmer1;
|
40
|
+
|
41
|
+
// numbers used in tests
|
42
|
+
let farmerBalance;
|
43
|
+
|
44
|
+
// Core protocol contracts
|
45
|
+
let controller;
|
46
|
+
let vault;
|
47
|
+
let strategy;
|
48
|
+
|
49
|
+
async function setupExternalContracts() {
|
50
|
+
underlying = await IERC20.at("0xeF75E9C7097842AcC5D0869E1dB4e5fDdf4BFDDA");
|
51
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
52
|
+
}
|
53
|
+
|
54
|
+
async function setupBalance(){
|
55
|
+
let etherGiver = accounts[9];
|
56
|
+
// Give whale some ether to make sure the following actions are good
|
57
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 1e18});
|
58
|
+
|
59
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
60
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
61
|
+
}
|
62
|
+
|
63
|
+
before(async function() {
|
64
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
65
|
+
accounts = await web3.eth.getAccounts();
|
66
|
+
|
67
|
+
farmer1 = accounts[1];
|
68
|
+
|
69
|
+
// impersonate accounts
|
70
|
+
await impersonates([governance, underlyingWhale]);
|
71
|
+
|
72
|
+
await setupExternalContracts();
|
73
|
+
|
74
|
+
controller = await IController.at(addresses.Controller);
|
75
|
+
vault = await Vault.at(vaultAddr);
|
76
|
+
hodlVault = await Vault.at(hodlVaultAddr);
|
77
|
+
strategy = await Strategy.at(await vault.strategy());
|
78
|
+
potPool = await PotPool.at(potPoolAddr);
|
79
|
+
|
80
|
+
await strategy.updateRewardPool(
|
81
|
+
rewardPoolAddr,
|
82
|
+
rewardTokenAddr,
|
83
|
+
rewardLPAddr,
|
84
|
+
pid,
|
85
|
+
hodlVaultAddr,
|
86
|
+
{from: governance});
|
87
|
+
|
88
|
+
await potPool.addRewardToken(hodlVaultAddr, {from: governance});
|
89
|
+
|
90
|
+
// whale send underlying to farmers
|
91
|
+
await setupBalance();
|
92
|
+
});
|
93
|
+
|
94
|
+
describe("Happy path", function() {
|
95
|
+
it("Farmer should earn money", async function() {
|
96
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
97
|
+
let farmerOldHodlBalance = new BigNumber(await hodlVault.balanceOf(farmer1));
|
98
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
99
|
+
let fTokenBalance = new BigNumber(await vault.balanceOf(farmer1));
|
100
|
+
|
101
|
+
let erc20Vault = await IERC20.at(vault.address);
|
102
|
+
await erc20Vault.approve(potPool.address, fTokenBalance, {from: farmer1});
|
103
|
+
await potPool.stake(fTokenBalance, {from: farmer1});
|
104
|
+
|
105
|
+
// Using half days is to simulate how we doHardwork in the real world
|
106
|
+
let hours = 10;
|
107
|
+
let blocksPerHour = 1565*5;
|
108
|
+
let oldSharePrice;
|
109
|
+
let newSharePrice;
|
110
|
+
let oldHodlSharePrice;
|
111
|
+
let newHodlSharePrice;
|
112
|
+
let oldPotPoolBalance;
|
113
|
+
let newPotPoolBalance;
|
114
|
+
let hodlPrice;
|
115
|
+
let lpPrice;
|
116
|
+
let oldValue;
|
117
|
+
let newValue;
|
118
|
+
for (let i = 0; i < hours; i++) {
|
119
|
+
console.log("loop ", i);
|
120
|
+
|
121
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
122
|
+
oldHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
123
|
+
oldPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
124
|
+
await controller.doHardWork(vault.address, {from: governance});
|
125
|
+
await controller.doHardWork(hodlVault.address, {from: governance});
|
126
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
127
|
+
newHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
128
|
+
newPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
129
|
+
|
130
|
+
hodlPrice = new BigNumber(37954455.80).times(D18);
|
131
|
+
lpPrice = new BigNumber(0.72).times(D18);
|
132
|
+
console.log("Hodl price:", hodlPrice.toFixed()/D18.toFixed());
|
133
|
+
console.log("LP price:", lpPrice.toFixed()/D18.toFixed());
|
134
|
+
|
135
|
+
oldValue = (fTokenBalance.times(oldSharePrice).times(lpPrice)).div(1e36).plus((oldPotPoolBalance.times(oldHodlSharePrice).times(hodlPrice)).div(1e36));
|
136
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((newPotPoolBalance.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
137
|
+
|
138
|
+
console.log("old value: ", oldValue.toFixed()/D18.toFixed());
|
139
|
+
console.log("new value: ", newValue.toFixed()/D18.toFixed());
|
140
|
+
console.log("growth: ", newValue.toFixed() / oldValue.toFixed());
|
141
|
+
|
142
|
+
console.log("HodlToken in potpool: ", newPotPoolBalance.toFixed());
|
143
|
+
|
144
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
145
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
146
|
+
|
147
|
+
console.log("instant APR:", apr*100, "%");
|
148
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
149
|
+
|
150
|
+
await Utils.advanceNBlock(blocksPerHour);
|
151
|
+
}
|
152
|
+
// withdrawAll to make sure no doHardwork is called when we do withdraw later.
|
153
|
+
await vault.withdrawAll({ from: governance });
|
154
|
+
|
155
|
+
// wait until all reward can be claimed by the farmer
|
156
|
+
await Utils.waitTime(86400 * 30 * 1000);
|
157
|
+
console.log("vaultBalance: ", fTokenBalance.toFixed());
|
158
|
+
await potPool.exit({from: farmer1});
|
159
|
+
await vault.withdraw(fTokenBalance.toFixed(), { from: farmer1 });
|
160
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
161
|
+
let farmerNewHodlBalance = new BigNumber(await hodlVault.balanceOf(farmer1));
|
162
|
+
Utils.assertBNGte(farmerNewBalance, farmerOldBalance);
|
163
|
+
Utils.assertBNGt(farmerNewHodlBalance, farmerOldHodlBalance);
|
164
|
+
|
165
|
+
oldValue = (fTokenBalance.times(1e18).times(lpPrice)).div(1e36);
|
166
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((farmerNewHodlBalance.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
167
|
+
|
168
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
169
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
170
|
+
|
171
|
+
console.log("Overall APR:", apr*100, "%");
|
172
|
+
console.log("Overall APY:", (apy-1)*100, "%");
|
173
|
+
|
174
|
+
console.log("potpool totalShare: ", (new BigNumber(await potPool.totalSupply())).toFixed());
|
175
|
+
console.log("HodlToken in potpool: ", (new BigNumber(await hodlVault.balanceOf(potPool.address))).toFixed() );
|
176
|
+
console.log("Farmer got HodlToken from potpool: ", farmerNewHodlBalance.toFixed());
|
177
|
+
console.log("earned!");
|
178
|
+
|
179
|
+
await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
|
180
|
+
});
|
181
|
+
});
|
182
|
+
});
|
@@ -0,0 +1,177 @@
|
|
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
|
+
const Vault = artifacts.require("Vault");
|
10
|
+
|
11
|
+
const Strategy = artifacts.require("JarvisHodlStrategyV2Mainnet_4EUR_V2");
|
12
|
+
const PotPool = artifacts.require("PotPool");
|
13
|
+
|
14
|
+
const D18 = new BigNumber(Math.pow(10, 18));
|
15
|
+
|
16
|
+
//This test was developed at blockNumber 24155700
|
17
|
+
|
18
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
19
|
+
describe("Mainnet Jarvis 4EUR HODL in LP", function() {
|
20
|
+
let accounts;
|
21
|
+
|
22
|
+
// external contracts
|
23
|
+
let underlying;
|
24
|
+
|
25
|
+
// external setup
|
26
|
+
let underlyingWhale = "0x88d5EB1993dD04bf2175f940e64fD49A90D13F8b";
|
27
|
+
let hodlUnderlying = "0xEb6f426963140471a7c1E4337877e6dBf834d2A8";
|
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
|
+
let potPool;
|
41
|
+
|
42
|
+
async function setupExternalContracts() {
|
43
|
+
underlying = await IERC20.at("0xAd326c253A84e9805559b73A08724e11E49ca651");
|
44
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
45
|
+
}
|
46
|
+
|
47
|
+
async function setupBalance(){
|
48
|
+
let etherGiver = accounts[9];
|
49
|
+
// Give whale some ether to make sure the following actions are good
|
50
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 1e18});
|
51
|
+
|
52
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
53
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
54
|
+
}
|
55
|
+
|
56
|
+
before(async function() {
|
57
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
58
|
+
accounts = await web3.eth.getAccounts();
|
59
|
+
|
60
|
+
farmer1 = accounts[1];
|
61
|
+
|
62
|
+
// impersonate accounts
|
63
|
+
await impersonates([governance, underlyingWhale]);
|
64
|
+
|
65
|
+
await setupExternalContracts();
|
66
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
67
|
+
"existingVaultAddress": "0xDDe43710DefEf6CbCf820B18DeBfC3cF9a4f449F",
|
68
|
+
"strategyArtifact": Strategy,
|
69
|
+
"strategyArtifactIsUpgradable": true,
|
70
|
+
"upgradeStrategy": true,
|
71
|
+
"underlying": underlying,
|
72
|
+
"governance": governance,
|
73
|
+
});
|
74
|
+
|
75
|
+
potPool = await PotPool.at("0xf74E8CFe03421D071c7dCCc3E5ecB6dDDede2f07");
|
76
|
+
await potPool.addRewardToken("0x8cccdEBF657F072D83B2d94068C4377a3BA91e08", {from: governance});
|
77
|
+
|
78
|
+
// whale send underlying to farmers
|
79
|
+
await setupBalance();
|
80
|
+
});
|
81
|
+
|
82
|
+
describe("Happy path", function() {
|
83
|
+
it("Farmer should earn money", async function() {
|
84
|
+
let hodlVault = await Vault.at("0x8cccdEBF657F072D83B2d94068C4377a3BA91e08");
|
85
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
86
|
+
let farmerOldfDEN_4EUR = new BigNumber(await hodlVault.balanceOf(farmer1));
|
87
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
88
|
+
let fTokenBalance = new BigNumber(await vault.balanceOf(farmer1));
|
89
|
+
|
90
|
+
let erc20Vault = await IERC20.at(vault.address);
|
91
|
+
await erc20Vault.approve(potPool.address, fTokenBalance, {from: farmer1});
|
92
|
+
await potPool.stake(fTokenBalance, {from: farmer1});
|
93
|
+
|
94
|
+
// Using half days is to simulate how we doHardwork in the real world
|
95
|
+
let hours = 10;
|
96
|
+
let blocksPerHour = 1565*5;
|
97
|
+
let oldSharePrice;
|
98
|
+
let newSharePrice;
|
99
|
+
let oldHodlSharePrice;
|
100
|
+
let newHodlSharePrice;
|
101
|
+
let oldPotPoolBalance;
|
102
|
+
let newPotPoolBalance;
|
103
|
+
let hodlPrice;
|
104
|
+
let lpPrice;
|
105
|
+
let oldValue;
|
106
|
+
let newValue;
|
107
|
+
for (let i = 0; i < hours; i++) {
|
108
|
+
console.log("loop ", i);
|
109
|
+
|
110
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
111
|
+
console.log(oldSharePrice.toFixed())
|
112
|
+
oldHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
113
|
+
console.log(oldHodlSharePrice.toFixed())
|
114
|
+
oldPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
115
|
+
console.log(oldPotPoolBalance.toFixed())
|
116
|
+
await controller.doHardWork(vault.address, {from: governance});
|
117
|
+
await controller.doHardWork(hodlVault.address, {from: governance});
|
118
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
119
|
+
console.log(newSharePrice.toFixed())
|
120
|
+
newHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
121
|
+
console.log(newHodlSharePrice.toFixed())
|
122
|
+
newPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
123
|
+
console.log(newPotPoolBalance.toFixed())
|
124
|
+
|
125
|
+
hodlPrice = new BigNumber(100).times(D18);
|
126
|
+
lpPrice = new BigNumber(1.1255).times(D18);
|
127
|
+
console.log("Hodl price:", hodlPrice.toFixed()/D18.toFixed());
|
128
|
+
console.log("LP price:", lpPrice.toFixed()/D18.toFixed());
|
129
|
+
|
130
|
+
oldValue = (fTokenBalance.times(oldSharePrice).times(lpPrice)).div(1e36).plus((oldPotPoolBalance.times(oldHodlSharePrice).times(hodlPrice)).div(1e36));
|
131
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((newPotPoolBalance.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
132
|
+
|
133
|
+
console.log("old value: ", oldValue.toFixed()/D18.toFixed());
|
134
|
+
console.log("new value: ", newValue.toFixed()/D18.toFixed());
|
135
|
+
console.log("growth: ", newValue.toFixed() / oldValue.toFixed());
|
136
|
+
|
137
|
+
console.log("fAUR-USDC in potpool: ", newPotPoolBalance.toFixed());
|
138
|
+
|
139
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
140
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
141
|
+
|
142
|
+
console.log("instant APR:", apr*100, "%");
|
143
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
144
|
+
|
145
|
+
await Utils.advanceNBlock(blocksPerHour);
|
146
|
+
}
|
147
|
+
// withdrawAll to make sure no doHardwork is called when we do withdraw later.
|
148
|
+
await vault.withdrawAll({ from: governance });
|
149
|
+
|
150
|
+
// wait until all reward can be claimed by the farmer
|
151
|
+
await Utils.waitTime(86400 * 30 * 1000);
|
152
|
+
console.log("vaultBalance: ", fTokenBalance.toFixed());
|
153
|
+
await potPool.exit({from: farmer1});
|
154
|
+
await vault.withdraw(fTokenBalance.toFixed(), { from: farmer1 });
|
155
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
156
|
+
let farmerNewfDEN_4EUR = new BigNumber(await hodlVault.balanceOf(farmer1));
|
157
|
+
Utils.assertBNGte(farmerNewBalance, farmerOldBalance);
|
158
|
+
Utils.assertBNGt(farmerNewfDEN_4EUR, farmerOldfDEN_4EUR);
|
159
|
+
|
160
|
+
oldValue = (fTokenBalance.times(1e18).times(lpPrice)).div(1e36);
|
161
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((farmerNewfDEN_4EUR.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
162
|
+
|
163
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
164
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
165
|
+
|
166
|
+
console.log("Overall APR:", apr*100, "%");
|
167
|
+
console.log("Overall APY:", (apy-1)*100, "%");
|
168
|
+
|
169
|
+
console.log("potpool totalShare: ", (new BigNumber(await potPool.totalSupply())).toFixed());
|
170
|
+
console.log("fAUR-USDC in potpool: ", (new BigNumber(await hodlVault.balanceOf(potPool.address))).toFixed() );
|
171
|
+
console.log("Farmer got fAUR-USDC from potpool: ", farmerNewfDEN_4EUR.toFixed());
|
172
|
+
console.log("earned!");
|
173
|
+
|
174
|
+
await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
|
175
|
+
});
|
176
|
+
});
|
177
|
+
});
|
@@ -0,0 +1,183 @@
|
|
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("JarvisStrategyV2Mainnet_DEN_4EUR");
|
11
|
+
const Strategy = artifacts.require("JarvisHodlStrategyV2Mainnet_4EUR");
|
12
|
+
|
13
|
+
const D18 = new BigNumber(Math.pow(10, 18));
|
14
|
+
|
15
|
+
//This test was developed at blockNumber 21935800
|
16
|
+
|
17
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
18
|
+
describe("Mainnet Jarvis 4EUR HODL in LP", function() {
|
19
|
+
let accounts;
|
20
|
+
|
21
|
+
// external contracts
|
22
|
+
let underlying;
|
23
|
+
|
24
|
+
// external setup
|
25
|
+
let underlyingWhale = "0x293C173b0AE90cD27c349cd8892EFA625A98DBae";
|
26
|
+
let hodlUnderlying = "0x4924B6E1207EFb244433294619a5ADD08ACB3dfF";
|
27
|
+
|
28
|
+
// parties in the protocol
|
29
|
+
let governance;
|
30
|
+
let farmer1;
|
31
|
+
|
32
|
+
// numbers used in tests
|
33
|
+
let farmerBalance;
|
34
|
+
|
35
|
+
// Core protocol contracts
|
36
|
+
let controller;
|
37
|
+
let vault;
|
38
|
+
let strategy;
|
39
|
+
|
40
|
+
async function setupExternalContracts() {
|
41
|
+
underlying = await IERC20.at("0xAd326c253A84e9805559b73A08724e11E49ca651");
|
42
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
43
|
+
}
|
44
|
+
|
45
|
+
async function setupBalance(){
|
46
|
+
let etherGiver = accounts[9];
|
47
|
+
// Give whale some ether to make sure the following actions are good
|
48
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: underlyingWhale, value: 1e18});
|
49
|
+
|
50
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
51
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
52
|
+
}
|
53
|
+
|
54
|
+
before(async function() {
|
55
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
56
|
+
accounts = await web3.eth.getAccounts();
|
57
|
+
|
58
|
+
farmer1 = accounts[1];
|
59
|
+
|
60
|
+
// impersonate accounts
|
61
|
+
await impersonates([governance, underlyingWhale]);
|
62
|
+
|
63
|
+
await setupExternalContracts();
|
64
|
+
[controller, hodlVault, hodlStrategy] = await setupCoreProtocol({
|
65
|
+
"existingVaultAddress": null,
|
66
|
+
"strategyArtifact": HodlStrategy,
|
67
|
+
"strategyArtifactIsUpgradable": true,
|
68
|
+
"underlying": await IERC20.at(hodlUnderlying),
|
69
|
+
"governance": governance,
|
70
|
+
});
|
71
|
+
[controller, vault, strategy, potPool] = await setupCoreProtocol({
|
72
|
+
"existingVaultAddress": null,
|
73
|
+
"strategyArtifact": Strategy,
|
74
|
+
"strategyArtifactIsUpgradable": true,
|
75
|
+
"underlying": underlying,
|
76
|
+
"governance": governance,
|
77
|
+
"rewardPool" : true,
|
78
|
+
"rewardPoolConfig": {
|
79
|
+
type: 'PotPool',
|
80
|
+
rewardTokens: [
|
81
|
+
hodlVault.address // fDEN-4EUR
|
82
|
+
]
|
83
|
+
},
|
84
|
+
});
|
85
|
+
|
86
|
+
await strategy.setHodlVault(hodlVault.address, {from: governance});
|
87
|
+
await strategy.setPotPool(potPool.address, {from: governance});
|
88
|
+
await potPool.setRewardDistribution([strategy.address], true, {from: governance});
|
89
|
+
// await controller.addToWhitelist(strategy.address, {from: governance});
|
90
|
+
|
91
|
+
// whale send underlying to farmers
|
92
|
+
await setupBalance();
|
93
|
+
});
|
94
|
+
|
95
|
+
describe("Happy path", function() {
|
96
|
+
it("Farmer should earn money", async function() {
|
97
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
98
|
+
let farmerOldfDEN_4EUR = new BigNumber(await hodlVault.balanceOf(farmer1));
|
99
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
100
|
+
let fTokenBalance = new BigNumber(await vault.balanceOf(farmer1));
|
101
|
+
|
102
|
+
let erc20Vault = await IERC20.at(vault.address);
|
103
|
+
await erc20Vault.approve(potPool.address, fTokenBalance, {from: farmer1});
|
104
|
+
await potPool.stake(fTokenBalance, {from: farmer1});
|
105
|
+
|
106
|
+
// Using half days is to simulate how we doHardwork in the real world
|
107
|
+
let hours = 10;
|
108
|
+
let blocksPerHour = 1565*5;
|
109
|
+
let oldSharePrice;
|
110
|
+
let newSharePrice;
|
111
|
+
let oldHodlSharePrice;
|
112
|
+
let newHodlSharePrice;
|
113
|
+
let oldPotPoolBalance;
|
114
|
+
let newPotPoolBalance;
|
115
|
+
let hodlPrice;
|
116
|
+
let lpPrice;
|
117
|
+
let oldValue;
|
118
|
+
let newValue;
|
119
|
+
for (let i = 0; i < hours; i++) {
|
120
|
+
console.log("loop ", i);
|
121
|
+
|
122
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
123
|
+
oldHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
124
|
+
oldPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
125
|
+
await controller.doHardWork(vault.address, {from: governance});
|
126
|
+
await controller.doHardWork(hodlVault.address, {from: governance});
|
127
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
128
|
+
newHodlSharePrice = new BigNumber(await hodlVault.getPricePerFullShare());
|
129
|
+
newPotPoolBalance = new BigNumber(await hodlVault.balanceOf(potPool.address));
|
130
|
+
|
131
|
+
hodlPrice = new BigNumber(119.387).times(D18);
|
132
|
+
lpPrice = new BigNumber(1.1255).times(D18);
|
133
|
+
console.log("Hodl price:", hodlPrice.toFixed()/D18.toFixed());
|
134
|
+
console.log("LP price:", lpPrice.toFixed()/D18.toFixed());
|
135
|
+
|
136
|
+
oldValue = (fTokenBalance.times(oldSharePrice).times(lpPrice)).div(1e36).plus((oldPotPoolBalance.times(oldHodlSharePrice).times(hodlPrice)).div(1e36));
|
137
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((newPotPoolBalance.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
138
|
+
|
139
|
+
console.log("old value: ", oldValue.toFixed()/D18.toFixed());
|
140
|
+
console.log("new value: ", newValue.toFixed()/D18.toFixed());
|
141
|
+
console.log("growth: ", newValue.toFixed() / oldValue.toFixed());
|
142
|
+
|
143
|
+
console.log("fAUR-USDC in potpool: ", newPotPoolBalance.toFixed());
|
144
|
+
|
145
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
146
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
147
|
+
|
148
|
+
console.log("instant APR:", apr*100, "%");
|
149
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
150
|
+
|
151
|
+
await Utils.advanceNBlock(blocksPerHour);
|
152
|
+
}
|
153
|
+
// withdrawAll to make sure no doHardwork is called when we do withdraw later.
|
154
|
+
await vault.withdrawAll({ from: governance });
|
155
|
+
|
156
|
+
// wait until all reward can be claimed by the farmer
|
157
|
+
await Utils.waitTime(86400 * 30 * 1000);
|
158
|
+
console.log("vaultBalance: ", fTokenBalance.toFixed());
|
159
|
+
await potPool.exit({from: farmer1});
|
160
|
+
await vault.withdraw(fTokenBalance.toFixed(), { from: farmer1 });
|
161
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
162
|
+
let farmerNewfDEN_4EUR = new BigNumber(await hodlVault.balanceOf(farmer1));
|
163
|
+
Utils.assertBNGte(farmerNewBalance, farmerOldBalance);
|
164
|
+
Utils.assertBNGt(farmerNewfDEN_4EUR, farmerOldfDEN_4EUR);
|
165
|
+
|
166
|
+
oldValue = (fTokenBalance.times(1e18).times(lpPrice)).div(1e36);
|
167
|
+
newValue = (fTokenBalance.times(newSharePrice).times(lpPrice)).div(1e36).plus((farmerNewfDEN_4EUR.times(newHodlSharePrice).times(hodlPrice)).div(1e36));
|
168
|
+
|
169
|
+
apr = (newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
170
|
+
apy = ((newValue.toFixed()/oldValue.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
171
|
+
|
172
|
+
console.log("Overall APR:", apr*100, "%");
|
173
|
+
console.log("Overall APY:", (apy-1)*100, "%");
|
174
|
+
|
175
|
+
console.log("potpool totalShare: ", (new BigNumber(await potPool.totalSupply())).toFixed());
|
176
|
+
console.log("fAUR-USDC in potpool: ", (new BigNumber(await hodlVault.balanceOf(potPool.address))).toFixed() );
|
177
|
+
console.log("Farmer got fAUR-USDC from potpool: ", farmerNewfDEN_4EUR.toFixed());
|
178
|
+
console.log("earned!");
|
179
|
+
|
180
|
+
await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
|
181
|
+
});
|
182
|
+
});
|
183
|
+
});
|