@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,96 @@
|
|
1
|
+
const BigNumber = require('bignumber.js');
|
2
|
+
const { time } = require("@openzeppelin/test-helpers");
|
3
|
+
BigNumber.config({DECIMAL_PLACES: 0});
|
4
|
+
|
5
|
+
let gasLogger = {};
|
6
|
+
let gasLoggerNum = {};
|
7
|
+
|
8
|
+
async function gasLog(logTo, targetPromise) {
|
9
|
+
let tx = await targetPromise;
|
10
|
+
gasUsed = tx.receipt.gasUsed;
|
11
|
+
|
12
|
+
if(gasLogger[logTo] == undefined) {
|
13
|
+
gasLogger[logTo] = gasUsed;
|
14
|
+
gasLoggerNum[logTo] = 1;
|
15
|
+
}
|
16
|
+
else {
|
17
|
+
gasLogger[logTo] = (gasLogger[logTo])/(gasLoggerNum[logTo]+1) + gasUsed/(gasLoggerNum[logTo]+1);
|
18
|
+
gasLoggerNum[logTo]++;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
async function printGasLog() {
|
23
|
+
console.log(gasLogger);
|
24
|
+
}
|
25
|
+
|
26
|
+
async function advanceNBlock (n) {
|
27
|
+
let startingBlock = await time.latestBlock();
|
28
|
+
await time.increase(2.3 * Math.round(n));
|
29
|
+
let endBlock = startingBlock.addn(n);
|
30
|
+
await time.advanceBlockTo(endBlock);
|
31
|
+
}
|
32
|
+
async function waitHours (n) {
|
33
|
+
await time.increase(n * 3600 + 1);
|
34
|
+
let startingBlock = await time.latestBlock();
|
35
|
+
await time.advanceBlockTo(startingBlock.addn(1));
|
36
|
+
};
|
37
|
+
|
38
|
+
async function waitTime (n) {
|
39
|
+
await time.increase(n);
|
40
|
+
let startingBlock = await time.latestBlock();
|
41
|
+
await time.advanceBlockTo(startingBlock.addn(1));
|
42
|
+
};
|
43
|
+
|
44
|
+
function assertBNEq(a, b){
|
45
|
+
let _a = new BigNumber(a);
|
46
|
+
let _b = new BigNumber(b);
|
47
|
+
let msg = _a.toFixed() + " != " + _b.toFixed();
|
48
|
+
assert.equal(_a.eq(_b), true, msg);
|
49
|
+
}
|
50
|
+
|
51
|
+
function assertApproxBNEq(a, b, c){
|
52
|
+
let _a = new BigNumber(a).div(c);
|
53
|
+
let _b = new BigNumber(b).div(c);
|
54
|
+
let msg = _a.toFixed() + " != " + _b.toFixed();
|
55
|
+
assert.equal(_a.eq(_b), true, msg);
|
56
|
+
}
|
57
|
+
|
58
|
+
function assertBNGt(a, b){
|
59
|
+
let _a = new BigNumber(a);
|
60
|
+
let _b = new BigNumber(b);
|
61
|
+
let msg = _a.toFixed() + " is not greater than " + _b.toFixed();
|
62
|
+
assert.equal(_a.gt(_b), true, msg);
|
63
|
+
}
|
64
|
+
|
65
|
+
function assertBNGte(a, b){
|
66
|
+
let _a = new BigNumber(a);
|
67
|
+
let _b = new BigNumber(b);
|
68
|
+
let msg = _a.toFixed() + " is not greater than " + _b.toFixed();
|
69
|
+
assert.equal(_a.gte(_b), true, msg);
|
70
|
+
}
|
71
|
+
|
72
|
+
function assertNEqBN(a, b){
|
73
|
+
let _a = new BigNumber(a);
|
74
|
+
let _b = new BigNumber(b);
|
75
|
+
assert.equal(_a.eq(_b), false);
|
76
|
+
}
|
77
|
+
|
78
|
+
async function inBNfixed(a) {
|
79
|
+
return await (new BigNumber(a)).toFixed();
|
80
|
+
}
|
81
|
+
|
82
|
+
module.exports = {
|
83
|
+
gasLogger,
|
84
|
+
gasLoggerNum,
|
85
|
+
gasLog,
|
86
|
+
printGasLog,
|
87
|
+
advanceNBlock,
|
88
|
+
assertBNEq,
|
89
|
+
assertApproxBNEq,
|
90
|
+
assertBNGt,
|
91
|
+
assertNEqBN,
|
92
|
+
inBNfixed,
|
93
|
+
waitHours,
|
94
|
+
waitTime,
|
95
|
+
assertBNGte,
|
96
|
+
};
|
@@ -0,0 +1,242 @@
|
|
1
|
+
const makeVault = require("./make-vault.js");
|
2
|
+
const addresses = require("../test-config.js");
|
3
|
+
const IController = artifacts.require("IControllerV2");
|
4
|
+
const IRewardForwarder = artifacts.require("IRewardForwarder");
|
5
|
+
const IUniswapRouterV2 = artifacts.require("contracts/base/interface/uniswap/IUniswapV2Router02.sol:IUniswapV2Router02");
|
6
|
+
const IERC20 = artifacts.require("IERC20");
|
7
|
+
const Vault = artifacts.require("VaultV2");
|
8
|
+
const WMATIC = artifacts.require("WMATIC")
|
9
|
+
const IUpgradeableStrategy = artifacts.require("IUpgradeableStrategy");
|
10
|
+
const ILiquidatorRegistry = artifacts.require("IUniversalLiquidatorRegistry");
|
11
|
+
|
12
|
+
const Utils = require("./Utils.js");
|
13
|
+
|
14
|
+
async function impersonates(targetAccounts){
|
15
|
+
console.log("Impersonating...");
|
16
|
+
for(i = 0; i < targetAccounts.length ; i++){
|
17
|
+
console.log(targetAccounts[i]);
|
18
|
+
await hre.network.provider.request({
|
19
|
+
method: "hardhat_impersonateAccount",
|
20
|
+
params: [
|
21
|
+
targetAccounts[i]
|
22
|
+
]
|
23
|
+
});
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
async function setupCoreProtocol(config) {
|
28
|
+
// Set vault (or Deploy new vault), underlying, underlying Whale,
|
29
|
+
// amount the underlying whale should send to farmers
|
30
|
+
if(config.existingVaultAddress != null){
|
31
|
+
vault = await Vault.at(config.existingVaultAddress);
|
32
|
+
console.log("Fetching Vault at: ", vault.address);
|
33
|
+
} else {
|
34
|
+
const implAddress = config.vaultImplementationOverride || addresses.VaultImplementationV2;
|
35
|
+
vault = await makeVault(implAddress, addresses.Storage, config.underlying.address, 100, 100, {
|
36
|
+
from: config.governance,
|
37
|
+
});
|
38
|
+
console.log("New Vault Deployed: ", vault.address);
|
39
|
+
}
|
40
|
+
|
41
|
+
controller = await IController.at(addresses.Controller);
|
42
|
+
feeRewardForwarder = await IRewardForwarder.at(await controller.rewardForwarder());
|
43
|
+
|
44
|
+
|
45
|
+
if (config.feeRewardForwarder) {/*
|
46
|
+
const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
|
47
|
+
const feeRewardForwarder = await FeeRewardForwarder.new(
|
48
|
+
addresses.Storage,
|
49
|
+
addresses.FARM,
|
50
|
+
addresses.miFARM,
|
51
|
+
addresses.UniversalLiquidatorRegistry
|
52
|
+
);
|
53
|
+
|
54
|
+
config.feeRewardForwarder = feeRewardForwarder.address;*/
|
55
|
+
console.log("Setting up a custom fee reward forwarder...");
|
56
|
+
await controller.setFeeRewardForwarder(
|
57
|
+
config.feeRewardForwarder,
|
58
|
+
{ from: config.governance }
|
59
|
+
);
|
60
|
+
|
61
|
+
const NoMintRewardPool = artifacts.require("NoMintRewardPool");
|
62
|
+
const farmRewardPool = await NoMintRewardPool.at("0x8f5adC58b32D4e5Ca02EAC0E293D35855999436C");
|
63
|
+
await farmRewardPool.setRewardDistribution(config.feeRewardForwarder, {from: config.governance});
|
64
|
+
|
65
|
+
console.log("Done setting up fee reward forwarder!");
|
66
|
+
}
|
67
|
+
|
68
|
+
let rewardPool = null;
|
69
|
+
|
70
|
+
if (!config.rewardPoolConfig) {
|
71
|
+
config.rewardPoolConfig = {};
|
72
|
+
}
|
73
|
+
// if reward pool is required, then deploy it
|
74
|
+
if(config.rewardPool != null && config.existingRewardPoolAddress == null) {
|
75
|
+
const rewardTokens = config.rewardPoolConfig.rewardTokens || [addresses.FARM];
|
76
|
+
const rewardDistributions = [config.governance];
|
77
|
+
if (config.feeRewardForwarder) {
|
78
|
+
rewardDistributions.push(config.feeRewardForwarder);
|
79
|
+
}
|
80
|
+
|
81
|
+
if (config.rewardPoolConfig.type === 'PotPool') {
|
82
|
+
const PotPool = artifacts.require("PotPool");
|
83
|
+
console.log("reward pool needs to be deployed");
|
84
|
+
rewardPool = await PotPool.new(
|
85
|
+
rewardTokens,
|
86
|
+
vault.address,
|
87
|
+
64800,
|
88
|
+
rewardDistributions,
|
89
|
+
addresses.Storage,
|
90
|
+
"fPool",
|
91
|
+
"fPool",
|
92
|
+
18,
|
93
|
+
{from: config.governance }
|
94
|
+
);
|
95
|
+
console.log("New PotPool deployed: ", rewardPool.address);
|
96
|
+
} else {
|
97
|
+
const NoMintRewardPool = artifacts.require("NoMintRewardPool");
|
98
|
+
console.log("reward pool needs to be deployed");
|
99
|
+
rewardPool = await NoMintRewardPool.new(
|
100
|
+
rewardTokens[0],
|
101
|
+
vault.address,
|
102
|
+
64800,
|
103
|
+
rewardDistributions,
|
104
|
+
addresses.Storage,
|
105
|
+
"0x0000000000000000000000000000000000000000",
|
106
|
+
"0x0000000000000000000000000000000000000000",
|
107
|
+
{from: config.governance }
|
108
|
+
);
|
109
|
+
console.log("New NoMintRewardPool deployed: ", rewardPool.address);
|
110
|
+
}
|
111
|
+
} else if(config.existingRewardPoolAddress != null) {
|
112
|
+
const PotPool = artifacts.require("PotPool");
|
113
|
+
rewardPool = await PotPool.at(config.existingRewardPoolAddress);
|
114
|
+
console.log("Fetching Reward Pool deployed: ", rewardPool.address);
|
115
|
+
}
|
116
|
+
|
117
|
+
// default arguments are storage and vault addresses
|
118
|
+
config.strategyArgs = config.strategyArgs || [
|
119
|
+
addresses.Storage,
|
120
|
+
vault.address
|
121
|
+
];
|
122
|
+
|
123
|
+
for(i = 0; i < config.strategyArgs.length ; i++){
|
124
|
+
if(config.strategyArgs[i] == "storageAddr") {
|
125
|
+
config.strategyArgs[i] = addresses.Storage;
|
126
|
+
} else if(config.strategyArgs[i] == "vaultAddr") {
|
127
|
+
config.strategyArgs[i] = vault.address;
|
128
|
+
} else if(config.strategyArgs[i] == "poolAddr" ){
|
129
|
+
config.strategyArgs[i] = rewardPool.address;
|
130
|
+
} else if(config.strategyArgs[i] == "universalLiquidatorRegistryAddr"){
|
131
|
+
config.strategyArgs[i] = universalLiquidatorRegistry.address;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
let strategyImpl = null;
|
136
|
+
|
137
|
+
if (!config.strategyArtifactIsUpgradable) {
|
138
|
+
strategy = await config.strategyArtifact.new(
|
139
|
+
...config.strategyArgs,
|
140
|
+
{ from: config.governance }
|
141
|
+
);
|
142
|
+
} else {
|
143
|
+
strategyImpl = await config.strategyArtifact.new();
|
144
|
+
const StrategyProxy = artifacts.require("StrategyProxy");
|
145
|
+
|
146
|
+
const strategyProxy = await StrategyProxy.new(strategyImpl.address);
|
147
|
+
strategy = await config.strategyArtifact.at(strategyProxy.address);
|
148
|
+
await strategy.initializeStrategy(
|
149
|
+
...config.strategyArgs,
|
150
|
+
{ from: config.governance }
|
151
|
+
);
|
152
|
+
}
|
153
|
+
|
154
|
+
console.log("Strategy Deployed: ", strategy.address);
|
155
|
+
|
156
|
+
let universalLiquidatorRegistry = await ILiquidatorRegistry.at(addresses.UniversalLiquidatorRegistry);
|
157
|
+
// set liquidation paths
|
158
|
+
if(config.liquidation) {
|
159
|
+
for (i=0;i<config.liquidation.length;i++) {
|
160
|
+
dex = Object.keys(config.liquidation[i])[0];
|
161
|
+
await universalLiquidatorRegistry.setPath(
|
162
|
+
web3.utils.keccak256(dex),
|
163
|
+
config.liquidation[i][dex],
|
164
|
+
{from: config.ULOwner}
|
165
|
+
);
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
if (config.announceStrategy === true) {
|
170
|
+
// Announce switch, time pass, switch to strategy
|
171
|
+
await vault.announceStrategyUpdate(strategy.address, { from: config.governance });
|
172
|
+
console.log("Strategy switch announced. Waiting...");
|
173
|
+
await Utils.waitHours(13);
|
174
|
+
await vault.setStrategy(strategy.address, { from: config.governance });
|
175
|
+
await vault.setVaultFractionToInvest(100, 100, { from: config.governance });
|
176
|
+
console.log("Strategy switch completed.");
|
177
|
+
} else if (config.upgradeStrategy === true) {
|
178
|
+
// Announce upgrade, time pass, upgrade the strategy
|
179
|
+
const strategyAsUpgradable = await IUpgradeableStrategy.at(await vault.strategy());
|
180
|
+
await strategyAsUpgradable.scheduleUpgrade(strategyImpl.address, { from: config.governance });
|
181
|
+
console.log("Upgrade scheduled. Waiting...");
|
182
|
+
await Utils.waitHours(13);
|
183
|
+
await strategyAsUpgradable.upgrade({ from: config.governance });
|
184
|
+
await vault.setVaultFractionToInvest(100, 100, { from: config.governance });
|
185
|
+
strategy = await config.strategyArtifact.at(await vault.strategy());
|
186
|
+
console.log("Strategy upgrade completed.");
|
187
|
+
} else {
|
188
|
+
await vault.setStrategy(strategy.address, {from: config.governance});
|
189
|
+
}
|
190
|
+
|
191
|
+
return [controller, vault, strategy, rewardPool];
|
192
|
+
}
|
193
|
+
|
194
|
+
async function depositVault(_farmer, _underlying, _vault, _amount) {
|
195
|
+
await _underlying.approve(_vault.address, _amount, { from: _farmer });
|
196
|
+
await _vault.deposit(_amount, _farmer, { from: _farmer });
|
197
|
+
}
|
198
|
+
|
199
|
+
async function swapMaticToToken(_farmer, _path, _amountMatic, _router) {
|
200
|
+
router = await IUniswapRouterV2.at(_router);
|
201
|
+
|
202
|
+
await router.swapExactETHForTokens(
|
203
|
+
0,
|
204
|
+
_path,
|
205
|
+
_farmer,
|
206
|
+
Date.now() + 900000,
|
207
|
+
{ value:_amountMatic, from: _farmer });
|
208
|
+
}
|
209
|
+
|
210
|
+
async function wrapMATIC(_farmer, _amount) {
|
211
|
+
wbnb = await WMATIC.at(addresses.WMATIC);
|
212
|
+
await wbnb.deposit({value:_amount, from:_farmer});
|
213
|
+
}
|
214
|
+
|
215
|
+
async function addLiquidity(_farmer, _token0, _token1, _amount0, _amount1, _router) {
|
216
|
+
router = await IUniswapRouterV2.at(_router);
|
217
|
+
if (_token0 == "Matic") {
|
218
|
+
wrapMATIC(_farmer, _amount0);
|
219
|
+
_token0 = await IERC20.at(addresses.WMATIC);
|
220
|
+
}
|
221
|
+
await _token0.approve(router.address, _amount0, { from:_farmer});
|
222
|
+
await _token1.approve(router.address, _amount1, { from:_farmer});
|
223
|
+
await router.addLiquidity(
|
224
|
+
_token0.address,
|
225
|
+
_token1.address,
|
226
|
+
_amount0,
|
227
|
+
_amount1,
|
228
|
+
0,
|
229
|
+
0,
|
230
|
+
_farmer,
|
231
|
+
Date.now() + 900000,
|
232
|
+
{ from: _farmer });
|
233
|
+
}
|
234
|
+
|
235
|
+
module.exports = {
|
236
|
+
impersonates,
|
237
|
+
setupCoreProtocol,
|
238
|
+
depositVault,
|
239
|
+
swapMaticToToken,
|
240
|
+
wrapMATIC,
|
241
|
+
addLiquidity
|
242
|
+
};
|
@@ -0,0 +1,10 @@
|
|
1
|
+
const Vault = artifacts.require("VaultERC4626");
|
2
|
+
const VaultProxy = artifacts.require("VaultProxy");
|
3
|
+
|
4
|
+
module.exports = async function(implementationAddress, ...args) {
|
5
|
+
const fromParameter = args[args.length - 1]; // corresponds to {from: governance}
|
6
|
+
const vaultAsProxy = await VaultProxy.new(implementationAddress, fromParameter);
|
7
|
+
const vault = await Vault.at(vaultAsProxy.address);
|
8
|
+
await vault.initializeVault(...args);
|
9
|
+
return vault;
|
10
|
+
};
|
@@ -0,0 +1,129 @@
|
|
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 Strategy = artifacts.require("YelStrategyMainnet_YEL_WMATIC");
|
11
|
+
const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
|
12
|
+
|
13
|
+
//This test was developed at blockNumber 23558000
|
14
|
+
|
15
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
16
|
+
describe("Mainnet YEL YEL-WMATIC compounding", function() {
|
17
|
+
let accounts;
|
18
|
+
|
19
|
+
// external contracts
|
20
|
+
let underlying;
|
21
|
+
|
22
|
+
// external setup
|
23
|
+
let underlyingWhale = "0x4e5b3043FEB9f939448e2F791a66C4EA65A315a8";
|
24
|
+
let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
|
25
|
+
let quickRouter = "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff";
|
26
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
27
|
+
let yel = "0xD3b71117E6C1558c1553305b44988cd944e97300";
|
28
|
+
let wmatic = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
|
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("0x8bAb87ECF28Bf45507Bd745bc70532e968b5c2De");
|
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: 10e18});
|
51
|
+
await web3.eth.sendTransaction({ from: etherGiver, to: governance, value: 10e18});
|
52
|
+
|
53
|
+
farmerBalance = await underlying.balanceOf(underlyingWhale);
|
54
|
+
await underlying.transfer(farmer1, farmerBalance, { from: underlyingWhale });
|
55
|
+
}
|
56
|
+
|
57
|
+
before(async function() {
|
58
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
59
|
+
accounts = await web3.eth.getAccounts();
|
60
|
+
|
61
|
+
farmer1 = accounts[1];
|
62
|
+
|
63
|
+
// impersonate accounts
|
64
|
+
await impersonates([governance, underlyingWhale]);
|
65
|
+
|
66
|
+
await setupExternalContracts();
|
67
|
+
|
68
|
+
// whale send underlying to farmers
|
69
|
+
await setupBalance();
|
70
|
+
|
71
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
72
|
+
"existingVaultAddress": null,
|
73
|
+
"strategyArtifact": Strategy,
|
74
|
+
"strategyArtifactIsUpgradable": true,
|
75
|
+
"underlying": underlying,
|
76
|
+
"governance": governance,
|
77
|
+
});
|
78
|
+
|
79
|
+
feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
|
80
|
+
let path = [yel, wmatic, weth];
|
81
|
+
let dexes = [quickRouter];
|
82
|
+
await feeForwarder.setConversionPath(path, dexes, { from: governance });
|
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
|
+
let fTokenBalance = await vault.balanceOf(farmer1);
|
90
|
+
|
91
|
+
// Using half days is to simulate how we doHardwork in the real world
|
92
|
+
let hours = 10;
|
93
|
+
let blocksPerHour = 1565;
|
94
|
+
let oldSharePrice;
|
95
|
+
let newSharePrice;
|
96
|
+
for (let i = 0; i < hours; i++) {
|
97
|
+
console.log("loop ", i);
|
98
|
+
|
99
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
100
|
+
await controller.doHardWork(vault.address, { from: governance });
|
101
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
102
|
+
|
103
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
104
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
105
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
106
|
+
|
107
|
+
apr = (newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))*365;
|
108
|
+
apy = ((newSharePrice.toFixed()/oldSharePrice.toFixed()-1)*(24/(blocksPerHour/1565))+1)**365;
|
109
|
+
|
110
|
+
console.log("instant APR:", apr*100, "%");
|
111
|
+
console.log("instant APY:", (apy-1)*100, "%");
|
112
|
+
|
113
|
+
await Utils.advanceNBlock(blocksPerHour);
|
114
|
+
}
|
115
|
+
await vault.withdraw(fTokenBalance, { from: farmer1 });
|
116
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
117
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
118
|
+
|
119
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
120
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
121
|
+
|
122
|
+
console.log("earned!");
|
123
|
+
console.log("Overall APR:", apr*100, "%");
|
124
|
+
console.log("Overall APY:", (apy-1)*100, "%");
|
125
|
+
|
126
|
+
await strategy.withdrawAllToVault({ from: governance }); // making sure can withdraw all for a next switch
|
127
|
+
});
|
128
|
+
});
|
129
|
+
});
|