From 99d9c563d6ed77ad10af518fbff6dcd577854b15 Mon Sep 17 00:00:00 2001 From: openhands Date: Thu, 26 Feb 2026 14:33:20 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Use=20Optimizer=20(base)=20in=20deploy?= =?UTF-8?q?=20scripts=20=E2=80=94=20Push3=20lacks=20initialize/getLiquidit?= =?UTF-8?q?yParams?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit OptimizerV3Push3 is an equivalence-proof contract with only isBullMarket(). It cannot serve as an ERC1967Proxy implementation because it has no initialize() or getLiquidityParams(). The CI bootstrap was failing because the proxy deployment reverted when calling initialize() on the Push3 implementation. Switch deploy scripts to Optimizer.sol (the base UUPS contract) which has the full interface required by ERC1967Proxy and LiquidityManager. Co-Authored-By: Claude Sonnet 4.6 --- onchain/script/DeployBase.sol | 10 +++++----- onchain/script/DeployBaseMainnet.sol | 2 +- onchain/script/DeployLocal.sol | 10 +++++----- onchain/script/UpgradeOptimizer.sol | 21 ++++++++++++--------- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/onchain/script/DeployBase.sol b/onchain/script/DeployBase.sol index 5ccff59..7e01747 100644 --- a/onchain/script/DeployBase.sol +++ b/onchain/script/DeployBase.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.19; import "../src/Kraiken.sol"; import { LiquidityManager } from "../src/LiquidityManager.sol"; -import "../src/OptimizerV3Push3.sol"; +import "../src/Optimizer.sol"; import "../src/Stake.sol"; import "../src/helpers/UniswapHelpers.sol"; import { ERC1967Proxy } from "@openzeppelin/proxy/ERC1967/ERC1967Proxy.sol"; @@ -71,14 +71,14 @@ contract DeployBase is Script { console.log("Pool initialized"); } - // Deploy OptimizerV3Push3 (if not already deployed) + // Deploy Optimizer (if not already deployed) address optimizerAddress; if (optimizer == address(0)) { - OptimizerV3Push3 optimizerImpl = new OptimizerV3Push3(); + Optimizer optimizerImpl = new Optimizer(); bytes memory params = abi.encodeWithSignature("initialize(address,address)", address(kraiken), address(stake)); ERC1967Proxy proxy = new ERC1967Proxy(address(optimizerImpl), params); optimizerAddress = address(proxy); - console.log("OptimizerV3Push3 deployed at:", optimizerAddress); + console.log("Optimizer deployed at:", optimizerAddress); } else { optimizerAddress = optimizer; console.log("Using existing optimizer at:", optimizerAddress); @@ -99,7 +99,7 @@ contract DeployBase is Script { console.log("Stake:", address(stake)); console.log("Pool:", address(pool)); console.log("LiquidityManager:", address(liquidityManager)); - console.log("OptimizerV3Push3:", optimizerAddress); + console.log("Optimizer:", optimizerAddress); console.log("\nPost-deploy steps:"); console.log(" 1. Fund LiquidityManager with ETH"); console.log(" 2. Set recenterAccess to txnBot: lm.setRecenterAccess(txnBot) from feeDestination"); diff --git a/onchain/script/DeployBaseMainnet.sol b/onchain/script/DeployBaseMainnet.sol index 1a05682..eaa5a46 100644 --- a/onchain/script/DeployBaseMainnet.sol +++ b/onchain/script/DeployBaseMainnet.sol @@ -17,7 +17,7 @@ contract DeployBaseMainnet is DeployBase { weth = 0x4200000000000000000000000000000000000006; // WETH on Base v3Factory = 0x33128a8fC17869897dcE68Ed026d694621f6FDfD; // Uniswap V3 Factory on Base - // Deploy fresh OptimizerV3Push3 (UUPS proxy) + // Deploy fresh Optimizer (UUPS proxy) optimizer = address(0); } } diff --git a/onchain/script/DeployLocal.sol b/onchain/script/DeployLocal.sol index f40baf1..895e6a1 100644 --- a/onchain/script/DeployLocal.sol +++ b/onchain/script/DeployLocal.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.19; import "../src/Kraiken.sol"; import { LiquidityManager } from "../src/LiquidityManager.sol"; -import "../src/OptimizerV3Push3.sol"; +import "../src/Optimizer.sol"; import "../src/Stake.sol"; import "../src/helpers/UniswapHelpers.sol"; import { ERC1967Proxy } from "@openzeppelin/proxy/ERC1967/ERC1967Proxy.sol"; @@ -86,12 +86,12 @@ contract DeployLocal is Script { console.log(" Pool initialized at 1 cent price"); } - // Deploy OptimizerV3Push3 - OptimizerV3Push3 optimizerImpl = new OptimizerV3Push3(); + // Deploy Optimizer + Optimizer optimizerImpl = new Optimizer(); bytes memory params = abi.encodeWithSignature("initialize(address,address)", address(kraiken), address(stake)); ERC1967Proxy proxy = new ERC1967Proxy(address(optimizerImpl), params); address optimizerAddress = address(proxy); - console.log("\n[4/6] OptimizerV3Push3 deployed:", optimizerAddress); + console.log("\n[4/6] Optimizer deployed:", optimizerAddress); // Deploy LiquidityManager liquidityManager = new LiquidityManager(v3Factory, weth, address(kraiken), optimizerAddress); @@ -112,7 +112,7 @@ contract DeployLocal is Script { console.log("Stake:", address(stake)); console.log("Pool:", address(pool)); console.log("LiquidityManager:", address(liquidityManager)); - console.log("OptimizerV3Push3:", optimizerAddress); + console.log("Optimizer:", optimizerAddress); console.log("\n=== Next Steps ==="); console.log("1. Fund LiquidityManager with ETH:"); diff --git a/onchain/script/UpgradeOptimizer.sol b/onchain/script/UpgradeOptimizer.sol index 443c525..fc09284 100644 --- a/onchain/script/UpgradeOptimizer.sol +++ b/onchain/script/UpgradeOptimizer.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.19; -import "../src/OptimizerV3Push3.sol"; +import "../src/Optimizer.sol"; import { UUPSUpgradeable } from "@openzeppelin/proxy/utils/UUPSUpgradeable.sol"; import "forge-std/Script.sol"; @@ -28,19 +28,22 @@ contract UpgradeOptimizer is Script { console.log("Proxy address:", proxyAddress); console.log("Admin (sender):", sender); - // Deploy new OptimizerV3Push3 implementation - OptimizerV3Push3 newImpl = new OptimizerV3Push3(); - console.log("New OptimizerV3Push3 implementation:", address(newImpl)); + // Deploy new Optimizer implementation + Optimizer newImpl = new Optimizer(); + console.log("New Optimizer implementation:", address(newImpl)); // Upgrade proxy to new implementation (no reinitialize needed — storage layout compatible) UUPSUpgradeable(proxyAddress).upgradeTo(address(newImpl)); - console.log("Proxy upgraded to OptimizerV3Push3"); + console.log("Proxy upgraded to Optimizer"); - // Verify upgrade by calling isBullMarket through the proxy - OptimizerV3Push3 upgraded = OptimizerV3Push3(proxyAddress); - bool bull = upgraded.isBullMarket(0, 0); + // Verify upgrade by calling getLiquidityParams through the proxy + Optimizer upgraded = Optimizer(proxyAddress); + (uint256 ci, uint256 as_, uint24 aw, uint256 dd) = upgraded.getLiquidityParams(); console.log("\n=== Post-Upgrade Verification ==="); - console.log("isBullMarket(0,0):", bull); + console.log("capitalInefficiency:", ci); + console.log("anchorShare:", as_); + console.log("anchorWidth:", uint256(aw)); + console.log("discoveryDepth:", dd); vm.stopBroadcast(); }