@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,157 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const {
|
4
|
+
impersonates,
|
5
|
+
setupCoreProtocol,
|
6
|
+
depositVault,
|
7
|
+
swapMaticToToken,
|
8
|
+
wrapMATIC,
|
9
|
+
addLiquidity
|
10
|
+
} = require("../utilities/hh-utils.js");
|
11
|
+
|
12
|
+
const addresses = require("../test-config.js");
|
13
|
+
const { send } = require("@openzeppelin/test-helpers");
|
14
|
+
const BigNumber = require("bignumber.js");
|
15
|
+
const IERC20 = artifacts.require("IERC20");
|
16
|
+
|
17
|
+
//const Strategy = artifacts.require("");
|
18
|
+
const Strategy = artifacts.require("ApeStrategyMainnet_BANANA_MATIC");
|
19
|
+
const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
|
20
|
+
|
21
|
+
const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
|
22
|
+
|
23
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
24
|
+
describe("Polygon Mainnet ApeSwap BANANA/MATIC", function() {
|
25
|
+
let accounts;
|
26
|
+
|
27
|
+
// external contracts
|
28
|
+
let underlying;
|
29
|
+
|
30
|
+
// external setup
|
31
|
+
let token0Addr = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C"; //banana
|
32
|
+
let token1Addr = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; //wmatic
|
33
|
+
let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
|
34
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
35
|
+
|
36
|
+
// parties in the protocol
|
37
|
+
let governance;
|
38
|
+
let farmer1;
|
39
|
+
|
40
|
+
// numbers used in tests
|
41
|
+
let farmerBalance;
|
42
|
+
|
43
|
+
// Core protocol contracts
|
44
|
+
let controller;
|
45
|
+
let vault;
|
46
|
+
let strategy;
|
47
|
+
let token0;
|
48
|
+
let farmerToken0Balance;
|
49
|
+
let token1;
|
50
|
+
let farmerToken1Balance;
|
51
|
+
|
52
|
+
async function setupExternalContracts() {
|
53
|
+
underlying = await IERC20.at("0x034293F21F1cCE5908BC605CE5850dF2b1059aC0");
|
54
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
55
|
+
}
|
56
|
+
|
57
|
+
async function setupBalance(){
|
58
|
+
token0 = await IERC20.at(token0Addr);
|
59
|
+
token1 = await IERC20.at(token1Addr);
|
60
|
+
|
61
|
+
await swapMaticToToken (
|
62
|
+
farmer1,
|
63
|
+
[addresses.WMATIC, token0.address],
|
64
|
+
"1000" + "000000000000000000",
|
65
|
+
apeRouterAddress
|
66
|
+
);
|
67
|
+
farmerToken0Balance = await token0.balanceOf(farmer1);
|
68
|
+
|
69
|
+
await wrapMATIC(farmer1, "1000" + "000000000000000000");
|
70
|
+
farmerToken1Balance = await token1.balanceOf(farmer1);
|
71
|
+
|
72
|
+
|
73
|
+
await addLiquidity (
|
74
|
+
farmer1,
|
75
|
+
token0,
|
76
|
+
token1,
|
77
|
+
farmerToken0Balance,
|
78
|
+
farmerToken1Balance,
|
79
|
+
apeRouterAddress
|
80
|
+
);
|
81
|
+
farmerBalance = await underlying.balanceOf(farmer1);
|
82
|
+
|
83
|
+
console.log("farmerBalance: ");
|
84
|
+
console.log(new BigNumber(farmerBalance).toFixed());
|
85
|
+
}
|
86
|
+
|
87
|
+
before(async function() {
|
88
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
89
|
+
accounts = await web3.eth.getAccounts();
|
90
|
+
|
91
|
+
farmer1 = accounts[1];
|
92
|
+
|
93
|
+
// impersonate accounts
|
94
|
+
await impersonates([governance]);
|
95
|
+
|
96
|
+
let etherGiver = accounts[9];
|
97
|
+
await send.ether(etherGiver, governance, "100" + "000000000000000000")
|
98
|
+
|
99
|
+
await setupExternalContracts();
|
100
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
101
|
+
"existingVaultAddress": null,
|
102
|
+
"strategyArtifact": Strategy,
|
103
|
+
"underlying": underlying,
|
104
|
+
"governance": governance,
|
105
|
+
"strategyArtifactIsUpgradable": true
|
106
|
+
});
|
107
|
+
|
108
|
+
feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
|
109
|
+
let path = [token0Addr, token1Addr, weth];
|
110
|
+
let dexes = [apeRouterAddress];
|
111
|
+
await feeForwarder.setConversionPath(path, dexes, { from: governance });
|
112
|
+
|
113
|
+
await strategy.setSellFloor(0, {from:governance});
|
114
|
+
|
115
|
+
// whale send underlying to farmers
|
116
|
+
await setupBalance();
|
117
|
+
});
|
118
|
+
|
119
|
+
describe("Happy path", function() {
|
120
|
+
it("Farmer should earn money", async function() {
|
121
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
122
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
123
|
+
|
124
|
+
// Using half days is to simulate how we doHardwork in the real world
|
125
|
+
let hours = 10;
|
126
|
+
let blocksPerHour = 1565*5;
|
127
|
+
let oldSharePrice;
|
128
|
+
let newSharePrice;
|
129
|
+
for (let i = 0; i < hours; i++) {
|
130
|
+
console.log("loop ", i);
|
131
|
+
|
132
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
133
|
+
await controller.doHardWork(vault.address, { from: governance });
|
134
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
135
|
+
|
136
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
137
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
138
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
139
|
+
|
140
|
+
await Utils.advanceNBlock(blocksPerHour);
|
141
|
+
}
|
142
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
143
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
144
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
145
|
+
|
146
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
147
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
148
|
+
|
149
|
+
console.log("earned!");
|
150
|
+
console.log("APR:", apr*100, "%");
|
151
|
+
console.log("APY:", (apy-1)*100, "%");
|
152
|
+
|
153
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
154
|
+
|
155
|
+
});
|
156
|
+
});
|
157
|
+
});
|
@@ -0,0 +1,159 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const {
|
4
|
+
impersonates,
|
5
|
+
setupCoreProtocol,
|
6
|
+
depositVault,
|
7
|
+
swapMaticToToken,
|
8
|
+
wrapMATIC,
|
9
|
+
addLiquidity
|
10
|
+
} = require("../utilities/hh-utils.js");
|
11
|
+
|
12
|
+
const addresses = require("../test-config.js");
|
13
|
+
const { send } = require("@openzeppelin/test-helpers");
|
14
|
+
const BigNumber = require("bignumber.js");
|
15
|
+
const IERC20 = artifacts.require("IERC20");
|
16
|
+
|
17
|
+
//const Strategy = artifacts.require("");
|
18
|
+
const Strategy = artifacts.require("ApeStrategyMainnet_BNB_MATIC");
|
19
|
+
const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
|
20
|
+
|
21
|
+
const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
|
22
|
+
|
23
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
24
|
+
describe("Polygon Mainnet ApeSwap BNB/MATIC", function() {
|
25
|
+
let accounts;
|
26
|
+
|
27
|
+
// external contracts
|
28
|
+
let underlying;
|
29
|
+
|
30
|
+
// external setup
|
31
|
+
let token0Addr = "0xA649325Aa7C5093d12D6F98EB4378deAe68CE23F"; //bnb
|
32
|
+
let token1Addr = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; //wmatic
|
33
|
+
let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
|
34
|
+
let banana = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C";
|
35
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
36
|
+
|
37
|
+
|
38
|
+
// parties in the protocol
|
39
|
+
let governance;
|
40
|
+
let farmer1;
|
41
|
+
|
42
|
+
// numbers used in tests
|
43
|
+
let farmerBalance;
|
44
|
+
|
45
|
+
// Core protocol contracts
|
46
|
+
let controller;
|
47
|
+
let vault;
|
48
|
+
let strategy;
|
49
|
+
let token0;
|
50
|
+
let farmerToken0Balance;
|
51
|
+
let token1;
|
52
|
+
let farmerToken1Balance;
|
53
|
+
|
54
|
+
async function setupExternalContracts() {
|
55
|
+
underlying = await IERC20.at("0x0359001070cF696D5993E0697335157a6f7dB289"); //bnb-matic
|
56
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
57
|
+
}
|
58
|
+
|
59
|
+
async function setupBalance(){
|
60
|
+
token0 = await IERC20.at(token0Addr);
|
61
|
+
token1 = await IERC20.at(token1Addr);
|
62
|
+
|
63
|
+
await swapMaticToToken (
|
64
|
+
farmer1,
|
65
|
+
[addresses.WMATIC, token0.address],
|
66
|
+
"1000" + "000000000000000000",
|
67
|
+
apeRouterAddress
|
68
|
+
);
|
69
|
+
farmerToken0Balance = await token0.balanceOf(farmer1);
|
70
|
+
|
71
|
+
await wrapMATIC(farmer1, "1000" + "000000000000000000");
|
72
|
+
farmerToken1Balance = await token1.balanceOf(farmer1);
|
73
|
+
|
74
|
+
|
75
|
+
await addLiquidity (
|
76
|
+
farmer1,
|
77
|
+
token0,
|
78
|
+
token1,
|
79
|
+
farmerToken0Balance,
|
80
|
+
farmerToken1Balance,
|
81
|
+
apeRouterAddress
|
82
|
+
);
|
83
|
+
farmerBalance = await underlying.balanceOf(farmer1);
|
84
|
+
|
85
|
+
console.log("farmerBalance: ");
|
86
|
+
console.log(new BigNumber(farmerBalance).toFixed());
|
87
|
+
}
|
88
|
+
|
89
|
+
before(async function() {
|
90
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
91
|
+
accounts = await web3.eth.getAccounts();
|
92
|
+
|
93
|
+
farmer1 = accounts[1];
|
94
|
+
|
95
|
+
// impersonate accounts
|
96
|
+
await impersonates([governance]);
|
97
|
+
|
98
|
+
let etherGiver = accounts[9];
|
99
|
+
await send.ether(etherGiver, governance, "100" + "000000000000000000")
|
100
|
+
|
101
|
+
await setupExternalContracts();
|
102
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
103
|
+
"existingVaultAddress": null,
|
104
|
+
"strategyArtifact": Strategy,
|
105
|
+
"underlying": underlying,
|
106
|
+
"governance": governance,
|
107
|
+
"strategyArtifactIsUpgradable": true
|
108
|
+
});
|
109
|
+
|
110
|
+
feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
|
111
|
+
let path = [banana, token1Addr, weth];
|
112
|
+
let dexes = [apeRouterAddress];
|
113
|
+
await feeForwarder.setConversionPath(path, dexes, { from: governance });
|
114
|
+
|
115
|
+
await strategy.setSellFloor(0, {from:governance});
|
116
|
+
|
117
|
+
// whale send underlying to farmers
|
118
|
+
await setupBalance();
|
119
|
+
});
|
120
|
+
|
121
|
+
describe("Happy path", function() {
|
122
|
+
it("Farmer should earn money", async function() {
|
123
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
124
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
125
|
+
|
126
|
+
// Using half days is to simulate how we doHardwork in the real world
|
127
|
+
let hours = 10;
|
128
|
+
let blocksPerHour = 1565*5;
|
129
|
+
let oldSharePrice;
|
130
|
+
let newSharePrice;
|
131
|
+
for (let i = 0; i < hours; i++) {
|
132
|
+
console.log("loop ", i);
|
133
|
+
|
134
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
135
|
+
await controller.doHardWork(vault.address, { from: governance });
|
136
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
137
|
+
|
138
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
139
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
140
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
141
|
+
|
142
|
+
await Utils.advanceNBlock(blocksPerHour);
|
143
|
+
}
|
144
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
145
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
146
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
147
|
+
|
148
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
149
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
150
|
+
|
151
|
+
console.log("earned!");
|
152
|
+
console.log("APR:", apr*100, "%");
|
153
|
+
console.log("APY:", (apy-1)*100, "%");
|
154
|
+
|
155
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
156
|
+
|
157
|
+
});
|
158
|
+
});
|
159
|
+
});
|
@@ -0,0 +1,159 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const {
|
4
|
+
impersonates,
|
5
|
+
setupCoreProtocol,
|
6
|
+
depositVault,
|
7
|
+
swapMaticToToken,
|
8
|
+
wrapMATIC,
|
9
|
+
addLiquidity
|
10
|
+
} = require("../utilities/hh-utils.js");
|
11
|
+
|
12
|
+
const addresses = require("../test-config.js");
|
13
|
+
const { send } = require("@openzeppelin/test-helpers");
|
14
|
+
const BigNumber = require("bignumber.js");
|
15
|
+
const IERC20 = artifacts.require("IERC20");
|
16
|
+
|
17
|
+
//const Strategy = artifacts.require("");
|
18
|
+
const Strategy = artifacts.require("ApeStrategyMainnet_BTC_MATIC");
|
19
|
+
const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
|
20
|
+
|
21
|
+
const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
|
22
|
+
|
23
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
24
|
+
describe("Polygon Mainnet ApeSwap BTC/MATIC", function() {
|
25
|
+
let accounts;
|
26
|
+
|
27
|
+
// external contracts
|
28
|
+
let underlying;
|
29
|
+
|
30
|
+
// external setup
|
31
|
+
let token0Addr = "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6"; //wbtc
|
32
|
+
let token1Addr = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; //wmatic
|
33
|
+
let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
|
34
|
+
let banana = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C";
|
35
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
36
|
+
|
37
|
+
|
38
|
+
// parties in the protocol
|
39
|
+
let governance;
|
40
|
+
let farmer1;
|
41
|
+
|
42
|
+
// numbers used in tests
|
43
|
+
let farmerBalance;
|
44
|
+
|
45
|
+
// Core protocol contracts
|
46
|
+
let controller;
|
47
|
+
let vault;
|
48
|
+
let strategy;
|
49
|
+
let token0;
|
50
|
+
let farmerToken0Balance;
|
51
|
+
let token1;
|
52
|
+
let farmerToken1Balance;
|
53
|
+
|
54
|
+
async function setupExternalContracts() {
|
55
|
+
underlying = await IERC20.at("0xe82635a105c520fd58e597181cBf754961d51E3e"); //btc-matic
|
56
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
57
|
+
}
|
58
|
+
|
59
|
+
async function setupBalance(){
|
60
|
+
token0 = await IERC20.at(token0Addr);
|
61
|
+
token1 = await IERC20.at(token1Addr);
|
62
|
+
|
63
|
+
await swapMaticToToken (
|
64
|
+
farmer1,
|
65
|
+
[addresses.WMATIC, token0.address],
|
66
|
+
"1000" + "000000000000000000",
|
67
|
+
apeRouterAddress
|
68
|
+
);
|
69
|
+
farmerToken0Balance = await token0.balanceOf(farmer1);
|
70
|
+
|
71
|
+
await wrapMATIC(farmer1, "1000" + "000000000000000000");
|
72
|
+
farmerToken1Balance = await token1.balanceOf(farmer1);
|
73
|
+
|
74
|
+
|
75
|
+
await addLiquidity (
|
76
|
+
farmer1,
|
77
|
+
token0,
|
78
|
+
token1,
|
79
|
+
farmerToken0Balance,
|
80
|
+
farmerToken1Balance,
|
81
|
+
apeRouterAddress
|
82
|
+
);
|
83
|
+
farmerBalance = await underlying.balanceOf(farmer1);
|
84
|
+
|
85
|
+
console.log("farmerBalance: ");
|
86
|
+
console.log(new BigNumber(farmerBalance).toFixed());
|
87
|
+
}
|
88
|
+
|
89
|
+
before(async function() {
|
90
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
91
|
+
accounts = await web3.eth.getAccounts();
|
92
|
+
|
93
|
+
farmer1 = accounts[1];
|
94
|
+
|
95
|
+
// impersonate accounts
|
96
|
+
await impersonates([governance]);
|
97
|
+
|
98
|
+
let etherGiver = accounts[9];
|
99
|
+
await send.ether(etherGiver, governance, "100" + "000000000000000000")
|
100
|
+
|
101
|
+
await setupExternalContracts();
|
102
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
103
|
+
"existingVaultAddress": null,
|
104
|
+
"strategyArtifact": Strategy,
|
105
|
+
"underlying": underlying,
|
106
|
+
"governance": governance,
|
107
|
+
"strategyArtifactIsUpgradable": true
|
108
|
+
});
|
109
|
+
|
110
|
+
feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
|
111
|
+
let path = [banana, token1Addr, weth];
|
112
|
+
let dexes = [apeRouterAddress];
|
113
|
+
await feeForwarder.setConversionPath(path, dexes, { from: governance });
|
114
|
+
|
115
|
+
await strategy.setSellFloor(0, {from:governance});
|
116
|
+
|
117
|
+
// whale send underlying to farmers
|
118
|
+
await setupBalance();
|
119
|
+
});
|
120
|
+
|
121
|
+
describe("Happy path", function() {
|
122
|
+
it("Farmer should earn money", async function() {
|
123
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
124
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
125
|
+
|
126
|
+
// Using half days is to simulate how we doHardwork in the real world
|
127
|
+
let hours = 10;
|
128
|
+
let blocksPerHour = 1565*5;
|
129
|
+
let oldSharePrice;
|
130
|
+
let newSharePrice;
|
131
|
+
for (let i = 0; i < hours; i++) {
|
132
|
+
console.log("loop ", i);
|
133
|
+
|
134
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
135
|
+
await controller.doHardWork(vault.address, { from: governance });
|
136
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
137
|
+
|
138
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
139
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
140
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
141
|
+
|
142
|
+
await Utils.advanceNBlock(blocksPerHour);
|
143
|
+
}
|
144
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
145
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
146
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
147
|
+
|
148
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
149
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
150
|
+
|
151
|
+
console.log("earned!");
|
152
|
+
console.log("APR:", apr*100, "%");
|
153
|
+
console.log("APY:", (apy-1)*100, "%");
|
154
|
+
|
155
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
156
|
+
|
157
|
+
});
|
158
|
+
});
|
159
|
+
});
|
@@ -0,0 +1,159 @@
|
|
1
|
+
// Utilities
|
2
|
+
const Utils = require("../utilities/Utils.js");
|
3
|
+
const {
|
4
|
+
impersonates,
|
5
|
+
setupCoreProtocol,
|
6
|
+
depositVault,
|
7
|
+
swapMaticToToken,
|
8
|
+
wrapMATIC,
|
9
|
+
addLiquidity
|
10
|
+
} = require("../utilities/hh-utils.js");
|
11
|
+
|
12
|
+
const addresses = require("../test-config.js");
|
13
|
+
const { send } = require("@openzeppelin/test-helpers");
|
14
|
+
const BigNumber = require("bignumber.js");
|
15
|
+
const IERC20 = artifacts.require("IERC20");
|
16
|
+
|
17
|
+
//const Strategy = artifacts.require("");
|
18
|
+
const Strategy = artifacts.require("ApeStrategyMainnet_DAI_MATIC");
|
19
|
+
const FeeRewardForwarder = artifacts.require("FeeRewardForwarder");
|
20
|
+
|
21
|
+
const apeRouterAddress = "0xC0788A3aD43d79aa53B09c2EaCc313A787d1d607";
|
22
|
+
|
23
|
+
// Vanilla Mocha test. Increased compatibility with tools that integrate Mocha.
|
24
|
+
describe("Polygon Mainnet ApeSwap DAI/MATIC", function() {
|
25
|
+
let accounts;
|
26
|
+
|
27
|
+
// external contracts
|
28
|
+
let underlying;
|
29
|
+
|
30
|
+
// external setup
|
31
|
+
let token0Addr = "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063"; //dai
|
32
|
+
let token1Addr = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; //wmatic
|
33
|
+
let feeForwarderAddr = "0x9A56E4e1845b021FE63EBCE922bD1c31e87eEA5A";
|
34
|
+
let banana = "0x5d47bAbA0d66083C52009271faF3F50DCc01023C";
|
35
|
+
let weth = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
36
|
+
|
37
|
+
|
38
|
+
// parties in the protocol
|
39
|
+
let governance;
|
40
|
+
let farmer1;
|
41
|
+
|
42
|
+
// numbers used in tests
|
43
|
+
let farmerBalance;
|
44
|
+
|
45
|
+
// Core protocol contracts
|
46
|
+
let controller;
|
47
|
+
let vault;
|
48
|
+
let strategy;
|
49
|
+
let token0;
|
50
|
+
let farmerToken0Balance;
|
51
|
+
let token1;
|
52
|
+
let farmerToken1Balance;
|
53
|
+
|
54
|
+
async function setupExternalContracts() {
|
55
|
+
underlying = await IERC20.at("0xd32f3139A214034A0f9777c87eE0a064c1FF6AE2"); //dai-matic
|
56
|
+
console.log("Fetching Underlying at: ", underlying.address);
|
57
|
+
}
|
58
|
+
|
59
|
+
async function setupBalance(){
|
60
|
+
token0 = await IERC20.at(token0Addr);
|
61
|
+
token1 = await IERC20.at(token1Addr);
|
62
|
+
|
63
|
+
await swapMaticToToken (
|
64
|
+
farmer1,
|
65
|
+
[addresses.WMATIC, token0.address],
|
66
|
+
"1000" + "000000000000000000",
|
67
|
+
apeRouterAddress
|
68
|
+
);
|
69
|
+
farmerToken0Balance = await token0.balanceOf(farmer1);
|
70
|
+
|
71
|
+
await wrapMATIC(farmer1, "1000" + "000000000000000000");
|
72
|
+
farmerToken1Balance = await token1.balanceOf(farmer1);
|
73
|
+
|
74
|
+
|
75
|
+
await addLiquidity (
|
76
|
+
farmer1,
|
77
|
+
token0,
|
78
|
+
token1,
|
79
|
+
farmerToken0Balance,
|
80
|
+
farmerToken1Balance,
|
81
|
+
apeRouterAddress
|
82
|
+
);
|
83
|
+
farmerBalance = await underlying.balanceOf(farmer1);
|
84
|
+
|
85
|
+
console.log("farmerBalance: ");
|
86
|
+
console.log(new BigNumber(farmerBalance).toFixed());
|
87
|
+
}
|
88
|
+
|
89
|
+
before(async function() {
|
90
|
+
governance = "0xf00dD244228F51547f0563e60bCa65a30FBF5f7f";
|
91
|
+
accounts = await web3.eth.getAccounts();
|
92
|
+
|
93
|
+
farmer1 = accounts[1];
|
94
|
+
|
95
|
+
// impersonate accounts
|
96
|
+
await impersonates([governance]);
|
97
|
+
|
98
|
+
let etherGiver = accounts[9];
|
99
|
+
await send.ether(etherGiver, governance, "100" + "000000000000000000")
|
100
|
+
|
101
|
+
await setupExternalContracts();
|
102
|
+
[controller, vault, strategy] = await setupCoreProtocol({
|
103
|
+
"existingVaultAddress": null,
|
104
|
+
"strategyArtifact": Strategy,
|
105
|
+
"underlying": underlying,
|
106
|
+
"governance": governance,
|
107
|
+
"strategyArtifactIsUpgradable": true
|
108
|
+
});
|
109
|
+
|
110
|
+
feeForwarder = await FeeRewardForwarder.at(feeForwarderAddr);
|
111
|
+
let path = [banana, token1Addr, weth];
|
112
|
+
let dexes = [apeRouterAddress];
|
113
|
+
await feeForwarder.setConversionPath(path, dexes, { from: governance });
|
114
|
+
|
115
|
+
await strategy.setSellFloor(0, {from:governance});
|
116
|
+
|
117
|
+
// whale send underlying to farmers
|
118
|
+
await setupBalance();
|
119
|
+
});
|
120
|
+
|
121
|
+
describe("Happy path", function() {
|
122
|
+
it("Farmer should earn money", async function() {
|
123
|
+
let farmerOldBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
124
|
+
await depositVault(farmer1, underlying, vault, farmerBalance);
|
125
|
+
|
126
|
+
// Using half days is to simulate how we doHardwork in the real world
|
127
|
+
let hours = 10;
|
128
|
+
let blocksPerHour = 1565*5;
|
129
|
+
let oldSharePrice;
|
130
|
+
let newSharePrice;
|
131
|
+
for (let i = 0; i < hours; i++) {
|
132
|
+
console.log("loop ", i);
|
133
|
+
|
134
|
+
oldSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
135
|
+
await controller.doHardWork(vault.address, { from: governance });
|
136
|
+
newSharePrice = new BigNumber(await vault.getPricePerFullShare());
|
137
|
+
|
138
|
+
console.log("old shareprice: ", oldSharePrice.toFixed());
|
139
|
+
console.log("new shareprice: ", newSharePrice.toFixed());
|
140
|
+
console.log("growth: ", newSharePrice.toFixed() / oldSharePrice.toFixed());
|
141
|
+
|
142
|
+
await Utils.advanceNBlock(blocksPerHour);
|
143
|
+
}
|
144
|
+
await vault.withdraw(new BigNumber(await vault.balanceOf(farmer1)).toFixed(), { from: farmer1 });
|
145
|
+
let farmerNewBalance = new BigNumber(await underlying.balanceOf(farmer1));
|
146
|
+
Utils.assertBNGt(farmerNewBalance, farmerOldBalance);
|
147
|
+
|
148
|
+
apr = (farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))*365;
|
149
|
+
apy = ((farmerNewBalance.toFixed()/farmerOldBalance.toFixed()-1)*(24/(blocksPerHour*hours/1565))+1)**365;
|
150
|
+
|
151
|
+
console.log("earned!");
|
152
|
+
console.log("APR:", apr*100, "%");
|
153
|
+
console.log("APY:", (apy-1)*100, "%");
|
154
|
+
|
155
|
+
await strategy.withdrawAllToVault({from:governance}); // making sure can withdraw all for a next switch
|
156
|
+
|
157
|
+
});
|
158
|
+
});
|
159
|
+
});
|