Merge pull request 'fix: fix: FitnessEvaluator.t.sol broken on Base mainnet fork (#780)' (#793) from fix/issue-780 into master

This commit is contained in:
johba 2026-03-15 03:27:55 +01:00
commit 5dfa824161
2 changed files with 20 additions and 7 deletions

View file

@ -36,3 +36,4 @@
- [2026-03-14] remove MAX_ANCHOR_WIDTH clamp in ThreePositionStrategy (#783)
- [2026-03-14] increase CALCULATE_PARAMS_GAS_LIMIT from 200k to 500k (#782)
- [2026-03-15] add evolution run 8 champion to seed pool (#781)
- [2026-03-15] fix FitnessEvaluator.t.sol broken on Base mainnet fork (#780)

View file

@ -138,12 +138,17 @@ contract FitnessEvaluator is Test {
uint24 internal constant POOL_FEE = 10_000;
address internal constant WETH_ADDR = 0x4200000000000000000000000000000000000006;
address internal constant SWAP_ROUTER = 0x94cC0AaC535CCDB3C01d6787D6413C739ae12bc4;
// Base mainnet NonfungiblePositionManager https://basescan.org/address/0x03a520B32c04bf3beef7BEb72E919cF822Ed34F3
address internal constant NPM_ADDR = 0x03a520B32c04bf3beef7BEb72E919cF822Ed34F3;
// Base mainnet Uniswap V3 Factory https://basescan.org/address/0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
address internal constant V3_FACTORY = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24;
address internal constant FEE_DEST = 0xf6a3eef9088A255c32b6aD2025f83E57291D9011;
address internal constant SWAP_ROUTER = 0x2626664c2603336E57B271c5C0b26F421741e481;
// Base mainnet NonfungiblePositionManager https://basescan.org/address/0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1
address internal constant NPM_ADDR = 0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1;
// Base mainnet Uniswap V3 Factory https://basescan.org/address/0x33128a8fC17869897dcE68Ed026d694621f6FDfD
address internal constant V3_FACTORY = 0x33128a8fC17869897dcE68Ed026d694621f6FDfD;
/// @dev Intentionally differs from DeployBaseMainnet.sol (0xf6a3...D9011).
/// On a Base mainnet fork that address already has contract bytecode, which
/// causes LiquidityManager.setFeeDestination() to set feeDestinationLocked=true
/// and subsequently revert if called again during snapshot/revert cycles.
/// This keccak-derived address is a guaranteed EOA on any live network.
address internal constant FEE_DEST = 0x8A9145E1Ea4C4d7FB08cF1011c8ac1F0e10F9383;
/// @dev Fixed address used with vm.etch to inject candidate bytecode.
/// Chosen to be deterministic and not collide with real Base addresses.
@ -230,6 +235,10 @@ contract FitnessEvaluator is Test {
string memory candidateId = vm.readLine(idsFile);
string memory bytecodeHex = vm.readLine(bytecodesFile);
if (bytes(candidateId).length == 0) break;
if (bytes(bytecodeHex).length == 0) {
console.log("FitnessEvaluator: bytecodes.txt EOF before ids.txt - pipeline mismatch, stopping");
break;
}
// Revert to clean post-deploy state for each candidate.
vm.revertTo(baseSnap);
@ -401,7 +410,10 @@ contract FitnessEvaluator is Test {
// candidate score identically (all lm_eth_total = free WETH only, no positions).
bool recentered = false;
for (uint256 _attempt = 0; _attempt < 5; _attempt++) {
if (_attempt > 0) vm.roll(block.number + 50);
if (_attempt > 0) {
vm.roll(block.number + 50);
vm.warp(block.timestamp + 600);
}
vm.prank(recenterAddr);
try ILM(lmAddr).recenter() returns (bool) {
recentered = true;