// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.19; import { IOptimizer, OptimizerInput } from "./IOptimizer.sol"; import { OptimizerV3Push3Lib } from "./OptimizerV3Push3Lib.sol"; /** * @title OptimizerV3Push3 * @notice Standalone contract wrapping the Push3 transpiler output. * The actual calculation logic lives in OptimizerV3Push3Lib and is * shared with OptimizerV3 so that transpiler changes require only * one edit point. * @custom:experimental This contract is a transpiler harness / backtesting stub only. * It must NOT be wired as the live optimizer in any production deployment. * Use OptimizerV3 (UUPS proxy) for production. */ contract OptimizerV3Push3 is IOptimizer { /** * @dev Always reverts — this contract is a transpiler harness, not a production optimizer. * Calling getLiquidityParams() on this stub is a deployment misconfiguration. * LiquidityManager.recenter() has a try/catch that falls back to bear-mode defaults, * so accidental wiring produces a permanent bear-mode lock rather than a silent failure. * Use OptimizerV3 (which inherits Optimizer) for a live deployment with real inputs. */ function getLiquidityParams() external pure returns (uint256, uint256, uint24, uint256) { revert("OptimizerV3Push3: not for production use"); } /** * @notice Compute liquidity parameters from 8 dyadic rational inputs. * @dev Delegates to OptimizerV3Push3Lib.calculateParams — the single * canonical copy of the transpiler output. * capitalInefficiency (ci) is intentionally hardcoded to 0 in both the bear * and bull branches of this implementation. CI is a pure risk lever that * controls the VWAP bias applied when placing the floor position: CI=0 means * the floor tracks the raw VWAP with no upward adjustment, which is the * safest setting and carries zero effect on fee revenue. Any integrating * proxy (e.g. ThreePositionStrategy) must therefore treat the floor scarcity * and VWAP adjustment as if no capital-inefficiency premium is active. * Future optimizer versions that expose non-zero CI values should document * the resulting floor-placement and eth-scarcity effects explicitly. * @param inputs 8-slot dyadic rational array (all values 0..1e18): * slot 0 = percentageStaked, slot 1 = averageTaxRate, * slot 2 = pricePosition, slot 3 = volatility, slot 4 = momentum, * slot 5 = timeSinceRecenter, slot 6 = utilizationRate, slot 7 = reserved. * This implementation uses only slots 0 and 1; slots 2-7 are available * to future evolved programs that use the normalized indicators. * @return ci Capital inefficiency (0..1e18). Always 0 in this implementation. * @return anchorShare Fraction of non-floor ETH in anchor (0..1e18). * @return anchorWidth Anchor position width in tick units. * @return discoveryDepth Discovery liquidity density (0..1e18). */ function calculateParams(OptimizerInput[8] memory inputs) public pure returns (uint256 ci, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth) { return OptimizerV3Push3Lib.calculateParams(inputs); } }