fix: address review findings for anchorWidth guard (#817)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
openhands 2026-03-15 22:04:13 +00:00
parent a21cf398bf
commit aa274fd8ed
3 changed files with 68 additions and 52 deletions

View file

@ -1,39 +1,10 @@
diff --git a/onchain/src/LiquidityManager.sol b/onchain/src/LiquidityManager.sol
index 0daccf9..e3a9b2f 100644
--- a/onchain/src/LiquidityManager.sol
+++ b/onchain/src/LiquidityManager.sol
@@ -36,7 +36,7 @@ contract LiquidityManager is ThreePositionStrategy, PriceOracle {
/// @notice Maximum anchor width (in ticks) accepted from the optimizer.
/// Any optimizer-returned value above this ceiling is silently clamped down.
- uint24 internal constant MAX_ANCHOR_WIDTH = 100;
diff --git a/onchain/src/abstracts/ThreePositionStrategy.sol b/onchain/src/abstracts/ThreePositionStrategy.sol
index 0000000..0000000 100644
--- a/onchain/src/abstracts/ThreePositionStrategy.sol
+++ b/onchain/src/abstracts/ThreePositionStrategy.sol
@@ -33,7 +33,7 @@
/// @notice Maximum safe anchorWidth: ensures 34 * MAX_ANCHOR_WIDTH * TICK_SPACING / 100 fits in int24
/// @dev With TICK_SPACING=200: 34 * 1233 * 200 = 8,384,400 ≤ int24 max (8,388,607).
/// anchorWidth=1234 produces 8,391,200 which overflows int24 and reverts in Solidity 0.8.
- uint24 internal constant MAX_ANCHOR_WIDTH = 1233;
+ uint24 internal constant MAX_ANCHOR_WIDTH = type(uint24).max;
/// @notice Upper bound (inclusive) for scale-1 optimizer parameters: capitalInefficiency,
/// anchorShare, and discoveryDepth. Values above this ceiling are silently clamped.
diff --git a/onchain/src/Optimizer.sol b/onchain/src/Optimizer.sol
index 4efa74c..a29612f 100644
--- a/onchain/src/Optimizer.sol
+++ b/onchain/src/Optimizer.sol
@@ -136,7 +136,7 @@ contract Optimizer is Initializable, UUPSUpgradeable, IOptimizer {
/// staticcall to actually receive 200 000. Callers with exactly 200203 k
/// gas will see a spurious bear-defaults fallback. This is not a practical
/// concern from recenter(), which always has abundant gas.
- uint256 internal constant CALCULATE_PARAMS_GAS_LIMIT = 200_000;
+ uint256 internal constant CALCULATE_PARAMS_GAS_LIMIT = 500_000;
/**
* @notice Initialize the Optimizer.
diff --git a/onchain/test/FitnessEvaluator.t.sol b/onchain/test/FitnessEvaluator.t.sol
index 9434163..5b91eca 100644
--- a/onchain/test/FitnessEvaluator.t.sol
+++ b/onchain/test/FitnessEvaluator.t.sol
@@ -152,7 +152,7 @@ contract FitnessEvaluator is Test {
/// @dev Must match Optimizer.CALCULATE_PARAMS_GAS_LIMIT. Candidates that exceed
/// this limit would unconditionally produce bear defaults in production and
/// are disqualified (fitness = 0) rather than scored against their theoretical output.
- uint256 internal constant CALCULATE_PARAMS_GAS_LIMIT = 200_000;
+ uint256 internal constant CALCULATE_PARAMS_GAS_LIMIT = 500_000;
/// @dev Soft gas penalty: wei deducted from fitness per gas unit used by calculateParams.
/// Creates selection pressure toward leaner programs while keeping gas as a