@@ -346,7 +346,7 @@ contract MultistrategyVault is IMultistrategyVault {
346346 * @param name_ New name for the vault token
347347 * @custom:security Only callable by roleManager
348348 */
349- function set_name (string memory name_ ) external override {
349+ function setName (string memory name_ ) external override {
350350 require (msg .sender == roleManager, NotAllowed ());
351351 name = name_;
352352 }
@@ -357,7 +357,7 @@ contract MultistrategyVault is IMultistrategyVault {
357357 * @param symbol_ New symbol ticker for the vault token
358358 * @custom:security Only callable by roleManager
359359 */
360- function set_symbol (string memory symbol_ ) external override {
360+ function setSymbol (string memory symbol_ ) external override {
361361 require (msg .sender == roleManager, NotAllowed ());
362362 symbol = symbol_;
363363 }
@@ -470,6 +470,18 @@ contract MultistrategyVault is IMultistrategyVault {
470470 emit UpdateDepositLimit (depositLimit_);
471471 }
472472
473+ /**
474+ * @notice Sets a module contract to dynamically control deposit limits with default override behavior
475+ * @dev Overload to match Vyper's default parameter behavior (shouldOverride = false by default)
476+ * See set_deposit_limit_module(address, bool) for full documentation
477+ * @param depositLimitModule_ Address of IDepositLimitModule contract (or address(0) to disable)
478+ * @custom:security Only callable by DEPOSIT_LIMIT_MANAGER role
479+ * @custom:security Reverts if vault is shutdown
480+ */
481+ function set_deposit_limit_module (address depositLimitModule_ ) public {
482+ set_deposit_limit_module (depositLimitModule_, false );
483+ }
484+
473485 /**
474486 * @notice Sets a module contract to dynamically control deposit limits
475487 * @dev Module overrides static depositLimit. Requires depositLimit = type(uint256).max
@@ -479,7 +491,7 @@ contract MultistrategyVault is IMultistrategyVault {
479491 * @custom:security Only callable by DEPOSIT_LIMIT_MANAGER role
480492 * @custom:security Reverts if vault is shutdown
481493 */
482- function set_deposit_limit_module (address depositLimitModule_ , bool shouldOverride_ ) external override {
494+ function set_deposit_limit_module (address depositLimitModule_ , bool shouldOverride_ ) public override {
483495 require (_shutdown == false , VaultShutdown ());
484496 _enforceRole (msg .sender , Roles.DEPOSIT_LIMIT_MANAGER);
485497
@@ -1679,15 +1691,6 @@ contract MultistrategyVault is IMultistrategyVault {
16791691 return _convertToAssets (shares_, Rounding.ROUND_DOWN);
16801692 }
16811693
1682- /**
1683- * @notice Returns the default withdrawal queue
1684- * @dev Same as getDefaultQueue()
1685- * @return queue Array of strategy addresses in withdrawal priority order
1686- */
1687- function defaultQueue () external view override returns (address [] memory ) {
1688- return _defaultQueue;
1689- }
1690-
16911694 /**
16921695 * @notice Returns maximum assets that can be deposited for a receiver
16931696 * @dev Checks against depositLimit or depositLimitModule (if set)
@@ -1764,6 +1767,18 @@ contract MultistrategyVault is IMultistrategyVault {
17641767 );
17651768 }
17661769
1770+ /**
1771+ * @notice Returns maximum assets that owner can withdraw with custom loss tolerance
1772+ * @dev Uses default queue for withdrawal strategies
1773+ * @param owner_ Address that owns the shares
1774+ * @param maxLoss_ Maximum acceptable loss in basis points (0-10000)
1775+ * @return max Maximum withdrawable assets
1776+ */
1777+ function maxWithdraw (address owner_ , uint256 maxLoss_ ) external view virtual returns (uint256 ) {
1778+ address [] memory emptyArray = new address [](0 );
1779+ return _max_withdraw (owner_, maxLoss_, emptyArray);
1780+ }
1781+
17671782 /**
17681783 * @notice Returns maximum assets that owner can withdraw with default parameters
17691784 * @dev Overload to match Vyper's default parameters behavior (maxLoss = 0, default queue)
@@ -1775,6 +1790,22 @@ contract MultistrategyVault is IMultistrategyVault {
17751790 return _max_withdraw (owner_, 0 , emptyArray);
17761791 }
17771792
1793+ /**
1794+ * @notice Returns maximum shares that owner can redeem with custom loss tolerance
1795+ * @dev Uses default queue for withdrawal strategies
1796+ * @param owner_ Address that owns the shares
1797+ * @param maxLoss_ Maximum acceptable loss in basis points (0-10000)
1798+ * @return max Maximum redeemable shares
1799+ */
1800+ function maxRedeem (address owner_ , uint256 maxLoss_ ) external view virtual returns (uint256 ) {
1801+ address [] memory emptyArray = new address [](0 );
1802+ return
1803+ Math.min (
1804+ _convertToShares (_max_withdraw (owner_, maxLoss_, emptyArray), Rounding.ROUND_DOWN),
1805+ _balanceOf[owner_]
1806+ );
1807+ }
1808+
17781809 /**
17791810 * @notice Returns maximum shares that owner can redeem with default parameters
17801811 * @dev Overload to match Vyper's default parameters behavior (maxLoss = MAX_BPS, default queue)
@@ -1833,31 +1864,6 @@ contract MultistrategyVault is IMultistrategyVault {
18331864 return API_VERSION;
18341865 }
18351866
1836- // ============================================
1837- // VIEW FUNCTIONS - STRATEGY QUERIES
1838- // ============================================
1839-
1840- /**
1841- * @notice Calculates the unrealized losses for a withdrawal from strategy
1842- * @dev Compares strategy's actual asset value vs recorded debt
1843- * If strategy is underwater, user takes proportional share of loss
1844- *
1845- * Formula: loss = assetsNeeded - (assetsNeeded * strategyAssets / currentDebt)
1846- *
1847- * @param strategy_ Address of the strategy
1848- * @param assetsNeeded_ Amount of assets to withdraw from strategy
1849- * @return loss User's share of unrealized losses
1850- */
1851- function assess_share_of_unrealised_losses (
1852- address strategy_ ,
1853- uint256 assetsNeeded_
1854- ) external view returns (uint256 ) {
1855- uint256 currentDebt = _strategies[strategy_].currentDebt;
1856- require (currentDebt >= assetsNeeded_, NotEnoughDebt ());
1857-
1858- return _assess_share_of_unrealised_losses (strategy_, currentDebt, assetsNeeded_);
1859- }
1860-
18611867 // ============================================
18621868 // VIEW FUNCTIONS - PROFIT LOCKING
18631869 // ============================================
0 commit comments