Foundry v1.8.5 is a focused patch release led by an Anvil mining fix for ready transactions left in the pool after a full block. Previously, burst submissions such as forge script --broadcast could stall indefinitely while Forge waited for receipts. It also includes targeted correctness improvements across Forge, Anvil, Cast, symbolic execution, Base, and Tempo.
Highlights
- Kept Anvil mining while ready transactions remain after a full block, for both automine and
evm_mine. Mining continues only when the previous block made progress, avoiding empty-block loops for transactions that can never fit (#17266) by @stevencartavia. - Restored Base's seeded genesis state across
anvil_reset(#17320) by @mattsse. - Simplified the symbolic executor by removing redundant solver and execution layers while retaining end-to-end and nightly coverage (#17279, #17339) by @figtracer, @mattsse.
- Improved invariant corpus replay by enforcing sender, target, and selector policies, restoring state after rejected replay entries, and validating persisted optimization results before reuse (#17274, #17286, #17292) by @stevencartavia, @figtracer.
- Moved gas-snapshot checking until all test suites complete and kept
forge test --listfrom contaminating the build cache (#17318, #17262) by @mattsse, @stevencartavia. - Aligned Parity trace responses and lookups with their expected wire semantics: replay responses now include
transactionHash,trace_getfollows trace addresses, mined traces omit nested precompile calls, and unknown blocks or transactions are reported consistently. Block trace methods now rejectpending, and raw transaction tracing enforces the code-sender rule (#17301, #17302, #17303, #17304, #17306, #17309) by @mattsse. - Corrected call fee and gas preparation: fee-free calls run with zero base and blob base fees, cap-only calls pay the base fee, omitted gas is bounded by the sender's allowance, and conflicting fee or input fields are rejected (#17310, #17311, #17312, #17307) by @mattsse.
cast interfacenow detects verified proxies and generates the implementation interface instead of the proxy shell (#17153) by @sakulstra.- Fixed
cast decode-tx --jsonto emit a JSON object instead of a JSON-encoded string (#17317) by @mattsse. - Improved Tempo replay and local-node behavior, including standard-envelope execution, gas-schedule preservation, local fee-token resolution, and omitted nonce handling (#17260, #17278, #17327, #17326) by @figtracer, @mattsse.
Compatibility notes
- The public Rust APIs
foundry_evm_symbolic::BUILTIN_SYMBOLIC_SOLVERSandEvmOpts::fork_networkwere removed as part of the symbolic and shared-EVM simplifications (#17279, #17339). cast interfacenow emits the implementation ABI for verified proxies, andcast decode-tx --jsonnow returns structured JSON rather than a JSON string (#17153, #17317).- Malformed values passed to
envOrnow revert instead of using the fallback (#16924). - Parity trace clients may need to account for the response and lookup changes described above, especially
transactionHashin replay responses, trace-address indexing intrace_get, omitted nested precompile calls, and stricter unknown orpendingblock handling (#17301, #17302, #17303, #17306, #17309).
Full Changelog:
v1.8.4...v1.8.5
Contributors (17)
key must be a JSON path starting with . (#17159) by @bingtang9