github foundry-rs/foundry v1.8.4

one hour ago

Foundry v1.8.4 builds on v1.8.3 with durable script recovery, native Base execution, external compiler adapters, integrated editor clients, expanded block-access-list and Tempo tooling, and substantial correctness and performance improvements across tracing, compilation, fuzzing, symbolic execution, formatting, linting, and Chisel.


Forge, scripting, and testing

Script recovery compatibility: Forge now stores authoritative resume state in a private, versioned .recovery.json file under cache/. Preserve both broadcast/ and cache/ until a deployment is complete. Forge 1.8.4 can import a consistent legacy artifact pair, but older Forge versions must not resume a deployment after 1.8.4 has written generation-tagged recovery state.

  • Added crash-safe recovery snapshots, persisted exact signed payloads before submission, and fail-closed handling for ambiguous browser-wallet or unlocked-RPC outcomes. Recovery covers ordinary, multichain, sponsored, and Tempo batch submissions; ambiguous delegated attempts can be resolved explicitly with --resume-attempt and either --resume-tx-hash or --resume-retry (#16993, #16995, #16996, #17023, #17181, #17251) by @stevencartavia.
  • Added executable external compiler adapters for EVM projects whose manifests and dependency resolution do not fit Foundry's Solidity source-file model (#16980) by @figtracer.
  • Added VS Code and Zed editor clients and a forge lsp launcher backed by Forge's embedded Solar language server (#16730) by @0xKarl98.
  • Improved dynamic test-linking and compiler-cache correctness for imported constants, cached libraries, filtered builds, import cycles, and native-bytecode fallback. Fallback now tracks transitive import closures instead of invalidating every test and script after any edit (#16908, #17003, #17014, #17211, #17238, #17254) by @mablr, @stevencartavia, @figtracer.
  • Added vm.eth_getProof, fixed salted vm.deployCode broadcasts through CREATE2, and made local EIP-2935 history-storage clearing revertible across calls and snapshots (#17053, #17192, #17194) by @zexoverz, @stevencartavia.
  • Improved persisted invariant failure replay, nested handler identity, shrinking, symbolic frontier reporting, and time/block-aware corpus replay (#16850, #16953, #16981, #17099, #17140, #17235) by @figtracer, @kriss39, @stevencartavia.
  • Expanded symbolic execution for aliasing addresses, symbolic mock targets, reverting-call cheatcode state, empty precompile accounts, fork-gated opcodes, exceptional halts, and failed ecrecover returndata; empty proof domains and unsafe predicate assumptions no longer report vacuous success (#16964, #16965, #16966, #17119, #17132, #17201, #17212, #17217, #17218) by @Bruce039, @0xShadowX, @figtracer.

Networks, Anvil, and tracing


Cast and developer tools

  • Added Tempo zone deposit, withdrawal, settlement waiting, and Earn callback encoders, plus TIP-20 role inspection and grant/revoke commands (#16903, #17246) by @mattsse.
  • Added cast bal / cast block-access-list and used BAL prestate to accelerate cast run while respecting explicit EVM overrides (#16933, #16931, #17213) by @mattsse, @mablr.
  • Added decoded fields to cast logs for event declarations, decoded calldata with ERC-8021 suffixes, and improved cast run diagnostics and support for unknown chains and ZKsync traces (#16322, #17171, #17090, #17091, #17092, #17095) by @e1Ru1o, @mattsse.
  • Decoded canonical dynamic constructor arguments and rejected ambiguous nested encodings instead of silently selecting one match (#16922, #17233) by @kriss39, @figtracer.
  • Preserved explicit empty Tempo keychain scopes as deny-all policies, rejected scopes on pre-T3 chains, and listed Turnkey signers through cast wallet list --turnkey (#17255, #17169) by @figtracer, @aelmanaa.
  • Improved formatter stability for normalized widths and assignments, prevented directory formatting from following symlinks outside the project, and expanded lint analysis for flash-loan repayment loops, sender aliases, unused function values, compound assignments, and duplicate arithmetic writes (#17137, #17205, #17206, #17196, #16628, #16943, #16944, #16974, #17177) by @CalvinTjoaquinn, @mablr, @0xKarl98, @gomesalexandre, @0xShadowX, @Osraka, @wavey0x.
  • Removed RPC and explorer credentials from Chisel session caches, isolated chisel view from unrelated project setup, and displayed external function references in the REPL (#17143, #17191, #17131) by @0xKarl98, @stevencartavia.

Compatibility notes

  • The minimum supported Rust version for source builds is now 1.98 (#17188) by @stevencartavia.
  • Alloy 2.5.0 changes trace_filter to intersect both address dimensions when both are supplied and rejects malformed 0x00-tagged legacy envelopes (#17077) by @mattsse.
  • Anvil now preserves empty Parity trace-type lists, defaults trace_callMany to latest, and treats an omitted trace_filter range as latest-only (#17078) by @mattsse.
  • Historical default struct logs now require replayable parent state; nodes without it return an explicit unavailable-state error (#17240, #17249) by @HubertRitzdorf-ChainSecurity, @stevencartavia.
  • Chisel no longer persists endpoint credentials in session files, so older fork sessions may require credentials again when loaded (#17143, #17191) by @0xKarl98.

Full Changelog:

v1.8.3...v1.8.4

Contributors (31)

Don't miss a new foundry release

NewReleases is sending notifications on new releases.