Foundry v1.4.0
This release brings up to 10.52% better performance for forge coverage
and up to 11.41% for fuzzed tests, a new formatter built on Solar
, enhanced handling of multiple chain configurations and deployments, and an improved testing and debugging experience with backtraces and custom network precompiles. Foundry v1.4 is Osaka-ready, comes with new Anvil endpoints, deprecates the Etherscan v1 API, and publishes forge
as an npm package.
Performance Improvements
Foundry v1.4 leverages Solar API to analyze contracts and identify coverage items (#11565), and updates coverage implementation to align with that of forge test (#11801). It also completely removes the proptest runner from fuzzed tests (#11061), resulting in up to a 10.52% performance improvement for forge coverage
and up to an 11.41% performance improvement in fuzzed tests execution speed on the same benchmarked projects as previous versions.
Forge Coverage
Repository | v1.3.6 | v1.4.0 | X Times Faster | % Improvement |
---|---|---|---|---|
ithacaxyz-account | 14.91 s | 13.34 s | x1.12 | 10.52% |
Uniswap-v4-core | 1m 34.8s | 1m 30.3s | x1.05 | 4.74% |
sparkdotfi-spark-psm | 3m 49.3s | 3m 40.2s | x1.04 | 3.97% |
Forge Fuzz tests
Repository | v1.3.6 | v1.4.0 | X Times Faster | % Improvement |
---|---|---|---|---|
ithacaxyz-account | 3.18 s | 3.02 s | x1.05 | 5.03% |
solady | 2.39 s | 2.24 s | x1.07 | 6.28% |
Uniswap-v4-core | 6.84 s | 6.20 s | x1.10 | 9.36% |
sparkdotfi-spark-psm | 3.07 s | 2.72 s | x1.13 | 11.41% |
Enhanced configuration
Configuration inheritance
Foundry v1.4 supports configuration inheritance through the extends
field in foundry.toml, making it easier to maintain a shared base configuration across multiple projects or profiles (#11284). This enables cleaner setups and reduces duplication by inheriting from a base configuration file:
[profile.default]
extends = "./base-config.toml"
src = "src"
test = "test"
For more details please refer to configuration inheritance docs.
Multi-chain configuration
The newly added forge-std config helper
, built on top of Foundry v1.4 cheatcodes, provides a streamlined way to manage configuration for multi-chain environments in tests and scripts. It automatically loads and parses TOML configuration files, creates forks for specified chains, and provides type-safe access to configuration variables.
Loading configuration and creating forks for each chain specified in the config can be done by calling _loadConfigAndForks
function, which also supports updating configurations on the fly.
function _loadConfigAndForks(string memory filePath, bool writeToFile) internal
Scripting workflows, in particular, gain significant advantages from the features of the Config
contract. Please refer to config helper docs and scripting with config docs for more details.
For a complex, production-ready example, please see Ithaca's account deploy script and configuration.
We're continuously working to improve multi-chain support, please share your feedback on the current approach and suggest new features or enhancements in #11449.
Enhanced testing UX
Foundry v1.4 introduces backtraces (#11547) that include the exact line number in the Solidity source code corresponding to the compiled bytecode where the error or revert occurred.
[FAIL: ERC20: transfer amount exceeds allowance] testTransferFromWithoutApproval() (gas: 28771)
Traces:
[28771] ForkBacktraceTest::testTransferFromWithoutApproval()
├─ [22928] ForkedERC20Wrapper::transferFromWithoutApproval(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6])
│ ├─ [18884] FiatTokenProxy::fallback(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6])
│ │ ├─ [11573] FiatTokenV2_2::transferFrom(0x55FE002aefF02F77364de339a1292923A15844B8, 0x000000000000000000000000000000000000dEaD, 1000000 [1e6]) [delegatecall]
│ │ │ └─ ← [Revert] ERC20: transfer amount exceeds allowance
│ │ └─ ← [Revert] ERC20: transfer amount exceeds allowance
│ └─ ← [Revert] ERC20: transfer amount exceeds allowance
└─ ← [Revert] ERC20: transfer amount exceeds allowance
Backtrace:
at FiatTokenV2_2.transferFrom
at FiatTokenProxy.fallback
at ForkedERC20Wrapper.transferFromWithoutApproval (src/ForkedERC20Wrapper.sol:35:24)
at ForkBacktraceTest.testTransferFromWithoutApproval (test/ForkBacktrace.t.sol:28:96)
Forge Formatter
Foundry v1.4 ships with a new Solidity formatter (forge fmt
) built on top of Solar
and replacing the previous Solang-based implementation and its limitations (#10907). This change enables faster support for new Solidity language features and allows us to address long-standing formatting bugs that were previously blocked by Solang dependency.
We've aimed for feature parity with the legacy formatter, but there may still be some edge cases that aren’t fully covered yet, so please be aware and report any issues you encounter.
Coverage-Guided Fuzzing
In addition to extending coverage-guided fuzzing and time-based campaigns to stateless fuzz tests, this version introduces ABI mutations (such as bit-flip, interesting word, increment/decrement, and Gaussian noise mutators) to enhance test coverage and help uncover new execution paths by generating diverse and edge-case inputs (#11061).
Custom Network Precompiles
Beginning with the transfer precompile contributed by the Celo team for Anvil
(#11209), we have extended support to forge
and cast
components, making it simpler for external contributions. If you want to contribute support for a custom network, please check out documentation and Celo example within foundry-evm-networks
crate.
Anvil Improvements
With this release, Anvil adds support for JS and prestate tracers, and print traces and logs when using --print-traces
switch, enabling more powerful and customizable debugging capabilities. Additionally, several new RPC endpoints have been introduced:
eth_config
: exposes Anvil's current configuration, such as chain ID, fork settings, and feature flags (#11591).anvil_impersonateSignature
: allows simulating transactions as if they were signed by a given address, useful for testing signature-based flows (#11195).anvil_getBlobSidecarsByBlockId
: returns the blobs for a given transaction hash (#11828).
Other
forge lint
improvements: mixed case exceptions lint, ERC20 transfer check- improve state diffs cheatcodes by adding nonce and balance diffs and by using storage layout to decode values
- addition of native
vm.bound
cheatcode that enables log-uniform sampling - updated Sourcify integration to support API v2
Performance improvements
- feat(forge): Remove proptest runner from fuzzed tests (#11061) by @grandizzy
- perf: box inspectors in InspectorStack (#11100) by @DaniPopes
- perf: use fxhash for coverage hitmap (#11155) by @DaniPopes
- perf: parallelize remappings provider (#11536) by @DaniPopes
- perf: avoid project output clone (#11707) by @DaniPopes
- perf: lazy cheatcodes SignaturesIdentifier, save only if online (#11708) by @DaniPopes
- perf: link in parallel (#11710) by @DaniPopes
- perf(coverage): reserve some space for hits early (#11793) by @DaniPopes
- fix(coverage): sync implementation with forge test (#11801) by @DaniPopes
Anvil Features
- feat(anvil): improve historic state access (#10420) by @naijauser
- feat(anvil): added js tracer (#11052) by @Soubhik-10
- feat(anvil): add option to disable pool balance checks in EVM configuration (#11242) by @mablr
- feat(anvil): added
anvil_impersonateSignature
(#11195) by @Soubhik-10 - feat: add missing eip7702 support (#11490) by @ongyimeng
- feat(anvil): support celo transfer precompile (#11491) by @mattsse
- feat(
anvil
): addeth_config
rpc endpoint (#11591) by @zerosnacks - feat(anvil): calculate max_transactions based on block gas capacity (#11670) by @forkfury
- feat(anvil): add PreStateTracer support for debug_traceTransaction (#11709) by @w1tcher
- feat: print traces and logs in calltracer (#11722) by @mattsse
- feat(anvil): add support for
anvil_getBlobSidecarsByBlockId
(#11828) by @mablr
Anvil Fixes
- fix(anvil): specialize eth_getAccountInfo in fork mode (#11634) by @mattsse
- fix: use existing functions for accountinfo (#11134) by @mattsse
- fix(
anvil
): unwrap panic ineth/backend/mem/mod.rs
(#11141) by @zerosnacks - fix(
anvil
): v1.2 state load compatibility (#11179) by @zerosnacks - fix(anvil): print traces for
eth_simulateV1
(#11253) by @klkvr - fix(anvil): deterministic block production (#11415) by @fubhy
- Fix: invalid tx input error in anvil component (#11488) by @ongyimeng
- fix(anvil): traces' colors (#11614) by @0xferrous
- fix(anvil): use RUST_LOG only in explicit or blanket filter (#11630) by @0xferrous
- fix: ethgetaccinfo (#11715) by @mattsse
- fix: use next fee blob basefee for missing blob fee (#11782) by @mattsse
- anvil: return JoinHandle from
TaskManager::spawn_blocking
for proper task control (#11857) by @viktorking7
Cast Features
- feat(cast): transaction to transaction request (#11151) by @Rimeeeeee
- feat(cast): new
pad
cmd for hex data (#11152) by @0xrusowsky - feat(cast): add --file option for decode-calldata (#11201) by @minhd-vu
- feat(cast) more descriptive errors for
gcp
&aws
signers (#11248) by @siosw - feat(cast): wallet new - enable default keystore (#9201) by @kien6034
- feat(cast): add abi-encode-event command (#11300) by @shiyasmohd
- feat(cast): support base + offset for storage slot calc (#11566) by @0xferrous
- feat(cast): add --data --from-file --no-hash options for
wallet verify
for feature parity withwallet sign
(#11646) by @Detoo - feat(cast): handle invalid JSON in recover-authority without panic (#11690) by @VolodymyrBg
- feat(cast): apply network precompiles for cast run and call (#11720) by @grandizzy
- feat: cast storage
--solc-version
CLI argument (#11321) by @zugdev - Add cast command to convert beacon payload to execution payload
b2e-payload
(#11629) by @lean-apple - feat: add trace transaction opts (#11781) by @kien603
Cast Fixes
- fix(
cast
): unknown signatures are cached as an empty string (#11127) by @zerosnacks - fix(cast): use all providers if local artifacts used (#11090) by @grandizzy
- fix(cast): improve handling of
mktx --raw-unsigned
with runtime validation (#11111) by @mablr - fix(cast): allow negative numbers for function call arguments (#11221) by @0xferrous
- fix: small cast call fixes (#11241) by @klkvr
- fix(cast): add missing GCP signers listing in wallet list command (#11243) by @Forostovec
- fix: split on whitespace in mnemonic parsing (#11257) by @anim001k
- Fix/cast abi strict args (#11189) by @simon0820s
- fix(cast): calldata-decode --json nested tuple formatting (#11212) by @minhd-vu
- fix(cast): apply contract code size limit in cast run (#11400) by @grandizzy
- fix(cast): correct error message for --ends-with hex parsing (#11549) by @Forostovec
- fix(cast): allow comma-separated values for overrides (#11553) by @grandizzy
- Fix: Replace unsafe mnemonic fallback with secure random generation (#11644) by @viktorking7
- chore(cast): avoid panic when decoding constructor args and add bounds check (#11700) by @MozirDmitriy
Forge Features
- feat: add linking error (#9610) by @9547
- feat(forge): add params natspec for enums (#10022) by @samooyo
- feat(forge-lint): [claude] check for unwrapped modifiers (#10967) by @0xClandestine
- feat(forge): "add" alias for install subcommand (#11124) by @mablr
- feat(script): additional contracts name in broadcast log (#11197) by @grandizzy
- feat(
cheatcodes
): decode and show mismatched params on expectEmit (#11098) by @yash-atreya - feat(
invariants
): sample typed storage values (#11204) by @yash-atreya - feat(cheats): setup config env vars (#11236) by @0xrusowsky
- feat(cheatcodes): Revert ffi on non-zero exit code (#11101) by @mutestt
- feat(forge-inspect): add option to wrap tables to terminal width (#11138) by @0xferrous
- feat(
cheatcodes
): add contract identifier to state diffs (#11214) by @yash-atreya - feat(
cheatcodes
): add nonce diffs to AccountStateDiffs (#11215) by @yash-atreya - feat(
cheatcodes
): include slot type and decode values in state diffs (#11276) by @yash-atreya - feat(
cheatcodes
): getStorageAccesses (#11296) by @yash-atreya - feat(forge): Remove proptest runner from fuzzed tests (#11061) by @grandizzy
- feat(lint): add UnsafeTypecast lint (#11046) by @TropicalDog17
- feat(cheatcodes): Add vm.signWithNonce(privateKey, digest, nonce) cheatcode (Crypto) (#11267) by @Ectario
- feat(forge-selectors-list): add --no-group option (#11270) by @0xferrous
- feat(config): toml inheritance support (#11284) by @0xrusowsky
- feat(cheats): support arrays + rename
read
+ resolve env vars (#11302) by @0xrusowsky - feat: added fake sig in executor (#11308) by @Soubhik-10
- feat(lint): mixedCase exceptions (#11330) by @0xrusowsky
- feat(lint): geiger (#11377) by @0xrusowsky
- feat(config): support numeric keys in
[fork.<chain>]
section (#11340) by @0xrusowsky - feat(fuzz): add bound and gaussian noise mutators (#11342) by @grandizzy
- feat: refactor precompiles decoding, show output (#11382) by @DaniPopes
- feat: add nushell completions (#11311) by @0xferrous
- feat(cheatcodes): decode structs and mappings in state diff output (#11331) by @yash-atreya
- feat!(cheats): deprecate
readFork
cheatcodes (#11407) by @0xrusowsky - feat(
forge
): add--vyper
toforge init
to start with a Vyper project (#11383) by @zerosnacks - feat(forge): add --disable-labels for forge script and test (#11412) by @wellnana
- feat(forge): loosen tx gas limit restrictions ahead of Osaka + make enforceable w/
--enable-tx-gas-limit
(#11427) by @zerosnacks - feat(forge verify-contract): update Sourcify integration to support API v2 (#11438) by @manuelwedler
- feat(cheats): json/toml --> consolidate
write
andwriteUpsert
(#11447) by @0xrusowsky - feat(forge): add md flag to support markdown table styling (#11478) by @mablr
- feat: switch solar_project to use cache (#11481) by @DaniPopes
- feat(
forge
): backtraces (#11547) by @yash-atreya - feat(lint): impl erc20 transfer check using HIR (#11552) by @0xrusowsky
- feat(forge): add --empty to forge init (#11554) by @aganisgash
- feat(common): identify bytes and string slots using storageLayout (#11476) by @yash-atreya
- feat: make
find_by_deployed_code_exact
smarter (#11560) by @klkvr - feat(cheatcodes): vm.getStorageSlots (#11537) by @yash-atreya
- feat(coverage): analyze with solar (#11565) by @DaniPopes
- feat(forge): introduce network custom features, sunset Odyssey (#11675) by @grandizzy
- feat(forge): deprecate
generate
(#11723) by @DaniPopes - feat(lint): fail on configured diagnostic level (#11445) by @0xrusowsky
- feat(forge-inspect): add ability to inspect libraries (#11732) by @0xferrous
- feat: add --use and --no-auto-detect flags to verify-contract (#11743) by @Galoretka
- feat(fmt): rewrite formatter using Solar and a structured algorithm (#10907) by @0xrusowsky
- feat(forge): no warning on external config sections (#11869) by @grandizzy
- feat(config): warn on unknown config keys in foundry.toml (#11816) by @TropicalDog17
- feat: struct initializer lint (#11892) by @onbjerg
- feat(fmt): solar bump + handle cmnts in non-informed params (#11901) by @0xrusowsky
Forge Fixes
- fix(forge): init a git repo at root during init unless explicitely stated (#9695) by @0xvv
- fix: force 4844 txtype in blobhashes setter (#11355) by @mattsse
- fix: only save sig cache on last drop (#11153) by @DaniPopes
- fix(forge): consistent handling unresolved imports (#11164) by @grandizzy
- fix(lint): exclude disabled ids in multi-lint passes (#11122) by @0xrusowsky
- fix: use empty 7702 auths (#11182) by @mattsse
- fix(forge): bump compilers to fix remapping sol file (#11184) by @grandizzy
- fix(coverage): disambiguate duplicate function names (#11188) by @DaniPopes
- fix(forge): improve error messages for etherscan verification failures (#11194) by @shiyasmohd
- fix(lint): disable unwrap-modifier-logic for assembly (#11205) by @0xrusowsky
- fix(lint): explicit message when lint on build failures (#11224) by @grandizzy
- fix(fmt): don't panic on stdin read failure (#11226) by @DaniPopes
- fix(lint): account codesize registered lints (#11228) by @grandizzy
- fix: set gas_price to None for EIP4844 and EIP7702 in essentials() (#11233) by @Fibonacci747
- fix(
forge script
): repeatedvm.createSelectFork
with same RPC causes segfault (#11250) by @zerosnacks - fix(forge): makes forge script match correctly
run
function signature from source (#11244) by @mablr - fix(lint): lint only files that we build (#11247) by @grandizzy
- fix: correct error message in Fork command (#11254) by @radik878
- fix(cheats): solc:0.6 compatible fork cheats (#11280) by @0xrusowsky
- fix(script): safely derive filename from calldata (#11291) by @fifalodm
- fix(forge): enable fail fast flag (#11328) by @grandizzy
- fix: disable tx gas limit cap (#11347) by @mattsse
- fix(lint): 'unwrapped-modifier-logic' incorrectly marked with
Severity::Gas
(#11358) by @srdtrk - fix(forge): write ordered deps in foundry.lock (#11360) by @grandizzy
- fix(forge): handle error if etherscan identifier cannot resolve config (#11356) by @grandizzy
- fix(invariant): ensure strategy always generates valid sender (#11370) by @grandizzy
- fix(common): manually handle
DynSolValue
json serialization (#11396) by @0xrusowsky - fix: canonicalize paths in
forge doc
(#11406) by @onbjerg - fix(forge): provide better error messages for spurious cache failures in inspect (#11422) by @DaniPopes
- fix(
forge
): sync branch with remote on update (#11401) by @yash-atreya - fix(
cheatcodes
): identify common proxies in state diffs (#11404) by @yash-atreya - fix(forge): deterministic fn flatten (#11421) by @grandizzy
- fix(forge): populate the git submodule url from git config (#11437) by @wellnana
- fix(coverage): contracts by artifact from linked contracts (#11440) by @grandizzy
- feat(
invariants
): useSlotIdentifier
for identifying complex types and sampling them (#11450) by @yash-atreya - fix(forge): persist corpus per test suite (#11469) by @grandizzy
- fix(lint): avoid ANSI chars with JSON emitter (#11470) by @0xrusowsky
- fix: find_git_root allows any .git (#11525) by @DaniPopes
- fix(
forge lint
): addURI
(e.g.tokenURI
from ERC721 / ERC6909) as exception tomixed-case-function
(#11533) by @zerosnacks - fix: Shell deadlock 2 (#11535) by @DaniPopes
- fix(forge): skip scripts in get_sources_to_compile (#11540) by @DaniPopes
- fix(forge): show logs and coverage for table tests (#11575) by @grandizzy
- fix(cheatcodes): lock files on reads / writes (#11590) by @grandizzy
- fix: persist auth items during simulation (#11601) by @onbjerg
- fix: inline config path (#11626) by @DaniPopes
- fix(common): incorrect error message in get_error (#11631) by @Snezhkko
- fix(forge): color bug in
Display
impl forTestResult
(#11635) by @mablr - fix(release): install cross from main, pin rev (#11649) by @grandizzy
- fix(forge): ensure broadcast account is touched (#11650) by @grandizzy
- fix(forge): update only the specific dep (#11588) by @grandizzy
- fix(forge): custom verifiers should not throw on unknown etherscan chains (#11442) by @grandizzy
- fix(forge): determine if broadcasted tx is fixed gas limit using opcodes (#11599) by @grandizzy
- fix(cheatcodes): expectEmit(count: 0) should not fail on a different log (#11663) by @yash-atreya
- fix: properly format markdown lists in @dev NatSpec tags (#11696) by @CreeptoGengar
- fix(forge): don't check Cargo.toml on module bindgen (#11704) by @DaniPopes
- fix(
verification
): BSC chain id is incorrect, verification fails withmissing or unsupported chainid parameter
(#11716) by @zerosnacks - fix(forge): Add unused_attributes to allow list for generated bindings (#11725) by @AndreasKoestler
- fix: bump to
alloy-chains
0.2.11
for Katana urls update (#11728) by @zerosnacks - fix(common): use proper ESC in spinner erase-line sequence (#11733) by @VolodymyrBg
- fix(forge): decrement runs when fuzz input rejected (#11791) by @grandizzy
- fix(fmt): underscore for hex literals (#11822) by @0xrusowsky
- fix(fmt): estimate size + account for all blocks (#11824) by @0xrusowsky
- fix(forge): use global json arg everywhere (#11860) by @mablr
- fix(fmt): don't break exprs that overflow but fit assignement (#11837) by @0xrusowsky
- fix(fmt): indent calls with single member that fits but breaks when args (#11854) by @0xrusowsky
- fix(lint): allow custom types in "constant fn getters" (#11866) by @0xrusowsky
- fix(forge): support broadcast from
vm.deployCode
(#11864) by @grandizzy - fix(fs): flush BufWriter after GzEncoder::finish() in write_json_gzip_file (#11827) by @sashass1315
- fix(fmt): account for CRLF when handling cursor (#11874) by @0xrusowsky
- fix(prevrandao not set): support gnosis network (#11877) by @chen4903
- fix: inline config locations (#11883) by @DaniPopes
- fix(verify): handle missing optimizer_runs mismatch message (#11885) by @Bilogweb3
- fix(common): avoid panic on invalid calldata selector by propagating parse error (#11888) by @radik878
- fix(fmt): always return formatted when source read from stdin (#11876) by @grandizzy
- fix(forge): same way to flatten for all commands (#11873) by @grandizzy
- fix(fmt):
fn estimate_size()
account for opening brackets (#11887) by @0xrusowsky - fix: normalize path separators in git submodule URL lookup (#11826) by @wellnana
- fix: only include item's source in docs (#11895) by @onbjerg
- fix(fmt): return formatted code when stdin and
--raw
(#11900) by @grandizzy - fix(coverage): filter out vyper sources (#11899) by @grandizzy
- fix(evm): correct favored threshold comparison (#11902) by @MozirDmitriy
- fix(fmt): avoid blank line before identifiers (#11908) by @0xrusowsky
- fix(coverage): filter vy and vyi (#11909) by @0xrusowsky
- fix(fmt): rustfmt-like blank lines in stmt blocks (#11914) by @0xrusowsky
- fix(forge): do not warn on backward compatible
solc_version
config (#11916) by @grandizzy - fix(forge): 1.4 backport replay fuzz failure only if same test selector (#11947) (#11949) by @grandizzy
Other
- feat(npm): publish forge to
npm
for each arch (#11047) by @o-az - Remove the --froms flag (#11099) by @CodeSandwich
- chore: more StackInspector cleanups (#11105) by @DaniPopes
- chore: update package.homepage (#11131) by @DaniPopes
- fix: tracy integration (#11135) by @DaniPopes
- chore: use Bytes::clone where possible (#11160) by @DaniPopes
- chore: clean up cheatcode assertions (#11161) by @DaniPopes
- chore: add some more instrumentation (#11157) by @DaniPopes
- chore(cheatcodes): avoid unnecessary lookup in store (#11163) by @DaniPopes
- chore: make all random cheatcodes view (#11166) by @DaniPopes
- chore(
benches
): latest bench (#11162) by @yash-atreya - chore: don't build an inspector stack (#11154) by @DaniPopes
- chore(coverage): improve debug report (#11190) by @DaniPopes
- Complete doc comment for BlockListener struct (#11092) by @Galoretka
- chore: add missing error mapping (#11191) by @TiesD
- chore: rm crate from typos.toml (#11203) by @DaniPopes
- chore: disable useless logs from env_filter (#11206) by @DaniPopes
- chore(chisel): remove unused Debug import from executor.rs (#11255) by @Snezhkko
- fix: correct typos in error message (#11271) by @Sharilleed223
- fix: make manpage download truly optional in foundryup installer (#11262) by @maradini77
- fix(docs): correct minor typo in README.md (#11181) by @shiyasmohd
- chore(docker): bump alpine version to 3.22 (#11273) by @lystopad
- chore: aggregate PRs: #10038, #11139, #11274, #11246 (#11279) by @DaniPopes
- chore: clearer error message when function signature does not contain parentheses (#9478) by @yipu3
- feat: accept ETH_RPC_URL env as fork-url alias (#8972) by @CodeSandwich
- chore: aggregate PRs (#11286) by @DaniPopes
- chore: more unnecessary logs (#11287) by @DaniPopes
- refactor(verify): remove redundant logging in Etherscan provider (#11048) by @crStiv
- chisel/runner: skip redundant call_raw when commit=true (#11258) by @sashass1315
- chore: use slices in INTERESTING* (#11305) by @DaniPopes
- chore: validate address and word mutations (#11306) by @grandizzy
- chore: fix foundry-macros warnings (#11303) by @DaniPopes
- chore: aggregate PRs (#11310) by @DaniPopes
- chore(deps): bump to revm 28 (#11217) by @zerosnacks
- chore(deps): bump all dependencies (#11349) by @DaniPopes
- chore: use get_or_calculate_hash better (#11350) by @DaniPopes
- feat: Remove unneeded TODO in EtherscanIdentifier (#11385) by @aganisgash
- ci: enable testing for aarch64 linux (#11386) by @DaniPopes
- test(cheatcodes): strings with {} are not roundtrippable (#11391) by @DaniPopes
- chore(cheatocodes): remove as_debug (#11395) by @DaniPopes
- chore(docs): mention keystore in wallet error message, improve readability (#11405) by @zerosnacks
- build: add test-coverage script (#10894) by @ryzhak
- chore(deps): bump to revm 29 (#11416) by @zerosnacks
- ci: add --no-fail-fast (#11419) by @DaniPopes
- chore(anvil): get rid of trait upcasting workaround (#11424) by @mablr
- chore: Fix Mutability Tags for Cheatcodes that are Missing Them (#10351) by @Mouzayan
- chore: add lint test for constant params (#11425) by @grandizzy
- chore: extract fetch_abi_from_etherscan and use &Config (#11426) by @DaniPopes
- ci: drop force_orphan (#11452) by @DaniPopes
- ci: use actions/* directly for deploying rustdocs (#11454) by @DaniPopes
- chore(forge eip712): use solar from compiler output (#11458) by @DaniPopes
- docs: fix merkle rpc url (#11459) by @onbjerg
- Revert "docs: fix merkle rpc url" (#11462) by @zerosnacks
- chore: reduce some more traces (#11465) by @DaniPopes
- chore(test-utils):
TestProject::add_*
internalunwrap()
(#11467) by @mablr - chore: check timestamp value before fmt (#11475) by @mattsse
- chore(common): rmv duplicate
comments.rs
(#11480) by @0xrusowsky - chore(deps): bump alloy-evm 0.20 + alloy-hardforks 0.3 (#11477) by @zerosnacks
- refactor:
get_sources_to_compile
(#11464) by @DaniPopes - chore: align error messages with boundary conditions (#11468) by @Sharilleed223
- chore: deprecate Etherscan V1 (#11387) by @zerosnacks
- chore: improve test debugging (#11523) by @DaniPopes
- chore(config): rm dapptools method (#11527) by @DaniPopes
- chore: tweak
npm
publish & handlenightly
releases (#11513) by @o-az - refactor(chisel): refactor crate (#11500) by @DaniPopes
- test: redact test which may install solc (#11534) by @DaniPopes
- refactor(common): remove
ReportKind
struct (#11511) by @mablr - chore(evm): re-use project output in SourceData (#11541) by @DaniPopes
- Update to soldeer 0.7.0 (#11543) by @mario-eth
- fix: workflow event conclusion (#11544) by @o-az
- Update documentation for transaction hash fetching (#11546) by @ritzdorf
- chore(config): figment provider clean up (#11539) by @DaniPopes
- chore: fix isolate workflow, exclude state diff (#11558) by @grandizzy
- chore(meta): add missing alloy patches (#11581) by @DaniPopes
- Fix panic on NaN/Inf values in TOML to JSON conversion (#11574) by @prestoalvarez
- refactor(deps): reuse aws and gcp package from alloy (#11573) by @TropicalDog17
- chore: aggregate PRs (#11597) by @DaniPopes
- chore: switch node (#11602) by @grandizzy
- chore(
ci
): enable CodeQL (#11604) by @zerosnacks - Fix CRLF line ending handling in stdin utilities (#11606) by @sashaodessa
- chore(sol_macro_gen): remove unlinked bytecode workaround (#11613) by @mablr
- chore: proper ws (#11621) by @grandizzy
- chore(lint): re-use project output (#11563) by @DaniPopes
- chore: use Cursor::with_position (#11627) by @DaniPopes
- refactor: extract inline config from lint (#11620) by @DaniPopes
- chore: replace anvil delegation capability types with alloy's (#11610) by @TropicalDog17
- chore(common): deprecate ProjectCompiler::verify and fix compile_target docs (#11636) by @radik878
- chore: remove klkvr from CODEOWNERS (#11657) by @klkvr
- feat: harden
npm
publish & make installer leaner (#11600) by @o-az - chore: bump version 1.3.6 (#11658) by @grandizzy
- fix(release): build docker images with cargo instead cross (#11659) by @grandizzy
- chore(common): add serde skip for compute_units_per_second in EvmArgs (#11662) by @Forostovec
- chore: check compatibility of evm_version and solc (#11418) by @wellnana
- chore: fix ci, remove unwrap on test (#11666) by @grandizzy
- chore(common): clean RuntimeTransport derive and remove dead LockError (#11669) by @Galoretka
- chore(anvil): Remove stale TODO in optimism deposit test (#11678) by @phrwlk
- fix: remove explicit darwin SDK from flake.nix as it's deprecated (#11684) by @shekhirin
- feat(debugger): remove dead tick polling; use blocking read and forward (#11674) by @GarmashAlex
- refactor: remove event loop from debugger (#11686) by @onbjerg
- chore(
ci
): harden ci + harden default workflow templates + pin actions on hash (#11676) by @zerosnacks - fix: request ABI in solar_project (#11697) by @DaniPopes
- chore(
ci
): fix release workflow (#11699) by @zerosnacks - chore(lint): correctly show solar errors (#11713) by @DaniPopes
- chore: deprecate
generate-fig-spec
commands; usecompletions fig
(#11727) by @mablr - refactor(cli): move
EvmArgs
to foundry_cli (#11741) by @mablr - chore(deps): drop foundry-compilers feature full (#11739) by @DaniPopes
- chore: pass project root to spinner (#11740) by @SWASTIC-7
- chore: fix cargo deny, bump ammonia (#11749) by @grandizzy
- chore: move
clap.rs
fromfoundry-common
tofoundry-cli
(#11747) by @Peponks9 - refactor(anvil): replace
DepositReceipt
withlop-alloy
's (#11640) by @ongyimeng - Fix: Secure temporary file creation in chisel edit_session (#11744) by @zeevick10
- chore: don't depend on config in common (#11756) by @DaniPopes
- Harden foundryup temp handling: secure mktemp and quote tar paths (#11771) by @viktorking7
- refactor: move
handle_traces
intocast
(#11775) by @onbjerg - test: improve linker test infra (#11778) by @DaniPopes
- test: extract get_compiled to utils (#11779) by @DaniPopes
- chore: bump alloy crates to 1.36 (#11788) by @lean-apple
- refactor: rm forge-fmt from foundry-cli (#11790) by @onbjerg
- Update to soldeer 0.7.1 (#11811) by @mario-eth
- docs(cast): add description for
cast rpc --decode-internal
(#11825) by @wellnana - chore: remove fig (#11830) by @onbjerg
- chore(anvil): fixed broken link (#11858) by @cypherpepe
- Update to soldeer 0.8.0 (#11863) by @mario-eth
- refactor: move breakpoints to foundry-evm-core (#11889) by @onbjerg
- fix: use sourcify for selector lookups (#11757) by @onbjerg
- Improve remote wallet --help commands (#11891) by @albertlai431
- docs: explicitly mark
forge geiger
deprecated (#11893) by @onbjerg - chore(chisel): remove unused EtherscanABIResponse and serde import (#11911) by @radik878
- chore: restore openchain support (#11915) by @grandizzy