foundry_cheatcodes_spec/vm.rs
1// We don't document function parameters individually so we can't enable `missing_docs` for this
2// module. Instead, we emit custom diagnostics in `#[derive(Cheatcode)]`.
3#![allow(missing_docs)]
4
5use super::*;
6use crate::Vm::ForgeContext;
7use alloy_sol_types::sol;
8use foundry_macros::Cheatcode;
9
10sol! {
11// Cheatcodes are marked as view/pure/none using the following rules:
12// 0. A call's observable behaviour includes its return value, logs, reverts and state writes,
13// 1. If you can influence a later call's observable behaviour, you're neither `view` nor `pure`
14// (you are modifying some state be it the EVM, interpreter, filesystem, etc),
15// 2. Otherwise if you can be influenced by an earlier call, or if reading some state, you're `view`,
16// 3. Otherwise you're `pure`.
17
18/// Foundry cheatcodes interface.
19#[derive(Debug, Cheatcode)] // Keep this list small to avoid unnecessary bloat.
20#[sol(abi)]
21interface Vm {
22 // ======== Types ========
23
24 /// Error thrown by cheatcodes.
25 error CheatcodeError(string message);
26
27 /// A modification applied to either `msg.sender` or `tx.origin`. Returned by `readCallers`.
28 enum CallerMode {
29 /// No caller modification is currently active.
30 None,
31 /// A one time broadcast triggered by a `vm.broadcast()` call is currently active.
32 Broadcast,
33 /// A recurrent broadcast triggered by a `vm.startBroadcast()` call is currently active.
34 RecurrentBroadcast,
35 /// A one time prank triggered by a `vm.prank()` call is currently active.
36 Prank,
37 /// A recurrent prank triggered by a `vm.startPrank()` call is currently active.
38 RecurrentPrank,
39 }
40
41 /// The kind of account access that occurred.
42 enum AccountAccessKind {
43 /// The account was called.
44 Call,
45 /// The account was called via delegatecall.
46 DelegateCall,
47 /// The account was called via callcode.
48 CallCode,
49 /// The account was called via staticcall.
50 StaticCall,
51 /// The account was created.
52 Create,
53 /// The account was selfdestructed.
54 SelfDestruct,
55 /// Synthetic access indicating the current context has resumed after a previous sub-context (AccountAccess).
56 Resume,
57 /// The account's balance was read.
58 Balance,
59 /// The account's codesize was read.
60 Extcodesize,
61 /// The account's codehash was read.
62 Extcodehash,
63 /// The account's code was copied.
64 Extcodecopy,
65 }
66
67 /// Forge execution contexts.
68 enum ForgeContext {
69 /// Test group execution context (test, coverage or snapshot).
70 TestGroup,
71 /// `forge test` execution context.
72 Test,
73 /// `forge coverage` execution context.
74 Coverage,
75 /// `forge snapshot` execution context.
76 Snapshot,
77 /// Script group execution context (dry run, broadcast or resume).
78 ScriptGroup,
79 /// `forge script` execution context.
80 ScriptDryRun,
81 /// `forge script --broadcast` execution context.
82 ScriptBroadcast,
83 /// `forge script --resume` execution context.
84 ScriptResume,
85 /// Unknown `forge` execution context.
86 Unknown,
87 }
88
89 /// An Ethereum log. Returned by `getRecordedLogs`.
90 struct Log {
91 /// The topics of the log, including the signature, if any.
92 bytes32[] topics;
93 /// The raw data of the log.
94 bytes data;
95 /// The address of the log's emitter.
96 address emitter;
97 }
98
99 /// Gas used. Returned by `lastCallGas`.
100 struct Gas {
101 /// The gas limit of the call.
102 uint64 gasLimit;
103 /// The total gas used.
104 uint64 gasTotalUsed;
105 /// DEPRECATED: The amount of gas used for memory expansion. Ref: <https://github.com/foundry-rs/foundry/pull/7934#pullrequestreview-2069236939>
106 uint64 gasMemoryUsed;
107 /// The amount of gas refunded.
108 int64 gasRefunded;
109 /// The amount of gas remaining.
110 uint64 gasRemaining;
111 }
112
113 /// An RPC URL and its alias. Returned by `rpcUrlStructs`.
114 struct Rpc {
115 /// The alias of the RPC URL.
116 string key;
117 /// The RPC URL.
118 string url;
119 }
120
121 /// An RPC log object. Returned by `eth_getLogs`.
122 struct EthGetLogs {
123 /// The address of the log's emitter.
124 address emitter;
125 /// The topics of the log, including the signature, if any.
126 bytes32[] topics;
127 /// The raw data of the log.
128 bytes data;
129 /// The block hash.
130 bytes32 blockHash;
131 /// The block number.
132 uint64 blockNumber;
133 /// The transaction hash.
134 bytes32 transactionHash;
135 /// The transaction index in the block.
136 uint64 transactionIndex;
137 /// The log index.
138 uint256 logIndex;
139 /// Whether the log was removed.
140 bool removed;
141 }
142
143 /// A single entry in a directory listing. Returned by `readDir`.
144 struct DirEntry {
145 /// The error message, if any.
146 string errorMessage;
147 /// The path of the entry.
148 string path;
149 /// The depth of the entry.
150 uint64 depth;
151 /// Whether the entry is a directory.
152 bool isDir;
153 /// Whether the entry is a symlink.
154 bool isSymlink;
155 }
156
157 /// Metadata information about a file.
158 ///
159 /// This structure is returned from the `fsMetadata` function and represents known
160 /// metadata about a file such as its permissions, size, modification
161 /// times, etc.
162 struct FsMetadata {
163 /// True if this metadata is for a directory.
164 bool isDir;
165 /// True if this metadata is for a symlink.
166 bool isSymlink;
167 /// The size of the file, in bytes, this metadata is for.
168 uint256 length;
169 /// True if this metadata is for a readonly (unwritable) file.
170 bool readOnly;
171 /// The last modification time listed in this metadata.
172 uint256 modified;
173 /// The last access time of this metadata.
174 uint256 accessed;
175 /// The creation time listed in this metadata.
176 uint256 created;
177 }
178
179 /// A wallet with a public and private key.
180 struct Wallet {
181 /// The wallet's address.
182 address addr;
183 /// The wallet's public key `X`.
184 uint256 publicKeyX;
185 /// The wallet's public key `Y`.
186 uint256 publicKeyY;
187 /// The wallet's private key.
188 uint256 privateKey;
189 }
190
191 /// The result of a `tryFfi` call.
192 struct FfiResult {
193 /// The exit code of the call.
194 int32 exitCode;
195 /// The optionally hex-decoded `stdout` data.
196 bytes stdout;
197 /// The `stderr` data.
198 bytes stderr;
199 }
200
201 /// Information on the chain and fork.
202 struct ChainInfo {
203 /// The fork identifier. Set to zero if no fork is active.
204 uint256 forkId;
205 /// The chain ID of the current fork.
206 uint256 chainId;
207 }
208
209 /// Information about a blockchain.
210 struct Chain {
211 /// The chain name.
212 string name;
213 /// The chain's Chain ID.
214 uint256 chainId;
215 /// The chain's alias. (i.e. what gets specified in `foundry.toml`).
216 string chainAlias;
217 /// A default RPC endpoint for this chain.
218 string rpcUrl;
219 }
220
221 /// The storage accessed during an `AccountAccess`.
222 struct StorageAccess {
223 /// The account whose storage was accessed.
224 address account;
225 /// The slot that was accessed.
226 bytes32 slot;
227 /// If the access was a write.
228 bool isWrite;
229 /// The previous value of the slot.
230 bytes32 previousValue;
231 /// The new value of the slot.
232 bytes32 newValue;
233 /// If the access was reverted.
234 bool reverted;
235 }
236
237 /// An EIP-2930 access list item.
238 struct AccessListItem {
239 /// The address to be added in access list.
240 address target;
241 /// The storage keys to be added in access list.
242 bytes32[] storageKeys;
243 }
244
245 /// The result of a `stopAndReturnStateDiff` call.
246 struct AccountAccess {
247 /// The chain and fork the access occurred.
248 ChainInfo chainInfo;
249 /// The kind of account access that determines what the account is.
250 /// If kind is Call, DelegateCall, StaticCall or CallCode, then the account is the callee.
251 /// If kind is Create, then the account is the newly created account.
252 /// If kind is SelfDestruct, then the account is the selfdestruct recipient.
253 /// If kind is a Resume, then account represents a account context that has resumed.
254 AccountAccessKind kind;
255 /// The account that was accessed.
256 /// It's either the account created, callee or a selfdestruct recipient for CREATE, CALL or SELFDESTRUCT.
257 address account;
258 /// What accessed the account.
259 address accessor;
260 /// If the account was initialized or empty prior to the access.
261 /// An account is considered initialized if it has code, a
262 /// non-zero nonce, or a non-zero balance.
263 bool initialized;
264 /// The previous balance of the accessed account.
265 uint256 oldBalance;
266 /// The potential new balance of the accessed account.
267 /// That is, all balance changes are recorded here, even if reverts occurred.
268 uint256 newBalance;
269 /// Code of the account deployed by CREATE.
270 bytes deployedCode;
271 /// Value passed along with the account access
272 uint256 value;
273 /// Input data provided to the CREATE or CALL
274 bytes data;
275 /// If this access reverted in either the current or parent context.
276 bool reverted;
277 /// An ordered list of storage accesses made during an account access operation.
278 StorageAccess[] storageAccesses;
279 /// Call depth traversed during the recording of state differences
280 uint64 depth;
281 /// The previous nonce of the accessed account.
282 uint64 oldNonce;
283 /// The new nonce of the accessed account.
284 uint64 newNonce;
285 }
286
287 /// The result of the `stopDebugTraceRecording` call
288 struct DebugStep {
289 /// The stack before executing the step of the run.
290 /// stack\[0\] represents the top of the stack.
291 /// and only stack data relevant to the opcode execution is contained.
292 uint256[] stack;
293 /// The memory input data before executing the step of the run.
294 /// only input data relevant to the opcode execution is contained.
295 ///
296 /// e.g. for MLOAD, it will have memory\[offset:offset+32\] copied here.
297 /// the offset value can be get by the stack data.
298 bytes memoryInput;
299 /// The opcode that was accessed.
300 uint8 opcode;
301 /// The call depth of the step.
302 uint64 depth;
303 /// Whether the call end up with out of gas error.
304 bool isOutOfGas;
305 /// The contract address where the opcode is running
306 address contractAddr;
307 }
308
309 /// The transaction type (`txType`) of the broadcast.
310 enum BroadcastTxType {
311 /// Represents a CALL broadcast tx.
312 Call,
313 /// Represents a CREATE broadcast tx.
314 Create,
315 /// Represents a CREATE2 broadcast tx.
316 Create2
317 }
318
319 /// Represents a transaction's broadcast details.
320 struct BroadcastTxSummary {
321 /// The hash of the transaction that was broadcasted
322 bytes32 txHash;
323 /// Represent the type of transaction among CALL, CREATE, CREATE2
324 BroadcastTxType txType;
325 /// The address of the contract that was called or created.
326 /// This is address of the contract that is created if the txType is CREATE or CREATE2.
327 address contractAddress;
328 /// The block number the transaction landed in.
329 uint64 blockNumber;
330 /// Status of the transaction, retrieved from the transaction receipt.
331 bool success;
332 }
333
334 /// Holds a signed EIP-7702 authorization for an authority account to delegate to an implementation.
335 struct SignedDelegation {
336 /// The y-parity of the recovered secp256k1 signature (0 or 1).
337 uint8 v;
338 /// First 32 bytes of the signature.
339 bytes32 r;
340 /// Second 32 bytes of the signature.
341 bytes32 s;
342 /// The current nonce of the authority account at signing time.
343 /// Used to ensure signature can't be replayed after account nonce changes.
344 uint64 nonce;
345 /// Address of the contract implementation that will be delegated to.
346 /// Gets encoded into delegation code: 0xef0100 || implementation.
347 address implementation;
348 }
349
350 /// Represents a "potential" revert reason from a single subsequent call when using `vm.assumeNoReverts`.
351 /// Reverts that match will result in a FOUNDRY::ASSUME rejection, whereas unmatched reverts will be surfaced
352 /// as normal.
353 struct PotentialRevert {
354 /// The allowed origin of the revert opcode; address(0) allows reverts from any address
355 address reverter;
356 /// When true, only matches on the beginning of the revert data, otherwise, matches on entire revert data
357 bool partialMatch;
358 /// The data to use to match encountered reverts
359 bytes revertData;
360 }
361
362 // ======== EVM ========
363
364 /// Gets the address for a given private key.
365 #[cheatcode(group = Evm, safety = Safe)]
366 function addr(uint256 privateKey) external pure returns (address keyAddr);
367
368 /// Dump a genesis JSON file's `allocs` to disk.
369 #[cheatcode(group = Evm, safety = Unsafe)]
370 function dumpState(string calldata pathToStateJson) external;
371
372 /// Gets the nonce of an account.
373 #[cheatcode(group = Evm, safety = Safe)]
374 function getNonce(address account) external view returns (uint64 nonce);
375
376 /// Get the nonce of a `Wallet`.
377 #[cheatcode(group = Evm, safety = Safe)]
378 function getNonce(Wallet calldata wallet) external view returns (uint64 nonce);
379
380 /// Loads a storage slot from an address.
381 #[cheatcode(group = Evm, safety = Safe)]
382 function load(address target, bytes32 slot) external view returns (bytes32 data);
383
384 /// Load a genesis JSON file's `allocs` into the in-memory EVM state.
385 #[cheatcode(group = Evm, safety = Unsafe)]
386 function loadAllocs(string calldata pathToAllocsJson) external;
387
388 // -------- Record Debug Traces --------
389
390 /// Records the debug trace during the run.
391 #[cheatcode(group = Evm, safety = Safe)]
392 function startDebugTraceRecording() external;
393
394 /// Stop debug trace recording and returns the recorded debug trace.
395 #[cheatcode(group = Evm, safety = Safe)]
396 function stopAndReturnDebugTraceRecording() external returns (DebugStep[] memory step);
397
398
399 /// Clones a source account code, state, balance and nonce to a target account and updates in-memory EVM state.
400 #[cheatcode(group = Evm, safety = Unsafe)]
401 function cloneAccount(address source, address target) external;
402
403 // -------- Record Storage --------
404
405 /// Records all storage reads and writes. Use `accesses` to get the recorded data.
406 /// Subsequent calls to `record` will clear the previous data.
407 #[cheatcode(group = Evm, safety = Safe)]
408 function record() external;
409
410 /// Stops recording storage reads and writes.
411 #[cheatcode(group = Evm, safety = Safe)]
412 function stopRecord() external;
413
414 /// Gets all accessed reads and write slot from a `vm.record` session, for a given address.
415 #[cheatcode(group = Evm, safety = Safe)]
416 function accesses(address target) external view returns (bytes32[] memory readSlots, bytes32[] memory writeSlots);
417
418 /// Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order,
419 /// along with the context of the calls
420 #[cheatcode(group = Evm, safety = Safe)]
421 function startStateDiffRecording() external;
422
423 /// Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session.
424 #[cheatcode(group = Evm, safety = Safe)]
425 function stopAndReturnStateDiff() external returns (AccountAccess[] memory accountAccesses);
426
427 /// Returns state diffs from current `vm.startStateDiffRecording` session.
428 #[cheatcode(group = Evm, safety = Safe)]
429 function getStateDiff() external view returns (string memory diff);
430
431 /// Returns state diffs from current `vm.startStateDiffRecording` session, in json format.
432 #[cheatcode(group = Evm, safety = Safe)]
433 function getStateDiffJson() external view returns (string memory diff);
434
435 /// Returns an array of storage slots occupied by the specified variable.
436 #[cheatcode(group = Evm, safety = Safe)]
437 function getStorageSlots(address target, string calldata variableName) external view returns (uint256[] memory slots);
438
439 /// Returns an array of `StorageAccess` from current `vm.stateStateDiffRecording` session
440 #[cheatcode(group = Evm, safety = Safe)]
441 function getStorageAccesses() external view returns (StorageAccess[] memory storageAccesses);
442
443 // -------- Recording Map Writes --------
444
445 /// Starts recording all map SSTOREs for later retrieval.
446 #[cheatcode(group = Evm, safety = Safe)]
447 function startMappingRecording() external;
448
449 /// Stops recording all map SSTOREs for later retrieval and clears the recorded data.
450 #[cheatcode(group = Evm, safety = Safe)]
451 function stopMappingRecording() external;
452
453 /// Gets the number of elements in the mapping at the given slot, for a given address.
454 #[cheatcode(group = Evm, safety = Safe)]
455 function getMappingLength(address target, bytes32 mappingSlot) external view returns (uint256 length);
456
457 /// Gets the elements at index idx of the mapping at the given slot, for a given address. The
458 /// index must be less than the length of the mapping (i.e. the number of keys in the mapping).
459 #[cheatcode(group = Evm, safety = Safe)]
460 function getMappingSlotAt(address target, bytes32 mappingSlot, uint256 idx) external view returns (bytes32 value);
461
462 /// Gets the map key and parent of a mapping at a given slot, for a given address.
463 #[cheatcode(group = Evm, safety = Safe)]
464 function getMappingKeyAndParentOf(address target, bytes32 elementSlot)
465 external
466 view
467 returns (bool found, bytes32 key, bytes32 parent);
468
469 // -------- Block and Transaction Properties --------
470
471 /// Gets the current `block.chainid` of the currently selected environment.
472 /// You should use this instead of `block.chainid` if you use `vm.selectFork` or `vm.createSelectFork`, as `block.chainid` could be assumed
473 /// to be constant across a transaction, and as a result will get optimized out by the compiler.
474 /// See https://github.com/foundry-rs/foundry/issues/6180
475 #[cheatcode(group = Evm, safety = Safe)]
476 function getChainId() external view returns (uint256 blockChainId);
477
478 /// Sets `block.chainid`.
479 #[cheatcode(group = Evm, safety = Unsafe)]
480 function chainId(uint256 newChainId) external;
481
482 /// Sets `block.coinbase`.
483 #[cheatcode(group = Evm, safety = Unsafe)]
484 function coinbase(address newCoinbase) external;
485
486 /// Sets `block.difficulty`.
487 /// Not available on EVM versions from Paris onwards. Use `prevrandao` instead.
488 /// Reverts if used on unsupported EVM versions.
489 #[cheatcode(group = Evm, safety = Unsafe)]
490 function difficulty(uint256 newDifficulty) external;
491
492 /// Sets `block.basefee`.
493 #[cheatcode(group = Evm, safety = Unsafe)]
494 function fee(uint256 newBasefee) external;
495
496 /// Sets `block.prevrandao`.
497 /// Not available on EVM versions before Paris. Use `difficulty` instead.
498 /// If used on unsupported EVM versions it will revert.
499 #[cheatcode(group = Evm, safety = Unsafe)]
500 function prevrandao(bytes32 newPrevrandao) external;
501 /// Sets `block.prevrandao`.
502 /// Not available on EVM versions before Paris. Use `difficulty` instead.
503 /// If used on unsupported EVM versions it will revert.
504 #[cheatcode(group = Evm, safety = Unsafe)]
505 function prevrandao(uint256 newPrevrandao) external;
506
507 /// Sets the blobhashes in the transaction.
508 /// Not available on EVM versions before Cancun.
509 /// If used on unsupported EVM versions it will revert.
510 #[cheatcode(group = Evm, safety = Unsafe)]
511 function blobhashes(bytes32[] calldata hashes) external;
512
513 /// Gets the blockhashes from the current transaction.
514 /// Not available on EVM versions before Cancun.
515 /// If used on unsupported EVM versions it will revert.
516 #[cheatcode(group = Evm, safety = Unsafe)]
517 function getBlobhashes() external view returns (bytes32[] memory hashes);
518
519 /// Sets `block.height`.
520 #[cheatcode(group = Evm, safety = Unsafe)]
521 function roll(uint256 newHeight) external;
522
523 /// Gets the current `block.number`.
524 /// You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction,
525 /// and as a result will get optimized out by the compiler.
526 /// See https://github.com/foundry-rs/foundry/issues/6180
527 #[cheatcode(group = Evm, safety = Safe)]
528 function getBlockNumber() external view returns (uint256 height);
529
530 /// Sets `tx.gasprice`.
531 #[cheatcode(group = Evm, safety = Unsafe)]
532 function txGasPrice(uint256 newGasPrice) external;
533
534 /// Sets `block.timestamp`.
535 #[cheatcode(group = Evm, safety = Unsafe)]
536 function warp(uint256 newTimestamp) external;
537
538 /// Gets the current `block.timestamp`.
539 /// You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction,
540 /// and as a result will get optimized out by the compiler.
541 /// See https://github.com/foundry-rs/foundry/issues/6180
542 #[cheatcode(group = Evm, safety = Safe)]
543 function getBlockTimestamp() external view returns (uint256 timestamp);
544
545 /// Gets the RLP encoded block header for a given block number.
546 /// Returns the block header in the same format as `cast block <block_number> --raw`.
547 #[cheatcode(group = Evm, safety = Safe)]
548 function getRawBlockHeader(uint256 blockNumber) external view returns (bytes memory rlpHeader);
549
550 /// Sets `block.blobbasefee`
551 #[cheatcode(group = Evm, safety = Unsafe)]
552 function blobBaseFee(uint256 newBlobBaseFee) external;
553
554 /// Gets the current `block.blobbasefee`.
555 /// You should use this instead of `block.blobbasefee` if you use `vm.blobBaseFee`, as `block.blobbasefee` is assumed to be constant across a transaction,
556 /// and as a result will get optimized out by the compiler.
557 /// See https://github.com/foundry-rs/foundry/issues/6180
558 #[cheatcode(group = Evm, safety = Safe)]
559 function getBlobBaseFee() external view returns (uint256 blobBaseFee);
560
561 /// Set blockhash for the current block.
562 /// It only sets the blockhash for blocks where `block.number - 256 <= number < block.number`.
563 #[cheatcode(group = Evm, safety = Unsafe)]
564 function setBlockhash(uint256 blockNumber, bytes32 blockHash) external;
565
566 // -------- Account State --------
567
568 /// Sets an address' balance.
569 #[cheatcode(group = Evm, safety = Unsafe)]
570 function deal(address account, uint256 newBalance) external;
571
572 /// Sets an address' code.
573 #[cheatcode(group = Evm, safety = Unsafe)]
574 function etch(address target, bytes calldata newRuntimeBytecode) external;
575
576 /// Resets the nonce of an account to 0 for EOAs and 1 for contract accounts.
577 #[cheatcode(group = Evm, safety = Unsafe)]
578 function resetNonce(address account) external;
579
580 /// Sets the nonce of an account. Must be higher than the current nonce of the account.
581 #[cheatcode(group = Evm, safety = Unsafe)]
582 function setNonce(address account, uint64 newNonce) external;
583
584 /// Sets the nonce of an account to an arbitrary value.
585 #[cheatcode(group = Evm, safety = Unsafe)]
586 function setNonceUnsafe(address account, uint64 newNonce) external;
587
588 /// Stores a value to an address' storage slot.
589 #[cheatcode(group = Evm, safety = Unsafe)]
590 function store(address target, bytes32 slot, bytes32 value) external;
591
592 /// Marks the slots of an account and the account address as cold.
593 #[cheatcode(group = Evm, safety = Unsafe)]
594 function cool(address target) external;
595
596 /// Utility cheatcode to set an EIP-2930 access list for all subsequent transactions.
597 #[cheatcode(group = Evm, safety = Unsafe)]
598 function accessList(AccessListItem[] calldata access) external;
599
600 /// Utility cheatcode to remove any EIP-2930 access list set by `accessList` cheatcode.
601 #[cheatcode(group = Evm, safety = Unsafe)]
602 function noAccessList() external;
603
604 /// Utility cheatcode to mark specific storage slot as warm, simulating a prior read.
605 #[cheatcode(group = Evm, safety = Unsafe)]
606 function warmSlot(address target, bytes32 slot) external;
607
608 /// Utility cheatcode to mark specific storage slot as cold, simulating no prior read.
609 #[cheatcode(group = Evm, safety = Unsafe)]
610 function coolSlot(address target, bytes32 slot) external;
611
612 /// Returns the test or script execution evm version.
613 ///
614 /// **Note:** The execution evm version is not the same as the compilation one.
615 #[cheatcode(group = Evm, safety = Safe)]
616 function getEvmVersion() external pure returns (string memory evm);
617
618 /// Set the exact test or script execution evm version, e.g. `berlin`, `cancun`.
619 ///
620 /// **Note:** The execution evm version is not the same as the compilation one.
621 #[cheatcode(group = Evm, safety = Safe)]
622 function setEvmVersion(string calldata evm) external;
623
624 // -------- Call Manipulation --------
625 // --- Mocks ---
626
627 /// Clears all mocked calls.
628 #[cheatcode(group = Evm, safety = Unsafe)]
629 function clearMockedCalls() external;
630
631 /// Mocks a call to an address, returning specified data.
632 /// Calldata can either be strict or a partial match, e.g. if you only
633 /// pass a Solidity selector to the expected calldata, then the entire Solidity
634 /// function will be mocked.
635 #[cheatcode(group = Evm, safety = Unsafe)]
636 function mockCall(address callee, bytes calldata data, bytes calldata returnData) external;
637
638 /// Mocks a call to an address with a specific `msg.value`, returning specified data.
639 /// Calldata match takes precedence over `msg.value` in case of ambiguity.
640 #[cheatcode(group = Evm, safety = Unsafe)]
641 function mockCall(address callee, uint256 msgValue, bytes calldata data, bytes calldata returnData) external;
642
643 /// Mocks a call to an address, returning specified data.
644 /// Calldata can either be strict or a partial match, e.g. if you only
645 /// pass a Solidity selector to the expected calldata, then the entire Solidity
646 /// function will be mocked.
647 ///
648 /// Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.
649 #[cheatcode(group = Evm, safety = Unsafe)]
650 function mockCall(address callee, bytes4 data, bytes calldata returnData) external;
651
652 /// Mocks a call to an address with a specific `msg.value`, returning specified data.
653 /// Calldata match takes precedence over `msg.value` in case of ambiguity.
654 ///
655 /// Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.
656 #[cheatcode(group = Evm, safety = Unsafe)]
657 function mockCall(address callee, uint256 msgValue, bytes4 data, bytes calldata returnData) external;
658
659 /// Mocks multiple calls to an address, returning specified data for each call.
660 #[cheatcode(group = Evm, safety = Unsafe)]
661 function mockCalls(address callee, bytes calldata data, bytes[] calldata returnData) external;
662
663 /// Mocks multiple calls to an address with a specific `msg.value`, returning specified data for each call.
664 #[cheatcode(group = Evm, safety = Unsafe)]
665 function mockCalls(address callee, uint256 msgValue, bytes calldata data, bytes[] calldata returnData) external;
666
667 /// Reverts a call to an address with specified revert data.
668 #[cheatcode(group = Evm, safety = Unsafe)]
669 function mockCallRevert(address callee, bytes calldata data, bytes calldata revertData) external;
670
671 /// Reverts a call to an address with a specific `msg.value`, with specified revert data.
672 #[cheatcode(group = Evm, safety = Unsafe)]
673 function mockCallRevert(address callee, uint256 msgValue, bytes calldata data, bytes calldata revertData)
674 external;
675
676 /// Reverts a call to an address with specified revert data.
677 ///
678 /// Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.
679 #[cheatcode(group = Evm, safety = Unsafe)]
680 function mockCallRevert(address callee, bytes4 data, bytes calldata revertData) external;
681
682 /// Reverts a call to an address with a specific `msg.value`, with specified revert data.
683 ///
684 /// Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.
685 #[cheatcode(group = Evm, safety = Unsafe)]
686 function mockCallRevert(address callee, uint256 msgValue, bytes4 data, bytes calldata revertData)
687 external;
688
689 /// Whenever a call is made to `callee` with calldata `data`, this cheatcode instead calls
690 /// `target` with the same calldata. This functionality is similar to a delegate call made to
691 /// `target` contract from `callee`.
692 /// Can be used to substitute a call to a function with another implementation that captures
693 /// the primary logic of the original function but is easier to reason about.
694 /// If calldata is not a strict match then partial match by selector is attempted.
695 #[cheatcode(group = Evm, safety = Unsafe)]
696 function mockFunction(address callee, address target, bytes calldata data) external;
697
698 // --- Impersonation (pranks) ---
699
700 /// Sets the *next* call's `msg.sender` to be the input address.
701 #[cheatcode(group = Evm, safety = Unsafe)]
702 function prank(address msgSender) external;
703
704 /// Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called.
705 #[cheatcode(group = Evm, safety = Unsafe)]
706 function startPrank(address msgSender) external;
707
708 /// Sets the *next* call's `msg.sender` to be the input address, and the `tx.origin` to be the second input.
709 #[cheatcode(group = Evm, safety = Unsafe)]
710 function prank(address msgSender, address txOrigin) external;
711
712 /// Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input.
713 #[cheatcode(group = Evm, safety = Unsafe)]
714 function startPrank(address msgSender, address txOrigin) external;
715
716 /// Sets the *next* delegate call's `msg.sender` to be the input address.
717 #[cheatcode(group = Evm, safety = Unsafe)]
718 function prank(address msgSender, bool delegateCall) external;
719
720 /// Sets all subsequent delegate calls' `msg.sender` to be the input address until `stopPrank` is called.
721 #[cheatcode(group = Evm, safety = Unsafe)]
722 function startPrank(address msgSender, bool delegateCall) external;
723
724 /// Sets the *next* delegate call's `msg.sender` to be the input address, and the `tx.origin` to be the second input.
725 #[cheatcode(group = Evm, safety = Unsafe)]
726 function prank(address msgSender, address txOrigin, bool delegateCall) external;
727
728 /// Sets all subsequent delegate calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input.
729 #[cheatcode(group = Evm, safety = Unsafe)]
730 function startPrank(address msgSender, address txOrigin, bool delegateCall) external;
731
732 /// Resets subsequent calls' `msg.sender` to be `address(this)`.
733 #[cheatcode(group = Evm, safety = Unsafe)]
734 function stopPrank() external;
735
736 /// Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification.
737 #[cheatcode(group = Evm, safety = Unsafe)]
738 function readCallers() external view returns (CallerMode callerMode, address msgSender, address txOrigin);
739
740 // ----- Arbitrary Snapshots -----
741
742 /// Snapshot capture an arbitrary numerical value by name.
743 /// The group name is derived from the contract name.
744 #[cheatcode(group = Evm, safety = Unsafe)]
745 function snapshotValue(string calldata name, uint256 value) external;
746
747 /// Snapshot capture an arbitrary numerical value by name in a group.
748 #[cheatcode(group = Evm, safety = Unsafe)]
749 function snapshotValue(string calldata group, string calldata name, uint256 value) external;
750
751 // -------- Gas Snapshots --------
752
753 /// Snapshot capture the gas usage of the last call by name from the callee perspective.
754 #[cheatcode(group = Evm, safety = Unsafe)]
755 function snapshotGasLastCall(string calldata name) external returns (uint256 gasUsed);
756
757 /// Snapshot capture the gas usage of the last call by name in a group from the callee perspective.
758 #[cheatcode(group = Evm, safety = Unsafe)]
759 function snapshotGasLastCall(string calldata group, string calldata name) external returns (uint256 gasUsed);
760
761 /// Start a snapshot capture of the current gas usage by name.
762 /// The group name is derived from the contract name.
763 #[cheatcode(group = Evm, safety = Unsafe)]
764 function startSnapshotGas(string calldata name) external;
765
766 /// Start a snapshot capture of the current gas usage by name in a group.
767 #[cheatcode(group = Evm, safety = Unsafe)]
768 function startSnapshotGas(string calldata group, string calldata name) external;
769
770 /// Stop the snapshot capture of the current gas by latest snapshot name, capturing the gas used since the start.
771 #[cheatcode(group = Evm, safety = Unsafe)]
772 function stopSnapshotGas() external returns (uint256 gasUsed);
773
774 /// Stop the snapshot capture of the current gas usage by name, capturing the gas used since the start.
775 /// The group name is derived from the contract name.
776 #[cheatcode(group = Evm, safety = Unsafe)]
777 function stopSnapshotGas(string calldata name) external returns (uint256 gasUsed);
778
779 /// Stop the snapshot capture of the current gas usage by name in a group, capturing the gas used since the start.
780 #[cheatcode(group = Evm, safety = Unsafe)]
781 function stopSnapshotGas(string calldata group, string calldata name) external returns (uint256 gasUsed);
782
783 // -------- State Snapshots --------
784
785 /// `snapshot` is being deprecated in favor of `snapshotState`. It will be removed in future versions.
786 #[cheatcode(group = Evm, safety = Unsafe, status = Deprecated(Some("replaced by `snapshotState`")))]
787 function snapshot() external returns (uint256 snapshotId);
788
789 /// Snapshot the current state of the evm.
790 /// Returns the ID of the snapshot that was created.
791 /// To revert a snapshot use `revertToState`.
792 #[cheatcode(group = Evm, safety = Unsafe)]
793 function snapshotState() external returns (uint256 snapshotId);
794
795 /// `revertTo` is being deprecated in favor of `revertToState`. It will be removed in future versions.
796 #[cheatcode(group = Evm, safety = Unsafe, status = Deprecated(Some("replaced by `revertToState`")))]
797 function revertTo(uint256 snapshotId) external returns (bool success);
798
799 /// Revert the state of the EVM to a previous snapshot
800 /// Takes the snapshot ID to revert to.
801 ///
802 /// Returns `true` if the snapshot was successfully reverted.
803 /// Returns `false` if the snapshot does not exist.
804 ///
805 /// **Note:** This does not automatically delete the snapshot. To delete the snapshot use `deleteStateSnapshot`.
806 #[cheatcode(group = Evm, safety = Unsafe)]
807 function revertToState(uint256 snapshotId) external returns (bool success);
808
809 /// `revertToAndDelete` is being deprecated in favor of `revertToStateAndDelete`. It will be removed in future versions.
810 #[cheatcode(group = Evm, safety = Unsafe, status = Deprecated(Some("replaced by `revertToStateAndDelete`")))]
811 function revertToAndDelete(uint256 snapshotId) external returns (bool success);
812
813 /// Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots
814 /// Takes the snapshot ID to revert to.
815 ///
816 /// Returns `true` if the snapshot was successfully reverted and deleted.
817 /// Returns `false` if the snapshot does not exist.
818 #[cheatcode(group = Evm, safety = Unsafe)]
819 function revertToStateAndDelete(uint256 snapshotId) external returns (bool success);
820
821 /// `deleteSnapshot` is being deprecated in favor of `deleteStateSnapshot`. It will be removed in future versions.
822 #[cheatcode(group = Evm, safety = Unsafe, status = Deprecated(Some("replaced by `deleteStateSnapshot`")))]
823 function deleteSnapshot(uint256 snapshotId) external returns (bool success);
824
825 /// Removes the snapshot with the given ID created by `snapshot`.
826 /// Takes the snapshot ID to delete.
827 ///
828 /// Returns `true` if the snapshot was successfully deleted.
829 /// Returns `false` if the snapshot does not exist.
830 #[cheatcode(group = Evm, safety = Unsafe)]
831 function deleteStateSnapshot(uint256 snapshotId) external returns (bool success);
832
833 /// `deleteSnapshots` is being deprecated in favor of `deleteStateSnapshots`. It will be removed in future versions.
834 #[cheatcode(group = Evm, safety = Unsafe, status = Deprecated(Some("replaced by `deleteStateSnapshots`")))]
835 function deleteSnapshots() external;
836
837 /// Removes _all_ snapshots previously created by `snapshot`.
838 #[cheatcode(group = Evm, safety = Unsafe)]
839 function deleteStateSnapshots() external;
840
841 // -------- Forking --------
842 // --- Creation and Selection ---
843
844 /// Returns the identifier of the currently active fork. Reverts if no fork is currently active.
845 #[cheatcode(group = Evm, safety = Unsafe)]
846 function activeFork() external view returns (uint256 forkId);
847
848 /// Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork.
849 #[cheatcode(group = Evm, safety = Unsafe)]
850 function createFork(string calldata urlOrAlias) external returns (uint256 forkId);
851 /// Creates a new fork with the given endpoint and block and returns the identifier of the fork.
852 #[cheatcode(group = Evm, safety = Unsafe)]
853 function createFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId);
854 /// Creates a new fork with the given endpoint and at the block the given transaction was mined in,
855 /// replays all transaction mined in the block before the transaction, and returns the identifier of the fork.
856 #[cheatcode(group = Evm, safety = Unsafe)]
857 function createFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId);
858
859 /// Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork.
860 #[cheatcode(group = Evm, safety = Unsafe)]
861 function createSelectFork(string calldata urlOrAlias) external returns (uint256 forkId);
862 /// Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork.
863 #[cheatcode(group = Evm, safety = Unsafe)]
864 function createSelectFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId);
865 /// Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in,
866 /// replays all transaction mined in the block before the transaction, returns the identifier of the fork.
867 #[cheatcode(group = Evm, safety = Unsafe)]
868 function createSelectFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId);
869
870 /// Updates the currently active fork to given block number
871 /// This is similar to `roll` but for the currently active fork.
872 #[cheatcode(group = Evm, safety = Unsafe)]
873 function rollFork(uint256 blockNumber) external;
874 /// Updates the currently active fork to given transaction. This will `rollFork` with the number
875 /// of the block the transaction was mined in and replays all transaction mined before it in the block.
876 #[cheatcode(group = Evm, safety = Unsafe)]
877 function rollFork(bytes32 txHash) external;
878 /// Updates the given fork to given block number.
879 #[cheatcode(group = Evm, safety = Unsafe)]
880 function rollFork(uint256 forkId, uint256 blockNumber) external;
881 /// Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block.
882 #[cheatcode(group = Evm, safety = Unsafe)]
883 function rollFork(uint256 forkId, bytes32 txHash) external;
884
885 /// Takes a fork identifier created by `createFork` and sets the corresponding forked state as active.
886 #[cheatcode(group = Evm, safety = Unsafe)]
887 function selectFork(uint256 forkId) external;
888
889 /// Fetches the given transaction from the active fork and executes it on the current state.
890 #[cheatcode(group = Evm, safety = Unsafe)]
891 function transact(bytes32 txHash) external;
892 /// Fetches the given transaction from the given fork and executes it on the current state.
893 #[cheatcode(group = Evm, safety = Unsafe)]
894 function transact(uint256 forkId, bytes32 txHash) external;
895
896 /// Performs an Ethereum JSON-RPC request to the current fork URL.
897 #[cheatcode(group = Evm, safety = Safe)]
898 function rpc(string calldata method, string calldata params) external returns (bytes memory data);
899
900 /// Performs an Ethereum JSON-RPC request to the given endpoint.
901 #[cheatcode(group = Evm, safety = Safe)]
902 function rpc(string calldata urlOrAlias, string calldata method, string calldata params)
903 external
904 returns (bytes memory data);
905
906 /// Gets all the logs according to specified filter.
907 #[cheatcode(group = Evm, safety = Safe)]
908 function eth_getLogs(uint256 fromBlock, uint256 toBlock, address target, bytes32[] calldata topics)
909 external
910 view
911 returns (EthGetLogs[] memory logs);
912
913 // --- Behavior ---
914
915 /// In forking mode, explicitly grant the given address cheatcode access.
916 #[cheatcode(group = Evm, safety = Unsafe)]
917 function allowCheatcodes(address account) external;
918
919 /// Marks that the account(s) should use persistent storage across fork swaps in a multifork setup
920 /// Meaning, changes made to the state of this account will be kept when switching forks.
921 #[cheatcode(group = Evm, safety = Unsafe)]
922 function makePersistent(address account) external;
923 /// See `makePersistent(address)`.
924 #[cheatcode(group = Evm, safety = Unsafe)]
925 function makePersistent(address account0, address account1) external;
926 /// See `makePersistent(address)`.
927 #[cheatcode(group = Evm, safety = Unsafe)]
928 function makePersistent(address account0, address account1, address account2) external;
929 /// See `makePersistent(address)`.
930 #[cheatcode(group = Evm, safety = Unsafe)]
931 function makePersistent(address[] calldata accounts) external;
932
933 /// Revokes persistent status from the address, previously added via `makePersistent`.
934 #[cheatcode(group = Evm, safety = Unsafe)]
935 function revokePersistent(address account) external;
936 /// See `revokePersistent(address)`.
937 #[cheatcode(group = Evm, safety = Unsafe)]
938 function revokePersistent(address[] calldata accounts) external;
939
940 /// Returns true if the account is marked as persistent.
941 #[cheatcode(group = Evm, safety = Unsafe)]
942 function isPersistent(address account) external view returns (bool persistent);
943
944 // -------- Record Logs --------
945
946 /// Record all the transaction logs.
947 #[cheatcode(group = Evm, safety = Safe)]
948 function recordLogs() external;
949
950 /// Gets all the recorded logs.
951 #[cheatcode(group = Evm, safety = Safe)]
952 function getRecordedLogs() external view returns (Log[] memory logs);
953
954 // -------- Gas Metering --------
955
956 // It's recommend to use the `noGasMetering` modifier included with forge-std, instead of
957 // using these functions directly.
958
959 /// Pauses gas metering (i.e. gas usage is not counted). Noop if already paused.
960 #[cheatcode(group = Evm, safety = Safe)]
961 function pauseGasMetering() external;
962
963 /// Resumes gas metering (i.e. gas usage is counted again). Noop if already on.
964 #[cheatcode(group = Evm, safety = Safe)]
965 function resumeGasMetering() external;
966
967 /// Reset gas metering (i.e. gas usage is set to gas limit).
968 #[cheatcode(group = Evm, safety = Safe)]
969 function resetGasMetering() external;
970
971 // -------- Gas Measurement --------
972
973 /// Gets the gas used in the last call from the callee perspective.
974 #[cheatcode(group = Evm, safety = Safe)]
975 function lastCallGas() external view returns (Gas memory gas);
976
977 // ======== Test Assertions and Utilities ========
978
979 /// If the condition is false, discard this run's fuzz inputs and generate new ones.
980 #[cheatcode(group = Testing, safety = Safe)]
981 function assume(bool condition) external pure;
982
983 /// Discard this run's fuzz inputs and generate new ones if next call reverted.
984 #[cheatcode(group = Testing, safety = Safe)]
985 function assumeNoRevert() external pure;
986
987 /// Discard this run's fuzz inputs and generate new ones if next call reverts with the potential revert parameters.
988 #[cheatcode(group = Testing, safety = Safe)]
989 function assumeNoRevert(PotentialRevert calldata potentialRevert) external pure;
990
991 /// Discard this run's fuzz inputs and generate new ones if next call reverts with the any of the potential revert parameters.
992 #[cheatcode(group = Testing, safety = Safe)]
993 function assumeNoRevert(PotentialRevert[] calldata potentialReverts) external pure;
994
995 /// Writes a breakpoint to jump to in the debugger.
996 #[cheatcode(group = Testing, safety = Safe)]
997 function breakpoint(string calldata char) external pure;
998
999 /// Writes a conditional breakpoint to jump to in the debugger.
1000 #[cheatcode(group = Testing, safety = Safe)]
1001 function breakpoint(string calldata char, bool value) external pure;
1002
1003 /// Returns the Foundry version.
1004 /// Format: <cargo_version>-<tag>+<git_sha_short>.<unix_build_timestamp>.<profile>
1005 /// Sample output: 0.3.0-nightly+3cb96bde9b.1737036656.debug
1006 /// Note: Build timestamps may vary slightly across platforms due to separate CI jobs.
1007 /// For reliable version comparisons, use UNIX format (e.g., >= 1700000000)
1008 /// to compare timestamps while ignoring minor time differences.
1009 #[cheatcode(group = Testing, safety = Safe)]
1010 function getFoundryVersion() external view returns (string memory version);
1011
1012 /// Returns the RPC url for the given alias.
1013 #[cheatcode(group = Testing, safety = Safe)]
1014 function rpcUrl(string calldata rpcAlias) external view returns (string memory json);
1015
1016 /// Returns all rpc urls and their aliases `[alias, url][]`.
1017 #[cheatcode(group = Testing, safety = Safe)]
1018 function rpcUrls() external view returns (string[2][] memory urls);
1019
1020 /// Returns all rpc urls and their aliases as structs.
1021 #[cheatcode(group = Testing, safety = Safe)]
1022 function rpcUrlStructs() external view returns (Rpc[] memory urls);
1023
1024 /// Returns a Chain struct for specific alias
1025 #[cheatcode(group = Testing, safety = Safe)]
1026 function getChain(string calldata chainAlias) external view returns (Chain memory chain);
1027
1028 /// Returns a Chain struct for specific chainId
1029 #[cheatcode(group = Testing, safety = Safe)]
1030 function getChain(uint256 chainId) external view returns (Chain memory chain);
1031
1032 /// Suspends execution of the main thread for `duration` milliseconds.
1033 #[cheatcode(group = Testing, safety = Safe)]
1034 function sleep(uint256 duration) external;
1035
1036 /// Expects a call to an address with the specified calldata.
1037 /// Calldata can either be a strict or a partial match.
1038 #[cheatcode(group = Testing, safety = Unsafe)]
1039 function expectCall(address callee, bytes calldata data) external;
1040
1041 /// Expects given number of calls to an address with the specified calldata.
1042 #[cheatcode(group = Testing, safety = Unsafe)]
1043 function expectCall(address callee, bytes calldata data, uint64 count) external;
1044
1045 /// Expects a call to an address with the specified `msg.value` and calldata.
1046 #[cheatcode(group = Testing, safety = Unsafe)]
1047 function expectCall(address callee, uint256 msgValue, bytes calldata data) external;
1048
1049 /// Expects given number of calls to an address with the specified `msg.value` and calldata.
1050 #[cheatcode(group = Testing, safety = Unsafe)]
1051 function expectCall(address callee, uint256 msgValue, bytes calldata data, uint64 count) external;
1052
1053 /// Expect a call to an address with the specified `msg.value`, gas, and calldata.
1054 #[cheatcode(group = Testing, safety = Unsafe)]
1055 function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data) external;
1056
1057 /// Expects given number of calls to an address with the specified `msg.value`, gas, and calldata.
1058 #[cheatcode(group = Testing, safety = Unsafe)]
1059 function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data, uint64 count) external;
1060
1061 /// Expect a call to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas.
1062 #[cheatcode(group = Testing, safety = Unsafe)]
1063 function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data) external;
1064
1065 /// Expect given number of calls to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas.
1066 #[cheatcode(group = Testing, safety = Unsafe)]
1067 function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data, uint64 count)
1068 external;
1069
1070 /// Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.).
1071 /// Call this function, then emit an event, then call a function. Internally after the call, we check if
1072 /// logs were emitted in the expected order with the expected topics and data (as specified by the booleans).
1073 #[cheatcode(group = Testing, safety = Unsafe)]
1074 function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external;
1075
1076 /// Same as the previous method, but also checks supplied address against emitting contract.
1077 #[cheatcode(group = Testing, safety = Unsafe)]
1078 function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter)
1079 external;
1080
1081 /// Prepare an expected log with all topic and data checks enabled.
1082 /// Call this function, then emit an event, then call a function. Internally after the call, we check if
1083 /// logs were emitted in the expected order with the expected topics and data.
1084 #[cheatcode(group = Testing, safety = Unsafe)]
1085 function expectEmit() external;
1086
1087 /// Same as the previous method, but also checks supplied address against emitting contract.
1088 #[cheatcode(group = Testing, safety = Unsafe)]
1089 function expectEmit(address emitter) external;
1090
1091 /// Expect a given number of logs with the provided topics.
1092 #[cheatcode(group = Testing, safety = Unsafe)]
1093 function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, uint64 count) external;
1094
1095 /// Expect a given number of logs from a specific emitter with the provided topics.
1096 #[cheatcode(group = Testing, safety = Unsafe)]
1097 function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter, uint64 count)
1098 external;
1099
1100 /// Expect a given number of logs with all topic and data checks enabled.
1101 #[cheatcode(group = Testing, safety = Unsafe)]
1102 function expectEmit(uint64 count) external;
1103
1104 /// Expect a given number of logs from a specific emitter with all topic and data checks enabled.
1105 #[cheatcode(group = Testing, safety = Unsafe)]
1106 function expectEmit(address emitter, uint64 count) external;
1107
1108 /// Prepare an expected anonymous log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.).
1109 /// Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if
1110 /// logs were emitted in the expected order with the expected topics and data (as specified by the booleans).
1111 #[cheatcode(group = Testing, safety = Unsafe)]
1112 function expectEmitAnonymous(bool checkTopic0, bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external;
1113
1114 /// Same as the previous method, but also checks supplied address against emitting contract.
1115 #[cheatcode(group = Testing, safety = Unsafe)]
1116 function expectEmitAnonymous(bool checkTopic0, bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter)
1117 external;
1118
1119 /// Prepare an expected anonymous log with all topic and data checks enabled.
1120 /// Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if
1121 /// logs were emitted in the expected order with the expected topics and data.
1122 #[cheatcode(group = Testing, safety = Unsafe)]
1123 function expectEmitAnonymous() external;
1124
1125 /// Same as the previous method, but also checks supplied address against emitting contract.
1126 #[cheatcode(group = Testing, safety = Unsafe)]
1127 function expectEmitAnonymous(address emitter) external;
1128
1129 /// Expects the deployment of the specified bytecode by the specified address using the CREATE opcode
1130 #[cheatcode(group = Testing, safety = Unsafe)]
1131 function expectCreate(bytes calldata bytecode, address deployer) external;
1132
1133 /// Expects the deployment of the specified bytecode by the specified address using the CREATE2 opcode
1134 #[cheatcode(group = Testing, safety = Unsafe)]
1135 function expectCreate2(bytes calldata bytecode, address deployer) external;
1136
1137 /// Expects an error on next call with any revert data.
1138 #[cheatcode(group = Testing, safety = Unsafe)]
1139 function expectRevert() external;
1140
1141 /// Expects an error on next call that exactly matches the revert data.
1142 #[cheatcode(group = Testing, safety = Unsafe)]
1143 function expectRevert(bytes4 revertData) external;
1144
1145 /// Expects an error on next call that exactly matches the revert data.
1146 #[cheatcode(group = Testing, safety = Unsafe)]
1147 function expectRevert(bytes calldata revertData) external;
1148
1149 /// Expects an error with any revert data on next call to reverter address.
1150 #[cheatcode(group = Testing, safety = Unsafe)]
1151 function expectRevert(address reverter) external;
1152
1153 /// Expects an error from reverter address on next call, with any revert data.
1154 #[cheatcode(group = Testing, safety = Unsafe)]
1155 function expectRevert(bytes4 revertData, address reverter) external;
1156
1157 /// Expects an error from reverter address on next call, that exactly matches the revert data.
1158 #[cheatcode(group = Testing, safety = Unsafe)]
1159 function expectRevert(bytes calldata revertData, address reverter) external;
1160
1161 /// Expects a `count` number of reverts from the upcoming calls with any revert data or reverter.
1162 #[cheatcode(group = Testing, safety = Unsafe)]
1163 function expectRevert(uint64 count) external;
1164
1165 /// Expects a `count` number of reverts from the upcoming calls that match the revert data.
1166 #[cheatcode(group = Testing, safety = Unsafe)]
1167 function expectRevert(bytes4 revertData, uint64 count) external;
1168
1169 /// Expects a `count` number of reverts from the upcoming calls that exactly match the revert data.
1170 #[cheatcode(group = Testing, safety = Unsafe)]
1171 function expectRevert(bytes calldata revertData, uint64 count) external;
1172
1173 /// Expects a `count` number of reverts from the upcoming calls from the reverter address.
1174 #[cheatcode(group = Testing, safety = Unsafe)]
1175 function expectRevert(address reverter, uint64 count) external;
1176
1177 /// Expects a `count` number of reverts from the upcoming calls from the reverter address that match the revert data.
1178 #[cheatcode(group = Testing, safety = Unsafe)]
1179 function expectRevert(bytes4 revertData, address reverter, uint64 count) external;
1180
1181 /// Expects a `count` number of reverts from the upcoming calls from the reverter address that exactly match the revert data.
1182 #[cheatcode(group = Testing, safety = Unsafe)]
1183 function expectRevert(bytes calldata revertData, address reverter, uint64 count) external;
1184
1185 /// Expects an error on next call that starts with the revert data.
1186 #[cheatcode(group = Testing, safety = Unsafe)]
1187 function expectPartialRevert(bytes4 revertData) external;
1188
1189 /// Expects an error on next call to reverter address, that starts with the revert data.
1190 #[cheatcode(group = Testing, safety = Unsafe)]
1191 function expectPartialRevert(bytes4 revertData, address reverter) external;
1192
1193 /// Expects an error on next cheatcode call with any revert data.
1194 #[cheatcode(group = Testing, safety = Unsafe, status = Internal)]
1195 function _expectCheatcodeRevert() external;
1196
1197 /// Expects an error on next cheatcode call that starts with the revert data.
1198 #[cheatcode(group = Testing, safety = Unsafe, status = Internal)]
1199 function _expectCheatcodeRevert(bytes4 revertData) external;
1200
1201 /// Expects an error on next cheatcode call that exactly matches the revert data.
1202 #[cheatcode(group = Testing, safety = Unsafe, status = Internal)]
1203 function _expectCheatcodeRevert(bytes calldata revertData) external;
1204
1205 /// Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the current subcontext. If any other
1206 /// memory is written to, the test will fail. Can be called multiple times to add more ranges to the set.
1207 #[cheatcode(group = Testing, safety = Unsafe)]
1208 function expectSafeMemory(uint64 min, uint64 max) external;
1209
1210 /// Stops all safe memory expectation in the current subcontext.
1211 #[cheatcode(group = Testing, safety = Unsafe)]
1212 function stopExpectSafeMemory() external;
1213
1214 /// Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the next created subcontext.
1215 /// If any other memory is written to, the test will fail. Can be called multiple times to add more ranges
1216 /// to the set.
1217 #[cheatcode(group = Testing, safety = Unsafe)]
1218 function expectSafeMemoryCall(uint64 min, uint64 max) external;
1219
1220 /// Marks a test as skipped. Must be called at the top level of a test.
1221 #[cheatcode(group = Testing, safety = Unsafe)]
1222 function skip(bool skipTest) external;
1223
1224 /// Marks a test as skipped with a reason. Must be called at the top level of a test.
1225 #[cheatcode(group = Testing, safety = Unsafe)]
1226 function skip(bool skipTest, string calldata reason) external;
1227
1228 /// Asserts that the given condition is true.
1229 #[cheatcode(group = Testing, safety = Safe)]
1230 function assertTrue(bool condition) external pure;
1231
1232 /// Asserts that the given condition is true and includes error message into revert string on failure.
1233 #[cheatcode(group = Testing, safety = Safe)]
1234 function assertTrue(bool condition, string calldata error) external pure;
1235
1236 /// Asserts that the given condition is false.
1237 #[cheatcode(group = Testing, safety = Safe)]
1238 function assertFalse(bool condition) external pure;
1239
1240 /// Asserts that the given condition is false and includes error message into revert string on failure.
1241 #[cheatcode(group = Testing, safety = Safe)]
1242 function assertFalse(bool condition, string calldata error) external pure;
1243
1244 /// Asserts that two `bool` values are equal.
1245 #[cheatcode(group = Testing, safety = Safe)]
1246 function assertEq(bool left, bool right) external pure;
1247
1248 /// Asserts that two `bool` values are equal and includes error message into revert string on failure.
1249 #[cheatcode(group = Testing, safety = Safe)]
1250 function assertEq(bool left, bool right, string calldata error) external pure;
1251
1252 /// Asserts that two `uint256` values are equal.
1253 #[cheatcode(group = Testing, safety = Safe)]
1254 function assertEq(uint256 left, uint256 right) external pure;
1255
1256 /// Asserts that two `uint256` values are equal and includes error message into revert string on failure.
1257 #[cheatcode(group = Testing, safety = Safe)]
1258 function assertEq(uint256 left, uint256 right, string calldata error) external pure;
1259
1260 /// Asserts that two `int256` values are equal.
1261 #[cheatcode(group = Testing, safety = Safe)]
1262 function assertEq(int256 left, int256 right) external pure;
1263
1264 /// Asserts that two `int256` values are equal and includes error message into revert string on failure.
1265 #[cheatcode(group = Testing, safety = Safe)]
1266 function assertEq(int256 left, int256 right, string calldata error) external pure;
1267
1268 /// Asserts that two `address` values are equal.
1269 #[cheatcode(group = Testing, safety = Safe)]
1270 function assertEq(address left, address right) external pure;
1271
1272 /// Asserts that two `address` values are equal and includes error message into revert string on failure.
1273 #[cheatcode(group = Testing, safety = Safe)]
1274 function assertEq(address left, address right, string calldata error) external pure;
1275
1276 /// Asserts that two `bytes32` values are equal.
1277 #[cheatcode(group = Testing, safety = Safe)]
1278 function assertEq(bytes32 left, bytes32 right) external pure;
1279
1280 /// Asserts that two `bytes32` values are equal and includes error message into revert string on failure.
1281 #[cheatcode(group = Testing, safety = Safe)]
1282 function assertEq(bytes32 left, bytes32 right, string calldata error) external pure;
1283
1284 /// Asserts that two `string` values are equal.
1285 #[cheatcode(group = Testing, safety = Safe)]
1286 function assertEq(string calldata left, string calldata right) external pure;
1287
1288 /// Asserts that two `string` values are equal and includes error message into revert string on failure.
1289 #[cheatcode(group = Testing, safety = Safe)]
1290 function assertEq(string calldata left, string calldata right, string calldata error) external pure;
1291
1292 /// Asserts that two `bytes` values are equal.
1293 #[cheatcode(group = Testing, safety = Safe)]
1294 function assertEq(bytes calldata left, bytes calldata right) external pure;
1295
1296 /// Asserts that two `bytes` values are equal and includes error message into revert string on failure.
1297 #[cheatcode(group = Testing, safety = Safe)]
1298 function assertEq(bytes calldata left, bytes calldata right, string calldata error) external pure;
1299
1300 /// Asserts that two arrays of `bool` values are equal.
1301 #[cheatcode(group = Testing, safety = Safe)]
1302 function assertEq(bool[] calldata left, bool[] calldata right) external pure;
1303
1304 /// Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure.
1305 #[cheatcode(group = Testing, safety = Safe)]
1306 function assertEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;
1307
1308 /// Asserts that two arrays of `uint256 values are equal.
1309 #[cheatcode(group = Testing, safety = Safe)]
1310 function assertEq(uint256[] calldata left, uint256[] calldata right) external pure;
1311
1312 /// Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure.
1313 #[cheatcode(group = Testing, safety = Safe)]
1314 function assertEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;
1315
1316 /// Asserts that two arrays of `int256` values are equal.
1317 #[cheatcode(group = Testing, safety = Safe)]
1318 function assertEq(int256[] calldata left, int256[] calldata right) external pure;
1319
1320 /// Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure.
1321 #[cheatcode(group = Testing, safety = Safe)]
1322 function assertEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;
1323
1324 /// Asserts that two arrays of `address` values are equal.
1325 #[cheatcode(group = Testing, safety = Safe)]
1326 function assertEq(address[] calldata left, address[] calldata right) external pure;
1327
1328 /// Asserts that two arrays of `address` values are equal and includes error message into revert string on failure.
1329 #[cheatcode(group = Testing, safety = Safe)]
1330 function assertEq(address[] calldata left, address[] calldata right, string calldata error) external pure;
1331
1332 /// Asserts that two arrays of `bytes32` values are equal.
1333 #[cheatcode(group = Testing, safety = Safe)]
1334 function assertEq(bytes32[] calldata left, bytes32[] calldata right) external pure;
1335
1336 /// Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure.
1337 #[cheatcode(group = Testing, safety = Safe)]
1338 function assertEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;
1339
1340 /// Asserts that two arrays of `string` values are equal.
1341 #[cheatcode(group = Testing, safety = Safe)]
1342 function assertEq(string[] calldata left, string[] calldata right) external pure;
1343
1344 /// Asserts that two arrays of `string` values are equal and includes error message into revert string on failure.
1345 #[cheatcode(group = Testing, safety = Safe)]
1346 function assertEq(string[] calldata left, string[] calldata right, string calldata error) external pure;
1347
1348 /// Asserts that two arrays of `bytes` values are equal.
1349 #[cheatcode(group = Testing, safety = Safe)]
1350 function assertEq(bytes[] calldata left, bytes[] calldata right) external pure;
1351
1352 /// Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure.
1353 #[cheatcode(group = Testing, safety = Safe)]
1354 function assertEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;
1355
1356 /// Asserts that two `uint256` values are equal, formatting them with decimals in failure message.
1357 #[cheatcode(group = Testing, safety = Safe)]
1358 function assertEqDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
1359
1360 /// Asserts that two `uint256` values are equal, formatting them with decimals in failure message.
1361 /// Includes error message into revert string on failure.
1362 #[cheatcode(group = Testing, safety = Safe)]
1363 function assertEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
1364
1365 /// Asserts that two `int256` values are equal, formatting them with decimals in failure message.
1366 #[cheatcode(group = Testing, safety = Safe)]
1367 function assertEqDecimal(int256 left, int256 right, uint256 decimals) external pure;
1368
1369 /// Asserts that two `int256` values are equal, formatting them with decimals in failure message.
1370 /// Includes error message into revert string on failure.
1371 #[cheatcode(group = Testing, safety = Safe)]
1372 function assertEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
1373
1374 /// Asserts that two `bool` values are not equal.
1375 #[cheatcode(group = Testing, safety = Safe)]
1376 function assertNotEq(bool left, bool right) external pure;
1377
1378 /// Asserts that two `bool` values are not equal and includes error message into revert string on failure.
1379 #[cheatcode(group = Testing, safety = Safe)]
1380 function assertNotEq(bool left, bool right, string calldata error) external pure;
1381
1382 /// Asserts that two `uint256` values are not equal.
1383 #[cheatcode(group = Testing, safety = Safe)]
1384 function assertNotEq(uint256 left, uint256 right) external pure;
1385
1386 /// Asserts that two `uint256` values are not equal and includes error message into revert string on failure.
1387 #[cheatcode(group = Testing, safety = Safe)]
1388 function assertNotEq(uint256 left, uint256 right, string calldata error) external pure;
1389
1390 /// Asserts that two `int256` values are not equal.
1391 #[cheatcode(group = Testing, safety = Safe)]
1392 function assertNotEq(int256 left, int256 right) external pure;
1393
1394 /// Asserts that two `int256` values are not equal and includes error message into revert string on failure.
1395 #[cheatcode(group = Testing, safety = Safe)]
1396 function assertNotEq(int256 left, int256 right, string calldata error) external pure;
1397
1398 /// Asserts that two `address` values are not equal.
1399 #[cheatcode(group = Testing, safety = Safe)]
1400 function assertNotEq(address left, address right) external pure;
1401
1402 /// Asserts that two `address` values are not equal and includes error message into revert string on failure.
1403 #[cheatcode(group = Testing, safety = Safe)]
1404 function assertNotEq(address left, address right, string calldata error) external pure;
1405
1406 /// Asserts that two `bytes32` values are not equal.
1407 #[cheatcode(group = Testing, safety = Safe)]
1408 function assertNotEq(bytes32 left, bytes32 right) external pure;
1409
1410 /// Asserts that two `bytes32` values are not equal and includes error message into revert string on failure.
1411 #[cheatcode(group = Testing, safety = Safe)]
1412 function assertNotEq(bytes32 left, bytes32 right, string calldata error) external pure;
1413
1414 /// Asserts that two `string` values are not equal.
1415 #[cheatcode(group = Testing, safety = Safe)]
1416 function assertNotEq(string calldata left, string calldata right) external pure;
1417
1418 /// Asserts that two `string` values are not equal and includes error message into revert string on failure.
1419 #[cheatcode(group = Testing, safety = Safe)]
1420 function assertNotEq(string calldata left, string calldata right, string calldata error) external pure;
1421
1422 /// Asserts that two `bytes` values are not equal.
1423 #[cheatcode(group = Testing, safety = Safe)]
1424 function assertNotEq(bytes calldata left, bytes calldata right) external pure;
1425
1426 /// Asserts that two `bytes` values are not equal and includes error message into revert string on failure.
1427 #[cheatcode(group = Testing, safety = Safe)]
1428 function assertNotEq(bytes calldata left, bytes calldata right, string calldata error) external pure;
1429
1430 /// Asserts that two arrays of `bool` values are not equal.
1431 #[cheatcode(group = Testing, safety = Safe)]
1432 function assertNotEq(bool[] calldata left, bool[] calldata right) external pure;
1433
1434 /// Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure.
1435 #[cheatcode(group = Testing, safety = Safe)]
1436 function assertNotEq(bool[] calldata left, bool[] calldata right, string calldata error) external pure;
1437
1438 /// Asserts that two arrays of `uint256` values are not equal.
1439 #[cheatcode(group = Testing, safety = Safe)]
1440 function assertNotEq(uint256[] calldata left, uint256[] calldata right) external pure;
1441
1442 /// Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure.
1443 #[cheatcode(group = Testing, safety = Safe)]
1444 function assertNotEq(uint256[] calldata left, uint256[] calldata right, string calldata error) external pure;
1445
1446 /// Asserts that two arrays of `int256` values are not equal.
1447 #[cheatcode(group = Testing, safety = Safe)]
1448 function assertNotEq(int256[] calldata left, int256[] calldata right) external pure;
1449
1450 /// Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure.
1451 #[cheatcode(group = Testing, safety = Safe)]
1452 function assertNotEq(int256[] calldata left, int256[] calldata right, string calldata error) external pure;
1453
1454 /// Asserts that two arrays of `address` values are not equal.
1455 #[cheatcode(group = Testing, safety = Safe)]
1456 function assertNotEq(address[] calldata left, address[] calldata right) external pure;
1457
1458 /// Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure.
1459 #[cheatcode(group = Testing, safety = Safe)]
1460 function assertNotEq(address[] calldata left, address[] calldata right, string calldata error) external pure;
1461
1462 /// Asserts that two arrays of `bytes32` values are not equal.
1463 #[cheatcode(group = Testing, safety = Safe)]
1464 function assertNotEq(bytes32[] calldata left, bytes32[] calldata right) external pure;
1465
1466 /// Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure.
1467 #[cheatcode(group = Testing, safety = Safe)]
1468 function assertNotEq(bytes32[] calldata left, bytes32[] calldata right, string calldata error) external pure;
1469
1470 /// Asserts that two arrays of `string` values are not equal.
1471 #[cheatcode(group = Testing, safety = Safe)]
1472 function assertNotEq(string[] calldata left, string[] calldata right) external pure;
1473
1474 /// Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure.
1475 #[cheatcode(group = Testing, safety = Safe)]
1476 function assertNotEq(string[] calldata left, string[] calldata right, string calldata error) external pure;
1477
1478 /// Asserts that two arrays of `bytes` values are not equal.
1479 #[cheatcode(group = Testing, safety = Safe)]
1480 function assertNotEq(bytes[] calldata left, bytes[] calldata right) external pure;
1481
1482 /// Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure.
1483 #[cheatcode(group = Testing, safety = Safe)]
1484 function assertNotEq(bytes[] calldata left, bytes[] calldata right, string calldata error) external pure;
1485
1486 /// Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.
1487 #[cheatcode(group = Testing, safety = Safe)]
1488 function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
1489
1490 /// Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.
1491 /// Includes error message into revert string on failure.
1492 #[cheatcode(group = Testing, safety = Safe)]
1493 function assertNotEqDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
1494
1495 /// Asserts that two `int256` values are not equal, formatting them with decimals in failure message.
1496 #[cheatcode(group = Testing, safety = Safe)]
1497 function assertNotEqDecimal(int256 left, int256 right, uint256 decimals) external pure;
1498
1499 /// Asserts that two `int256` values are not equal, formatting them with decimals in failure message.
1500 /// Includes error message into revert string on failure.
1501 #[cheatcode(group = Testing, safety = Safe)]
1502 function assertNotEqDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
1503
1504 /// Compares two `uint256` values. Expects first value to be greater than second.
1505 #[cheatcode(group = Testing, safety = Safe)]
1506 function assertGt(uint256 left, uint256 right) external pure;
1507
1508 /// Compares two `uint256` values. Expects first value to be greater than second.
1509 /// Includes error message into revert string on failure.
1510 #[cheatcode(group = Testing, safety = Safe)]
1511 function assertGt(uint256 left, uint256 right, string calldata error) external pure;
1512
1513 /// Compares two `int256` values. Expects first value to be greater than second.
1514 #[cheatcode(group = Testing, safety = Safe)]
1515 function assertGt(int256 left, int256 right) external pure;
1516
1517 /// Compares two `int256` values. Expects first value to be greater than second.
1518 /// Includes error message into revert string on failure.
1519 #[cheatcode(group = Testing, safety = Safe)]
1520 function assertGt(int256 left, int256 right, string calldata error) external pure;
1521
1522 /// Compares two `uint256` values. Expects first value to be greater than second.
1523 /// Formats values with decimals in failure message.
1524 #[cheatcode(group = Testing, safety = Safe)]
1525 function assertGtDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
1526
1527 /// Compares two `uint256` values. Expects first value to be greater than second.
1528 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1529 #[cheatcode(group = Testing, safety = Safe)]
1530 function assertGtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
1531
1532 /// Compares two `int256` values. Expects first value to be greater than second.
1533 /// Formats values with decimals in failure message.
1534 #[cheatcode(group = Testing, safety = Safe)]
1535 function assertGtDecimal(int256 left, int256 right, uint256 decimals) external pure;
1536
1537 /// Compares two `int256` values. Expects first value to be greater than second.
1538 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1539 #[cheatcode(group = Testing, safety = Safe)]
1540 function assertGtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
1541
1542 /// Compares two `uint256` values. Expects first value to be greater than or equal to second.
1543 #[cheatcode(group = Testing, safety = Safe)]
1544 function assertGe(uint256 left, uint256 right) external pure;
1545
1546 /// Compares two `uint256` values. Expects first value to be greater than or equal to second.
1547 /// Includes error message into revert string on failure.
1548 #[cheatcode(group = Testing, safety = Safe)]
1549 function assertGe(uint256 left, uint256 right, string calldata error) external pure;
1550
1551 /// Compares two `int256` values. Expects first value to be greater than or equal to second.
1552 #[cheatcode(group = Testing, safety = Safe)]
1553 function assertGe(int256 left, int256 right) external pure;
1554
1555 /// Compares two `int256` values. Expects first value to be greater than or equal to second.
1556 /// Includes error message into revert string on failure.
1557 #[cheatcode(group = Testing, safety = Safe)]
1558 function assertGe(int256 left, int256 right, string calldata error) external pure;
1559
1560 /// Compares two `uint256` values. Expects first value to be greater than or equal to second.
1561 /// Formats values with decimals in failure message.
1562 #[cheatcode(group = Testing, safety = Safe)]
1563 function assertGeDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
1564
1565 /// Compares two `uint256` values. Expects first value to be greater than or equal to second.
1566 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1567 #[cheatcode(group = Testing, safety = Safe)]
1568 function assertGeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
1569
1570 /// Compares two `int256` values. Expects first value to be greater than or equal to second.
1571 /// Formats values with decimals in failure message.
1572 #[cheatcode(group = Testing, safety = Safe)]
1573 function assertGeDecimal(int256 left, int256 right, uint256 decimals) external pure;
1574
1575 /// Compares two `int256` values. Expects first value to be greater than or equal to second.
1576 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1577 #[cheatcode(group = Testing, safety = Safe)]
1578 function assertGeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
1579
1580 /// Compares two `uint256` values. Expects first value to be less than second.
1581 #[cheatcode(group = Testing, safety = Safe)]
1582 function assertLt(uint256 left, uint256 right) external pure;
1583
1584 /// Compares two `uint256` values. Expects first value to be less than second.
1585 /// Includes error message into revert string on failure.
1586 #[cheatcode(group = Testing, safety = Safe)]
1587 function assertLt(uint256 left, uint256 right, string calldata error) external pure;
1588
1589 /// Compares two `int256` values. Expects first value to be less than second.
1590 #[cheatcode(group = Testing, safety = Safe)]
1591 function assertLt(int256 left, int256 right) external pure;
1592
1593 /// Compares two `int256` values. Expects first value to be less than second.
1594 /// Includes error message into revert string on failure.
1595 #[cheatcode(group = Testing, safety = Safe)]
1596 function assertLt(int256 left, int256 right, string calldata error) external pure;
1597
1598 /// Compares two `uint256` values. Expects first value to be less than second.
1599 /// Formats values with decimals in failure message.
1600 #[cheatcode(group = Testing, safety = Safe)]
1601 function assertLtDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
1602
1603 /// Compares two `uint256` values. Expects first value to be less than second.
1604 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1605 #[cheatcode(group = Testing, safety = Safe)]
1606 function assertLtDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
1607
1608 /// Compares two `int256` values. Expects first value to be less than second.
1609 /// Formats values with decimals in failure message.
1610 #[cheatcode(group = Testing, safety = Safe)]
1611 function assertLtDecimal(int256 left, int256 right, uint256 decimals) external pure;
1612
1613 /// Compares two `int256` values. Expects first value to be less than second.
1614 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1615 #[cheatcode(group = Testing, safety = Safe)]
1616 function assertLtDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
1617
1618 /// Compares two `uint256` values. Expects first value to be less than or equal to second.
1619 #[cheatcode(group = Testing, safety = Safe)]
1620 function assertLe(uint256 left, uint256 right) external pure;
1621
1622 /// Compares two `uint256` values. Expects first value to be less than or equal to second.
1623 /// Includes error message into revert string on failure.
1624 #[cheatcode(group = Testing, safety = Safe)]
1625 function assertLe(uint256 left, uint256 right, string calldata error) external pure;
1626
1627 /// Compares two `int256` values. Expects first value to be less than or equal to second.
1628 #[cheatcode(group = Testing, safety = Safe)]
1629 function assertLe(int256 left, int256 right) external pure;
1630
1631 /// Compares two `int256` values. Expects first value to be less than or equal to second.
1632 /// Includes error message into revert string on failure.
1633 #[cheatcode(group = Testing, safety = Safe)]
1634 function assertLe(int256 left, int256 right, string calldata error) external pure;
1635
1636 /// Compares two `uint256` values. Expects first value to be less than or equal to second.
1637 /// Formats values with decimals in failure message.
1638 #[cheatcode(group = Testing, safety = Safe)]
1639 function assertLeDecimal(uint256 left, uint256 right, uint256 decimals) external pure;
1640
1641 /// Compares two `uint256` values. Expects first value to be less than or equal to second.
1642 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1643 #[cheatcode(group = Testing, safety = Safe)]
1644 function assertLeDecimal(uint256 left, uint256 right, uint256 decimals, string calldata error) external pure;
1645
1646 /// Compares two `int256` values. Expects first value to be less than or equal to second.
1647 /// Formats values with decimals in failure message.
1648 #[cheatcode(group = Testing, safety = Safe)]
1649 function assertLeDecimal(int256 left, int256 right, uint256 decimals) external pure;
1650
1651 /// Compares two `int256` values. Expects first value to be less than or equal to second.
1652 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1653 #[cheatcode(group = Testing, safety = Safe)]
1654 function assertLeDecimal(int256 left, int256 right, uint256 decimals, string calldata error) external pure;
1655
1656 /// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
1657 #[cheatcode(group = Testing, safety = Safe)]
1658 function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta) external pure;
1659
1660 /// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
1661 /// Includes error message into revert string on failure.
1662 #[cheatcode(group = Testing, safety = Safe)]
1663 function assertApproxEqAbs(uint256 left, uint256 right, uint256 maxDelta, string calldata error) external pure;
1664
1665 /// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
1666 #[cheatcode(group = Testing, safety = Safe)]
1667 function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta) external pure;
1668
1669 /// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
1670 /// Includes error message into revert string on failure.
1671 #[cheatcode(group = Testing, safety = Safe)]
1672 function assertApproxEqAbs(int256 left, int256 right, uint256 maxDelta, string calldata error) external pure;
1673
1674 /// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
1675 /// Formats values with decimals in failure message.
1676 #[cheatcode(group = Testing, safety = Safe)]
1677 function assertApproxEqAbsDecimal(uint256 left, uint256 right, uint256 maxDelta, uint256 decimals) external pure;
1678
1679 /// Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.
1680 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1681 #[cheatcode(group = Testing, safety = Safe)]
1682 function assertApproxEqAbsDecimal(
1683 uint256 left,
1684 uint256 right,
1685 uint256 maxDelta,
1686 uint256 decimals,
1687 string calldata error
1688 ) external pure;
1689
1690 /// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
1691 /// Formats values with decimals in failure message.
1692 #[cheatcode(group = Testing, safety = Safe)]
1693 function assertApproxEqAbsDecimal(int256 left, int256 right, uint256 maxDelta, uint256 decimals) external pure;
1694
1695 /// Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.
1696 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1697 #[cheatcode(group = Testing, safety = Safe)]
1698 function assertApproxEqAbsDecimal(
1699 int256 left,
1700 int256 right,
1701 uint256 maxDelta,
1702 uint256 decimals,
1703 string calldata error
1704 ) external pure;
1705
1706 /// Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1707 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1708 #[cheatcode(group = Testing, safety = Safe)]
1709 function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta) external pure;
1710
1711 /// Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1712 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1713 /// Includes error message into revert string on failure.
1714 #[cheatcode(group = Testing, safety = Safe)]
1715 function assertApproxEqRel(uint256 left, uint256 right, uint256 maxPercentDelta, string calldata error) external pure;
1716
1717 /// Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1718 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1719 #[cheatcode(group = Testing, safety = Safe)]
1720 function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta) external pure;
1721
1722 /// Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1723 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1724 /// Includes error message into revert string on failure.
1725 #[cheatcode(group = Testing, safety = Safe)]
1726 function assertApproxEqRel(int256 left, int256 right, uint256 maxPercentDelta, string calldata error) external pure;
1727
1728 /// Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1729 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1730 /// Formats values with decimals in failure message.
1731 #[cheatcode(group = Testing, safety = Safe)]
1732 function assertApproxEqRelDecimal(
1733 uint256 left,
1734 uint256 right,
1735 uint256 maxPercentDelta,
1736 uint256 decimals
1737 ) external pure;
1738
1739 /// Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1740 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1741 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1742 #[cheatcode(group = Testing, safety = Safe)]
1743 function assertApproxEqRelDecimal(
1744 uint256 left,
1745 uint256 right,
1746 uint256 maxPercentDelta,
1747 uint256 decimals,
1748 string calldata error
1749 ) external pure;
1750
1751 /// Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1752 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1753 /// Formats values with decimals in failure message.
1754 #[cheatcode(group = Testing, safety = Safe)]
1755 function assertApproxEqRelDecimal(
1756 int256 left,
1757 int256 right,
1758 uint256 maxPercentDelta,
1759 uint256 decimals
1760 ) external pure;
1761
1762 /// Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`.
1763 /// `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%
1764 /// Formats values with decimals in failure message. Includes error message into revert string on failure.
1765 #[cheatcode(group = Testing, safety = Safe)]
1766 function assertApproxEqRelDecimal(
1767 int256 left,
1768 int256 right,
1769 uint256 maxPercentDelta,
1770 uint256 decimals,
1771 string calldata error
1772 ) external pure;
1773
1774 /// Returns true if the current Foundry version is greater than or equal to the given version.
1775 /// The given version string must be in the format `major.minor.patch`.
1776 ///
1777 /// This is equivalent to `foundryVersionCmp(version) >= 0`.
1778 #[cheatcode(group = Testing, safety = Safe)]
1779 function foundryVersionAtLeast(string calldata version) external view returns (bool);
1780
1781 /// Compares the current Foundry version with the given version string.
1782 /// The given version string must be in the format `major.minor.patch`.
1783 ///
1784 /// Returns:
1785 /// -1 if current Foundry version is less than the given version
1786 /// 0 if current Foundry version equals the given version
1787 /// 1 if current Foundry version is greater than the given version
1788 ///
1789 /// This result can then be used with a comparison operator against `0`.
1790 /// For example, to check if the current Foundry version is greater than or equal to `1.0.0`:
1791 /// `if (foundryVersionCmp("1.0.0") >= 0) { ... }`
1792 #[cheatcode(group = Testing, safety = Safe)]
1793 function foundryVersionCmp(string calldata version) external view returns (int256);
1794
1795 // ======== OS and Filesystem ========
1796
1797 // -------- Metadata --------
1798
1799 /// Returns true if the given path points to an existing entity, else returns false.
1800 #[cheatcode(group = Filesystem)]
1801 function exists(string calldata path) external view returns (bool result);
1802
1803 /// Given a path, query the file system to get information about a file, directory, etc.
1804 #[cheatcode(group = Filesystem)]
1805 function fsMetadata(string calldata path) external view returns (FsMetadata memory metadata);
1806
1807 /// Returns true if the path exists on disk and is pointing at a directory, else returns false.
1808 #[cheatcode(group = Filesystem)]
1809 function isDir(string calldata path) external view returns (bool result);
1810
1811 /// Returns true if the path exists on disk and is pointing at a regular file, else returns false.
1812 #[cheatcode(group = Filesystem)]
1813 function isFile(string calldata path) external view returns (bool result);
1814
1815 /// Get the path of the current project root.
1816 #[cheatcode(group = Filesystem)]
1817 function projectRoot() external view returns (string memory path);
1818
1819 /// Returns the time since unix epoch in milliseconds.
1820 #[cheatcode(group = Filesystem)]
1821 function unixTime() external view returns (uint256 milliseconds);
1822
1823 // -------- Reading and writing --------
1824
1825 /// Closes file for reading, resetting the offset and allowing to read it from beginning with readLine.
1826 /// `path` is relative to the project root.
1827 #[cheatcode(group = Filesystem)]
1828 function closeFile(string calldata path) external;
1829
1830 /// Copies the contents of one file to another. This function will **overwrite** the contents of `to`.
1831 /// On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`.
1832 /// Both `from` and `to` are relative to the project root.
1833 #[cheatcode(group = Filesystem)]
1834 function copyFile(string calldata from, string calldata to) external returns (uint64 copied);
1835
1836 /// Creates a new, empty directory at the provided path.
1837 /// This cheatcode will revert in the following situations, but is not limited to just these cases:
1838 /// - User lacks permissions to modify `path`.
1839 /// - A parent of the given path doesn't exist and `recursive` is false.
1840 /// - `path` already exists and `recursive` is false.
1841 /// `path` is relative to the project root.
1842 #[cheatcode(group = Filesystem)]
1843 function createDir(string calldata path, bool recursive) external;
1844
1845 /// Reads the directory at the given path recursively, up to `maxDepth`.
1846 /// `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned.
1847 /// Follows symbolic links if `followLinks` is true.
1848 #[cheatcode(group = Filesystem)]
1849 function readDir(string calldata path) external view returns (DirEntry[] memory entries);
1850 /// See `readDir(string)`.
1851 #[cheatcode(group = Filesystem)]
1852 function readDir(string calldata path, uint64 maxDepth) external view returns (DirEntry[] memory entries);
1853 /// See `readDir(string)`.
1854 #[cheatcode(group = Filesystem)]
1855 function readDir(string calldata path, uint64 maxDepth, bool followLinks)
1856 external
1857 view
1858 returns (DirEntry[] memory entries);
1859
1860 /// Reads the entire content of file to string. `path` is relative to the project root.
1861 #[cheatcode(group = Filesystem)]
1862 function readFile(string calldata path) external view returns (string memory data);
1863
1864 /// Reads the entire content of file as binary. `path` is relative to the project root.
1865 #[cheatcode(group = Filesystem)]
1866 function readFileBinary(string calldata path) external view returns (bytes memory data);
1867
1868 /// Reads next line of file to string.
1869 #[cheatcode(group = Filesystem)]
1870 function readLine(string calldata path) external view returns (string memory line);
1871
1872 /// Reads a symbolic link, returning the path that the link points to.
1873 /// This cheatcode will revert in the following situations, but is not limited to just these cases:
1874 /// - `path` is not a symbolic link.
1875 /// - `path` does not exist.
1876 #[cheatcode(group = Filesystem)]
1877 function readLink(string calldata linkPath) external view returns (string memory targetPath);
1878
1879 /// Removes a directory at the provided path.
1880 /// This cheatcode will revert in the following situations, but is not limited to just these cases:
1881 /// - `path` doesn't exist.
1882 /// - `path` isn't a directory.
1883 /// - User lacks permissions to modify `path`.
1884 /// - The directory is not empty and `recursive` is false.
1885 /// `path` is relative to the project root.
1886 #[cheatcode(group = Filesystem)]
1887 function removeDir(string calldata path, bool recursive) external;
1888
1889 /// Removes a file from the filesystem.
1890 /// This cheatcode will revert in the following situations, but is not limited to just these cases:
1891 /// - `path` points to a directory.
1892 /// - The file doesn't exist.
1893 /// - The user lacks permissions to remove the file.
1894 /// `path` is relative to the project root.
1895 #[cheatcode(group = Filesystem)]
1896 function removeFile(string calldata path) external;
1897
1898 /// Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does.
1899 /// `path` is relative to the project root.
1900 #[cheatcode(group = Filesystem)]
1901 function writeFile(string calldata path, string calldata data) external;
1902
1903 /// Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does.
1904 /// `path` is relative to the project root.
1905 #[cheatcode(group = Filesystem)]
1906 function writeFileBinary(string calldata path, bytes calldata data) external;
1907
1908 /// Writes line to file, creating a file if it does not exist.
1909 /// `path` is relative to the project root.
1910 #[cheatcode(group = Filesystem)]
1911 function writeLine(string calldata path, string calldata data) external;
1912
1913 /// Gets the artifact path from code (aka. creation code).
1914 #[cheatcode(group = Filesystem)]
1915 function getArtifactPathByCode(bytes calldata code) external view returns (string memory path);
1916
1917 /// Gets the artifact path from deployed code (aka. runtime code).
1918 #[cheatcode(group = Filesystem)]
1919 function getArtifactPathByDeployedCode(bytes calldata deployedCode) external view returns (string memory path);
1920
1921 /// Gets the creation bytecode from an artifact file. Takes in the relative path to the json file or the path to the
1922 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1923 #[cheatcode(group = Filesystem)]
1924 function getCode(string calldata artifactPath) external view returns (bytes memory creationBytecode);
1925
1926 /// Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the
1927 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1928 #[cheatcode(group = Filesystem)]
1929 function deployCode(string calldata artifactPath) external returns (address deployedAddress);
1930
1931 /// Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the
1932 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1933 ///
1934 /// Additionally accepts abi-encoded constructor arguments.
1935 #[cheatcode(group = Filesystem)]
1936 function deployCode(string calldata artifactPath, bytes calldata constructorArgs) external returns (address deployedAddress);
1937
1938 /// Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the
1939 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1940 ///
1941 /// Additionally accepts `msg.value`.
1942 #[cheatcode(group = Filesystem)]
1943 function deployCode(string calldata artifactPath, uint256 value) external returns (address deployedAddress);
1944
1945 /// Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the
1946 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1947 ///
1948 /// Additionally accepts abi-encoded constructor arguments and `msg.value`.
1949 #[cheatcode(group = Filesystem)]
1950 function deployCode(string calldata artifactPath, bytes calldata constructorArgs, uint256 value) external returns (address deployedAddress);
1951
1952 /// Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the
1953 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1954 #[cheatcode(group = Filesystem)]
1955 function deployCode(string calldata artifactPath, bytes32 salt) external returns (address deployedAddress);
1956
1957 /// Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the
1958 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1959 ///
1960 /// Additionally accepts abi-encoded constructor arguments.
1961 #[cheatcode(group = Filesystem)]
1962 function deployCode(string calldata artifactPath, bytes calldata constructorArgs, bytes32 salt) external returns (address deployedAddress);
1963
1964 /// Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the
1965 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1966 ///
1967 /// Additionally accepts `msg.value`.
1968 #[cheatcode(group = Filesystem)]
1969 function deployCode(string calldata artifactPath, uint256 value, bytes32 salt) external returns (address deployedAddress);
1970
1971 /// Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the
1972 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1973 ///
1974 /// Additionally accepts abi-encoded constructor arguments and `msg.value`.
1975 #[cheatcode(group = Filesystem)]
1976 function deployCode(string calldata artifactPath, bytes calldata constructorArgs, uint256 value, bytes32 salt) external returns (address deployedAddress);
1977
1978 /// Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file or the path to the
1979 /// artifact in the form of <path>:<contract>:<version> where <contract> and <version> parts are optional.
1980 #[cheatcode(group = Filesystem)]
1981 function getDeployedCode(string calldata artifactPath) external view returns (bytes memory runtimeBytecode);
1982
1983 /// Returns the most recent broadcast for the given contract on `chainId` matching `txType`.
1984 ///
1985 /// For example:
1986 ///
1987 /// The most recent deployment can be fetched by passing `txType` as `CREATE` or `CREATE2`.
1988 ///
1989 /// The most recent call can be fetched by passing `txType` as `CALL`.
1990 #[cheatcode(group = Filesystem)]
1991 function getBroadcast(string calldata contractName, uint64 chainId, BroadcastTxType txType) external view returns (BroadcastTxSummary memory);
1992
1993 /// Returns all broadcasts for the given contract on `chainId` with the specified `txType`.
1994 ///
1995 /// Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber.
1996 #[cheatcode(group = Filesystem)]
1997 function getBroadcasts(string calldata contractName, uint64 chainId, BroadcastTxType txType) external view returns (BroadcastTxSummary[] memory);
1998
1999 /// Returns all broadcasts for the given contract on `chainId`.
2000 ///
2001 /// Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber.
2002 #[cheatcode(group = Filesystem)]
2003 function getBroadcasts(string calldata contractName, uint64 chainId) external view returns (BroadcastTxSummary[] memory);
2004
2005 /// Returns the most recent deployment for the current `chainId`.
2006 #[cheatcode(group = Filesystem)]
2007 function getDeployment(string calldata contractName) external view returns (address deployedAddress);
2008
2009 /// Returns the most recent deployment for the given contract on `chainId`
2010 #[cheatcode(group = Filesystem)]
2011 function getDeployment(string calldata contractName, uint64 chainId) external view returns (address deployedAddress);
2012
2013 /// Returns all deployments for the given contract on `chainId`
2014 ///
2015 /// Sorted in descending order of deployment time i.e descending order of BroadcastTxSummary.blockNumber.
2016 ///
2017 /// The most recent deployment is the first element, and the oldest is the last.
2018 #[cheatcode(group = Filesystem)]
2019 function getDeployments(string calldata contractName, uint64 chainId) external view returns (address[] memory deployedAddresses);
2020
2021 // -------- Foreign Function Interface --------
2022
2023 /// Performs a foreign function call via the terminal.
2024 #[cheatcode(group = Filesystem)]
2025 function ffi(string[] calldata commandInput) external returns (bytes memory result);
2026
2027 /// Performs a foreign function call via terminal and returns the exit code, stdout, and stderr.
2028 #[cheatcode(group = Filesystem)]
2029 function tryFfi(string[] calldata commandInput) external returns (FfiResult memory result);
2030
2031 // -------- User Interaction --------
2032
2033 /// Prompts the user for a string value in the terminal.
2034 #[cheatcode(group = Filesystem)]
2035 function prompt(string calldata promptText) external returns (string memory input);
2036
2037 /// Prompts the user for a hidden string value in the terminal.
2038 #[cheatcode(group = Filesystem)]
2039 function promptSecret(string calldata promptText) external returns (string memory input);
2040
2041 /// Prompts the user for hidden uint256 in the terminal (usually pk).
2042 #[cheatcode(group = Filesystem)]
2043 function promptSecretUint(string calldata promptText) external returns (uint256);
2044
2045 /// Prompts the user for an address in the terminal.
2046 #[cheatcode(group = Filesystem)]
2047 function promptAddress(string calldata promptText) external returns (address);
2048
2049 /// Prompts the user for uint256 in the terminal.
2050 #[cheatcode(group = Filesystem)]
2051 function promptUint(string calldata promptText) external returns (uint256);
2052
2053 // ======== Environment Variables ========
2054
2055 /// Resolves the env variable placeholders of a given input string.
2056 #[cheatcode(group = Environment)]
2057 function resolveEnv(string calldata input) external returns (string memory);
2058
2059 /// Sets environment variables.
2060 #[cheatcode(group = Environment)]
2061 function setEnv(string calldata name, string calldata value) external;
2062
2063 /// Gets the environment variable `name` and returns true if it exists, else returns false.
2064 #[cheatcode(group = Environment)]
2065 function envExists(string calldata name) external view returns (bool result);
2066
2067 /// Gets the environment variable `name` and parses it as `bool`.
2068 /// Reverts if the variable was not found or could not be parsed.
2069 #[cheatcode(group = Environment)]
2070 function envBool(string calldata name) external view returns (bool value);
2071 /// Gets the environment variable `name` and parses it as `uint256`.
2072 /// Reverts if the variable was not found or could not be parsed.
2073 #[cheatcode(group = Environment)]
2074 function envUint(string calldata name) external view returns (uint256 value);
2075 /// Gets the environment variable `name` and parses it as `int256`.
2076 /// Reverts if the variable was not found or could not be parsed.
2077 #[cheatcode(group = Environment)]
2078 function envInt(string calldata name) external view returns (int256 value);
2079 /// Gets the environment variable `name` and parses it as `address`.
2080 /// Reverts if the variable was not found or could not be parsed.
2081 #[cheatcode(group = Environment)]
2082 function envAddress(string calldata name) external view returns (address value);
2083 /// Gets the environment variable `name` and parses it as `bytes32`.
2084 /// Reverts if the variable was not found or could not be parsed.
2085 #[cheatcode(group = Environment)]
2086 function envBytes32(string calldata name) external view returns (bytes32 value);
2087 /// Gets the environment variable `name` and parses it as `string`.
2088 /// Reverts if the variable was not found or could not be parsed.
2089 #[cheatcode(group = Environment)]
2090 function envString(string calldata name) external view returns (string memory value);
2091 /// Gets the environment variable `name` and parses it as `bytes`.
2092 /// Reverts if the variable was not found or could not be parsed.
2093 #[cheatcode(group = Environment)]
2094 function envBytes(string calldata name) external view returns (bytes memory value);
2095
2096 /// Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`.
2097 /// Reverts if the variable was not found or could not be parsed.
2098 #[cheatcode(group = Environment)]
2099 function envBool(string calldata name, string calldata delim) external view returns (bool[] memory value);
2100 /// Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`.
2101 /// Reverts if the variable was not found or could not be parsed.
2102 #[cheatcode(group = Environment)]
2103 function envUint(string calldata name, string calldata delim) external view returns (uint256[] memory value);
2104 /// Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`.
2105 /// Reverts if the variable was not found or could not be parsed.
2106 #[cheatcode(group = Environment)]
2107 function envInt(string calldata name, string calldata delim) external view returns (int256[] memory value);
2108 /// Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`.
2109 /// Reverts if the variable was not found or could not be parsed.
2110 #[cheatcode(group = Environment)]
2111 function envAddress(string calldata name, string calldata delim) external view returns (address[] memory value);
2112 /// Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`.
2113 /// Reverts if the variable was not found or could not be parsed.
2114 #[cheatcode(group = Environment)]
2115 function envBytes32(string calldata name, string calldata delim) external view returns (bytes32[] memory value);
2116 /// Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`.
2117 /// Reverts if the variable was not found or could not be parsed.
2118 #[cheatcode(group = Environment)]
2119 function envString(string calldata name, string calldata delim) external view returns (string[] memory value);
2120 /// Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`.
2121 /// Reverts if the variable was not found or could not be parsed.
2122 #[cheatcode(group = Environment)]
2123 function envBytes(string calldata name, string calldata delim) external view returns (bytes[] memory value);
2124
2125 /// Gets the environment variable `name` and parses it as `bool`.
2126 /// Reverts if the variable could not be parsed.
2127 /// Returns `defaultValue` if the variable was not found.
2128 #[cheatcode(group = Environment)]
2129 function envOr(string calldata name, bool defaultValue) external view returns (bool value);
2130 /// Gets the environment variable `name` and parses it as `uint256`.
2131 /// Reverts if the variable could not be parsed.
2132 /// Returns `defaultValue` if the variable was not found.
2133 #[cheatcode(group = Environment)]
2134 function envOr(string calldata name, uint256 defaultValue) external view returns (uint256 value);
2135 /// Gets the environment variable `name` and parses it as `int256`.
2136 /// Reverts if the variable could not be parsed.
2137 /// Returns `defaultValue` if the variable was not found.
2138 #[cheatcode(group = Environment)]
2139 function envOr(string calldata name, int256 defaultValue) external view returns (int256 value);
2140 /// Gets the environment variable `name` and parses it as `address`.
2141 /// Reverts if the variable could not be parsed.
2142 /// Returns `defaultValue` if the variable was not found.
2143 #[cheatcode(group = Environment)]
2144 function envOr(string calldata name, address defaultValue) external view returns (address value);
2145 /// Gets the environment variable `name` and parses it as `bytes32`.
2146 /// Reverts if the variable could not be parsed.
2147 /// Returns `defaultValue` if the variable was not found.
2148 #[cheatcode(group = Environment)]
2149 function envOr(string calldata name, bytes32 defaultValue) external view returns (bytes32 value);
2150 /// Gets the environment variable `name` and parses it as `string`.
2151 /// Reverts if the variable could not be parsed.
2152 /// Returns `defaultValue` if the variable was not found.
2153 #[cheatcode(group = Environment)]
2154 function envOr(string calldata name, string calldata defaultValue) external view returns (string memory value);
2155 /// Gets the environment variable `name` and parses it as `bytes`.
2156 /// Reverts if the variable could not be parsed.
2157 /// Returns `defaultValue` if the variable was not found.
2158 #[cheatcode(group = Environment)]
2159 function envOr(string calldata name, bytes calldata defaultValue) external view returns (bytes memory value);
2160
2161 /// Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`.
2162 /// Reverts if the variable could not be parsed.
2163 /// Returns `defaultValue` if the variable was not found.
2164 #[cheatcode(group = Environment)]
2165 function envOr(string calldata name, string calldata delim, bool[] calldata defaultValue)
2166 external view
2167 returns (bool[] memory value);
2168 /// Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`.
2169 /// Reverts if the variable could not be parsed.
2170 /// Returns `defaultValue` if the variable was not found.
2171 #[cheatcode(group = Environment)]
2172 function envOr(string calldata name, string calldata delim, uint256[] calldata defaultValue)
2173 external view
2174 returns (uint256[] memory value);
2175 /// Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`.
2176 /// Reverts if the variable could not be parsed.
2177 /// Returns `defaultValue` if the variable was not found.
2178 #[cheatcode(group = Environment)]
2179 function envOr(string calldata name, string calldata delim, int256[] calldata defaultValue)
2180 external view
2181 returns (int256[] memory value);
2182 /// Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`.
2183 /// Reverts if the variable could not be parsed.
2184 /// Returns `defaultValue` if the variable was not found.
2185 #[cheatcode(group = Environment)]
2186 function envOr(string calldata name, string calldata delim, address[] calldata defaultValue)
2187 external view
2188 returns (address[] memory value);
2189 /// Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`.
2190 /// Reverts if the variable could not be parsed.
2191 /// Returns `defaultValue` if the variable was not found.
2192 #[cheatcode(group = Environment)]
2193 function envOr(string calldata name, string calldata delim, bytes32[] calldata defaultValue)
2194 external view
2195 returns (bytes32[] memory value);
2196 /// Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`.
2197 /// Reverts if the variable could not be parsed.
2198 /// Returns `defaultValue` if the variable was not found.
2199 #[cheatcode(group = Environment)]
2200 function envOr(string calldata name, string calldata delim, string[] calldata defaultValue)
2201 external view
2202 returns (string[] memory value);
2203 /// Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`.
2204 /// Reverts if the variable could not be parsed.
2205 /// Returns `defaultValue` if the variable was not found.
2206 #[cheatcode(group = Environment)]
2207 function envOr(string calldata name, string calldata delim, bytes[] calldata defaultValue)
2208 external view
2209 returns (bytes[] memory value);
2210
2211 /// Returns true if `forge` command was executed in given context.
2212 #[cheatcode(group = Environment)]
2213 function isContext(ForgeContext context) external view returns (bool result);
2214
2215 // ======== Scripts ========
2216 // -------- Broadcasting Transactions --------
2217
2218 /// Has the next call (at this call depth only) create transactions that can later be signed and sent onchain.
2219 ///
2220 /// Broadcasting address is determined by checking the following in order:
2221 /// 1. If `--sender` argument was provided, that address is used.
2222 /// 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used.
2223 /// 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used.
2224 #[cheatcode(group = Scripting)]
2225 function broadcast() external;
2226
2227 /// Has the next call (at this call depth only) create a transaction with the address provided
2228 /// as the sender that can later be signed and sent onchain.
2229 #[cheatcode(group = Scripting)]
2230 function broadcast(address signer) external;
2231
2232 /// Has the next call (at this call depth only) create a transaction with the private key
2233 /// provided as the sender that can later be signed and sent onchain.
2234 #[cheatcode(group = Scripting)]
2235 function broadcast(uint256 privateKey) external;
2236
2237 /// Has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain.
2238 ///
2239 /// Broadcasting address is determined by checking the following in order:
2240 /// 1. If `--sender` argument was provided, that address is used.
2241 /// 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used.
2242 /// 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used.
2243 #[cheatcode(group = Scripting)]
2244 function startBroadcast() external;
2245
2246 /// Has all subsequent calls (at this call depth only) create transactions with the address
2247 /// provided that can later be signed and sent onchain.
2248 #[cheatcode(group = Scripting)]
2249 function startBroadcast(address signer) external;
2250
2251 /// Has all subsequent calls (at this call depth only) create transactions with the private key
2252 /// provided that can later be signed and sent onchain.
2253 #[cheatcode(group = Scripting)]
2254 function startBroadcast(uint256 privateKey) external;
2255
2256 /// Stops collecting onchain transactions.
2257 #[cheatcode(group = Scripting)]
2258 function stopBroadcast() external;
2259
2260 /// Takes a signed transaction and broadcasts it to the network.
2261 #[cheatcode(group = Scripting)]
2262 function broadcastRawTransaction(bytes calldata data) external;
2263
2264 /// Sign an EIP-7702 authorization for delegation
2265 #[cheatcode(group = Scripting)]
2266 function signDelegation(address implementation, uint256 privateKey) external returns (SignedDelegation memory signedDelegation);
2267
2268 /// Sign an EIP-7702 authorization for delegation for specific nonce
2269 #[cheatcode(group = Scripting)]
2270 function signDelegation(address implementation, uint256 privateKey, uint64 nonce) external returns (SignedDelegation memory signedDelegation);
2271
2272 /// Sign an EIP-7702 authorization for delegation, with optional cross-chain validity.
2273 #[cheatcode(group = Scripting)]
2274 function signDelegation(address implementation, uint256 privateKey, bool crossChain) external returns (SignedDelegation memory signedDelegation);
2275
2276 /// Designate the next call as an EIP-7702 transaction
2277 #[cheatcode(group = Scripting)]
2278 function attachDelegation(SignedDelegation calldata signedDelegation) external;
2279
2280 /// Designate the next call as an EIP-7702 transaction, with optional cross-chain validity.
2281 #[cheatcode(group = Scripting)]
2282 function attachDelegation(SignedDelegation calldata signedDelegation, bool crossChain) external;
2283
2284 /// Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction
2285 #[cheatcode(group = Scripting)]
2286 function signAndAttachDelegation(address implementation, uint256 privateKey) external returns (SignedDelegation memory signedDelegation);
2287
2288 /// Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction for specific nonce
2289 #[cheatcode(group = Scripting)]
2290 function signAndAttachDelegation(address implementation, uint256 privateKey, uint64 nonce) external returns (SignedDelegation memory signedDelegation);
2291
2292 /// Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction, with optional cross-chain validity.
2293 #[cheatcode(group = Scripting)]
2294 function signAndAttachDelegation(address implementation, uint256 privateKey, bool crossChain) external returns (SignedDelegation memory signedDelegation);
2295
2296 /// Attach an EIP-4844 blob to the next call
2297 #[cheatcode(group = Scripting)]
2298 function attachBlob(bytes calldata blob) external;
2299
2300 /// Returns addresses of available unlocked wallets in the script environment.
2301 #[cheatcode(group = Scripting)]
2302 function getWallets() external view returns (address[] memory wallets);
2303
2304 // ======== Utilities ========
2305
2306 // -------- Strings --------
2307
2308 /// Converts the given value to a `string`.
2309 #[cheatcode(group = String)]
2310 function toString(address value) external pure returns (string memory stringifiedValue);
2311 /// Converts the given value to a `string`.
2312 #[cheatcode(group = String)]
2313 function toString(bytes calldata value) external pure returns (string memory stringifiedValue);
2314 /// Converts the given value to a `string`.
2315 #[cheatcode(group = String)]
2316 function toString(bytes32 value) external pure returns (string memory stringifiedValue);
2317 /// Converts the given value to a `string`.
2318 #[cheatcode(group = String)]
2319 function toString(bool value) external pure returns (string memory stringifiedValue);
2320 /// Converts the given value to a `string`.
2321 #[cheatcode(group = String)]
2322 function toString(uint256 value) external pure returns (string memory stringifiedValue);
2323 /// Converts the given value to a `string`.
2324 #[cheatcode(group = String)]
2325 function toString(int256 value) external pure returns (string memory stringifiedValue);
2326
2327 /// Parses the given `string` into `bytes`.
2328 #[cheatcode(group = String)]
2329 function parseBytes(string calldata stringifiedValue) external pure returns (bytes memory parsedValue);
2330 /// Parses the given `string` into an `address`.
2331 #[cheatcode(group = String)]
2332 function parseAddress(string calldata stringifiedValue) external pure returns (address parsedValue);
2333 /// Parses the given `string` into a `uint256`.
2334 #[cheatcode(group = String)]
2335 function parseUint(string calldata stringifiedValue) external pure returns (uint256 parsedValue);
2336 /// Parses the given `string` into a `int256`.
2337 #[cheatcode(group = String)]
2338 function parseInt(string calldata stringifiedValue) external pure returns (int256 parsedValue);
2339 /// Parses the given `string` into a `bytes32`.
2340 #[cheatcode(group = String)]
2341 function parseBytes32(string calldata stringifiedValue) external pure returns (bytes32 parsedValue);
2342 /// Parses the given `string` into a `bool`.
2343 #[cheatcode(group = String)]
2344 function parseBool(string calldata stringifiedValue) external pure returns (bool parsedValue);
2345
2346 /// Converts the given `string` value to Lowercase.
2347 #[cheatcode(group = String)]
2348 function toLowercase(string calldata input) external pure returns (string memory output);
2349 /// Converts the given `string` value to Uppercase.
2350 #[cheatcode(group = String)]
2351 function toUppercase(string calldata input) external pure returns (string memory output);
2352 /// Trims leading and trailing whitespace from the given `string` value.
2353 #[cheatcode(group = String)]
2354 function trim(string calldata input) external pure returns (string memory output);
2355 /// Replaces occurrences of `from` in the given `string` with `to`.
2356 #[cheatcode(group = String)]
2357 function replace(string calldata input, string calldata from, string calldata to) external pure returns (string memory output);
2358 /// Splits the given `string` into an array of strings divided by the `delimiter`.
2359 #[cheatcode(group = String)]
2360 function split(string calldata input, string calldata delimiter) external pure returns (string[] memory outputs);
2361 /// Returns the index of the first occurrence of a `key` in an `input` string.
2362 /// Returns `NOT_FOUND` (i.e. `type(uint256).max`) if the `key` is not found.
2363 /// Returns 0 in case of an empty `key`.
2364 #[cheatcode(group = String)]
2365 function indexOf(string calldata input, string calldata key) external pure returns (uint256);
2366 /// Returns true if `search` is found in `subject`, false otherwise.
2367 #[cheatcode(group = String)]
2368 function contains(string calldata subject, string calldata search) external pure returns (bool result);
2369
2370 // ======== JSON Parsing and Manipulation ========
2371
2372 // -------- Reading --------
2373
2374 // NOTE: Please read https://book.getfoundry.sh/cheatcodes/parse-json to understand the
2375 // limitations and caveats of the JSON parsing cheats.
2376
2377 /// Checks if `key` exists in a JSON object
2378 /// `keyExists` is being deprecated in favor of `keyExistsJson`. It will be removed in future versions.
2379 #[cheatcode(group = Json, status = Deprecated(Some("replaced by `keyExistsJson`")))]
2380 function keyExists(string calldata json, string calldata key) external view returns (bool);
2381 /// Checks if `key` exists in a JSON object.
2382 #[cheatcode(group = Json)]
2383 function keyExistsJson(string calldata json, string calldata key) external view returns (bool);
2384
2385 /// ABI-encodes a JSON object.
2386 #[cheatcode(group = Json)]
2387 function parseJson(string calldata json) external pure returns (bytes memory abiEncodedData);
2388 /// ABI-encodes a JSON object at `key`.
2389 #[cheatcode(group = Json)]
2390 function parseJson(string calldata json, string calldata key) external pure returns (bytes memory abiEncodedData);
2391
2392 // The following parseJson cheatcodes will do type coercion, for the type that they indicate.
2393 // For example, parseJsonUint will coerce all values to a uint256. That includes stringified numbers '12.'
2394 // and hex numbers '0xEF.'.
2395 // Type coercion works ONLY for discrete values or arrays. That means that the key must return a value or array, not
2396 // a JSON object.
2397
2398 /// Parses a string of JSON data at `key` and coerces it to `uint256`.
2399 #[cheatcode(group = Json)]
2400 function parseJsonUint(string calldata json, string calldata key) external pure returns (uint256);
2401 /// Parses a string of JSON data at `key` and coerces it to `uint256[]`.
2402 #[cheatcode(group = Json)]
2403 function parseJsonUintArray(string calldata json, string calldata key) external pure returns (uint256[] memory);
2404 /// Parses a string of JSON data at `key` and coerces it to `int256`.
2405 #[cheatcode(group = Json)]
2406 function parseJsonInt(string calldata json, string calldata key) external pure returns (int256);
2407 /// Parses a string of JSON data at `key` and coerces it to `int256[]`.
2408 #[cheatcode(group = Json)]
2409 function parseJsonIntArray(string calldata json, string calldata key) external pure returns (int256[] memory);
2410 /// Parses a string of JSON data at `key` and coerces it to `bool`.
2411 #[cheatcode(group = Json)]
2412 function parseJsonBool(string calldata json, string calldata key) external pure returns (bool);
2413 /// Parses a string of JSON data at `key` and coerces it to `bool[]`.
2414 #[cheatcode(group = Json)]
2415 function parseJsonBoolArray(string calldata json, string calldata key) external pure returns (bool[] memory);
2416 /// Parses a string of JSON data at `key` and coerces it to `address`.
2417 #[cheatcode(group = Json)]
2418 function parseJsonAddress(string calldata json, string calldata key) external pure returns (address);
2419 /// Parses a string of JSON data at `key` and coerces it to `address[]`.
2420 #[cheatcode(group = Json)]
2421 function parseJsonAddressArray(string calldata json, string calldata key)
2422 external
2423 pure
2424 returns (address[] memory);
2425 /// Parses a string of JSON data at `key` and coerces it to `string`.
2426 #[cheatcode(group = Json)]
2427 function parseJsonString(string calldata json, string calldata key) external pure returns (string memory);
2428 /// Parses a string of JSON data at `key` and coerces it to `string[]`.
2429 #[cheatcode(group = Json)]
2430 function parseJsonStringArray(string calldata json, string calldata key) external pure returns (string[] memory);
2431 /// Parses a string of JSON data at `key` and coerces it to `bytes`.
2432 #[cheatcode(group = Json)]
2433 function parseJsonBytes(string calldata json, string calldata key) external pure returns (bytes memory);
2434 /// Parses a string of JSON data at `key` and coerces it to `bytes[]`.
2435 #[cheatcode(group = Json)]
2436 function parseJsonBytesArray(string calldata json, string calldata key) external pure returns (bytes[] memory);
2437 /// Parses a string of JSON data at `key` and coerces it to `bytes32`.
2438 #[cheatcode(group = Json)]
2439 function parseJsonBytes32(string calldata json, string calldata key) external pure returns (bytes32);
2440 /// Parses a string of JSON data at `key` and coerces it to `bytes32[]`.
2441 #[cheatcode(group = Json)]
2442 function parseJsonBytes32Array(string calldata json, string calldata key)
2443 external
2444 pure
2445 returns (bytes32[] memory);
2446
2447 /// Parses a string of JSON data and coerces it to type corresponding to `typeDescription`.
2448 #[cheatcode(group = Json)]
2449 function parseJsonType(string calldata json, string calldata typeDescription) external pure returns (bytes memory);
2450 /// Parses a string of JSON data at `key` and coerces it to type corresponding to `typeDescription`.
2451 #[cheatcode(group = Json)]
2452 function parseJsonType(string calldata json, string calldata key, string calldata typeDescription) external pure returns (bytes memory);
2453 /// Parses a string of JSON data at `key` and coerces it to type array corresponding to `typeDescription`.
2454 #[cheatcode(group = Json)]
2455 function parseJsonTypeArray(string calldata json, string calldata key, string calldata typeDescription)
2456 external
2457 pure
2458 returns (bytes memory);
2459
2460 /// Returns an array of all the keys in a JSON object.
2461 #[cheatcode(group = Json)]
2462 function parseJsonKeys(string calldata json, string calldata key) external pure returns (string[] memory keys);
2463
2464 // -------- Writing --------
2465
2466 // NOTE: Please read https://book.getfoundry.sh/cheatcodes/serialize-json to understand how
2467 // to use the serialization cheats.
2468
2469 /// Serializes a key and value to a JSON object stored in-memory that can be later written to a file.
2470 /// Returns the stringified version of the specific JSON file up to that moment.
2471 #[cheatcode(group = Json)]
2472 function serializeJson(string calldata objectKey, string calldata value) external returns (string memory json);
2473
2474 /// See `serializeJson`.
2475 #[cheatcode(group = Json)]
2476 function serializeBool(string calldata objectKey, string calldata valueKey, bool value)
2477 external
2478 returns (string memory json);
2479 /// See `serializeJson`.
2480 #[cheatcode(group = Json)]
2481 function serializeUint(string calldata objectKey, string calldata valueKey, uint256 value)
2482 external
2483 returns (string memory json);
2484 /// See `serializeJson`.
2485 #[cheatcode(group = Json)]
2486 function serializeUintToHex(string calldata objectKey, string calldata valueKey, uint256 value)
2487 external
2488 returns (string memory json);
2489 /// See `serializeJson`.
2490 #[cheatcode(group = Json)]
2491 function serializeInt(string calldata objectKey, string calldata valueKey, int256 value)
2492 external
2493 returns (string memory json);
2494 /// See `serializeJson`.
2495 #[cheatcode(group = Json)]
2496 function serializeAddress(string calldata objectKey, string calldata valueKey, address value)
2497 external
2498 returns (string memory json);
2499 /// See `serializeJson`.
2500 #[cheatcode(group = Json)]
2501 function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32 value)
2502 external
2503 returns (string memory json);
2504 /// See `serializeJson`.
2505 #[cheatcode(group = Json)]
2506 function serializeString(string calldata objectKey, string calldata valueKey, string calldata value)
2507 external
2508 returns (string memory json);
2509 /// See `serializeJson`.
2510 #[cheatcode(group = Json)]
2511 function serializeBytes(string calldata objectKey, string calldata valueKey, bytes calldata value)
2512 external
2513 returns (string memory json);
2514
2515 /// See `serializeJson`.
2516 #[cheatcode(group = Json)]
2517 function serializeBool(string calldata objectKey, string calldata valueKey, bool[] calldata values)
2518 external
2519 returns (string memory json);
2520 /// See `serializeJson`.
2521 #[cheatcode(group = Json)]
2522 function serializeUint(string calldata objectKey, string calldata valueKey, uint256[] calldata values)
2523 external
2524 returns (string memory json);
2525 /// See `serializeJson`.
2526 #[cheatcode(group = Json)]
2527 function serializeInt(string calldata objectKey, string calldata valueKey, int256[] calldata values)
2528 external
2529 returns (string memory json);
2530 /// See `serializeJson`.
2531 #[cheatcode(group = Json)]
2532 function serializeAddress(string calldata objectKey, string calldata valueKey, address[] calldata values)
2533 external
2534 returns (string memory json);
2535 /// See `serializeJson`.
2536 #[cheatcode(group = Json)]
2537 function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32[] calldata values)
2538 external
2539 returns (string memory json);
2540 /// See `serializeJson`.
2541 #[cheatcode(group = Json)]
2542 function serializeString(string calldata objectKey, string calldata valueKey, string[] calldata values)
2543 external
2544 returns (string memory json);
2545 /// See `serializeJson`.
2546 #[cheatcode(group = Json)]
2547 function serializeBytes(string calldata objectKey, string calldata valueKey, bytes[] calldata values)
2548 external
2549 returns (string memory json);
2550 /// See `serializeJson`.
2551 #[cheatcode(group = Json)]
2552 function serializeJsonType(string calldata typeDescription, bytes calldata value)
2553 external
2554 pure
2555 returns (string memory json);
2556 /// See `serializeJson`.
2557 #[cheatcode(group = Json)]
2558 function serializeJsonType(string calldata objectKey, string calldata valueKey, string calldata typeDescription, bytes calldata value)
2559 external
2560 returns (string memory json);
2561
2562 // NOTE: Please read https://book.getfoundry.sh/cheatcodes/write-json to understand how
2563 // to use the JSON writing cheats.
2564
2565 /// Write a serialized JSON object to a file. If the file exists, it will be overwritten.
2566 #[cheatcode(group = Json)]
2567 function writeJson(string calldata json, string calldata path) external;
2568
2569 /// Write a serialized JSON object to an **existing** JSON file, replacing a value with key = <value_key.>
2570 /// This is useful to replace a specific value of a JSON file, without having to parse the entire thing.
2571 /// This cheatcode will create new keys if they didn't previously exist.
2572 #[cheatcode(group = Json)]
2573 function writeJson(string calldata json, string calldata path, string calldata valueKey) external;
2574
2575 // ======== TOML Parsing and Manipulation ========
2576
2577 // -------- Reading --------
2578
2579 // NOTE: Please read https://book.getfoundry.sh/cheatcodes/parse-toml to understand the
2580 // limitations and caveats of the TOML parsing cheat.
2581
2582 /// Checks if `key` exists in a TOML table.
2583 #[cheatcode(group = Toml)]
2584 function keyExistsToml(string calldata toml, string calldata key) external view returns (bool);
2585
2586 /// ABI-encodes a TOML table.
2587 #[cheatcode(group = Toml)]
2588 function parseToml(string calldata toml) external pure returns (bytes memory abiEncodedData);
2589
2590 /// ABI-encodes a TOML table at `key`.
2591 #[cheatcode(group = Toml)]
2592 function parseToml(string calldata toml, string calldata key) external pure returns (bytes memory abiEncodedData);
2593
2594 // The following parseToml cheatcodes will do type coercion, for the type that they indicate.
2595 // For example, parseTomlUint will coerce all values to a uint256. That includes stringified numbers '12.'
2596 // and hex numbers '0xEF.'.
2597 // Type coercion works ONLY for discrete values or arrays. That means that the key must return a value or array, not
2598 // a TOML table.
2599
2600 /// Parses a string of TOML data at `key` and coerces it to `uint256`.
2601 #[cheatcode(group = Toml)]
2602 function parseTomlUint(string calldata toml, string calldata key) external pure returns (uint256);
2603 /// Parses a string of TOML data at `key` and coerces it to `uint256[]`.
2604 #[cheatcode(group = Toml)]
2605 function parseTomlUintArray(string calldata toml, string calldata key) external pure returns (uint256[] memory);
2606 /// Parses a string of TOML data at `key` and coerces it to `int256`.
2607 #[cheatcode(group = Toml)]
2608 function parseTomlInt(string calldata toml, string calldata key) external pure returns (int256);
2609 /// Parses a string of TOML data at `key` and coerces it to `int256[]`.
2610 #[cheatcode(group = Toml)]
2611 function parseTomlIntArray(string calldata toml, string calldata key) external pure returns (int256[] memory);
2612 /// Parses a string of TOML data at `key` and coerces it to `bool`.
2613 #[cheatcode(group = Toml)]
2614 function parseTomlBool(string calldata toml, string calldata key) external pure returns (bool);
2615 /// Parses a string of TOML data at `key` and coerces it to `bool[]`.
2616 #[cheatcode(group = Toml)]
2617 function parseTomlBoolArray(string calldata toml, string calldata key) external pure returns (bool[] memory);
2618 /// Parses a string of TOML data at `key` and coerces it to `address`.
2619 #[cheatcode(group = Toml)]
2620 function parseTomlAddress(string calldata toml, string calldata key) external pure returns (address);
2621 /// Parses a string of TOML data at `key` and coerces it to `address[]`.
2622 #[cheatcode(group = Toml)]
2623 function parseTomlAddressArray(string calldata toml, string calldata key)
2624 external
2625 pure
2626 returns (address[] memory);
2627 /// Parses a string of TOML data at `key` and coerces it to `string`.
2628 #[cheatcode(group = Toml)]
2629 function parseTomlString(string calldata toml, string calldata key) external pure returns (string memory);
2630 /// Parses a string of TOML data at `key` and coerces it to `string[]`.
2631 #[cheatcode(group = Toml)]
2632 function parseTomlStringArray(string calldata toml, string calldata key) external pure returns (string[] memory);
2633 /// Parses a string of TOML data at `key` and coerces it to `bytes`.
2634 #[cheatcode(group = Toml)]
2635 function parseTomlBytes(string calldata toml, string calldata key) external pure returns (bytes memory);
2636 /// Parses a string of TOML data at `key` and coerces it to `bytes[]`.
2637 #[cheatcode(group = Toml)]
2638 function parseTomlBytesArray(string calldata toml, string calldata key) external pure returns (bytes[] memory);
2639 /// Parses a string of TOML data at `key` and coerces it to `bytes32`.
2640 #[cheatcode(group = Toml)]
2641 function parseTomlBytes32(string calldata toml, string calldata key) external pure returns (bytes32);
2642 /// Parses a string of TOML data at `key` and coerces it to `bytes32[]`.
2643 #[cheatcode(group = Toml)]
2644 function parseTomlBytes32Array(string calldata toml, string calldata key)
2645 external
2646 pure
2647 returns (bytes32[] memory);
2648
2649 /// Parses a string of TOML data and coerces it to type corresponding to `typeDescription`.
2650 #[cheatcode(group = Toml)]
2651 function parseTomlType(string calldata toml, string calldata typeDescription) external pure returns (bytes memory);
2652 /// Parses a string of TOML data at `key` and coerces it to type corresponding to `typeDescription`.
2653 #[cheatcode(group = Toml)]
2654 function parseTomlType(string calldata toml, string calldata key, string calldata typeDescription) external pure returns (bytes memory);
2655 /// Parses a string of TOML data at `key` and coerces it to type array corresponding to `typeDescription`.
2656 #[cheatcode(group = Toml)]
2657 function parseTomlTypeArray(string calldata toml, string calldata key, string calldata typeDescription)
2658 external
2659 pure
2660 returns (bytes memory);
2661
2662 /// Returns an array of all the keys in a TOML table.
2663 #[cheatcode(group = Toml)]
2664 function parseTomlKeys(string calldata toml, string calldata key) external pure returns (string[] memory keys);
2665
2666 // -------- Writing --------
2667
2668 // NOTE: Please read https://book.getfoundry.sh/cheatcodes/write-toml to understand how
2669 // to use the TOML writing cheat.
2670
2671 /// Takes serialized JSON, converts to TOML and write a serialized TOML to a file.
2672 #[cheatcode(group = Toml)]
2673 function writeToml(string calldata json, string calldata path) external;
2674
2675 /// Takes serialized JSON, converts to TOML and write a serialized TOML table to an **existing** TOML file, replacing a value with key = <value_key.>
2676 /// This is useful to replace a specific value of a TOML file, without having to parse the entire thing.
2677 /// This cheatcode will create new keys if they didn't previously exist.
2678 #[cheatcode(group = Toml)]
2679 function writeToml(string calldata json, string calldata path, string calldata valueKey) external;
2680
2681 // ======== Cryptography ========
2682
2683 // -------- Key Management --------
2684
2685 /// Derives a private key from the name, labels the account with that name, and returns the wallet.
2686 #[cheatcode(group = Crypto)]
2687 function createWallet(string calldata walletLabel) external returns (Wallet memory wallet);
2688
2689 /// Generates a wallet from the private key and returns the wallet.
2690 #[cheatcode(group = Crypto)]
2691 function createWallet(uint256 privateKey) external returns (Wallet memory wallet);
2692
2693 /// Generates a wallet from the private key, labels the account with that name, and returns the wallet.
2694 #[cheatcode(group = Crypto)]
2695 function createWallet(uint256 privateKey, string calldata walletLabel) external returns (Wallet memory wallet);
2696
2697 /// Signs data with a `Wallet`.
2698 #[cheatcode(group = Crypto)]
2699 function sign(Wallet calldata wallet, bytes32 digest) external returns (uint8 v, bytes32 r, bytes32 s);
2700
2701 /// Signs data with a `Wallet`.
2702 ///
2703 /// Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the
2704 /// signature's `s` value, and the recovery id `v` in a single bytes32.
2705 /// This format reduces the signature size from 65 to 64 bytes.
2706 #[cheatcode(group = Crypto)]
2707 function signCompact(Wallet calldata wallet, bytes32 digest) external returns (bytes32 r, bytes32 vs);
2708
2709 /// Signs `digest` with `privateKey` using the secp256k1 curve.
2710 #[cheatcode(group = Crypto)]
2711 function sign(uint256 privateKey, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s);
2712
2713 /// Signs `digest` with `privateKey` on the secp256k1 curve, using the given `nonce`
2714 /// as the raw ephemeral k value in ECDSA (instead of deriving it deterministically).
2715 #[cheatcode(group = Crypto)]
2716 function signWithNonceUnsafe(uint256 privateKey, bytes32 digest, uint256 nonce) external pure returns (uint8 v, bytes32 r, bytes32 s);
2717
2718 /// Signs `digest` with `privateKey` using the secp256k1 curve.
2719 ///
2720 /// Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the
2721 /// signature's `s` value, and the recovery id `v` in a single bytes32.
2722 /// This format reduces the signature size from 65 to 64 bytes.
2723 #[cheatcode(group = Crypto)]
2724 function signCompact(uint256 privateKey, bytes32 digest) external pure returns (bytes32 r, bytes32 vs);
2725
2726 /// Signs `digest` with signer provided to script using the secp256k1 curve.
2727 ///
2728 /// If `--sender` is provided, the signer with provided address is used, otherwise,
2729 /// if exactly one signer is provided to the script, that signer is used.
2730 ///
2731 /// Raises error if signer passed through `--sender` does not match any unlocked signers or
2732 /// if `--sender` is not provided and not exactly one signer is passed to the script.
2733 #[cheatcode(group = Crypto)]
2734 function sign(bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s);
2735
2736 /// Signs `digest` with signer provided to script using the secp256k1 curve.
2737 ///
2738 /// Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the
2739 /// signature's `s` value, and the recovery id `v` in a single bytes32.
2740 /// This format reduces the signature size from 65 to 64 bytes.
2741 ///
2742 /// If `--sender` is provided, the signer with provided address is used, otherwise,
2743 /// if exactly one signer is provided to the script, that signer is used.
2744 ///
2745 /// Raises error if signer passed through `--sender` does not match any unlocked signers or
2746 /// if `--sender` is not provided and not exactly one signer is passed to the script.
2747 #[cheatcode(group = Crypto)]
2748 function signCompact(bytes32 digest) external pure returns (bytes32 r, bytes32 vs);
2749
2750 /// Signs `digest` with signer provided to script using the secp256k1 curve.
2751 ///
2752 /// Raises error if none of the signers passed into the script have provided address.
2753 #[cheatcode(group = Crypto)]
2754 function sign(address signer, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s);
2755
2756 /// Signs `digest` with signer provided to script using the secp256k1 curve.
2757 ///
2758 /// Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the
2759 /// signature's `s` value, and the recovery id `v` in a single bytes32.
2760 /// This format reduces the signature size from 65 to 64 bytes.
2761 ///
2762 /// Raises error if none of the signers passed into the script have provided address.
2763 #[cheatcode(group = Crypto)]
2764 function signCompact(address signer, bytes32 digest) external pure returns (bytes32 r, bytes32 vs);
2765
2766 /// Signs `digest` with `privateKey` using the secp256r1 curve.
2767 #[cheatcode(group = Crypto)]
2768 function signP256(uint256 privateKey, bytes32 digest) external pure returns (bytes32 r, bytes32 s);
2769
2770 /// Derives secp256r1 public key from the provided `privateKey`.
2771 #[cheatcode(group = Crypto)]
2772 function publicKeyP256(uint256 privateKey) external pure returns (uint256 publicKeyX, uint256 publicKeyY);
2773
2774 /// Derive a private key from a provided mnemonic string (or mnemonic file path)
2775 /// at the derivation path `m/44'/60'/0'/0/{index}`.
2776 #[cheatcode(group = Crypto)]
2777 function deriveKey(string calldata mnemonic, uint32 index) external pure returns (uint256 privateKey);
2778 /// Derive a private key from a provided mnemonic string (or mnemonic file path)
2779 /// at `{derivationPath}{index}`.
2780 #[cheatcode(group = Crypto)]
2781 function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index)
2782 external
2783 pure
2784 returns (uint256 privateKey);
2785 /// Derive a private key from a provided mnemonic string (or mnemonic file path) in the specified language
2786 /// at the derivation path `m/44'/60'/0'/0/{index}`.
2787 #[cheatcode(group = Crypto)]
2788 function deriveKey(string calldata mnemonic, uint32 index, string calldata language)
2789 external
2790 pure
2791 returns (uint256 privateKey);
2792 /// Derive a private key from a provided mnemonic string (or mnemonic file path) in the specified language
2793 /// at `{derivationPath}{index}`.
2794 #[cheatcode(group = Crypto)]
2795 function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index, string calldata language)
2796 external
2797 pure
2798 returns (uint256 privateKey);
2799
2800 /// Adds a private key to the local forge wallet and returns the address.
2801 #[cheatcode(group = Crypto)]
2802 function rememberKey(uint256 privateKey) external returns (address keyAddr);
2803
2804 /// Derive a set number of wallets from a mnemonic at the derivation path `m/44'/60'/0'/0/{0..count}`.
2805 ///
2806 /// The respective private keys are saved to the local forge wallet for later use and their addresses are returned.
2807 #[cheatcode(group = Crypto)]
2808 function rememberKeys(string calldata mnemonic, string calldata derivationPath, uint32 count) external returns (address[] memory keyAddrs);
2809
2810 /// Derive a set number of wallets from a mnemonic in the specified language at the derivation path `m/44'/60'/0'/0/{0..count}`.
2811 ///
2812 /// The respective private keys are saved to the local forge wallet for later use and their addresses are returned.
2813 #[cheatcode(group = Crypto)]
2814 function rememberKeys(string calldata mnemonic, string calldata derivationPath, string calldata language, uint32 count)
2815 external
2816 returns (address[] memory keyAddrs);
2817
2818 // -------- Uncategorized Utilities --------
2819
2820 /// Labels an address in call traces.
2821 #[cheatcode(group = Utilities)]
2822 function label(address account, string calldata newLabel) external;
2823
2824 /// Gets the label for the specified address.
2825 #[cheatcode(group = Utilities)]
2826 function getLabel(address account) external view returns (string memory currentLabel);
2827
2828 /// Compute the address a contract will be deployed at for a given deployer address and nonce.
2829 #[cheatcode(group = Utilities)]
2830 function computeCreateAddress(address deployer, uint256 nonce) external pure returns (address);
2831
2832 /// Compute the address of a contract created with CREATE2 using the given CREATE2 deployer.
2833 #[cheatcode(group = Utilities)]
2834 function computeCreate2Address(bytes32 salt, bytes32 initCodeHash, address deployer) external pure returns (address);
2835
2836 /// Compute the address of a contract created with CREATE2 using the default CREATE2 deployer.
2837 #[cheatcode(group = Utilities)]
2838 function computeCreate2Address(bytes32 salt, bytes32 initCodeHash) external pure returns (address);
2839
2840 /// Encodes a `bytes` value to a base64 string.
2841 #[cheatcode(group = Utilities)]
2842 function toBase64(bytes calldata data) external pure returns (string memory);
2843
2844 /// Encodes a `string` value to a base64 string.
2845 #[cheatcode(group = Utilities)]
2846 function toBase64(string calldata data) external pure returns (string memory);
2847
2848 /// Encodes a `bytes` value to a base64url string.
2849 #[cheatcode(group = Utilities)]
2850 function toBase64URL(bytes calldata data) external pure returns (string memory);
2851
2852 /// Encodes a `string` value to a base64url string.
2853 #[cheatcode(group = Utilities)]
2854 function toBase64URL(string calldata data) external pure returns (string memory);
2855
2856 /// Returns ENS namehash for provided string.
2857 #[cheatcode(group = Utilities)]
2858 function ensNamehash(string calldata name) external pure returns (bytes32);
2859
2860 /// Returns an uint256 value bounded in given range and different from the current one.
2861 #[cheatcode(group = Utilities)]
2862 function bound(uint256 current, uint256 min, uint256 max) external view returns (uint256);
2863
2864 /// Returns a random uint256 value.
2865 #[cheatcode(group = Utilities)]
2866 function randomUint() external view returns (uint256);
2867
2868 /// Returns random uint256 value between the provided range (=min..=max).
2869 #[cheatcode(group = Utilities)]
2870 function randomUint(uint256 min, uint256 max) external view returns (uint256);
2871
2872 /// Returns a random `uint256` value of given bits.
2873 #[cheatcode(group = Utilities)]
2874 function randomUint(uint256 bits) external view returns (uint256);
2875
2876 /// Returns a random `address`.
2877 #[cheatcode(group = Utilities)]
2878 function randomAddress() external view returns (address);
2879
2880 /// Returns an int256 value bounded in given range and different from the current one.
2881 #[cheatcode(group = Utilities)]
2882 function bound(int256 current, int256 min, int256 max) external view returns (int256);
2883
2884 /// Returns a random `int256` value.
2885 #[cheatcode(group = Utilities)]
2886 function randomInt() external view returns (int256);
2887
2888 /// Returns a random `int256` value of given bits.
2889 #[cheatcode(group = Utilities)]
2890 function randomInt(uint256 bits) external view returns (int256);
2891
2892 /// Returns a random `bool`.
2893 #[cheatcode(group = Utilities)]
2894 function randomBool() external view returns (bool);
2895
2896 /// Returns a random byte array value of the given length.
2897 #[cheatcode(group = Utilities)]
2898 function randomBytes(uint256 len) external view returns (bytes memory);
2899
2900 /// Returns a random fixed-size byte array of length 4.
2901 #[cheatcode(group = Utilities)]
2902 function randomBytes4() external view returns (bytes4);
2903
2904 /// Returns a random fixed-size byte array of length 8.
2905 #[cheatcode(group = Utilities)]
2906 function randomBytes8() external view returns (bytes8);
2907
2908 /// Pauses collection of call traces. Useful in cases when you want to skip tracing of
2909 /// complex calls which are not useful for debugging.
2910 #[cheatcode(group = Utilities)]
2911 function pauseTracing() external view;
2912
2913 /// Unpauses collection of call traces.
2914 #[cheatcode(group = Utilities)]
2915 function resumeTracing() external view;
2916
2917 /// Utility cheatcode to copy storage of `from` contract to another `to` contract.
2918 #[cheatcode(group = Utilities)]
2919 function copyStorage(address from, address to) external;
2920
2921 /// Utility cheatcode to set arbitrary storage for given target address.
2922 #[cheatcode(group = Utilities)]
2923 function setArbitraryStorage(address target) external;
2924
2925 /// Utility cheatcode to set arbitrary storage for given target address and overwrite
2926 /// any storage slots that have been previously set.
2927 #[cheatcode(group = Utilities)]
2928 function setArbitraryStorage(address target, bool overwrite) external;
2929
2930 /// Sorts an array in ascending order.
2931 #[cheatcode(group = Utilities)]
2932 function sort(uint256[] calldata array) external returns (uint256[] memory);
2933
2934 /// Randomly shuffles an array.
2935 #[cheatcode(group = Utilities)]
2936 function shuffle(uint256[] calldata array) external returns (uint256[] memory);
2937
2938 /// Set RNG seed.
2939 #[cheatcode(group = Utilities)]
2940 function setSeed(uint256 seed) external;
2941
2942 /// Causes the next contract creation (via new) to fail and return its initcode in the returndata buffer.
2943 /// This allows type-safe access to the initcode payload that would be used for contract creation.
2944 /// Example usage:
2945 /// vm.interceptInitcode();
2946 /// bytes memory initcode;
2947 /// try new MyContract(param1, param2) { assert(false); }
2948 /// catch (bytes memory interceptedInitcode) { initcode = interceptedInitcode; }
2949 #[cheatcode(group = Utilities, safety = Unsafe)]
2950 function interceptInitcode() external;
2951
2952 /// Generates the hash of the canonical EIP-712 type representation.
2953 ///
2954 /// Supports 2 different inputs:
2955 /// 1. Name of the type (i.e. "Transaction"):
2956 /// * requires previous binding generation with `forge bind-json`.
2957 /// * bindings will be retrieved from the path configured in `foundry.toml`.
2958 ///
2959 /// 2. String representation of the type (i.e. "Foo(Bar bar) Bar(uint256 baz)").
2960 /// * Note: the cheatcode will output the canonical type even if the input is malformated
2961 /// with the wrong order of elements or with extra whitespaces.
2962 #[cheatcode(group = Utilities)]
2963 function eip712HashType(string calldata typeNameOrDefinition) external pure returns (bytes32 typeHash);
2964
2965 /// Generates the hash of the canonical EIP-712 type representation.
2966 /// Requires previous binding generation with `forge bind-json`.
2967 ///
2968 /// Params:
2969 /// * `bindingsPath`: path where the output of `forge bind-json` is stored.
2970 /// * `typeName`: Name of the type (i.e. "Transaction").
2971 #[cheatcode(group = Utilities)]
2972 function eip712HashType(string calldata bindingsPath, string calldata typeName) external pure returns (bytes32 typeHash);
2973
2974 /// Generates the struct hash of the canonical EIP-712 type representation and its abi-encoded data.
2975 ///
2976 /// Supports 2 different inputs:
2977 /// 1. Name of the type (i.e. "PermitSingle"):
2978 /// * requires previous binding generation with `forge bind-json`.
2979 /// * bindings will be retrieved from the path configured in `foundry.toml`.
2980 ///
2981 /// 2. String representation of the type (i.e. "Foo(Bar bar) Bar(uint256 baz)").
2982 /// * Note: the cheatcode will use the canonical type even if the input is malformated
2983 /// with the wrong order of elements or with extra whitespaces.
2984 #[cheatcode(group = Utilities)]
2985 function eip712HashStruct(string calldata typeNameOrDefinition, bytes calldata abiEncodedData) external pure returns (bytes32 typeHash);
2986
2987 /// Generates the struct hash of the canonical EIP-712 type representation and its abi-encoded data.
2988 /// Requires previous binding generation with `forge bind-json`.
2989 ///
2990 /// Params:
2991 /// * `bindingsPath`: path where the output of `forge bind-json` is stored.
2992 /// * `typeName`: Name of the type (i.e. "PermitSingle").
2993 /// * `abiEncodedData`: ABI-encoded data for the struct that is being hashed.
2994 #[cheatcode(group = Utilities)]
2995 function eip712HashStruct(string calldata bindingsPath, string calldata typeName, bytes calldata abiEncodedData) external pure returns (bytes32 typeHash);
2996
2997 /// Generates a ready-to-sign digest of human-readable typed data following the EIP-712 standard.
2998 #[cheatcode(group = Utilities)]
2999 function eip712HashTypedData(string calldata jsonData) external pure returns (bytes32 digest);
3000}
3001}
3002
3003impl PartialEq for ForgeContext {
3004 // Handles test group case (any of test, coverage or snapshot)
3005 // and script group case (any of dry run, broadcast or resume).
3006 fn eq(&self, other: &Self) -> bool {
3007 match (self, other) {
3008 (_, Self::TestGroup) => {
3009 matches!(self, Self::Test | Self::Snapshot | Self::Coverage)
3010 }
3011 (_, Self::ScriptGroup) => {
3012 matches!(self, Self::ScriptDryRun | Self::ScriptBroadcast | Self::ScriptResume)
3013 }
3014 (Self::Test, Self::Test)
3015 | (Self::Snapshot, Self::Snapshot)
3016 | (Self::Coverage, Self::Coverage)
3017 | (Self::ScriptDryRun, Self::ScriptDryRun)
3018 | (Self::ScriptBroadcast, Self::ScriptBroadcast)
3019 | (Self::ScriptResume, Self::ScriptResume)
3020 | (Self::Unknown, Self::Unknown) => true,
3021 _ => false,
3022 }
3023 }
3024}
3025
3026impl fmt::Display for Vm::CheatcodeError {
3027 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3028 self.message.fmt(f)
3029 }
3030}
3031
3032impl fmt::Display for Vm::VmErrors {
3033 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3034 match self {
3035 Self::CheatcodeError(err) => err.fmt(f),
3036 }
3037 }
3038}
3039
3040#[track_caller]
3041const fn panic_unknown_safety() -> ! {
3042 panic!("cannot determine safety from the group, add a `#[cheatcode(safety = ...)]` attribute")
3043}