@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,176 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
|
3
|
+
pragma solidity 0.6.12;
|
4
|
+
|
5
|
+
import "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol";
|
6
|
+
|
7
|
+
contract BaseUpgradeableStrategyStorage {
|
8
|
+
|
9
|
+
bytes32 internal constant _UNDERLYING_SLOT = 0xa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e530;
|
10
|
+
bytes32 internal constant _VAULT_SLOT = 0xefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d41;
|
11
|
+
|
12
|
+
bytes32 internal constant _REWARD_TOKEN_SLOT = 0xdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbf;
|
13
|
+
bytes32 internal constant _REWARD_POOL_SLOT = 0x3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b8;
|
14
|
+
bytes32 internal constant _SELL_FLOOR_SLOT = 0xc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc;
|
15
|
+
bytes32 internal constant _SELL_SLOT = 0x656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb6;
|
16
|
+
bytes32 internal constant _PAUSED_INVESTING_SLOT = 0xa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a;
|
17
|
+
|
18
|
+
bytes32 internal constant _PROFIT_SHARING_NUMERATOR_SLOT = 0xe3ee74fb7893020b457d8071ed1ef76ace2bf4903abd7b24d3ce312e9c72c029;
|
19
|
+
bytes32 internal constant _PROFIT_SHARING_DENOMINATOR_SLOT = 0x0286fd414602b432a8c80a0125e9a25de9bba96da9d5068c832ff73f09208a3b;
|
20
|
+
|
21
|
+
bytes32 internal constant _NEXT_IMPLEMENTATION_SLOT = 0x29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb84447;
|
22
|
+
bytes32 internal constant _NEXT_IMPLEMENTATION_TIMESTAMP_SLOT = 0x414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22e;
|
23
|
+
bytes32 internal constant _NEXT_IMPLEMENTATION_DELAY_SLOT = 0x82b330ca72bcd6db11a26f10ce47ebcfe574a9c646bccbc6f1cd4478eae16b31;
|
24
|
+
|
25
|
+
constructor() public {
|
26
|
+
assert(_UNDERLYING_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.underlying")) - 1));
|
27
|
+
assert(_VAULT_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.vault")) - 1));
|
28
|
+
assert(_REWARD_TOKEN_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardToken")) - 1));
|
29
|
+
assert(_REWARD_POOL_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardPool")) - 1));
|
30
|
+
assert(_SELL_FLOOR_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.sellFloor")) - 1));
|
31
|
+
assert(_SELL_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.sell")) - 1));
|
32
|
+
assert(_PAUSED_INVESTING_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.pausedInvesting")) - 1));
|
33
|
+
|
34
|
+
assert(_PROFIT_SHARING_NUMERATOR_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.profitSharingNumerator")) - 1));
|
35
|
+
assert(_PROFIT_SHARING_DENOMINATOR_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.profitSharingDenominator")) - 1));
|
36
|
+
|
37
|
+
assert(_NEXT_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.nextImplementation")) - 1));
|
38
|
+
assert(_NEXT_IMPLEMENTATION_TIMESTAMP_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.nextImplementationTimestamp")) - 1));
|
39
|
+
assert(_NEXT_IMPLEMENTATION_DELAY_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.nextImplementationDelay")) - 1));
|
40
|
+
}
|
41
|
+
|
42
|
+
function _setUnderlying(address _address) internal {
|
43
|
+
setAddress(_UNDERLYING_SLOT, _address);
|
44
|
+
}
|
45
|
+
|
46
|
+
function underlying() public virtual view returns (address) {
|
47
|
+
return getAddress(_UNDERLYING_SLOT);
|
48
|
+
}
|
49
|
+
|
50
|
+
function _setRewardPool(address _address) internal {
|
51
|
+
setAddress(_REWARD_POOL_SLOT, _address);
|
52
|
+
}
|
53
|
+
|
54
|
+
function rewardPool() public view returns (address) {
|
55
|
+
return getAddress(_REWARD_POOL_SLOT);
|
56
|
+
}
|
57
|
+
|
58
|
+
function _setRewardToken(address _address) internal {
|
59
|
+
setAddress(_REWARD_TOKEN_SLOT, _address);
|
60
|
+
}
|
61
|
+
|
62
|
+
function rewardToken() public view returns (address) {
|
63
|
+
return getAddress(_REWARD_TOKEN_SLOT);
|
64
|
+
}
|
65
|
+
|
66
|
+
function _setVault(address _address) internal {
|
67
|
+
setAddress(_VAULT_SLOT, _address);
|
68
|
+
}
|
69
|
+
|
70
|
+
function vault() public virtual view returns (address) {
|
71
|
+
return getAddress(_VAULT_SLOT);
|
72
|
+
}
|
73
|
+
|
74
|
+
// a flag for disabling selling for simplified emergency exit
|
75
|
+
function _setSell(bool _value) internal {
|
76
|
+
setBoolean(_SELL_SLOT, _value);
|
77
|
+
}
|
78
|
+
|
79
|
+
function sell() public view returns (bool) {
|
80
|
+
return getBoolean(_SELL_SLOT);
|
81
|
+
}
|
82
|
+
|
83
|
+
function _setPausedInvesting(bool _value) internal {
|
84
|
+
setBoolean(_PAUSED_INVESTING_SLOT, _value);
|
85
|
+
}
|
86
|
+
|
87
|
+
function pausedInvesting() public view returns (bool) {
|
88
|
+
return getBoolean(_PAUSED_INVESTING_SLOT);
|
89
|
+
}
|
90
|
+
|
91
|
+
function _setSellFloor(uint256 _value) internal {
|
92
|
+
setUint256(_SELL_FLOOR_SLOT, _value);
|
93
|
+
}
|
94
|
+
|
95
|
+
function sellFloor() public view returns (uint256) {
|
96
|
+
return getUint256(_SELL_FLOOR_SLOT);
|
97
|
+
}
|
98
|
+
|
99
|
+
function _setProfitSharingNumerator(uint256 _value) internal {
|
100
|
+
setUint256(_PROFIT_SHARING_NUMERATOR_SLOT, _value);
|
101
|
+
}
|
102
|
+
|
103
|
+
function profitSharingNumerator() public view returns (uint256) {
|
104
|
+
return getUint256(_PROFIT_SHARING_NUMERATOR_SLOT);
|
105
|
+
}
|
106
|
+
|
107
|
+
function _setProfitSharingDenominator(uint256 _value) internal {
|
108
|
+
setUint256(_PROFIT_SHARING_DENOMINATOR_SLOT, _value);
|
109
|
+
}
|
110
|
+
|
111
|
+
function profitSharingDenominator() public view returns (uint256) {
|
112
|
+
return getUint256(_PROFIT_SHARING_DENOMINATOR_SLOT);
|
113
|
+
}
|
114
|
+
|
115
|
+
// upgradeability
|
116
|
+
|
117
|
+
function _setNextImplementation(address _address) internal {
|
118
|
+
setAddress(_NEXT_IMPLEMENTATION_SLOT, _address);
|
119
|
+
}
|
120
|
+
|
121
|
+
function nextImplementation() public view returns (address) {
|
122
|
+
return getAddress(_NEXT_IMPLEMENTATION_SLOT);
|
123
|
+
}
|
124
|
+
|
125
|
+
function _setNextImplementationTimestamp(uint256 _value) internal {
|
126
|
+
setUint256(_NEXT_IMPLEMENTATION_TIMESTAMP_SLOT, _value);
|
127
|
+
}
|
128
|
+
|
129
|
+
function nextImplementationTimestamp() public view returns (uint256) {
|
130
|
+
return getUint256(_NEXT_IMPLEMENTATION_TIMESTAMP_SLOT);
|
131
|
+
}
|
132
|
+
|
133
|
+
function _setNextImplementationDelay(uint256 _value) internal {
|
134
|
+
setUint256(_NEXT_IMPLEMENTATION_DELAY_SLOT, _value);
|
135
|
+
}
|
136
|
+
|
137
|
+
function nextImplementationDelay() public view returns (uint256) {
|
138
|
+
return getUint256(_NEXT_IMPLEMENTATION_DELAY_SLOT);
|
139
|
+
}
|
140
|
+
|
141
|
+
function setBoolean(bytes32 slot, bool _value) internal {
|
142
|
+
setUint256(slot, _value ? 1 : 0);
|
143
|
+
}
|
144
|
+
|
145
|
+
function getBoolean(bytes32 slot) internal view returns (bool) {
|
146
|
+
return (getUint256(slot) == 1);
|
147
|
+
}
|
148
|
+
|
149
|
+
function setAddress(bytes32 slot, address _address) internal {
|
150
|
+
// solhint-disable-next-line no-inline-assembly
|
151
|
+
assembly {
|
152
|
+
sstore(slot, _address)
|
153
|
+
}
|
154
|
+
}
|
155
|
+
|
156
|
+
function setUint256(bytes32 slot, uint256 _value) internal {
|
157
|
+
// solhint-disable-next-line no-inline-assembly
|
158
|
+
assembly {
|
159
|
+
sstore(slot, _value)
|
160
|
+
}
|
161
|
+
}
|
162
|
+
|
163
|
+
function getAddress(bytes32 slot) internal view returns (address str) {
|
164
|
+
// solhint-disable-next-line no-inline-assembly
|
165
|
+
assembly {
|
166
|
+
str := sload(slot)
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
function getUint256(bytes32 slot) internal view returns (uint256 str) {
|
171
|
+
// solhint-disable-next-line no-inline-assembly
|
172
|
+
assembly {
|
173
|
+
str := sload(slot)
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
@@ -0,0 +1,290 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "../interface/IControllerV2.sol";
|
5
|
+
import "../inheritance/ControllableInit.sol";
|
6
|
+
|
7
|
+
contract BaseUpgradeableStrategyStorageV2 is ControllableInit {
|
8
|
+
|
9
|
+
event ProfitsNotCollected(
|
10
|
+
address indexed rewardToken,
|
11
|
+
bool sell,
|
12
|
+
bool floor
|
13
|
+
);
|
14
|
+
event ProfitLogInReward(
|
15
|
+
address indexed rewardToken,
|
16
|
+
uint256 profitAmount,
|
17
|
+
uint256 feeAmount,
|
18
|
+
uint256 timestamp
|
19
|
+
);
|
20
|
+
event ProfitAndBuybackLog(
|
21
|
+
address indexed rewardToken,
|
22
|
+
uint256 profitAmount,
|
23
|
+
uint256 feeAmount,
|
24
|
+
uint256 timestamp
|
25
|
+
);
|
26
|
+
event PlatformFeeLogInReward(
|
27
|
+
address indexed treasury,
|
28
|
+
address indexed rewardToken,
|
29
|
+
uint256 profitAmount,
|
30
|
+
uint256 feeAmount,
|
31
|
+
uint256 timestamp
|
32
|
+
);
|
33
|
+
event StrategistFeeLogInReward(
|
34
|
+
address indexed strategist,
|
35
|
+
address indexed rewardToken,
|
36
|
+
uint256 profitAmount,
|
37
|
+
uint256 feeAmount,
|
38
|
+
uint256 timestamp
|
39
|
+
);
|
40
|
+
|
41
|
+
bytes32 internal constant _UNDERLYING_SLOT = 0xa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e530;
|
42
|
+
bytes32 internal constant _VAULT_SLOT = 0xefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d41;
|
43
|
+
|
44
|
+
bytes32 internal constant _REWARD_TOKEN_SLOT = 0xdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbf;
|
45
|
+
bytes32 internal constant _REWARD_TOKENS_SLOT = 0x45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163c;
|
46
|
+
bytes32 internal constant _REWARD_POOL_SLOT = 0x3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b8;
|
47
|
+
bytes32 internal constant _SELL_FLOOR_SLOT = 0xc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc;
|
48
|
+
bytes32 internal constant _SELL_SLOT = 0x656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb6;
|
49
|
+
bytes32 internal constant _PAUSED_INVESTING_SLOT = 0xa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a;
|
50
|
+
|
51
|
+
bytes32 internal constant _PROFIT_SHARING_NUMERATOR_SLOT = 0xe3ee74fb7893020b457d8071ed1ef76ace2bf4903abd7b24d3ce312e9c72c029;
|
52
|
+
bytes32 internal constant _PROFIT_SHARING_DENOMINATOR_SLOT = 0x0286fd414602b432a8c80a0125e9a25de9bba96da9d5068c832ff73f09208a3b;
|
53
|
+
|
54
|
+
bytes32 internal constant _NEXT_IMPLEMENTATION_SLOT = 0x29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb84447;
|
55
|
+
bytes32 internal constant _NEXT_IMPLEMENTATION_TIMESTAMP_SLOT = 0x414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22e;
|
56
|
+
bytes32 internal constant _NEXT_IMPLEMENTATION_DELAY_SLOT = 0x82b330ca72bcd6db11a26f10ce47ebcfe574a9c646bccbc6f1cd4478eae16b31;
|
57
|
+
|
58
|
+
bytes32 internal constant _STRATEGIST_SLOT = 0x6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458d;
|
59
|
+
|
60
|
+
constructor() public {
|
61
|
+
assert(_UNDERLYING_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.underlying")) - 1));
|
62
|
+
assert(_VAULT_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.vault")) - 1));
|
63
|
+
assert(_REWARD_TOKEN_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardToken")) - 1));
|
64
|
+
assert(_REWARD_TOKENS_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardTokens")) - 1));
|
65
|
+
assert(_REWARD_POOL_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.rewardPool")) - 1));
|
66
|
+
assert(_SELL_FLOOR_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.sellFloor")) - 1));
|
67
|
+
assert(_SELL_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.sell")) - 1));
|
68
|
+
assert(_PAUSED_INVESTING_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.pausedInvesting")) - 1));
|
69
|
+
|
70
|
+
assert(_PROFIT_SHARING_NUMERATOR_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.profitSharingNumerator")) - 1));
|
71
|
+
assert(_PROFIT_SHARING_DENOMINATOR_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.profitSharingDenominator")) - 1));
|
72
|
+
|
73
|
+
assert(_NEXT_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.nextImplementation")) - 1));
|
74
|
+
assert(_NEXT_IMPLEMENTATION_TIMESTAMP_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.nextImplementationTimestamp")) - 1));
|
75
|
+
assert(_NEXT_IMPLEMENTATION_DELAY_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.nextImplementationDelay")) - 1));
|
76
|
+
|
77
|
+
assert(_STRATEGIST_SLOT == bytes32(uint256(keccak256("eip1967.strategyStorage.strategist")) - 1));
|
78
|
+
}
|
79
|
+
|
80
|
+
function _setUnderlying(address _address) internal {
|
81
|
+
setAddress(_UNDERLYING_SLOT, _address);
|
82
|
+
}
|
83
|
+
|
84
|
+
function underlying() public virtual view returns (address) {
|
85
|
+
return getAddress(_UNDERLYING_SLOT);
|
86
|
+
}
|
87
|
+
|
88
|
+
function _setRewardPool(address _address) internal {
|
89
|
+
setAddress(_REWARD_POOL_SLOT, _address);
|
90
|
+
}
|
91
|
+
|
92
|
+
function rewardPool() public view returns (address) {
|
93
|
+
return getAddress(_REWARD_POOL_SLOT);
|
94
|
+
}
|
95
|
+
|
96
|
+
function _setRewardToken(address _address) internal {
|
97
|
+
setAddress(_REWARD_TOKEN_SLOT, _address);
|
98
|
+
}
|
99
|
+
|
100
|
+
function rewardToken() public view returns (address) {
|
101
|
+
return getAddress(_REWARD_TOKEN_SLOT);
|
102
|
+
}
|
103
|
+
|
104
|
+
function _setRewardTokens(address[] memory _rewardTokens) internal {
|
105
|
+
setAddressArray(_REWARD_TOKENS_SLOT, _rewardTokens);
|
106
|
+
}
|
107
|
+
|
108
|
+
function isRewardToken(address _token) public view returns (bool) {
|
109
|
+
return _isAddressInList(_token, rewardTokens());
|
110
|
+
}
|
111
|
+
|
112
|
+
function rewardTokens() public view returns (address[] memory) {
|
113
|
+
return getAddressArray(_REWARD_TOKENS_SLOT);
|
114
|
+
}
|
115
|
+
|
116
|
+
function _isAddressInList(address _searchValue, address[] memory _list) internal pure returns (bool) {
|
117
|
+
for (uint i = 0; i < _list.length; i++) {
|
118
|
+
if (_list[i] == _searchValue) {
|
119
|
+
return true;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
return false;
|
123
|
+
}
|
124
|
+
|
125
|
+
function _setStrategist(address _strategist) internal {
|
126
|
+
setAddress(_STRATEGIST_SLOT, _strategist);
|
127
|
+
}
|
128
|
+
|
129
|
+
function strategist() public view returns (address) {
|
130
|
+
return getAddress(_STRATEGIST_SLOT);
|
131
|
+
}
|
132
|
+
|
133
|
+
function _setVault(address _address) internal {
|
134
|
+
setAddress(_VAULT_SLOT, _address);
|
135
|
+
}
|
136
|
+
|
137
|
+
function vault() public virtual view returns (address) {
|
138
|
+
return getAddress(_VAULT_SLOT);
|
139
|
+
}
|
140
|
+
|
141
|
+
// a flag for disabling selling for simplified emergency exit
|
142
|
+
function _setSell(bool _value) internal {
|
143
|
+
setBoolean(_SELL_SLOT, _value);
|
144
|
+
}
|
145
|
+
|
146
|
+
function sell() public view returns (bool) {
|
147
|
+
return getBoolean(_SELL_SLOT);
|
148
|
+
}
|
149
|
+
|
150
|
+
function _setPausedInvesting(bool _value) internal {
|
151
|
+
setBoolean(_PAUSED_INVESTING_SLOT, _value);
|
152
|
+
}
|
153
|
+
|
154
|
+
function pausedInvesting() public view returns (bool) {
|
155
|
+
return getBoolean(_PAUSED_INVESTING_SLOT);
|
156
|
+
}
|
157
|
+
|
158
|
+
function _setSellFloor(uint256 _value) internal {
|
159
|
+
setUint256(_SELL_FLOOR_SLOT, _value);
|
160
|
+
}
|
161
|
+
|
162
|
+
function sellFloor() public view returns (uint256) {
|
163
|
+
return getUint256(_SELL_FLOOR_SLOT);
|
164
|
+
}
|
165
|
+
|
166
|
+
function profitSharingNumerator() public view returns (uint256) {
|
167
|
+
return IControllerV2(controller()).profitSharingNumerator();
|
168
|
+
}
|
169
|
+
|
170
|
+
function platformFeeNumerator() public view returns (uint256) {
|
171
|
+
return IControllerV2(controller()).platformFeeNumerator();
|
172
|
+
}
|
173
|
+
|
174
|
+
function strategistFeeNumerator() public view returns (uint256) {
|
175
|
+
return IControllerV2(controller()).strategistFeeNumerator();
|
176
|
+
}
|
177
|
+
|
178
|
+
function feeDenominator() public view returns (uint256) {
|
179
|
+
return IControllerV2(controller()).feeDenominator();
|
180
|
+
}
|
181
|
+
|
182
|
+
function universalLiquidator() public view returns (address) {
|
183
|
+
return IControllerV2(controller()).universalLiquidator();
|
184
|
+
}
|
185
|
+
|
186
|
+
// upgradeability
|
187
|
+
|
188
|
+
function _setNextImplementation(address _address) internal {
|
189
|
+
setAddress(_NEXT_IMPLEMENTATION_SLOT, _address);
|
190
|
+
}
|
191
|
+
|
192
|
+
function nextImplementation() public view returns (address) {
|
193
|
+
return getAddress(_NEXT_IMPLEMENTATION_SLOT);
|
194
|
+
}
|
195
|
+
|
196
|
+
function _setNextImplementationTimestamp(uint256 _value) internal {
|
197
|
+
setUint256(_NEXT_IMPLEMENTATION_TIMESTAMP_SLOT, _value);
|
198
|
+
}
|
199
|
+
|
200
|
+
function nextImplementationTimestamp() public view returns (uint256) {
|
201
|
+
return getUint256(_NEXT_IMPLEMENTATION_TIMESTAMP_SLOT);
|
202
|
+
}
|
203
|
+
|
204
|
+
function nextImplementationDelay() public view returns (uint256) {
|
205
|
+
return IControllerV2(controller()).nextImplementationDelay();
|
206
|
+
}
|
207
|
+
|
208
|
+
function setBoolean(bytes32 slot, bool _value) internal {
|
209
|
+
setUint256(slot, _value ? 1 : 0);
|
210
|
+
}
|
211
|
+
|
212
|
+
function getBoolean(bytes32 slot) internal view returns (bool) {
|
213
|
+
return (getUint256(slot) == 1);
|
214
|
+
}
|
215
|
+
|
216
|
+
function setAddress(bytes32 slot, address _address) internal {
|
217
|
+
// solhint-disable-next-line no-inline-assembly
|
218
|
+
assembly {
|
219
|
+
sstore(slot, _address)
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
function setUint256(bytes32 slot, uint256 _value) internal {
|
224
|
+
// solhint-disable-next-line no-inline-assembly
|
225
|
+
assembly {
|
226
|
+
sstore(slot, _value)
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
function getAddress(bytes32 slot) internal view returns (address str) {
|
231
|
+
// solhint-disable-next-line no-inline-assembly
|
232
|
+
assembly {
|
233
|
+
str := sload(slot)
|
234
|
+
}
|
235
|
+
}
|
236
|
+
|
237
|
+
function getUint256(bytes32 slot) internal view returns (uint256 str) {
|
238
|
+
// solhint-disable-next-line no-inline-assembly
|
239
|
+
assembly {
|
240
|
+
str := sload(slot)
|
241
|
+
}
|
242
|
+
}
|
243
|
+
|
244
|
+
function setUint256Array(bytes32 slot, uint256[] memory _values) internal {
|
245
|
+
// solhint-disable-next-line no-inline-assembly
|
246
|
+
setUint256(slot, _values.length);
|
247
|
+
for (uint i = 0; i < _values.length; i++) {
|
248
|
+
setUint256(bytes32(uint(slot) + 1 + i), _values[i]);
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
function setAddressArray(bytes32 slot, address[] memory _values) internal {
|
253
|
+
// solhint-disable-next-line no-inline-assembly
|
254
|
+
setUint256(slot, _values.length);
|
255
|
+
for (uint i = 0; i < _values.length; i++) {
|
256
|
+
setAddress(bytes32(uint(slot) + 1 + i), _values[i]);
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
|
261
|
+
function getUint256Array(bytes32 slot) internal view returns (uint[] memory values) {
|
262
|
+
// solhint-disable-next-line no-inline-assembly
|
263
|
+
values = new uint[](getUint256(slot));
|
264
|
+
for (uint i = 0; i < values.length; i++) {
|
265
|
+
values[i] = getUint256(bytes32(uint(slot) + 1 + i));
|
266
|
+
}
|
267
|
+
}
|
268
|
+
|
269
|
+
function getAddressArray(bytes32 slot) internal view returns (address[] memory values) {
|
270
|
+
// solhint-disable-next-line no-inline-assembly
|
271
|
+
values = new address[](getUint256(slot));
|
272
|
+
for (uint i = 0; i < values.length; i++) {
|
273
|
+
values[i] = getAddress(bytes32(uint(slot) + 1 + i));
|
274
|
+
}
|
275
|
+
}
|
276
|
+
|
277
|
+
function setBytes32(bytes32 slot, bytes32 _value) internal {
|
278
|
+
// solhint-disable-next-line no-inline-assembly
|
279
|
+
assembly {
|
280
|
+
sstore(slot, _value)
|
281
|
+
}
|
282
|
+
}
|
283
|
+
|
284
|
+
function getBytes32(bytes32 slot) internal view returns (bytes32 str) {
|
285
|
+
// solhint-disable-next-line no-inline-assembly
|
286
|
+
assembly {
|
287
|
+
str := sload(slot)
|
288
|
+
}
|
289
|
+
}
|
290
|
+
}
|
@@ -0,0 +1,145 @@
|
|
1
|
+
//SPDX-License-Identifier: Unlicense
|
2
|
+
pragma solidity 0.6.12;
|
3
|
+
|
4
|
+
import "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol";
|
5
|
+
import "./BaseUpgradeableStrategyStorageV2.sol";
|
6
|
+
import "../inheritance/ControllableInit.sol";
|
7
|
+
import "../interface/IControllerV2.sol";
|
8
|
+
import "../interface/IRewardForwarder.sol";
|
9
|
+
import "../interface/merkl/IDistributor.sol";
|
10
|
+
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
|
11
|
+
import "@openzeppelin/contracts/math/SafeMath.sol";
|
12
|
+
import "@openzeppelin/contracts/token/ERC20/SafeERC20.sol";
|
13
|
+
|
14
|
+
contract BaseUpgradeableStrategyV2 is Initializable, ControllableInit, BaseUpgradeableStrategyStorageV2 {
|
15
|
+
using SafeMath for uint256;
|
16
|
+
using SafeERC20 for IERC20;
|
17
|
+
|
18
|
+
event ProfitsNotCollected(bool sell, bool floor);
|
19
|
+
event ProfitLogInReward(uint256 profitAmount, uint256 feeAmount, uint256 timestamp);
|
20
|
+
event ProfitAndBuybackLog(uint256 profitAmount, uint256 feeAmount, uint256 timestamp);
|
21
|
+
|
22
|
+
modifier restricted() {
|
23
|
+
require(msg.sender == vault() || msg.sender == controller()
|
24
|
+
|| msg.sender == governance(),
|
25
|
+
"The sender has to be the controller, governance, or vault");
|
26
|
+
_;
|
27
|
+
}
|
28
|
+
|
29
|
+
// This is only used in `investAllUnderlying()`
|
30
|
+
// The user can still freely withdraw from the strategy
|
31
|
+
modifier onlyNotPausedInvesting() {
|
32
|
+
require(!pausedInvesting(), "Action blocked as the strategy is in emergency state");
|
33
|
+
_;
|
34
|
+
}
|
35
|
+
|
36
|
+
constructor() public BaseUpgradeableStrategyStorageV2() {
|
37
|
+
}
|
38
|
+
|
39
|
+
function initialize(
|
40
|
+
address _storage,
|
41
|
+
address _underlying,
|
42
|
+
address _vault,
|
43
|
+
address _rewardPool,
|
44
|
+
address _rewardToken,
|
45
|
+
address _strategist
|
46
|
+
) public initializer {
|
47
|
+
ControllableInit.initialize(
|
48
|
+
_storage
|
49
|
+
);
|
50
|
+
_setUnderlying(_underlying);
|
51
|
+
_setVault(_vault);
|
52
|
+
_setRewardPool(_rewardPool);
|
53
|
+
_setRewardToken(_rewardToken);
|
54
|
+
_setStrategist(_strategist);
|
55
|
+
_setSell(true);
|
56
|
+
_setSellFloor(0);
|
57
|
+
_setPausedInvesting(false);
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Schedules an upgrade for this vault's proxy.
|
62
|
+
*/
|
63
|
+
function scheduleUpgrade(address impl) public onlyGovernance {
|
64
|
+
_setNextImplementation(impl);
|
65
|
+
_setNextImplementationTimestamp(block.timestamp.add(nextImplementationDelay()));
|
66
|
+
}
|
67
|
+
|
68
|
+
function _finalizeUpgrade() internal {
|
69
|
+
_setNextImplementation(address(0));
|
70
|
+
_setNextImplementationTimestamp(0);
|
71
|
+
}
|
72
|
+
|
73
|
+
function shouldUpgrade() external view returns (bool, address) {
|
74
|
+
return (
|
75
|
+
nextImplementationTimestamp() != 0
|
76
|
+
&& block.timestamp > nextImplementationTimestamp()
|
77
|
+
&& nextImplementation() != address(0),
|
78
|
+
nextImplementation()
|
79
|
+
);
|
80
|
+
}
|
81
|
+
|
82
|
+
function toggleMerklOperator(address merklDistr, address _operator) external onlyGovernance {
|
83
|
+
IDistributor(merklDistr).toggleOperator(address(this), _operator);
|
84
|
+
}
|
85
|
+
|
86
|
+
// ========================= Internal & Private Functions =========================
|
87
|
+
|
88
|
+
// ==================== Functionality ====================
|
89
|
+
|
90
|
+
/**
|
91
|
+
* @dev Same as `_notifyProfitAndBuybackInRewardToken` but does not perform a compounding buyback. Just takes fees
|
92
|
+
* instead.
|
93
|
+
*/
|
94
|
+
function _notifyProfitInRewardToken(
|
95
|
+
address _rewardToken,
|
96
|
+
uint256 _rewardBalance
|
97
|
+
) internal {
|
98
|
+
if (_rewardBalance > 100) {
|
99
|
+
uint _feeDenominator = feeDenominator();
|
100
|
+
uint256 strategistFee = _rewardBalance.mul(strategistFeeNumerator()).div(_feeDenominator);
|
101
|
+
uint256 platformFee = _rewardBalance.mul(platformFeeNumerator()).div(_feeDenominator);
|
102
|
+
uint256 profitSharingFee = _rewardBalance.mul(profitSharingNumerator()).div(_feeDenominator);
|
103
|
+
|
104
|
+
address strategyFeeRecipient = strategist();
|
105
|
+
address platformFeeRecipient = IControllerV2(controller()).governance();
|
106
|
+
|
107
|
+
emit ProfitLogInReward(
|
108
|
+
_rewardToken,
|
109
|
+
_rewardBalance,
|
110
|
+
profitSharingFee,
|
111
|
+
block.timestamp
|
112
|
+
);
|
113
|
+
emit PlatformFeeLogInReward(
|
114
|
+
platformFeeRecipient,
|
115
|
+
_rewardToken,
|
116
|
+
_rewardBalance,
|
117
|
+
platformFee,
|
118
|
+
block.timestamp
|
119
|
+
);
|
120
|
+
emit StrategistFeeLogInReward(
|
121
|
+
strategyFeeRecipient,
|
122
|
+
_rewardToken,
|
123
|
+
_rewardBalance,
|
124
|
+
strategistFee,
|
125
|
+
block.timestamp
|
126
|
+
);
|
127
|
+
|
128
|
+
address rewardForwarder = IControllerV2(controller()).rewardForwarder();
|
129
|
+
IERC20(_rewardToken).safeApprove(rewardForwarder, 0);
|
130
|
+
IERC20(_rewardToken).safeApprove(rewardForwarder, _rewardBalance);
|
131
|
+
|
132
|
+
// Distribute/send the fees
|
133
|
+
IRewardForwarder(rewardForwarder).notifyFee(
|
134
|
+
_rewardToken,
|
135
|
+
profitSharingFee,
|
136
|
+
strategistFee,
|
137
|
+
platformFee
|
138
|
+
);
|
139
|
+
} else {
|
140
|
+
emit ProfitLogInReward(_rewardToken, 0, 0, block.timestamp);
|
141
|
+
emit PlatformFeeLogInReward(IControllerV2(controller()).governance(), _rewardToken, 0, 0, block.timestamp);
|
142
|
+
emit StrategistFeeLogInReward(strategist(), _rewardToken, 0, 0, block.timestamp);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
}
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
2
|
+
|
3
|
+
pragma solidity 0.6.12;
|
4
|
+
|
5
|
+
/**
|
6
|
+
* @title Proxy
|
7
|
+
* @dev Implements delegation of calls to other contracts, with proper
|
8
|
+
* forwarding of return values and bubbling of failures.
|
9
|
+
* It defines a fallback function that delegates all calls to the address
|
10
|
+
* returned by the abstract _implementation() internal function.
|
11
|
+
*/
|
12
|
+
abstract contract Proxy {
|
13
|
+
/**
|
14
|
+
* @dev Fallback function.
|
15
|
+
* Implemented entirely in `_fallback`.
|
16
|
+
*/
|
17
|
+
fallback () payable external {
|
18
|
+
_fallback();
|
19
|
+
}
|
20
|
+
|
21
|
+
receive () payable external {}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* @return The Address of the implementation.
|
25
|
+
*/
|
26
|
+
function _implementation() internal view virtual returns (address);
|
27
|
+
|
28
|
+
/**
|
29
|
+
* @dev Delegates execution to an implementation contract.
|
30
|
+
* This is a low level function that doesn't return to its internal call site.
|
31
|
+
* It will return to the external caller whatever the implementation returns.
|
32
|
+
* @param implementation Address to delegate.
|
33
|
+
*/
|
34
|
+
function _delegate(address implementation) internal {
|
35
|
+
assembly {
|
36
|
+
// Copy msg.data. We take full control of memory in this inline assembly
|
37
|
+
// block because it will not return to Solidity code. We overwrite the
|
38
|
+
// Solidity scratch pad at memory position 0.
|
39
|
+
calldatacopy(0, 0, calldatasize())
|
40
|
+
|
41
|
+
// Call the implementation.
|
42
|
+
// out and outsize are 0 because we don't know the size yet.
|
43
|
+
let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
|
44
|
+
|
45
|
+
// Copy the returned data.
|
46
|
+
returndatacopy(0, 0, returndatasize())
|
47
|
+
|
48
|
+
switch result
|
49
|
+
// delegatecall returns 0 on error.
|
50
|
+
case 0 { revert(0, returndatasize()) }
|
51
|
+
default { return(0, returndatasize()) }
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @dev Function that is run as the first thing in the fallback function.
|
57
|
+
* Can be redefined in derived contracts to add functionality.
|
58
|
+
* Redefinitions must call super._willFallback().
|
59
|
+
*/
|
60
|
+
function _willFallback() internal {
|
61
|
+
}
|
62
|
+
|
63
|
+
/**
|
64
|
+
* @dev fallback implementation.
|
65
|
+
* Extracted to enable manual triggering.
|
66
|
+
*/
|
67
|
+
function _fallback() internal {
|
68
|
+
_willFallback();
|
69
|
+
_delegate(_implementation());
|
70
|
+
}
|
71
|
+
}
|