Releases: foundry-rs/foundry
Nightly (2025-11-18)
Other
- added MONAD_SYSTEM_ADDRESS (#12585) by @Jayakumar2812
- chore(anvil): deprecate
getBlobSidecarsBeacon API endpoint (#12568) by @mablr - feat(anvil): add
eth_fillTransactionsupport (#12595) by @mablr - chore(deps): bump crate-ci/typos from 1.39.0 to 1.39.2 (#12593) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.49 to 2.62.52 (#12592) by @dependabot[bot]
- chore(deps): bump DeterminateSystems/determinate-nix-action from 3.13.0 to 3.13.1 (#12594) by @dependabot[bot]
Full Changelog:
Nightly (2025-11-18)
Other
- fix(
ci): ignorenumber_prefixis unmaintained incargo deny(#12598) by @zerosnacks - fix:
eth_fillTransactionresponse (#12597) by @jxom
Full Changelog:
Nightly
Other
- fix(
ci): ignorenumber_prefixis unmaintained incargo deny(#12598) by @zerosnacks - fix:
eth_fillTransactionresponse (#12597) by @jxom
Full Changelog:
v1.5.0-rc1
Foundry v1.5.0
Foundry v1.5.0 release comes with an improved fuzzer that use Solar to analyze contracts and extract interested values from AST, and incorporate updated logic to minimize counterexamples generated by invariant tests. This version adds support for browser extension wallets, provides a simpler way to interact with ERC20 tokens using cast and publishes all foundry binaries as npm packages. It also continues the effort to improve new forge formatter rolled out in previous version and makes it more customizable.
Fuzzed tests improvements
AST seeded dictionary
Foundry v1.5.0 leverages the Solar API to analyze contracts, collect all relevant AST literals from the sources, and use those values to generate inputs for the fuzzing campaign (#12015).
For example, with this addition a counterexample for the simple test below can be generated within a couple of runs:
function testHash(bytes memory v) external {
assert(keccak256(v) != keccak256("hello"));
}Early testers have reported substantially improved fuzzing results and we are running additional benchmarks to quantify the effectiveness.
Improved counterexample shrinking
In previous versions, counterexamples generated by invariant tests were replayed and minimized only once. In Foundry v1.5.0, the call sequence is replayed multiple times until all configured shrink runs are completed (#12180). Additionally, the counterexamples saved on disk and replayed on subsequent campaigns, are now also minimized (#12351). This allows Foundry to produce a more thoroughly minimized call sequence that can be used to generate unit tests and reproduce smart contract invariant violations.
Browser wallet integration
Foundry v1.5.0 introduces support for browser extension wallets in the cast send and cast wallet sign commands, enabling developers to sign transactions directly in the browser (#12302). Future releases will expand browser wallet support to other Foundry commands. We look forward to get external contributions to improve the interface and feature set of the browser wallet.
To try it out, pass the --browser flag to cast send to send a transaction using any of your browser wallets: cast send <TO> --value <VALUE> --rpc-url <RPC_URL> --browser
Additionally you can sign messages and typed data with cast wallet sign: cast wallet sign --browser "Hello World!"
ERC20 support in cast
This release introduces the cast erc20 command to facilitate interaction with ERC-20 tokens (#12258 #12381). This makes it simple to query balances, perform transfers, and access other ERC-20 token details.
balance Query ERC20 token balance [aliases: b]
transfer Transfer ERC20 tokens [aliases: t]
approve Approve ERC20 token spending [aliases: a]
allowance Query ERC20 token allowance [aliases: al]
name Query ERC20 token name [aliases: n]
symbol Query ERC20 token symbol [aliases: s]
decimals Query ERC20 token decimals [aliases: d]
total-supply Query ERC20 token total supply [aliases: ts]
mint Mint ERC20 tokens (if the token supports minting) [aliases: m]
burn Burn ERC20 tokens [aliases: bu]New cheatcodes
Foundry v1.5.0 includes a set of new cheatcodes designed to improve the testing experience:
getEvmVersion/setEvmVersionto retrieve and change the execution EVM version within tests and scripts (#12014)signWithNonceto create deterministic ECDSA signatures using a specified ephemeral nonce (#11267)getStorageSlotsleverage the storage layout to accurately identify the base slot of a variable (#11537)
npm packages
Continuing the work introduced in v1.4.0 for forge, v1.5.0 publishes the remaining Foundry binaries as npm packages. This allows tools such as bun, npx, pnpm to easily install and run any Foundry executable directly from the npm registry (#11945).
bun x @foundry-rs/anvil --version
npx --yes @foundry-rs/cast --version
pnpm dlx --silent @foundry-rs/chisel --versionPerformance Improvements
- perf(evm): reduce rpc calls when instantiating a fork environment (#12145) by @DaniPopes
- perf: remove some more unnecessary RPC calls (#12338) by @DaniPopes
Anvil Features
- feat(anvil): wire eth_protocolVersion, eth_hashrate, eth_coinbase RPCs (#11934) by @sashass1315
- perf(anvil): optimize internal data passing in log queries (#11896) by @silvekkk
- feat(anvil): add
/eth/v1/beacon/blobsbeacon endpoint (#12182) by @mablr - feat(anvil): add
debug_dbGetendpoint (#12375) by @mablr - perf(anvil): avoid unnecessary transaction vector cloning in Block::new (#12393) by @CreeptoGengar
- feat(anvil): Implement alloy_evm
FromRecoveredTxtrait for anvilTypedTransaction(#12424) by @mablr - perf(anvil): avoid snapshot cloning when counting ready transactions (#12432) by @phrwlk
- fix(anvil): set evm block number to input value (#12490) by @Syzygy106
- feat(anvil): handle signature impersonation for EIP-7702 authorization list (#12553) by @mablr
Anvil Fixes
- anvil: remove unused BlockNumberOrTag import in hardfork tests (#11952) by @anim001k
- fix: use blobparams for blob fee calc (#12056) by @mattsse
- fix(anvil): set envelope for non deposit tx in debug tracers (#12080) by @grandizzy
- fix(anvil): eth_getAccountInfo check if predates fork inclusive (#12101) by @grandizzy
- fix(anvil): always disable nonce check for
eth_calls (#12144) by @grandizzy - fix(anvil): get account info from db when node block > fork block (#12175) by @grandizzy
- fix(anvil): remove transactions before block/hash in unwind_to to prevent leaks (#12178) by @sashass1315
- fix(anvil): preserve OP receipt fields in convert_to_anvil_receipt (#12396) by @Syzygy106
- fix(anvil): respect configured fork initial_backoff in setup_fork_db_config (#12401) by @phrwlk
- fix(anvil): serialize genesis time as string (#12512) by @StackOverflowExcept1on
Cast Features
- feat(cast): add cast erc20 with subcommands balance, transfer, approve, allowance (#12258) by @marcvernet31
- feat(cast): more erc20 methods (#12381) by @0xrusowsky
- feat(cast): allow logs filtering on multiple addresses (#12380) by @0xferrous
- feat(cast): added custom polling interval args (#12387) by @dipanshuhappy
- feat(wallets): add Turnkey signer support (#12026) by @rplusq
- feat: browser wallet (#12302) by @zerosnacks
- feat(cast): block -f to accept multiple fields (#12427) by @dipanshuhappy
- feat: support all blob envelope in cast (#12557) by @mattsse
- feat: support for eth_sendrawtransactionSync in cast send (#12546) by @stevencartavia
Cast Fixes
- fix(cast): clean up SenderKind enum and remove redundant checks (#12003) by @strmfos
- fix(cast): cast call --json formatting (#12060) by @0xferrous
- fix(cast): use pretty JSON for txpool commands (#12099) by @mattsse
- fix(wallets): prevent duplicate Trezor wallets when using --hd-paths (#12214) by @GarmashAlex
- fix(cast): sign erc20 transactions locally before broadcast (#12372) by @0xrusowsky
- fix(cast): add turnkey to list (#12476) by @DaniPopes
Forge Features
- feat(forge): implement forge snapshot --format table stdout rendering (#11930) by @radik878
- feat(fmt): enforce doc comment styling (#11955) by @0xrusowsky
- feat(forge): enhance gas snapshot diff with configurable sorting and improved output (#11974) by @silvekkk
- feat(lint): emit suggestions for
named_struct_fieldslint (#11982) by @mablr - feat(forge): install soldeer dependencies (#11994) by @wellnana
- feat(cheatcodes): add setEvmVersion / getEvmVersion (#12014) by @grandizzy
- feat(forge): add --rerun-failed flag to watch mode for faster TDD feedback (#11993) by @silvekkk
- feat(forge): support always_use_create_2_factory in inline config (#12086) by @DaniPopes
- feat(cheats): RLP (#11232) by @qiweiii
- feat(forge): add bypass prevrandao (#12125) by @grandizzy
- feat: add Sourcify trace identifier (#11917) by @DaniPopes
- feat(traces): add contract context to Etherscan compilation errors (#12152) by @silvekkk
- feat(doc): render @title NatSpec tag in comment output (#12232) by @MozirDmitriy
- feat(fuzz): ast-seeded dictionary (#12015) by @0xrusowsky
- feat(forge): exit test run gracefully if show progress (#12290) by @grandizzy
- feat(fmt): add single_line_imports option to keep single imports on one line (#12303) by @silvekkk
- feat(invariant): shrink failure when replayed (#12351) by @grandizzy
- feat(
forge script): implement retries for forge script broadcast (#12564) by @zerosnacks
Forge Fixes
- fix(fmt): preserve comment position in disabled lines (#11922) by @0xrusowsky
- fix: look through all matching permissions in
is_path_allowed(#10679) by @rubydusa - fix(forge): replay fuzz failure only if same test selector (#11947) by @grandizzy
- fix(doc): reuse solar sema compiler (#11980) by @grandizzy
- fix(
forge): apply correct permission scoping in workflow templates (#11986) by @zerosnacks - fix(chisel): disable com...
Nightly (2025-11-17)
Other
- chore(deps): weekly
cargo update(#12577) by @github-actions[bot] - fix(forge): preprocess mocks declared in test file (#12516) by @grandizzy
Full Changelog:
Nightly (2025-11-16)
- No changes
Nightly (2025-11-14)
Other
- feat(cast): block -f to accept multiple fields (#12427) by @dipanshuhappy
- chore(common): drop unused fs import and fix doc links (#12535) by @0xLogicalx
- fix: infer addresses in unknown fields in UIfmt (#12552) by @klkvr
- refactor(anvil): beacon api tests + use Alloy's
GenesisResponsestruct (#12513) by @mablr - feat: support all blob envelope in cast (#12557) by @mattsse
- Remove redundant String clones in Sourcify metadata conversion (#12554) by @soniseth0
Full Changelog:
Nightly (2025-11-13)
Other
- fix(forge): properly decode raw Error(string) (#12536) by @grandizzy
- chore: bump to revm 33 (#12538) by @zerosnacks
- chore: bump solar, warn on invalid natspec (#12540) by @grandizzy
- fix(forge): allow install repo with ssh (#12542) by @grandizzy
Full Changelog:
Nightly (2025-11-12)
Other
- feat: browser wallet (#12302) by @zerosnacks
- fix(forge doc): use relative path instead of full path (#12519) by @grandizzy
- chore(anvil): use
BlockandHeaderfrom Alloy (#12533) by @mablr
Full Changelog:
Nightly (2025-11-11)
Other
- Fix numbers printing (#12504) by @e1Ru1o
- fix(anvil): serialize genesis time as string (#12512) by @StackOverflowExcept1on
- fix(npm): small type fix to resolve ci (#12514) by @o-az
- fix: enable different gas calculation for monad testnet (#12520) by @QEDK
- refactor(doc): improve merge_inheritdoc docs and simplify cloning (#12517) by @DeVikingMark
- chore(deps): bump docker/metadata-action from 5.8.0 to 5.9.0 (#12522) by @dependabot[bot]
- chore(deps): bump softprops/action-gh-release from 2.4.1 to 2.4.2 (#12525) by @dependabot[bot]
- chore(deps): bump DeterminateSystems/determinate-nix-action from 3.12.0 to 3.13.0 (#12523) by @dependabot[bot]
- chore(deps): bump taiki-e/install-action from 2.62.45 to 2.62.49 (#12521) by @dependabot[bot]
- chore(deps): bump DeterminateSystems/update-flake-lock from ab3e850b05f8f7e56dab99f12900d3f569853e93 to e637603d31bed83169f2e56bb475c9dff7af6544 (#12524) by @dependabot[bot]

