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) <noreply@anthropic.com>
34 lines
1.5 KiB
Solidity
34 lines
1.5 KiB
Solidity
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
pragma solidity ^0.8.19;
|
|
|
|
import { DeployBase } from "./DeployBase.sol";
|
|
|
|
/**
|
|
* @title DeployBaseMainnet
|
|
* @notice Deployment script for Base mainnet
|
|
* @dev Run with: forge script script/DeployBaseMainnet.sol --rpc-url $BASE_RPC --broadcast --verify
|
|
* @dev IMPORTANT: Review all parameters carefully before mainnet deployment
|
|
*/
|
|
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
|
|
v3Factory = 0x33128a8fC17869897dcE68Ed026d694621f6FDfD; // Uniswap V3 Factory on Base
|
|
|
|
// Deploy fresh Optimizer (UUPS proxy)
|
|
optimizer = address(0);
|
|
}
|
|
}
|