@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,121 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
pragma experimental ABIEncoderV2;
|
4
|
+
|
5
|
+
import "../Vault.sol";
|
6
|
+
import "../interface/curve/ICurveDeposit_2token.sol";
|
7
|
+
import "../../strategies/balancer/interface/IBVault.sol";
|
8
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
9
|
+
|
10
|
+
import "hardhat/console.sol";
|
11
|
+
|
12
|
+
contract VaultMigratable_bal2EUR_agEUR is Vault {
|
13
|
+
using SafeERC20 for IERC20;
|
14
|
+
|
15
|
+
address public constant __token0 = address(0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c);
|
16
|
+
address public constant __token1 = address(0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4);
|
17
|
+
address public constant __lpOld = address(0x2fFbCE9099cBed86984286A54e5932414aF4B717);
|
18
|
+
address public constant __lpNew = address(0xa48D164F6eB0EDC68bd03B56fa59E12F24499aD1);
|
19
|
+
address public constant __governance = address(0xf00dD244228F51547f0563e60bCa65a30FBF5f7f);
|
20
|
+
address public constant __bVault = address(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
|
21
|
+
address public constant __newStrategy = address(0x044b1CfaDa044f9389DA761af520574E197dCCA4);
|
22
|
+
|
23
|
+
bytes32 public constant __poolIdNew = 0xa48d164f6eb0edc68bd03b56fa59e12f24499ad10000000000000000000007c4;
|
24
|
+
|
25
|
+
event Migrated(uint256 v1Liquidity, uint256 v2Liquidity);
|
26
|
+
event LiquidityRemoved(uint256 v1Liquidity, uint256 amountToken0, uint256 amountToken1);
|
27
|
+
event LiquidityProvided(uint256 amountToken0, uint256 amountToken1, uint256 v2Liquidity);
|
28
|
+
|
29
|
+
constructor() public {
|
30
|
+
}
|
31
|
+
|
32
|
+
function _approveIfNeed(address token, address spender, uint256 amount) internal {
|
33
|
+
uint256 allowance = IERC20(token).allowance(address(this), spender);
|
34
|
+
if (amount > allowance) {
|
35
|
+
IERC20(token).safeApprove(spender, 0);
|
36
|
+
IERC20(token).safeApprove(spender, amount);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
function _balancerSwap(
|
41
|
+
address sellToken,
|
42
|
+
address buyToken,
|
43
|
+
bytes32 poolId,
|
44
|
+
uint256 amountIn,
|
45
|
+
uint256 minAmountOut
|
46
|
+
) internal {
|
47
|
+
IBVault.SingleSwap memory singleSwap;
|
48
|
+
IBVault.SwapKind swapKind = IBVault.SwapKind.GIVEN_IN;
|
49
|
+
|
50
|
+
singleSwap.poolId = poolId;
|
51
|
+
singleSwap.kind = swapKind;
|
52
|
+
singleSwap.assetIn = IAsset(sellToken);
|
53
|
+
singleSwap.assetOut = IAsset(buyToken);
|
54
|
+
singleSwap.amount = amountIn;
|
55
|
+
singleSwap.userData = abi.encode(0);
|
56
|
+
|
57
|
+
IBVault.FundManagement memory funds;
|
58
|
+
funds.sender = address(this);
|
59
|
+
funds.fromInternalBalance = false;
|
60
|
+
funds.recipient = payable(address(this));
|
61
|
+
funds.toInternalBalance = false;
|
62
|
+
|
63
|
+
_approveIfNeed(sellToken, __bVault, amountIn);
|
64
|
+
IBVault(__bVault).swap(singleSwap, funds, minAmountOut, block.timestamp);
|
65
|
+
}
|
66
|
+
|
67
|
+
/**
|
68
|
+
* Migrates the vault from the old Curve LP underlying to new Balancer LP underlying
|
69
|
+
*/
|
70
|
+
function migrateUnderlying(
|
71
|
+
uint256 minToken0Out,
|
72
|
+
uint256 minToken1Out,
|
73
|
+
uint256 minLPNewOut
|
74
|
+
) public onlyControllerOrGovernance {
|
75
|
+
require(underlying() == __lpOld, "Can only migrate if the underlying is lpOld");
|
76
|
+
withdrawAll();
|
77
|
+
|
78
|
+
uint256 v1Liquidity = IERC20(__lpOld).balanceOf(address(this));
|
79
|
+
console.log("V1Liquidity: ", v1Liquidity);
|
80
|
+
|
81
|
+
ICurveDeposit_2token(__lpOld).remove_liquidity(v1Liquidity, [minToken0Out, minToken1Out]);
|
82
|
+
uint256 amount0 = IERC20(__token0).balanceOf(address(this));
|
83
|
+
uint256 amount1 = IERC20(__token1).balanceOf(address(this));
|
84
|
+
console.log("token0 out: ", amount0);
|
85
|
+
console.log("token1 out: ", amount1);
|
86
|
+
|
87
|
+
emit LiquidityRemoved(v1Liquidity, amount0, amount1);
|
88
|
+
|
89
|
+
require(IERC20(__lpOld).balanceOf(address(this)) == 0, "Not all underlying was converted");
|
90
|
+
|
91
|
+
_balancerSwap(__token0, __lpNew, __poolIdNew, amount0, 1);
|
92
|
+
_balancerSwap(__token1, __lpNew, __poolIdNew, amount1, 1);
|
93
|
+
uint256 v2Liquidity = IERC20(__lpNew).balanceOf(address(this));
|
94
|
+
require(v2Liquidity >= minLPNewOut, "Output amount too low");
|
95
|
+
console.log("V2Liquidity: ", v2Liquidity);
|
96
|
+
|
97
|
+
emit LiquidityProvided(amount0, amount1, v2Liquidity);
|
98
|
+
|
99
|
+
_setUnderlying(__lpNew);
|
100
|
+
require(underlying() == __lpNew, "underlying switch failed");
|
101
|
+
console.log("New underlying: ", underlying());
|
102
|
+
_setStrategy(__newStrategy);
|
103
|
+
require(strategy() == __newStrategy, "strategy switch failed");
|
104
|
+
console.log("New strategy: ", strategy());
|
105
|
+
|
106
|
+
// some steps that regular setStrategy does
|
107
|
+
IERC20(underlying()).safeApprove(address(strategy()), 0);
|
108
|
+
IERC20(underlying()).safeApprove(address(strategy()), uint256(~0));
|
109
|
+
|
110
|
+
uint256 token0Left = IERC20(__token0).balanceOf(address(this));
|
111
|
+
if (token0Left > 0) {
|
112
|
+
IERC20(__token0).transfer(strategy(), token0Left);
|
113
|
+
}
|
114
|
+
uint256 token1Left = IERC20(__token1).balanceOf(address(this));
|
115
|
+
if (token1Left > 0) {
|
116
|
+
IERC20(__token1).transfer(__governance, token1Left);
|
117
|
+
}
|
118
|
+
|
119
|
+
emit Migrated(v1Liquidity, v2Liquidity);
|
120
|
+
}
|
121
|
+
}
|
@@ -0,0 +1,153 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
pragma experimental ABIEncoderV2;
|
4
|
+
|
5
|
+
import "../Vault.sol";
|
6
|
+
import "../../strategies/balancer/interface/IBVault.sol";
|
7
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
8
|
+
|
9
|
+
import "hardhat/console.sol";
|
10
|
+
|
11
|
+
contract VaultMigratable_balMaticX is Vault {
|
12
|
+
using SafeERC20 for IERC20;
|
13
|
+
|
14
|
+
address public constant __wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
15
|
+
address public constant __maticx = address(0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6);
|
16
|
+
address public constant __lpOld = address(0xC17636e36398602dd37Bb5d1B3a9008c7629005f);
|
17
|
+
address public constant __lpNew = address(0xb20fC01D21A50d2C734C4a1262B4404d41fA7BF0);
|
18
|
+
address public constant __governance = address(0xf00dD244228F51547f0563e60bCa65a30FBF5f7f);
|
19
|
+
address public constant __bVault = address(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
|
20
|
+
address public constant __newStrategy = address(0x5A42FEDdD5e330AD857A17724543C5ef7FC7C9Cd);
|
21
|
+
|
22
|
+
bytes32 public constant __poolIdOld = 0xc17636e36398602dd37bb5d1b3a9008c7629005f0002000000000000000004c4;
|
23
|
+
bytes32 public constant __poolIdNew = 0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c;
|
24
|
+
|
25
|
+
event Migrated(uint256 v1Liquidity, uint256 v2Liquidity);
|
26
|
+
event LiquidityRemoved(uint256 v1Liquidity, uint256 amountToken0, uint256 amountToken1);
|
27
|
+
event LiquidityProvided(uint256 amountToken0, uint256 amountToken1, uint256 v2Liquidity);
|
28
|
+
|
29
|
+
constructor() public {
|
30
|
+
}
|
31
|
+
|
32
|
+
function _approveIfNeed(address token, address spender, uint256 amount) internal {
|
33
|
+
uint256 allowance = IERC20(token).allowance(address(this), spender);
|
34
|
+
if (amount > allowance) {
|
35
|
+
IERC20(token).safeApprove(spender, 0);
|
36
|
+
IERC20(token).safeApprove(spender, amount);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
function _balancerWithdraw(
|
41
|
+
bytes32 poolId,
|
42
|
+
uint256 amountIn,
|
43
|
+
uint256[] memory minAmountsOut
|
44
|
+
) internal {
|
45
|
+
(address[] memory poolTokens,,) = IBVault(__bVault).getPoolTokens(poolId);
|
46
|
+
uint256 _nTokens = poolTokens.length;
|
47
|
+
|
48
|
+
IAsset[] memory assets = new IAsset[](_nTokens);
|
49
|
+
for (uint256 i = 0; i < _nTokens; i++) {
|
50
|
+
assets[i] = IAsset(poolTokens[i]);
|
51
|
+
}
|
52
|
+
|
53
|
+
IBVault.ExitKind exitKind = IBVault.ExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;
|
54
|
+
bytes memory userData = abi.encode(exitKind, amountIn);
|
55
|
+
|
56
|
+
IBVault.ExitPoolRequest memory request;
|
57
|
+
request.assets = assets;
|
58
|
+
request.minAmountsOut = minAmountsOut;
|
59
|
+
request.userData = userData;
|
60
|
+
|
61
|
+
IBVault(__bVault).exitPool(
|
62
|
+
poolId,
|
63
|
+
address(this),
|
64
|
+
payable(address(this)),
|
65
|
+
request
|
66
|
+
);
|
67
|
+
}
|
68
|
+
|
69
|
+
function _balancerSwap(
|
70
|
+
address sellToken,
|
71
|
+
address buyToken,
|
72
|
+
bytes32 poolId,
|
73
|
+
uint256 amountIn,
|
74
|
+
uint256 minAmountOut
|
75
|
+
) internal {
|
76
|
+
IBVault.SingleSwap memory singleSwap;
|
77
|
+
IBVault.SwapKind swapKind = IBVault.SwapKind.GIVEN_IN;
|
78
|
+
|
79
|
+
singleSwap.poolId = poolId;
|
80
|
+
singleSwap.kind = swapKind;
|
81
|
+
singleSwap.assetIn = IAsset(sellToken);
|
82
|
+
singleSwap.assetOut = IAsset(buyToken);
|
83
|
+
singleSwap.amount = amountIn;
|
84
|
+
singleSwap.userData = abi.encode(0);
|
85
|
+
|
86
|
+
IBVault.FundManagement memory funds;
|
87
|
+
funds.sender = address(this);
|
88
|
+
funds.fromInternalBalance = false;
|
89
|
+
funds.recipient = payable(address(this));
|
90
|
+
funds.toInternalBalance = false;
|
91
|
+
|
92
|
+
_approveIfNeed(sellToken, __bVault, amountIn);
|
93
|
+
IBVault(__bVault).swap(singleSwap, funds, minAmountOut, block.timestamp);
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
* Migrates the vault from the old MaticX BPT underlying to new MaticX BPT underlying
|
98
|
+
*/
|
99
|
+
function migrateUnderlying(
|
100
|
+
uint256 minWMaticOut,
|
101
|
+
uint256 minMaticXOut,
|
102
|
+
uint256 minLPNewOut
|
103
|
+
) public onlyControllerOrGovernance {
|
104
|
+
require(underlying() == __lpOld, "Can only migrate if the underlying is 2JPY");
|
105
|
+
withdrawAll();
|
106
|
+
|
107
|
+
uint256 v1Liquidity = IERC20(__lpOld).balanceOf(address(this));
|
108
|
+
console.log("V1Liquidity: ", v1Liquidity);
|
109
|
+
uint256[] memory minOutput = new uint256[](2);
|
110
|
+
minOutput[0] = minWMaticOut;
|
111
|
+
minOutput[1] = minMaticXOut;
|
112
|
+
|
113
|
+
_balancerWithdraw(__poolIdOld, v1Liquidity, minOutput);
|
114
|
+
uint256 amountWMatic = IERC20(__wmatic).balanceOf(address(this));
|
115
|
+
uint256 amountMaticX = IERC20(__maticx).balanceOf(address(this));
|
116
|
+
console.log("WMatic out: ", amountWMatic);
|
117
|
+
console.log("MaticX out: ", amountMaticX);
|
118
|
+
|
119
|
+
emit LiquidityRemoved(v1Liquidity, amountWMatic, amountMaticX);
|
120
|
+
|
121
|
+
require(IERC20(__lpOld).balanceOf(address(this)) == 0, "Not all underlying was converted");
|
122
|
+
|
123
|
+
_balancerSwap(__wmatic, __lpNew, __poolIdNew, amountWMatic, 1);
|
124
|
+
_balancerSwap(__maticx, __lpNew, __poolIdNew, amountMaticX, 1);
|
125
|
+
uint256 v2Liquidity = IERC20(__lpNew).balanceOf(address(this));
|
126
|
+
require(v2Liquidity >= minLPNewOut, "Output amount too low");
|
127
|
+
console.log("V2Liquidity: ", v2Liquidity);
|
128
|
+
|
129
|
+
emit LiquidityProvided(amountWMatic, amountMaticX, v2Liquidity);
|
130
|
+
|
131
|
+
_setUnderlying(__lpNew);
|
132
|
+
require(underlying() == __lpNew, "underlying switch failed");
|
133
|
+
console.log("New underlying: ", underlying());
|
134
|
+
_setStrategy(__newStrategy);
|
135
|
+
require(strategy() == __newStrategy, "strategy switch failed");
|
136
|
+
console.log("New strategy: ", strategy());
|
137
|
+
|
138
|
+
// some steps that regular setStrategy does
|
139
|
+
IERC20(underlying()).safeApprove(address(strategy()), 0);
|
140
|
+
IERC20(underlying()).safeApprove(address(strategy()), uint256(~0));
|
141
|
+
|
142
|
+
uint256 wMaticLeft = IERC20(__wmatic).balanceOf(address(this));
|
143
|
+
if (wMaticLeft > 0) {
|
144
|
+
IERC20(__wmatic).transfer(strategy(), wMaticLeft);
|
145
|
+
}
|
146
|
+
uint256 maticXLeft = IERC20(__maticx).balanceOf(address(this));
|
147
|
+
if (maticXLeft > 0) {
|
148
|
+
IERC20(__maticx).transfer(__governance, maticXLeft);
|
149
|
+
}
|
150
|
+
|
151
|
+
emit Migrated(v1Liquidity, v2Liquidity);
|
152
|
+
}
|
153
|
+
}
|
@@ -0,0 +1,153 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
pragma experimental ABIEncoderV2;
|
4
|
+
|
5
|
+
import "../Vault.sol";
|
6
|
+
import "../../strategies/balancer/interface/IBVault.sol";
|
7
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
8
|
+
|
9
|
+
import "hardhat/console.sol";
|
10
|
+
|
11
|
+
contract VaultMigratable_balStMatic is Vault {
|
12
|
+
using SafeERC20 for IERC20;
|
13
|
+
|
14
|
+
address public constant __wmatic = address(0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270);
|
15
|
+
address public constant __stmatic = address(0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4);
|
16
|
+
address public constant __lpOld = address(0xaF5E0B5425dE1F5a630A8cB5AA9D97B8141C908D);
|
17
|
+
address public constant __lpNew = address(0x8159462d255C1D24915CB51ec361F700174cD994);
|
18
|
+
address public constant __governance = address(0xf00dD244228F51547f0563e60bCa65a30FBF5f7f);
|
19
|
+
address public constant __bVault = address(0xBA12222222228d8Ba445958a75a0704d566BF2C8);
|
20
|
+
address public constant __newStrategy = address(0x9674AdE8257BEeC0f8c6fbdEAE279EA92543D989);
|
21
|
+
|
22
|
+
bytes32 public constant __poolIdOld = 0xaf5e0b5425de1f5a630a8cb5aa9d97b8141c908d000200000000000000000366;
|
23
|
+
bytes32 public constant __poolIdNew = 0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d;
|
24
|
+
|
25
|
+
event Migrated(uint256 v1Liquidity, uint256 v2Liquidity);
|
26
|
+
event LiquidityRemoved(uint256 v1Liquidity, uint256 amountToken0, uint256 amountToken1);
|
27
|
+
event LiquidityProvided(uint256 amountToken0, uint256 amountToken1, uint256 v2Liquidity);
|
28
|
+
|
29
|
+
constructor() public {
|
30
|
+
}
|
31
|
+
|
32
|
+
function _approveIfNeed(address token, address spender, uint256 amount) internal {
|
33
|
+
uint256 allowance = IERC20(token).allowance(address(this), spender);
|
34
|
+
if (amount > allowance) {
|
35
|
+
IERC20(token).safeApprove(spender, 0);
|
36
|
+
IERC20(token).safeApprove(spender, amount);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
function _balancerWithdraw(
|
41
|
+
bytes32 poolId,
|
42
|
+
uint256 amountIn,
|
43
|
+
uint256[] memory minAmountsOut
|
44
|
+
) internal {
|
45
|
+
(address[] memory poolTokens,,) = IBVault(__bVault).getPoolTokens(poolId);
|
46
|
+
uint256 _nTokens = poolTokens.length;
|
47
|
+
|
48
|
+
IAsset[] memory assets = new IAsset[](_nTokens);
|
49
|
+
for (uint256 i = 0; i < _nTokens; i++) {
|
50
|
+
assets[i] = IAsset(poolTokens[i]);
|
51
|
+
}
|
52
|
+
|
53
|
+
IBVault.ExitKind exitKind = IBVault.ExitKind.EXACT_BPT_IN_FOR_TOKENS_OUT;
|
54
|
+
bytes memory userData = abi.encode(exitKind, amountIn);
|
55
|
+
|
56
|
+
IBVault.ExitPoolRequest memory request;
|
57
|
+
request.assets = assets;
|
58
|
+
request.minAmountsOut = minAmountsOut;
|
59
|
+
request.userData = userData;
|
60
|
+
|
61
|
+
IBVault(__bVault).exitPool(
|
62
|
+
poolId,
|
63
|
+
address(this),
|
64
|
+
payable(address(this)),
|
65
|
+
request
|
66
|
+
);
|
67
|
+
}
|
68
|
+
|
69
|
+
function _balancerSwap(
|
70
|
+
address sellToken,
|
71
|
+
address buyToken,
|
72
|
+
bytes32 poolId,
|
73
|
+
uint256 amountIn,
|
74
|
+
uint256 minAmountOut
|
75
|
+
) internal {
|
76
|
+
IBVault.SingleSwap memory singleSwap;
|
77
|
+
IBVault.SwapKind swapKind = IBVault.SwapKind.GIVEN_IN;
|
78
|
+
|
79
|
+
singleSwap.poolId = poolId;
|
80
|
+
singleSwap.kind = swapKind;
|
81
|
+
singleSwap.assetIn = IAsset(sellToken);
|
82
|
+
singleSwap.assetOut = IAsset(buyToken);
|
83
|
+
singleSwap.amount = amountIn;
|
84
|
+
singleSwap.userData = abi.encode(0);
|
85
|
+
|
86
|
+
IBVault.FundManagement memory funds;
|
87
|
+
funds.sender = address(this);
|
88
|
+
funds.fromInternalBalance = false;
|
89
|
+
funds.recipient = payable(address(this));
|
90
|
+
funds.toInternalBalance = false;
|
91
|
+
|
92
|
+
_approveIfNeed(sellToken, __bVault, amountIn);
|
93
|
+
IBVault(__bVault).swap(singleSwap, funds, minAmountOut, block.timestamp);
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
* Migrates the vault from the old MaticX BPT underlying to new MaticX BPT underlying
|
98
|
+
*/
|
99
|
+
function migrateUnderlying(
|
100
|
+
uint256 minWMaticOut,
|
101
|
+
uint256 minStMaticOut,
|
102
|
+
uint256 minLPNewOut
|
103
|
+
) public onlyControllerOrGovernance {
|
104
|
+
require(underlying() == __lpOld, "Can only migrate if the underlying is 2JPY");
|
105
|
+
withdrawAll();
|
106
|
+
|
107
|
+
uint256 v1Liquidity = IERC20(__lpOld).balanceOf(address(this));
|
108
|
+
console.log("V1Liquidity: ", v1Liquidity);
|
109
|
+
uint256[] memory minOutput = new uint256[](2);
|
110
|
+
minOutput[0] = minWMaticOut;
|
111
|
+
minOutput[1] = minStMaticOut;
|
112
|
+
|
113
|
+
_balancerWithdraw(__poolIdOld, v1Liquidity, minOutput);
|
114
|
+
uint256 amountWMatic = IERC20(__wmatic).balanceOf(address(this));
|
115
|
+
uint256 amountStMatic = IERC20(__stmatic).balanceOf(address(this));
|
116
|
+
console.log("WMatic out: ", amountWMatic);
|
117
|
+
console.log("stMatic out: ", amountStMatic);
|
118
|
+
|
119
|
+
emit LiquidityRemoved(v1Liquidity, amountWMatic, amountStMatic);
|
120
|
+
|
121
|
+
require(IERC20(__lpOld).balanceOf(address(this)) == 0, "Not all underlying was converted");
|
122
|
+
|
123
|
+
_balancerSwap(__wmatic, __lpNew, __poolIdNew, amountWMatic, 1);
|
124
|
+
_balancerSwap(__stmatic, __lpNew, __poolIdNew, amountStMatic, 1);
|
125
|
+
uint256 v2Liquidity = IERC20(__lpNew).balanceOf(address(this));
|
126
|
+
require(v2Liquidity >= minLPNewOut, "Output amount too low");
|
127
|
+
console.log("V2Liquidity: ", v2Liquidity);
|
128
|
+
|
129
|
+
emit LiquidityProvided(amountWMatic, amountStMatic, v2Liquidity);
|
130
|
+
|
131
|
+
_setUnderlying(__lpNew);
|
132
|
+
require(underlying() == __lpNew, "underlying switch failed");
|
133
|
+
console.log("New underlying: ", underlying());
|
134
|
+
_setStrategy(__newStrategy);
|
135
|
+
require(strategy() == __newStrategy, "strategy switch failed");
|
136
|
+
console.log("New strategy: ", strategy());
|
137
|
+
|
138
|
+
// some steps that regular setStrategy does
|
139
|
+
IERC20(underlying()).safeApprove(address(strategy()), 0);
|
140
|
+
IERC20(underlying()).safeApprove(address(strategy()), uint256(~0));
|
141
|
+
|
142
|
+
uint256 wMaticLeft = IERC20(__wmatic).balanceOf(address(this));
|
143
|
+
if (wMaticLeft > 0) {
|
144
|
+
IERC20(__wmatic).transfer(strategy(), wMaticLeft);
|
145
|
+
}
|
146
|
+
uint256 stMaticLeft = IERC20(__stmatic).balanceOf(address(this));
|
147
|
+
if (stMaticLeft > 0) {
|
148
|
+
IERC20(__stmatic).transfer(__governance, stMaticLeft);
|
149
|
+
}
|
150
|
+
|
151
|
+
emit Migrated(v1Liquidity, v2Liquidity);
|
152
|
+
}
|
153
|
+
}
|
@@ -0,0 +1,89 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
5
|
+
import "@openzeppelin/contracts/utils/Address.sol";
|
6
|
+
import "@openzeppelin/contracts/math/SafeMath.sol";
|
7
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
8
|
+
import "../inheritance/Controllable.sol";
|
9
|
+
import "../interface/IVault.sol";
|
10
|
+
|
11
|
+
|
12
|
+
contract NoopStrategy is Controllable {
|
13
|
+
using SafeERC20 for IERC20;
|
14
|
+
using Address for address;
|
15
|
+
using SafeMath for uint256;
|
16
|
+
|
17
|
+
IERC20 public underlying;
|
18
|
+
IVault public vault;
|
19
|
+
|
20
|
+
// These tokens cannot be claimed by the controller
|
21
|
+
mapping(address => bool) public unsalvagableTokens;
|
22
|
+
|
23
|
+
modifier restricted() {
|
24
|
+
require(msg.sender == address(vault) || msg.sender == address(controller()) || msg.sender == address(governance()),
|
25
|
+
"The sender has to be the controller or vault or governance");
|
26
|
+
_;
|
27
|
+
}
|
28
|
+
|
29
|
+
constructor(address _storage, address _vault) public
|
30
|
+
Controllable(_storage) {
|
31
|
+
address _underlying = IVault(_vault).underlying();
|
32
|
+
require(_underlying != address(0), "_underlying cannot be empty");
|
33
|
+
require(_vault != address(0), "_vault cannot be empty");
|
34
|
+
underlying = IERC20(_underlying);
|
35
|
+
vault = IVault(_vault);
|
36
|
+
unsalvagableTokens[_underlying] = true;
|
37
|
+
}
|
38
|
+
|
39
|
+
function depositArbCheck() public pure returns(bool) {
|
40
|
+
return true;
|
41
|
+
}
|
42
|
+
|
43
|
+
/*
|
44
|
+
* Returns the total invested amount.
|
45
|
+
*/
|
46
|
+
function investedUnderlyingBalance() view public returns (uint256) {
|
47
|
+
// for real strategies, need to calculate the invested balance
|
48
|
+
return underlying.balanceOf(address(this));
|
49
|
+
}
|
50
|
+
|
51
|
+
/*
|
52
|
+
* Invests all tokens that were accumulated so far
|
53
|
+
*/
|
54
|
+
function investAllUnderlying() external restricted {
|
55
|
+
// no-op
|
56
|
+
}
|
57
|
+
|
58
|
+
/*
|
59
|
+
* Cashes everything out and withdraws to the vault
|
60
|
+
*/
|
61
|
+
function withdrawAllToVault() external restricted {
|
62
|
+
if (underlying.balanceOf(address(this)) > 0) {
|
63
|
+
underlying.safeTransfer(address(vault), underlying.balanceOf(address(this)));
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
/*
|
68
|
+
* Cashes some amount out and withdraws to the vault
|
69
|
+
*/
|
70
|
+
function withdrawToVault(uint256 underlyingAmount) external restricted {
|
71
|
+
require(underlying.balanceOf(address(this)) >= underlyingAmount,
|
72
|
+
"insufficient balance for the withdrawal");
|
73
|
+
if (underlyingAmount > 0) {
|
74
|
+
underlying.safeTransfer(address(vault), underlyingAmount);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
/*
|
79
|
+
* Honest harvesting. It's not much, but it pays off
|
80
|
+
*/
|
81
|
+
function doHardWork() external restricted {
|
82
|
+
// a no-op
|
83
|
+
}
|
84
|
+
|
85
|
+
// should only be called by controller
|
86
|
+
function salvage(address destination, address token, uint256 amount) external onlyController {
|
87
|
+
IERC20(token).safeTransfer(destination, amount);
|
88
|
+
}
|
89
|
+
}
|
@@ -0,0 +1,92 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "@openzeppelin/contracts/math/Math.sol";
|
5
|
+
import "@openzeppelin/contracts/math/SafeMath.sol";
|
6
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
7
|
+
import "../interface/IVault.sol";
|
8
|
+
import "../upgradability/BaseUpgradeableStrategy.sol";
|
9
|
+
|
10
|
+
contract NoopStrategyUpgradeable is BaseUpgradeableStrategy {
|
11
|
+
|
12
|
+
using SafeMath for uint256;
|
13
|
+
using SafeERC20 for IERC20;
|
14
|
+
|
15
|
+
constructor() public BaseUpgradeableStrategy() {}
|
16
|
+
|
17
|
+
function initializeBaseStrategy(
|
18
|
+
address _storage,
|
19
|
+
address _underlying,
|
20
|
+
address _vault
|
21
|
+
) public initializer {
|
22
|
+
|
23
|
+
require(_vault != address(0), "_vault cannot be empty");
|
24
|
+
require(_underlying == IVault(_vault).underlying(), "underlying mismatch");
|
25
|
+
|
26
|
+
BaseUpgradeableStrategy.initialize(
|
27
|
+
_storage,
|
28
|
+
_underlying,
|
29
|
+
_vault,
|
30
|
+
address(0),
|
31
|
+
address(0),
|
32
|
+
80, // profit sharing numerator
|
33
|
+
1000, // profit sharing denominator
|
34
|
+
true, // sell
|
35
|
+
1e18, // sell floor
|
36
|
+
12 hours // implementation change delay
|
37
|
+
);
|
38
|
+
}
|
39
|
+
|
40
|
+
function depositArbCheck() public pure returns(bool) {
|
41
|
+
return true;
|
42
|
+
}
|
43
|
+
|
44
|
+
function investedUnderlyingBalance() external view returns (uint256 balance) {
|
45
|
+
balance = IERC20(underlying()).balanceOf(address(this));
|
46
|
+
}
|
47
|
+
|
48
|
+
function unsalvagableTokens(address token) public view returns (bool) {
|
49
|
+
return (token == rewardToken() || token == underlying());
|
50
|
+
}
|
51
|
+
|
52
|
+
/*
|
53
|
+
* Withdraws all the asset to the vault
|
54
|
+
*/
|
55
|
+
function withdrawAllToVault() external restricted {
|
56
|
+
if (IERC20(underlying()).balanceOf(address(this)) > 0) {
|
57
|
+
IERC20(underlying()).safeTransfer(address(vault()), IERC20(underlying()).balanceOf(address(this)));
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
/*
|
62
|
+
* Cashes some amount out and withdraws to the vault
|
63
|
+
*/
|
64
|
+
function withdrawToVault(uint256 amount) external restricted {
|
65
|
+
require(IERC20(underlying()).balanceOf(address(this)) >= amount,
|
66
|
+
"insufficient balance for the withdrawal");
|
67
|
+
if (amount > 0) {
|
68
|
+
IERC20(underlying()).safeTransfer(address(vault()), amount);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
/*
|
73
|
+
* Governance or Controller can claim coins that are somehow transferred into the contract
|
74
|
+
* Note that they cannot come in take away coins that are used and defined in the strategy itself
|
75
|
+
*/
|
76
|
+
function salvage(address recipient, address token, uint256 amount) external onlyControllerOrGovernance {
|
77
|
+
// To make sure that governance cannot come in and take away the coins
|
78
|
+
require(!unsalvagableTokens(token), "token is defined as not salvagable");
|
79
|
+
IERC20(token).safeTransfer(recipient, amount);
|
80
|
+
}
|
81
|
+
|
82
|
+
/*
|
83
|
+
* Honest harvesting. It's not much, but it pays off
|
84
|
+
*/
|
85
|
+
function doHardWork() external restricted {
|
86
|
+
// a no-op
|
87
|
+
}
|
88
|
+
|
89
|
+
function finalizeUpgrade() external onlyGovernance {
|
90
|
+
_finalizeUpgrade();
|
91
|
+
}
|
92
|
+
}
|