Foundry v1.8.3 builds on v1.8.1 with expanded Glamsterdam support and fixes across fork execution, scripting, cheatcodes, formatting, linting, and Chisel sessions. It also adds Safe and token commands to Cast, expands invariant fuzzing and symbolic follow-up, updates Tempo support through T13, and enables PGO for x86_64 GNU/Linux release binaries.
Note: v1.8.2 was left unpublished after RUSTSEC-2026-0285 flagged its rustls dependency. The patched binaries ship as v1.8.3.
Forge and configuration
- Fixed nested broadcast nonce tracking under isolation so sender nonces advance when a nested broadcast call is not executed as a separate isolated transaction (#16853) by @mablr.
- Fixed dynamic test linking generating malformed Solidity for parenthesized constructor expressions, including
(new Target){value: 1 ether}()and calls without options (#16854) by @mablr. - Added
forge reinitto force-restore Git submodules to their recorded revisions, discarding local submodule changes, and fixed missing-dependency installation and remapped test dependency handling (#16508, #16722, #16686) by @figtracer, @decofe, @mablr. - Added resolved compiler settings to
forge build -vvand a runtime--hardforkoverride for Forge and Chisel (#16337, #16406) by @figtracer, @stevencartavia. - Fixed custom-layout contract linking, typed enum bindings, compiler restrictions in filtered builds, and Solc executable lookup through
PATH(#16488, #16379, #16530, #16494) by @stevencartavia, @figtracer, @decofe. - Fixed script RPC configuration handling, broadcast transaction-hash indexing, and panics when broadcast files and their sensitive caches disagree (#16589, #16715, #16580) by @mablr, @gomesalexandre.
- Fixed constructor-argument verification for dynamic types and made
verify-bytecodereject provided constructor arguments that do not match the deployment (#16569, #16056) by @gomesalexandre, @mattsse.
Glamsterdam
- Added EIP-8037 state-gas reporting through
Vm.Gas.gasStateUsedand documented regular gas, state gas, reservoir spillover, refunds, and isolation semantics (#16387, #16772) by @figtracer, @mattsse. - Preserved gas snapshot measurements when separating state gas and post-refund last-frame snapshots for isolated calls, and preserved Amsterdam's state-gas reservoir across isolated execution with transaction gas limits enabled (#16442, #16490, #16604) by @figtracer.
- Added
vm.getSlotNumber()andvm.rollSlot(uint64)for Amsterdam's EIP-7843 block slot number (#16784) by @mattsse. - Included the computed EIP-7928 block access list hash in Amsterdam
eth_simulateV1block headers (#16673) by @mattsse.
Testing, fuzzing, and cheatcodes
Gas snapshot compatibility: Whole-test forge snapshot totals for isolated tests involving refunds can change due to updated execution gas accounting. Review these differences before regenerating affected baselines.
- Preserved post-refund measurements in isolated
startSnapshotGas/stopSnapshotGasregions, including refunding calls and contract creation (#16864) by @figtracer. - Fixed exact revert-data matching and required four-byte prefixes for partial revert matches (#16428, #16446) by @figtracer, @mattsse.
- Fixed false differences in zero-gas snapshot tolerance checks (#16565) by @gomesalexandre.
- Added additional secp256k1 arithmetic operations (#16381) by @StackOverflowExcept1on.
- Enforced filesystem permissions for
dumpState, protectedfoundry.tomlfromvm.removeDir, and fixedexpectSafeMemorypanics on short calldata (#16513, #16542, #16576) by @DicksonWu654, @gomesalexandre. - Enforced the active protocol initcode-size limit in
vm.executeTransaction, including when contract-size checks are disabled (#16551, #16590) by @mablr, @decofe. - Separated corpus paths for overloaded fuzz tests, excluded skipped corpus inputs, and preserved useful invariant corpus entries (#16307, #16365, #16837) by @stevencartavia, @figtracer.
- Added opt-in stateful branch-frontier artifacts and targeted symbolic follow-up that feeds concretely confirmed branch-flipping and invariant-failing sequences back into the corpus (#16614, #16823) by @figtracer.
- Fixed symbolic memory-backed array handling, deferred call-branch retries, and enforcement of path limits across symbolic-size forks and nested call completions (#16747, #16800, #16825, #16848) by @figtracer, @gomesalexandre, @mablr.
- Aligned symbolic
expectCall,expectRevert,mockCall, andvm.isContextbehavior with concrete Forge execution (#16579, #16668, #16660, #16735, #16743) by @gomesalexandre. - Fixed coverage tracking for both Yul branch outcomes and line attribution before branch bodies (#16835, #16836) by @decofe, @figtracer.
Formatting and linting
- Fixed comment preservation and formatting stability around for-loop headers, constructors, modifiers, tuples, mappings, and binary assignments (#16648, #16787, #16786, #16840) by @gomesalexandre, @figtracer.
- Preserved CRLF lines inside disabled formatting regions and stabilized multiline comment formatting (#16806, #16808) by @figtracer.
- Changed the default lint selection to high, medium, and low severities, and excluded configured test and script directories while retaining selected unsafe-cheatcode diagnostics (#16622, #16663) by @figtracer.
- Added environment-capture warnings and opt-in reporting of unused inline suppressions with
--report-unused-suppressions(#16755, #16841) by @decofe, @Jorge-Polanco-Roque. - Improved detection of returned storage mutations and storage-pointer aliases, and removed false positives for internal unused returns, defaulted loop counters, and single-bit mask shifts (#16475, #16582, #16813, #16667, #16710) by @stevencartavia, @gomesalexandre, @mablr, @figtracer.
Networks, Anvil, and forking
- Bounded optional fork identity probes to 500 ms per request to prevent stalled RPC gateways from delaying startup (#16833) by @mattsse.
- Preserved Arbitrum L1
block.numbersemantics during local execution while keeping RPC and ArbSys block numbers on L2; fixed Arbitrum transaction, receipt, and blob-environment handling (#16771, #16465, #16514) by @mablr, @mattsse, @figtracer. - Updated Tempo support through T13, including current keychain authorization detection and standard EVM halt reasons (#16717, #16779) by @decofe.
- Fixed Tempo fork account-state loading to avoid placeholder native balances and incorrect gas usage, including historical reads and downstream forks (#16811) by @mablr.
- Fixed Optimism fee handling for calls and blob transactions, and Celo replay support for CIP-64 transactions and the transfer precompile (#16507, #16519, #16500, #16512) by @stevencartavia, @figtracer, @mablr, @DicksonWu654.
- Added
--fork-state-by-numberfor RPC providers without state-by-hash support and--no-fork-node-infoto skip fork identity probes (#16774, #16778) by @dkatzan, @andreyobruchkov. - Kept forked
trace_callandtrace_blockOpcodeGasrequests from drifting to the upstream tip, and applied consistent fork-boundary rules to block and transaction queries (#16733, #16732, #16720) by @gomesalexandre. - Fixed pending-block query crashes, pending receipt responses, queued transaction replacement, and snapshot time-offset restoration (#16714, #16573, #16638, #16540) by @gomesalexandre, @stevencartavia.
- Fixed fee-history percentile handling, zero-count and zero-gas-limit cases, and validation of future or reversed log ranges (#16538, #16539, #16611, #16644, #16596, #16598) by @stevencartavia, @gomesalexandre.
- Fixed blob transaction simulation stack overflows, applied genesis headers, and included simulated block sizes (#16486, #16623, #16625) by @figtracer, @stevencartavia.
Cast and wallets
- Added Safe account deployment, delegate management, transaction proposals, simulation, signing, and execution commands (#16377) by @decofe.
- Added ERC-4626 vault commands and inspection, plus an ERC-2612 permit helper (#16601, #16605, #16672) by @mattsse.
- Added event decoding with local artifacts,
cast call --delegate, and chain-provided RPC endpoint selection (#16408, #16422, #16536) by @stevencartavia, @miquelcabot. - Fixed mined-transaction replay and HyperEVM system-transaction handling, and aligned transaction network selection with configuration and RPC discovery (#16457, #16451, #16790) by @mattsse, @mablr.
- Preserved explicit transaction types when sending through browser wallets and added support for piped keystore input and named accounts in the default keystore (#16827, #16528, #16219) by @figtracer, @mablr, @riba2534.
- Fixed multi-recipient session-scope parsing, gaps in
vaddr watchtransfer detection, and negative-number formatting infrom-weiandformat-units(#16688, #16716, #16646) by @gomesalexandre.
Chisel
- Rejected session IDs that escape the cache directory or address NTFS alternate data streams, and fixed stale session IDs and autosave collisions after deletion or rename (#16689, #16707, #16697, #16687) by @gomesalexandre, @Aditya-9-6.
- Fixed Solidity prelude-file handling and cleared persisted
--forcebehavior when loading sessions (#16510, #16511) by @DicksonWu654.
Distribution
- Enabled profile-guided optimization for all x86_64 GNU/Linux release binaries (#16501) by @figtracer.
- Updated rustls to 0.23.45 to address RUSTSEC-2026-0285 (#16856) by @mablr.
Full changelog
v1.8.1...v1.8.3
Contributors (82)
Full Changelog: