-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Issue to be solved
When running the e2e test script (e2e_punchswap.sh), the predicted addresses of USDC and WBTC tokens differ depending on the Foundry version installed locally. This address mismatch causes:
- E2E tests to fail or not complete successfully
- FlowVaultsStrategies contract to be initialized with hardcoded addresses (e.g.,
0xaCCF0c4EeD4438Ad31Cd340548f4211a465B6528) that don't actually have ERC20 tokens deployed at them - Runtime interaction failures when working with the emulator because strategies reference non-existent token contracts
Current Behavior
The deployment script 02_DeployUSDC_WBTC_Create2.s.sol uses Foundry's CREATE2 deployer to predict token addresses:
address predictedUSDC = _predict(CREATE2_DEPLOYER, SALT_USDC, usdcInit);
address predictedWBTC = _predict(CREATE2_DEPLOYER, SALT_WBTC, wbtcInit);These predicted addresses are then:
- Used as configuration values in
punchswap.env:USDC_ADDR=0xaCCF0c4EeD4438Ad31Cd340548f4211a465B6528WBTC_ADDR=0x374BF2423c6b67694c068C3519b3eD14d3B0C5d1
- Passed as initialization arguments when deploying FlowVaultsStrategies
However, different Foundry versions appear to generate different predicted addresses for the same deployment parameters, breaking the entire deployment and testing flow.
Impact
- Test Reliability: E2E tests are not reproducible across different development environments
- Configuration Mismatch: Hard-coded addresses in
punchswap.envdon't have actual ERC20 tokens deployed at them when Foundry versions differ - Deployment Failures: FlowVaultsStrategies contracts are initialized with addresses that point to empty/non-token contracts, causing all token interactions to fail
- Team Coordination: Different team members may experience different test results based on their local Foundry installation
Suggest A Solution
Inform Foundry Version to be used locally
Technical Implementation:
-
Document the working Foundry version in README:
This project has been tested with: forge Version: 1.4.3-v1.4.3 Commit SHA: fa9f934bdac4bcf57e694e852a61997dda90668a Build Timestamp: 2025-10-22T04:37:38.758664000Z Build Profile: maxperf
To install this specific version:
foundryup --version nightly-fa9f934bdac4bcf57e694e852a61997dda90668a
Tradeoffs:
- ✅ Simple to implement
- ✅ Provides clear guidance to developers
- ❌ Relies on developers manually checking and installing correct version
- ❌ No automated enforcement
Caveats and Considerations for the Future
-
CI/CD Integration: Whichever solution is chosen should work seamlessly in GitHub Actions and other automated environments
-
Address Registry: For long-term maintainability, consider implementing a deployment address registry pattern (similar to what protocols like Aave use) where all contract addresses are stored in a central registry contract or JSON file
Related Files
local/punchswap/e2e_punchswap.sh- E2E test orchestration scriptsolidity/script/02_DeployUSDC_WBTC_Create2.s.sol- Token deployment with CREATE2local/punchswap/punchswap.env- Configuration file with hard-coded addressessolidity/script/03_UseMintedUSDCWBTC_AddLPAndSwap.s.sol- Strategy deployment using predicted addresses
What are you currently working on that this is blocking?
No response