From fcd8f776938e4d686200000d0f9119e70d1f6ef6 Mon Sep 17 00:00:00 2001 From: johba Date: Sun, 22 Mar 2026 01:51:39 +0000 Subject: [PATCH] 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