v0.3.0
0.3.0 release announcement
foundryup
now defaults to updating to the latest stable release instead of latest nightly build.
In order to make sure you are able to receive the latest updates and switch between versions you are required to upgrade your foundryup
installation by running:
curl -L https://foundry.paradigm.xyz | bash
You are still able to receive the latest nightly builds by running foundryup --install nightly
but please be aware that significant breaking changes are expected on nightly builds.
The foundry-toolchain
GitHub Action will use the latest stable release unless you specify the version
to be different.
What's Next
The Foundry 0.3 release marks an exciting new chapter for Foundry. By moving to stable releases, we aim to provide a reliable development environment for the EVM ecosystem. Our next priority is the 1.0 release in early 2025, polishing Foundry for the long term.
Big shoutout to the Foundry community - your bug reports, feature requests and contributions have shaped what Foundry is today.
0.3.0 release notes
Anvil Features
- feat(
anvil
):wallet_
namespace + inject P256BatchDelegation + executor (#9110) by @yash-atreya - feat(
anvil
): support mining with same block.timestamp (#9160) by @yash-atreya - feat(anvil): add
anvil_getIntervalMining
API (#9290) by @feynman-x - feat(
anvil
):--cache-path
(#9343) by @yash-atreya
Anvil Fixes
- fix: dont set state root (#9134) by @mattsse
- fix(
anvil
): use header.number not best_number (#9151) by @yash-atreya - fix(
anvil
): arb fork mining (#9153) by @yash-atreya - fix(anvil): Apply state overrides in debug_traceCall (#9172) by @iliastsa
- fix: add back
silent
option in Anvil'sNodeConfig
(#9181) by @zerosnacks - fix(
anvil
): tag newly created legacy transactions on shadow fork asSome(0)
(0x0
) rather thanNone
(#9195) by @zerosnacks - fix(anvil): correctly set hardfork-specific block fields (#9202) by @klkvr
- fix: include withdrawals root in response (#9208) by @mattsse
- fix(
anvil
): setstorage.best_number
correctly (#9215) by @yash-atreya - fix(anvil): on anvil_mine jump to next timestamp before mine new block (#9241) by @grandizzy
- anvil: Correctly set HF fields for Genesis block (#9248) by @ngotchac
- fix(anvil): set auto-unlock an alias of auto-impersonate (#9256) by @jsvisa
- fix(
anvil
): implmaybe_as_full_db
forForkedDatabase
(#9465) by @yash-atreya - fix(
anvil
): setbest_number
tostate.block.number
if greater (#9543) by @yash-atreya
Cast Features
- feat(cast): add avalanche and fuji genesis hashes (#210) by @joshieDo
- feat(cast): add
json
flag incast wallet new-mnemonic
(#9139) by @leovct - feat(
cast
): add flag equivalents of parseUnits, formatUnits (#9165) by @kien6034 - feat(cast): add
--rpc-timeout
option (#9044) by @PanGan21 - feat(cast): add --int flag to from-rlp (#9210) by @TropicalDog17
- feat(cast) add creation-code method [#8973] (#9029) by @pawurb
- feat(cast): add string-decode to decode string (#9237) by @jsvisa
- feat(
cast run
): add--etherscan-api-key
to resolve contract names (#9295) by @grandizzy - feat(cast): add artifact method (#9249) by @pawurb
- feat(forge, cast): add
cast --with_local_artifacts
/forge selectors cache
to trace with local artifacts (#7359) by @byteshijinn - feat(cast): add decode-event sig data (#9413) by @grandizzy
- feat(cast): decode external lib sigs from cached selectors (#9399) by @grandizzy
- feat(
cast
):decode-error
with sig, local cache and openchain api (#9428) by @grandizzy - feat(
cast
):decode-event
with local and openchain API (#9431) by @grandizzy - feat: rpc_headers in cast and config (#9429) by @yash-atreya
- feat(cast): allow some more stdin inputs (#9442) by @DaniPopes
- feat(cast): add support for beacon proxies in cast impl (#9567) by @0xvv
Cast Fixes
- fix(cli): replace underscore for hyphen on wallet cli args (#212) by @joshieDo
- fix: support EOF opcodes in
cast da
(#9070) by @klkvr - fix: respect
--auth
incast call
andcast estimate
(#9120) by @klkvr - fix(cast): do not strip 0x / hex decode message before EIP-191 hashing (#9130) by @grandizzy
- fix(
cast block
): ensure to print all fields (#9209) by @klkvr - fix: rename flag as_int -> as-int (#9235) by @klkvr
- fix(trace): properly report
fallback()
fn (#9287) by @grandizzy - fix(cast storage): respect
--json
for layout (#9332) by @MaxMustermann2 - fix: bail incomplete bytecode sequence disassemble (#9390) by @publicqi
- fix(
cast
): resetenv.tx.caller
for impersonated txs (#9544) by @yash-atreya - fix: account for impersonated tx in configure_tx_env (#9553) by @yash-atreya
Chisel Fixes
- fix(chisel): on edit fail command only if execution failed (#9155) by @grandizzy
- fix(chisel): uint/int full word print (#9381) by @grandizzy
Forge Features
- feat(forge): verify contracts created inside a call (#2840) by @joshieDo
- feat(
cheatcodes
): vm.getScriptWallets() (#9052) by @yash-atreya - feat(forge): allow passing value to
--optimize
(#9071) by @klkvr - feat(
forge doc
): include custom natspec (#9075) by @leovct - feat: make
--gas-report
JSON output compatible (#9063) by @zerosnacks - feat(
cheatcodes
): vm.rememberKeys (#9087) by @yash-atreya - feat(forge): add
compiler
subcommand (#7909) by @jpgonzalezra - feat(forge): add max supported EVM version in compiler -vv (#9129) by @grandizzy
- feat(
forge build
): add initcode size check (#9116) by @mgiagante - feat(
forge build
):--watch
flag now watchesfoundry.toml
config… (#9148) by @leovct - fix(cheatcodes): improve fork cheatcodes messages (#9141) by @grandizzy
- feat(fmt): add
all_params
config - same asall
but split single param too (#9176) by @grandizzy - feat(invariant): add basic metrics report (#9158) by @grandizzy
- feat(
forge install
): add@tag=
@branch=
@rev=
specific refs (#9214) by @grandizzy - feat: make
--gas-report
w/--json
output one JSON blob and addcontract_path
to output (#9216) by @zerosnacks - feat(
cheatcodes
): access broadcast artifacts (#9107) by @yash-atreya - feat(
--gas-report
): add option to include tests (#9232) by @grandizzy - feat(
cheatcodes
): mockCall with bytes4 data (#9267) by @yash-atreya - feat(forge): allow
--verifier custom
option (#9311) by @grandizzy - feat(
cheatcodes
): adddelegatecall
toprank
ing (#8863) by @Edwardjes - feat(forge build): err if no source file in specified paths (#9329) by @grandizzy
- feat(
forge build
): add--sizes
and--names
JSON compatibility (#9321) by @zerosnacks - feat(
forge build -vvvvv
): If verbosity level is 5 or higher show files to compile (#9325) by @mgiagante - feat: compilation restrictions (#8668) by @klkvr
- Support EIP-7702 Delegations in Forge (#9236) by @evchip
- feat(forge, cast): add
cast --with_local_artifacts
/forge selectors cache
to trace with local artifacts (#7359) by @byteshijinn - feat(forge): show additional details of contract to verify (#9403) by @grandizzy
- fix: forge script should adhere to
--json
flag (#9404) by @zerosnacks - feat: add
--broadcast
flag to forge create, default to dry run mode (#9420) by @zerosnacks - feat(
traces
): show state changes incast run
andforge test
on-vvvvv
(#9013) by @cassc - feat: rewrite inline config using figment (#9414) by @DaniPopes
- feat: add timeouts to fuzz testing (#9394) by @smartcontracts
- feat(script): support custom create2 deployer (#9278) by @jsvisa
- feat: allow any config to be defined inline (#9430) by @DaniPopes
- fix/feat(coverage): add --lcov-version (#9462) by @DaniPopes
- feat: dedup error messages (#9481) by @DaniPopes
- feat: add JSON compatibility for
forge test --summary +/ --detailed
+ apply consistent table styling (#9485) by @zerosnacks - feat(
cheatcodes
): count assertion forexpectRevert
(#9484) by @yash-atreya - feat(cheatcodes): add
vm.getStateDiff
to get state diffs as string (#9435) by @grandizzy - feat(cheatcodes): skip test suite in setup (#9532) by @grandizzy
- feat(
cheatcodes
): count assertion forexpectEmit
(#9405) by @yash-atreya
Forge Fixes
- fix(forge): only cleanup dirs if they exists (#194) by @mattsse
- fix(
tests
): force install solidity 0.8.19 through svm (#5221) by @Evalir - fix(coverage): proper instruction for 1st branch anchor (#8512) by @grandizzy
- fix: running script with
--broadcast
for a transaction sequence can error out due to nonce desync from rpc latency (#9096) by @pogobounce - fix(fmt): do not panic when no named arg (#9114) by @grandizzy
- fix(traces): identify artifacts using both deployed and creation code (#9050) by @grandizzy
- fix(cheatcodes): convert fixed bytes to bytes in vm.rpc tuple result (#9117) by @grandizzy
- fix: script simulation with default sender (#9042) by @klkvr
- fix(fmt): multiline single param only if func definition is multiline for
all_params
(#9187) by @ChiTimesChi - fix(script): correctly detect additional contracts (#9207) by @klkvr
- fix(forge create): set skip_is_verified_check: true (#9222) by @grandizzy
- fix: allow_hyphen_values for constructor args (#9225) by @mattsse
- fix(
--gas-report
): add back signatures, even if empty, avoid nesting multiple selectors (#9229) by @zerosnacks - fix: remove steps after steps tracing cheatcodes are done (#9234) by @klkvr
- fix(
deps
): updatealloy-chains
to fix Celo explorer API URL (#9242) by @github-actions[bot] - fix: better error handling when waiting for receipt (#9253) by @klkvr
- fix(
forge doc
): display custom natspec tag (#9257) by @leovct - fix(forge): fix stack overflow when the lib path is absolute. (#9190) by @l1nxy
- fix(remappings): ignore remappings of root proj dirs when merging (#9258) by @grandizzy
- fix(
forge test
): record only test fns in test failures (#9286) by @grandizzy - fix(coverage): do not report empty constructors, enable reports for
receive
(#9288) by @grandizzy - fix(fork): set block blob_excess_gas_and_price only if
excess_blob_gas header
is Some (#9298) by @grandizzy - fix(forge): always report deployment size in gas reports (#9308) by @grandizzy
- fix(
forge eip712
): handle recursive types (#9319) by @klkvr - fix: identification of contracts in scripts (#9346) by @klkvr
- fix(
coverage
): allowir-minimum
for versions < 0.8.5 (#9341) by @grandizzy - fix:
vm.broadcastRawTransaction
(#9378) by @klkvr - fix(forge test): install missing dependencies before creating
Project
(#9379) by @klkvr - fix(forge create): install missing deps if any (#9401) by @grandizzy
- fix: remove duplicate
gas_limit
/block_gas_limit
field, declare as alias (#9406) by @zerosnacks - fix(cheatcodes): use calldata in attachDelegation (#9407) by @grandizzy
- fix(coverage): clean ups, use normalized source code for locations (#9438) by @DaniPopes
- fix(coverage): special functions have no name (#9441) by @DaniPopes
- fix(coverage): also ignore empty fallbacks and receives (#9459) by @DaniPopes
- fix(coverage): assert should not be branch (#9467) by @grandizzy
- fix(
forge
): rundep.has_branch
in correct dir (#9453) by @yash-atreya - fix(remappings): project autoremappings should respect config (#9466) by @grandizzy
- fix: force
prevrandao
on Moonbeam networks (#9489) by @mattsse - fix(verify): cached artifacts by version (#9520) by @grandizzy
- fix(cheatcodes): clear orderings together with trace steps on debug trace stop (#9529) by @grandizzy
- fix(fuzz): exclude exernal libraries addresses from fuzz inputs (#9527) by @grandizzy
- fix: read rpc config when using fork cheatcodes (#9547) by @anukul
Performance improvements
- perf: cap default poll interval (#9250) by @mattsse
- perf(coverage): improve HitMap merging and internal repr (#9456) by @DaniPopes
- perf(coverage): cache computed bytecode hash in CoverageCollector (#9457) by @DaniPopes
- perf(coverage): cache current HitMap, reserve when merging (#9469) by @DaniPopes
Other
- chore(cast): upgrade evmole to 0.6.1, use new style API (#9493) by @cdump
- chore: bump compilers 0.12.7 (#9498) by @mattsse
- chore: improve Retry usage and warning (#9503) by @DaniPopes
- chore(deps): remove async_recursion (#9500) by @DaniPopes
- chore: bump alloy (#9496) by @mattsse
- fix: mark flag incompatibility (#9530) by @zerosnacks
- Update incorrect documentation in the READ.me (#9538) by @jtfirek
- chore: Add GH attestation for foundry binaries (#9546) by @grandizzy
- feat(foundryup): allow multiple installed versions (#9551) by @grandizzy
- chore: bump workspace version to
0.3.0
(#9580) by @zerosnacks - Update CI workflow template to unpin from
nightly
explicitly, relying onfoundry-toolchain
default (#9573) by @zerosnacks - chore: testFail* deprecation warning (#9581) by @yash-atreya