Merge pull request 'fix: OptimizerV3 / OptimizerV3Push3 not explicitly typed against IOptimizer (#661)' (#734) from fix/issue-661 into master

This commit is contained in:
johba 2026-03-14 06:40:43 +01:00
commit fd3c569c82
5 changed files with 30 additions and 14 deletions

View file

@ -134,8 +134,8 @@ contract BacktestRunner is Script {
// ------------------------------------------------------------------
// KrAIken system deployment (follows DeployLocal.sol pattern)
//
// 1. Deploy OptimizerV3Push3 (no proxy only exposes isBullMarket(),
// causing LM to fall back to safe bear-mode defaults via try/catch).
// 1. Deploy OptimizerV3Push3 (no proxy getLiquidityParams() uses zeroed
// inputs, returning bear-mode defaults on every recenter).
// 2. Deploy LiquidityManager pointing at the shadow pool.
// 3. Wire BacktestKraiken.setLiquidityManager(lm).
// 4. Set feeDestination = sender.

View file

@ -11,9 +11,9 @@ import { MockToken } from "./MockToken.sol";
*/
struct KrAIkenSystem {
BacktestKraiken kraiken;
/// @dev OptimizerV3Push3 is used as the optimizer address. It does not implement
/// getLiquidityParams(), so LiquidityManager's try/catch falls back to safe
/// bear-mode defaults on every recenter. This is intentional for backtesting.
/// @dev OptimizerV3Push3 is used as the optimizer address. Its getLiquidityParams()
/// uses zeroed inputs (no on-chain stake data) and returns bear-mode defaults on
/// every recenter. This is intentional for backtesting.
OptimizerV3Push3 optimizer;
LiquidityManager lm;
}
@ -65,10 +65,9 @@ library KrAIkenDeployer {
returns (KrAIkenSystem memory sys)
{
// 1. Deploy OptimizerV3Push3.
// LiquidityManager wraps getLiquidityParams() in a try/catch and falls back to
// safe bear-mode defaults when the call reverts. Since OptimizerV3Push3 only
// exposes isBullMarket(), every recenter uses bear defaults conservative and
// correct for a baseline backtest.
// OptimizerV3Push3.getLiquidityParams() uses zeroed inputs (no stake data),
// so every recenter uses bear defaults conservative and correct for a
// baseline backtest.
OptimizerV3Push3 optimizer = new OptimizerV3Push3();
// 2. Deploy LiquidityManager. It computes the pool address from factory + WETH +

View file

@ -3,7 +3,7 @@ pragma solidity ^0.8.19;
import {Kraiken} from "./Kraiken.sol";
import {Stake} from "./Stake.sol";
import {OptimizerInput} from "./IOptimizer.sol";
import {IOptimizer, OptimizerInput} from "./IOptimizer.sol";
import {Initializable} from "@openzeppelin/proxy/utils/Initializable.sol";
import {UUPSUpgradeable} from "@openzeppelin/proxy/utils/UUPSUpgradeable.sol";
@ -85,7 +85,7 @@ interface ILiquidityManagerPositions {
* anchorWidth anchor position width (tick units, uint24)
* discoveryDepth discovery liquidity density
*/
contract Optimizer is Initializable, UUPSUpgradeable {
contract Optimizer is Initializable, UUPSUpgradeable, IOptimizer {
Kraiken private kraiken;
Stake private stake;
@ -413,6 +413,7 @@ contract Optimizer is Initializable, UUPSUpgradeable {
function getLiquidityParams()
external
view
override
returns (uint256 capitalInefficiency, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth)
{
OptimizerInput[8] memory inputs;

View file

@ -2,7 +2,7 @@
pragma solidity ^0.8.19;
import {Optimizer} from "./Optimizer.sol";
import {OptimizerInput} from "./IOptimizer.sol";
import {IOptimizer, OptimizerInput} from "./IOptimizer.sol";
/**
* @title OptimizerV3

View file

@ -1,14 +1,14 @@
// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.19;
import {OptimizerInput} from "./IOptimizer.sol";
import {IOptimizer, OptimizerInput} from "./IOptimizer.sol";
/**
* @title OptimizerV3Push3
* @notice Auto-generated from optimizer_v3.push3 via Push3Solidity transpiler.
* Implements calculateParams with 8 dyadic rational inputs and 4 outputs.
*/
contract OptimizerV3Push3 {
contract OptimizerV3Push3 is IOptimizer {
/**
* @notice Compute liquidity parameters from 8 dyadic rational inputs.
* @dev capitalInefficiency (ci) is intentionally hardcoded to 0 in both the bear
@ -31,6 +31,22 @@ contract OptimizerV3Push3 {
* @return anchorWidth Anchor position width in tick units.
* @return discoveryDepth Discovery liquidity density (0..1e18).
*/
/**
* @inheritdoc IOptimizer
* @dev Calls calculateParams with zeroed inputs (percentageStaked=0, averageTaxRate=0),
* producing bear-mode defaults: (ci=0, anchorShare=0.3e18, anchorWidth=100, discoveryDepth=0.3e18).
* This contract is a standalone transpiler output without access to on-chain stake data;
* use OptimizerV3 (which inherits Optimizer) for a live deployment with real inputs.
*/
function getLiquidityParams()
external
view
returns (uint256 capitalInefficiency, uint256 anchorShare, uint24 anchorWidth, uint256 discoveryDepth)
{
OptimizerInput[8] memory inputs;
return calculateParams(inputs);
}
function calculateParams(OptimizerInput[8] memory inputs)
public
pure