# Foundry Configuration # This file configures Foundry for the project [profile.default] # Full historical repo config. For day-to-day monorepo work, prefer # `bash scripts/forge/scope.sh ...` so Forge only sees the contract subtree you # are actively editing. src = "contracts" # Vendored Uniswap V2 trees pin solc 0.5.x / 0.6.x; skip lets `forge test` use 0.8.20 # without legacy solc installs. Nothing outside vendor/ imports these paths. skip = [ "contracts/vendor/uniswap-v2-core/**/*.sol", "contracts/vendor/uniswap-v2-periphery/**/*.sol", "contracts/vendor/sushiswap-v2/**/*.sol", ] out = "out" libs = ["lib"] solc = "0.8.20" optimizer = true optimizer_runs = 200 via_ir = true auto_detect_remappings = false # Fork tests execute live mainnet bytecode; Cancun matches post-Dencun execution (MCOPY, etc.). evm_version = "cancun" fs_permissions = [ { access = "read", path = "./config" } ] remappings = [ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "forge-std/=lib/forge-std/src/", "ds-test/=lib/forge-std/lib/ds-test/src/", "@emoney/=contracts/emoney/", "@emoney-scripts/=script/emoney/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ] [profile.ci] fuzz = { runs = 100 } invariant = { runs = 10 } [profile.lite] optimizer = false via_ir = false [profile.fast] optimizer = true optimizer_runs = 1 via_ir = false [profile.fork] optimizer = true optimizer_runs = 1 via_ir = true evm_version = "cancun" [profile.deploy] optimizer = true optimizer_runs = 100 via_ir = true # Match default execution target (Chain 138 / Besu uses Cancun-capable clients). evm_version = "cancun" [profile.cronos_legacy] optimizer = true optimizer_runs = 100 via_ir = true # Cronos chain 25 currently needs pre-Shanghai bytecode; target Paris to avoid PUSH0. evm_version = "paris" [profile.chain138_legacy] optimizer = true optimizer_runs = 100 via_ir = true # Chain 138 currently rejects PUSH0 bytecode as well; target Paris for gas-canonical deployment flows. evm_version = "paris" # RPC endpoints — use: forge create ... --rpc-url chain138 # Prevents default localhost:8545 when ETH_RPC_URL not set [rpc_endpoints] chain138 = "http://192.168.11.211:8545" avalanche = "https://avalanche-c-chain.publicnode.com" arbitrum = "https://arbitrum-one.publicnode.com" cronos = "https://evm.cronos.org" # Etherscan-compatible verification (Etherscan V2 API key works across many chains) [etherscan] avalanche = { key = "${SNOWTRACE_API_KEY:-${ETHERSCAN_API_KEY}}", url = "https://api.snowtrace.io/api" } arbitrum = { key = "${ARBISCAN_API_KEY:-${ETHERSCAN_API_KEY}}", url = "https://api.arbiscan.io/api" } # Cronos mainnet (chain 25). Legacy entry — forge verify-contract does not # successfully submit to Cronos Explorer (see CRONOS_EXPLORER_OPERATIONS.md). # Kept for cast/ethers compatibility if tooling expects [etherscan].cronos. cronos = { key = "${CRONOSCAN_API_KEY:-${ETHERSCAN_API_KEY}}", url = "https://explorer-api.cronos.org/mainnet/api?chainid=25" }