Releases: foundry-rs/forge-std
Releases · foundry-rs/forge-std
v1.8.2
Featured Changes
- Add
vm.promptcheatcodes to Vm interface by @Tudmotu in #529 - chore(networks): goerli sunset by @sambacha in #525
- feat: Add support for polygon amoy testnet by @kcyeu in #540
- feat: add all new cheats to interface by @mds1 in #549
- add: blobhashes cheats by @yash-atreya in #553
- fix(StdInvariant): correct
targetArtifactSelectortype by @DaniPopes in #524 - feat(vm): add ensNamehash cheatcode by @meetmangukiya in #555
Expand to see the full set of new cheats
/// Gets the environment variable `name` and returns true if it exists, else returns false.
function envExists(string calldata name) external view returns (bool result);
/// Returns true if `forge` command was executed in given context.
function isContext(ForgeContext context) external view returns (bool result);
/// Gets the current `block.blobbasefee`.
/// You should use this instead of `block.blobbasefee` if you use `vm.blobBaseFee`, as `block.blobbasefee` is assumed to be constant across a transaction,
/// and as a result will get optimized out by the compiler.
/// See https://github.com/foundry-rs/foundry/issues/6180
function getBlobBaseFee() external view returns (uint256 blobBaseFee);
/// Gets the gas used in the last call.
function lastCallGas() external view returns (Gas memory gas);
/// Signs `digest` with signer provided to script using the secp256k1 curve.
/// If `--sender` is provided, the signer with provided address is used, otherwise,
/// if exactly one signer is provided to the script, that signer is used.
/// Raises error if signer passed through `--sender` does not match any unlocked signers or
/// if `--sender` is not provided and not exactly one signer is passed to the script.
function sign(bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s);
/// Signs `digest` with signer provided to script using the secp256k1 curve.
/// Raises error if none of the signers passed into the script have provided address.
function sign(address signer, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s);
/// Prompts the user for a string value in the terminal.
function prompt(string calldata promptText) external returns (string memory input);
/// Prompts the user for an address in the terminal.
function promptAddress(string calldata promptText) external returns (address);
/// Prompts the user for a hidden string value in the terminal.
function promptSecret(string calldata promptText) external returns (string memory input);
/// Prompts the user for uint256 in the terminal.
function promptUint(string calldata promptText) external returns (uint256);
/// See `serializeJson`.
function serializeUintToHex(string calldata objectKey, string calldata valueKey, uint256 value)
external
returns (string memory json);
/// Returns the index of the first occurrence of a `key` in an `input` string.
/// Returns `NOT_FOUND` (i.e. `type(uint256).max`) if the `key` is not found.
/// Returns 0 in case of an empty `key`.
function indexOf(string calldata input, string calldata key) external pure returns (uint256);
/// Returns ENS namehash for provided string.
function ensNamehash(string calldata name) external pure returns (bytes32);
/// Sets `block.blobbasefee`
function blobBaseFee(uint256 newBlobBaseFee) external;
/// Sets the blobhashes in the transaction.
/// Not available on EVM versions before Cancun.
/// If used on unsupported EVM versions it will revert.
function blobhashes(bytes32[] calldata hashes) external;
/// Gets the blockhashes from the current transaction.
/// Not available on EVM versions before Cancun.
/// If used on unsupported EVM versions it will revert.
function getBlobhashes() external view returns (bytes32[] memory hashes);
/// Sets `block.prevrandao`.
/// Not available on EVM versions before Paris. Use `difficulty` instead.
/// If used on unsupported EVM versions it will revert.
function prevrandao(uint256 newPrevrandao) external;Other Changes
- ci(github): update CI workflow by @sambacha in #526
- Revert "ci(github): update CI workflow" by @mds1 in #532
- chore: fix typo in comment by @rustfix in #542
- chore: fix bound log by @totomanov in #544
- ci: modernize workflows by @mds1 in #550
- chore: bump to v1.8.2 by @mds1 in #556
New Contributors
- @sambacha made their first contribution in #526
- @rustfix made their first contribution in #542
- @kcyeu made their first contribution in #540
- @yash-atreya made their first contribution in #553
- @meetmangukiya made their first contribution in #555
Full Changelog: v1.8.1...v1.8.2
v1.8.1
v1.8.0
Featured Changes
- feat/perf: use native assertions by @klkvr in #514.
- This replaces forge-std Solidity code with native cheatcode assertions from Foundry, so should give a small performance boost.
- Assertion failures now cause tests to exit early, instead of continuing with execution.
- This also will require some visibility modifier changes to tests, as assertion methods no longer set state.
- NOTE: If you were using the
vm.expectSafeMemorycheat, you may need to now use the newvm.stopExpectSafeMemorycheat from #507. See #503 (comment) to learn more, h/t @clabby.
- feat(stdStorage): support packed variables by @klkvr in #505. This means
dealnow works with USDC and other variables that reply on packed storage slots.- The USDC
dealsupport works out of the box. - To avoid breaking changes arbitrary packed slot support is not enabled by default, and can be enabled with
stdstore.enable_packed_slots().target(.....
- The USDC
- feat: add TOML reading/writing cheatcodes by @zerosnacks in #518. These are analogous to their JSON equivalents.
- NOTE: This adds file specific
keyExistsJsonandkeyExistsTomlcheats. The ambiguouskeyExistscurrently is an alias forkeyExistsJsonand will be deprecated.
- NOTE: This adds file specific
- feat: native string maniupulation cheatcodes of
toLowercase,toUppercase,trim,replaceandsplitfrom foundry-rs/foundry#6891. - feat: implement interfaces in mock tokens by @arr00 in #510.
Other Changes
- Exclude internal cheats from Vm by @klkvr in #501.
- Fix typo in
StdJson.solusage comments by @coopbri in #511. - feat: fraxtal mainnet/testnet rpc support by @pegahcarter in #517.
New Contributors
- @coopbri made their first contribution in #511.
- @arr00 made their first contribution in #510.
- @pegahcarter made their first contribution in #517.
- @zerosnacks made their first contribution in #518.
Full Changelog: v1.7.6...v1.8.0
v1.7.6
Featured Changes:
- New cheatcodes:
vm.dumpStateby @tynes in #499 (foundry-rs/foundry#6827)vm.signP256cheatcode for generating P256 (i.e. secp256r1) signatures, by @wilsoncusack in #497 (foundry-rs/foundry#6797)vm.toBase64andvm.toBase64URLcheatcodes by @ 0xAndoroid and @DaniPopes in #499 (foundry-rs/foundry#6785 and foundry-rs/foundry#6830)
Other Changes
- fix: don't hardcode string values in Vm generator by @DaniPopes in #497
- chore: bump to v1.7.6 by @mds1 in #500
Full Changelog: v1.7.5...v1.7.6
v1.7.5
Featured Changes
vm.envOrandvm.getLabelare nowview@anikaraghu in #491
Other Changes
- feat: automatically generate Vm.sol from cheatcodes.json by @DaniPopes in #487
- chore: bump to v1.7.5 by @mds1 in #492
New Contributors
- @anikaraghu made their first contribution in #491
Full Changelog: v1.7.4...v1.7.5
v1.7.4
Featured Changes
- Update
Vm.solwith changes toAccountAccessKindby @emo-eth in #483.- This adds
Balance,Extcodesize,Extcodehash,Extcodecopyas account access kinds
- This adds
- feat: add new snapshot cheatcodes by @mattsse in #484.
- The
vm.revertTo(snapshotId)cheat does not automatically delete thesnapshotIdsnapshot, which can lead to unbounded memory growth with lots of snapshots. Therefore,vm.revertToAndDelete(snapshotId),vm.deleteSnapshot(snapshotId), andvm.deleteSnapshots()were added as new cheats.
- The
Other Changes
Full Changelog: v1.7.3...v1.7.4
v1.7.3
Featured Changes
- feat: add
vm.startStateDiffRecordingandvm.stopAndReturnStateDiffcheats to record all account accesses and storage accesses, by @Inphi in #481 - feat: add
vm.computeCreateAddressandvm.computeCreate2Addresscheats, by @qiweiii in #479- These native cheats replace the need for the
StdUtilsmethods of the same now, which will now give a deprecation warning when used.
- These native cheats replace the need for the
- feat: add mock contracts for ERC20 and ERC721, by @andreivladbrg in #470
- Be aware that these use initializers instead of constructors for compatibility across Solidity versions. Therefore it's recommended to use the
deployMockERC20anddeployMockERC721methods inStdUtilsto deploy them.
- Be aware that these use initializers instead of constructors for compatibility across Solidity versions. Therefore it's recommended to use the
Other Changes
New Contributors
- @Inphi made their first contribution in #481
- @qiweiii made their first contribution in #479
- @andreivladbrg made their first contribution in #470
Full Changelog: v1.7.2...v1.7.3
v1.7.2
Featured Changes
- feat: add
vm.loadAllocs(string)cheatcode by @tynes in #474. This reads in a JSON file to directly set state for many accounts at once. - feat: add
vm.eth_getLogsandvm.rpccheats by @Evalir in #475. Thevm.eth_getLogscheat makes aneth_getLogsRPC call and returns the result, and thevm.rpccheat allows arbitrary RPC calls to be made. These query the current fork URL.
Other Changes
- fix: rely less on foundry internals by @DaniPopes in #473
- fix: test naming by @totomanov in #472
- chore: bump to v1.7.2 by @mds1 in #478
New Contributors
- @totomanov made their first contribution in #472
- @tynes made their first contribution in #474
Full Changelog: v1.7.1...v1.7.2
v1.7.1
v1.7.0
Featured Changes
- chore(BREAKING CHANGE): Change
exit_codetoexitCodeby @PaulRBerg in #458- This is a breaking change for any users who use the
exit_codevariable in theFfiResultstruct1
- This is a breaking change for any users who use the
- feat: add new
vm.serializeJsoncheatcode to the Vm and to StdJson by @vdrg in #453 - feat: add
vm.unixTimetoVmSafeinterface by @Tudmotu in #465 - perf: mark
vm.parseJsonKeysas pure by @PaulRBerg in #460
Other Changes
Full Changelog: v1.6.1...v1.7.0
-
exit_codewas recently introduced, and a sourcegraph search did not reveal many existing users of it. Because this repo usescamelCase, it was determined this breaking change was acceptable to keep things consistent, even though this technically does not follow semver. ↩