From fcd8f776938e4d686200000d0f9119e70d1f6ef6 Mon Sep 17 00:00:00 2001 From: johba Date: Sun, 22 Mar 2026 01:51:39 +0000 Subject: [PATCH 1/2] fix: DeployBaseMainnet.sol:15 may need FEE_DEST update (#795) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Document the FEE_DEST derivation in DeployBaseMainnet.sol and explain why FitnessEvaluator.t.sol intentionally uses a different address. The production address (0xf6a3...D9011) is correct — it has contract bytecode on Base mainnet, so setFeeDestination() locks it permanently. The test uses a keccak-derived EOA (0x8A91...9383) to avoid the locking behaviour breaking snapshot/revert cycles in fork tests. Co-Authored-By: Claude Opus 4.6 (1M context) --- onchain/script/DeployBaseMainnet.sol | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/onchain/script/DeployBaseMainnet.sol b/onchain/script/DeployBaseMainnet.sol index eaa5a46..067df03 100644 --- a/onchain/script/DeployBaseMainnet.sol +++ b/onchain/script/DeployBaseMainnet.sol @@ -12,6 +12,17 @@ import { DeployBase } from "./DeployBase.sol"; contract DeployBaseMainnet is DeployBase { constructor() { // Base mainnet configuration + // + // feeDest — production fee-destination wallet (EOA controlled by the team). + // This address has contract bytecode on Base mainnet, so + // LiquidityManager.setFeeDestination() will set feeDestinationLocked=true + // on the first call (see LiquidityManager.sol line 154). That is the + // intended production path — once set to a contract, changes are locked. + // + // NOTE: FitnessEvaluator.t.sol intentionally uses a *different* FEE_DEST + // (0x8A91...9383) because on a mainnet fork the locking behaviour breaks + // snapshot/revert test cycles. The test address is NOT a production value. + // See FitnessEvaluator.t.sol:146-150 for the full rationale. feeDest = 0xf6a3eef9088A255c32b6aD2025f83E57291D9011; weth = 0x4200000000000000000000000000000000000006; // WETH on Base From e04e041a0fb3cf4950e08abef4b5161b2c72bf6a Mon Sep 17 00:00:00 2001 From: johba Date: Sun, 22 Mar 2026 02:15:29 +0000 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20correct=20EOA=E2=86=92contract=20in?= =?UTF-8?q?=20FEE=5FDEST=20comment=20(#795)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The production feeDest has contract bytecode on Base mainnet, not an EOA. Fix the contradictory comment flagged in review. Co-Authored-By: Claude Opus 4.6 (1M context) --- onchain/script/DeployBaseMainnet.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onchain/script/DeployBaseMainnet.sol b/onchain/script/DeployBaseMainnet.sol index 067df03..8fce9e0 100644 --- a/onchain/script/DeployBaseMainnet.sol +++ b/onchain/script/DeployBaseMainnet.sol @@ -13,7 +13,7 @@ contract DeployBaseMainnet is DeployBase { constructor() { // Base mainnet configuration // - // feeDest — production fee-destination wallet (EOA controlled by the team). + // feeDest — production fee-destination (a team-controlled contract on Base mainnet). // This address has contract bytecode on Base mainnet, so // LiquidityManager.setFeeDestination() will set feeDestinationLocked=true // on the first call (see LiquidityManager.sol line 154). That is the