Skip to content

v1.8.4

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Oct 15:41
· 2 commits to master since this release
Immutable release. Only release title and notes can be modified.
50af4ef

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)