From 8c22f27962e5b3aeb379695b70b8b2937b2cb312 Mon Sep 17 00:00:00 2001 From: crStiv Date: Fri, 8 Aug 2025 22:04:48 +0200 Subject: [PATCH] Update StrategyBase.sol --- src/contracts/strategies/StrategyBase.sol | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index 18824c7bb5..3f156af565 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -126,6 +126,11 @@ contract StrategyBase is Initializable, Pausable, IStrategy, SemVerMixin { uint256 virtualTokenBalance = _tokenBalance() + BALANCE_OFFSET; // calculate the prior virtual balance to account for the tokens that were already transferred to this contract uint256 virtualPriorTokenBalance = virtualTokenBalance - amount; + + // Additional safety check to prevent precision loss + require(virtualPriorTokenBalance > 0, "VirtualPriorTokenBalanceZero"); + require(virtualShareAmount > 0, "VirtualShareAmountZero"); + newShares = (amount * virtualShareAmount) / virtualPriorTokenBalance; // extra check for correctness / against edge case where share rate can be massively inflated as a 'griefing' sort of attack @@ -169,6 +174,11 @@ contract StrategyBase is Initializable, Pausable, IStrategy, SemVerMixin { // account for virtual shares and balance uint256 virtualPriorTotalShares = priorTotalShares + SHARES_OFFSET; uint256 virtualTokenBalance = _tokenBalance() + BALANCE_OFFSET; + + // Additional safety checks for withdrawal calculations + require(virtualPriorTotalShares > 0, "VirtualPriorTotalSharesZero"); + require(virtualTokenBalance > 0, "VirtualTokenBalanceZero"); + // calculate ratio based on virtual shares and balance, being careful to multiply before dividing amountOut = (virtualTokenBalance * amountShares) / virtualPriorTotalShares;