Merge pull request 'fix: Bear defaults duplicated across Optimizer and LiquidityManager (#646)' (#1016) from fix/issue-646 into master

This commit is contained in:
johba 2026-03-19 19:45:23 +01:00
commit 83db5c3298
3 changed files with 16 additions and 10 deletions

View file

@ -10,6 +10,14 @@ struct OptimizerInput {
int256 shift;
}
/// @dev Safe bear-mode defaults shared by Optimizer._bearDefaults() and
/// LiquidityManager.recenter()'s catch block. Keep all four here so
/// the two call-sites cannot silently diverge.
uint256 constant BEAR_CAPITAL_INEFFICIENCY = 0;
uint256 constant BEAR_ANCHOR_SHARE = 3e17;
uint24 constant BEAR_ANCHOR_WIDTH = 100;
uint256 constant BEAR_DISCOVERY_DEPTH = 3e17;
/**
* @title IOptimizer
* @notice Minimal interface for the Optimizer contract consumed by LiquidityManager.

View file

@ -2,7 +2,7 @@
pragma solidity ^0.8.19;
import { Kraiken } from "./Kraiken.sol";
import { IOptimizer } from "./IOptimizer.sol";
import { IOptimizer, BEAR_CAPITAL_INEFFICIENCY, BEAR_ANCHOR_SHARE, BEAR_ANCHOR_WIDTH, BEAR_DISCOVERY_DEPTH } from "./IOptimizer.sol";
import { PriceOracle } from "./abstracts/PriceOracle.sol";
import { ThreePositionStrategy } from "./abstracts/ThreePositionStrategy.sol";
import { IWETH9 } from "./interfaces/IWETH9.sol";
@ -234,10 +234,10 @@ contract LiquidityManager is ThreePositionStrategy, PriceOracle {
} catch {
// Fallback to safe bear-mode defaults if optimizer fails
PositionParams memory defaultParams = PositionParams({
capitalInefficiency: 0, // CI=0 proven safest
anchorShare: 3e17, // 30% defensive floor allocation
anchorWidth: 100, // Max width avoids AW 30-90 kill zone
discoveryDepth: 3e17 // 0.3e18
capitalInefficiency: BEAR_CAPITAL_INEFFICIENCY,
anchorShare: BEAR_ANCHOR_SHARE,
anchorWidth: BEAR_ANCHOR_WIDTH,
discoveryDepth: BEAR_DISCOVERY_DEPTH
});
_setPositions(currentTick, defaultParams);

View file

@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.19;
import { IOptimizer, OptimizerInput } from "./IOptimizer.sol";
import { IOptimizer, OptimizerInput, BEAR_CAPITAL_INEFFICIENCY, BEAR_ANCHOR_SHARE, BEAR_ANCHOR_WIDTH, BEAR_DISCOVERY_DEPTH } from "./IOptimizer.sol";
import { Kraiken } from "./Kraiken.sol";
import { Stake } from "./Stake.sol";
@ -212,12 +212,10 @@ contract Optimizer is Initializable, UUPSUpgradeable, IOptimizer {
/**
* @notice Safe bear-mode defaults returned when calculateParams exceeds its
* gas budget or reverts.
* @dev Values must stay in sync with the catch block in LiquidityManager.recenter()
* ({capitalInefficiency:0, anchorShare:3e17, anchorWidth:100, discoveryDepth:3e17}).
* Update both locations together if the safe defaults ever change.
* @dev Constants defined in IOptimizer.sol, shared with LiquidityManager.recenter().
*/
function _bearDefaults() internal pure returns (uint256 capitalInefficiency, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth) {
return (0, 3e17, 100, 3e17);
return (BEAR_CAPITAL_INEFFICIENCY, BEAR_ANCHOR_SHARE, BEAR_ANCHOR_WIDTH, BEAR_DISCOVERY_DEPTH);
}
// ---- Normalization helpers ----