// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.19; /** * @notice Dyadic rational input: mantissa × 2^(-shift). * shift is reserved for future use and MUST be 0. All production * Optimizer implementations require shift == 0 and revert otherwise. * When shift == 0 (as produced by _toDyadic), value == mantissa. */ struct OptimizerInput { int256 mantissa; 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. * Declaring the ABI here makes upgrade-compatibility explicit: any new * Optimizer implementation must satisfy this selector or the LiquidityManager * will fall back to bear-mode defaults via its try-catch. */ interface IOptimizer { /** * @notice Returns the four liquidity parameters used by LiquidityManager.recenter(). * @return capitalInefficiency Capital buffer level (0..1e18, clamped to MAX_PARAM_SCALE). CI=0 is safest. * @return anchorShare Fraction of non-floor ETH in anchor (0..1e18, clamped to MAX_PARAM_SCALE). * @return anchorWidth Anchor position width in tick units (uint24); passed through to ThreePositionStrategy without clamping. * @return discoveryDepth Discovery liquidity density (0..1e18, clamped to MAX_PARAM_SCALE). */ function getLiquidityParams() external view returns (uint256 capitalInefficiency, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth); }