Git Source
Inherits:
VmSafe
The Vm
interface does allow manipulation of the EVM state. These are all intended to be used
in tests, but it is not recommended to use these cheats in scripts.
Functions
activeFork
Returns the identifier of the currently active fork. Reverts if no fork is currently active.
function activeFork() external view returns (uint256 forkId);
allowCheatcodes
In forking mode, explicitly grant the given address cheatcode access.
function allowCheatcodes(address account) external;
blobBaseFee
Sets block.blobbasefee
function blobBaseFee(uint256 newBlobBaseFee) external;
blobhashes
Sets the blobhashes in the transaction.
Not available on EVM versions before Cancun.
If used on unsupported EVM versions it will revert.
function blobhashes(bytes32[] calldata hashes) external;
chainId
Sets block.chainid
.
function chainId(uint256 newChainId) external;
clearMockedCalls
Clears all mocked calls.
function clearMockedCalls() external;
coinbase
Sets block.coinbase
.
function coinbase(address newCoinbase) external;
createFork
Creates a new fork with the given endpoint and the latest block and returns the identifier of the fork.
function createFork(string calldata urlOrAlias) external returns (uint256 forkId);
createFork
Creates a new fork with the given endpoint and block and returns the identifier of the fork.
function createFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId);
createFork
Creates a new fork with the given endpoint and at the block the given transaction was mined in,
replays all transaction mined in the block before the transaction, and returns the identifier of the fork.
function createFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId);
createSelectFork
Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork.
function createSelectFork(string calldata urlOrAlias) external returns (uint256 forkId);
createSelectFork
Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork.
function createSelectFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId);
createSelectFork
Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in,
replays all transaction mined in the block before the transaction, returns the identifier of the fork.
function createSelectFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId);
deal
Sets an address' balance.
function deal(address account, uint256 newBalance) external;
deleteSnapshot
Removes the snapshot with the given ID created by snapshot
.
Takes the snapshot ID to delete.
Returns true
if the snapshot was successfully deleted.
Returns false
if the snapshot does not exist.
function deleteSnapshot(uint256 snapshotId) external returns (bool success);
deleteSnapshots
Removes all snapshots previously created by snapshot
.
function deleteSnapshots() external;
difficulty
Sets block.difficulty
.
Not available on EVM versions from Paris onwards. Use prevrandao
instead.
Reverts if used on unsupported EVM versions.
function difficulty(uint256 newDifficulty) external;
dumpState
Dump a genesis JSON file's allocs
to disk.
function dumpState(string calldata pathToStateJson) external;
etch
Sets an address' code.
function etch(address target, bytes calldata newRuntimeBytecode) external;
fee
Sets block.basefee
.
function fee(uint256 newBasefee) external;
getBlobhashes
Gets the blockhashes from the current transaction.
Not available on EVM versions before Cancun.
If used on unsupported EVM versions it will revert.
function getBlobhashes() external view returns (bytes32[] memory hashes);
isPersistent
Returns true if the account is marked as persistent.
function isPersistent(address account) external view returns (bool persistent);
loadAllocs
Load a genesis JSON file's allocs
into the in-memory revm state.
function loadAllocs(string calldata pathToAllocsJson) external;
makePersistent
Marks that the account(s) should use persistent storage across fork swaps in a multifork setup
Meaning, changes made to the state of this account will be kept when switching forks.
function makePersistent(address account) external;
makePersistent
See makePersistent(address)
.
function makePersistent(address account0, address account1) external;
makePersistent
See makePersistent(address)
.
function makePersistent(address account0, address account1, address account2) external;
makePersistent
See makePersistent(address)
.
function makePersistent(address[] calldata accounts) external;
mockCallRevert
Reverts a call to an address with specified revert data.
function mockCallRevert(address callee, bytes calldata data, bytes calldata revertData) external;
mockCallRevert
Reverts a call to an address with a specific msg.value
, with specified revert data.
function mockCallRevert(address callee, uint256 msgValue, bytes calldata data, bytes calldata revertData) external;
mockCall
Mocks a call to an address, returning specified data.
Calldata can either be strict or a partial match, e.g. if you only
pass a Solidity selector to the expected calldata, then the entire Solidity
function will be mocked.
function mockCall(address callee, bytes calldata data, bytes calldata returnData) external;
mockCall
Mocks a call to an address with a specific msg.value
, returning specified data.
Calldata match takes precedence over msg.value
in case of ambiguity.
function mockCall(address callee, uint256 msgValue, bytes calldata data, bytes calldata returnData) external;
mockFunction
Whenever a call is made to callee
with calldata data
, this cheatcode instead calls
target
with the same calldata. This functionality is similar to a delegate call made to
target
contract from callee
.
Can be used to substitute a call to a function with another implementation that captures
the primary logic of the original function but is easier to reason about.
If calldata is not a strict match then partial match by selector is attempted.
function mockFunction(address callee, address target, bytes calldata data) external;
prank
Sets the next call's msg.sender
to be the input address.
function prank(address msgSender) external;
prank
Sets the next call's msg.sender
to be the input address, and the tx.origin
to be the second input.
function prank(address msgSender, address txOrigin) external;
prevrandao
Sets block.prevrandao
.
Not available on EVM versions before Paris. Use difficulty
instead.
If used on unsupported EVM versions it will revert.
function prevrandao(bytes32 newPrevrandao) external;
prevrandao
Sets block.prevrandao
.
Not available on EVM versions before Paris. Use difficulty
instead.
If used on unsupported EVM versions it will revert.
function prevrandao(uint256 newPrevrandao) external;
readCallers
Reads the current msg.sender
and tx.origin
from state and reports if there is any active caller modification.
function readCallers() external returns (CallerMode callerMode, address msgSender, address txOrigin);
resetNonce
Resets the nonce of an account to 0 for EOAs and 1 for contract accounts.
function resetNonce(address account) external;
revertTo
Revert the state of the EVM to a previous snapshot
Takes the snapshot ID to revert to.
Returns true
if the snapshot was successfully reverted.
Returns false
if the snapshot does not exist.
Note: This does not automatically delete the snapshot. To delete the snapshot use deleteSnapshot
.
function revertTo(uint256 snapshotId) external returns (bool success);
revertToAndDelete
Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots
Takes the snapshot ID to revert to.
Returns true
if the snapshot was successfully reverted and deleted.
Returns false
if the snapshot does not exist.
function revertToAndDelete(uint256 snapshotId) external returns (bool success);
revokePersistent
Revokes persistent status from the address, previously added via makePersistent
.
function revokePersistent(address account) external;
revokePersistent
See revokePersistent(address)
.
function revokePersistent(address[] calldata accounts) external;
roll
Sets block.height
.
function roll(uint256 newHeight) external;
rollFork
Updates the currently active fork to given block number
This is similar to roll
but for the currently active fork.
function rollFork(uint256 blockNumber) external;
rollFork
Updates the currently active fork to given transaction. This will rollFork
with the number
of the block the transaction was mined in and replays all transaction mined before it in the block.
function rollFork(bytes32 txHash) external;
rollFork
Updates the given fork to given block number.
function rollFork(uint256 forkId, uint256 blockNumber) external;
rollFork
Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block.
function rollFork(uint256 forkId, bytes32 txHash) external;
selectFork
Takes a fork identifier created by createFork
and sets the corresponding forked state as active.
function selectFork(uint256 forkId) external;
setBlockhash
Set blockhash for the current block.
It only sets the blockhash for blocks where block.number - 256 <= number < block.number
.
function setBlockhash(uint256 blockNumber, bytes32 blockHash) external;
setNonce
Sets the nonce of an account. Must be higher than the current nonce of the account.
function setNonce(address account, uint64 newNonce) external;
setNonceUnsafe
Sets the nonce of an account to an arbitrary value.
function setNonceUnsafe(address account, uint64 newNonce) external;
snapshot
Snapshot the current state of the evm.
Returns the ID of the snapshot that was created.
To revert a snapshot use revertTo
.
function snapshot() external returns (uint256 snapshotId);
startPrank
Sets all subsequent calls' msg.sender
to be the input address until stopPrank
is called.
function startPrank(address msgSender) external;
startPrank
Sets all subsequent calls' msg.sender
to be the input address until stopPrank
is called, and the tx.origin
to be the second input.
function startPrank(address msgSender, address txOrigin) external;
stopPrank
Resets subsequent calls' msg.sender
to be address(this)
.
function stopPrank() external;
store
Stores a value to an address' storage slot.
function store(address target, bytes32 slot, bytes32 value) external;
transact
Fetches the given transaction from the active fork and executes it on the current state.
function transact(bytes32 txHash) external;
transact
Fetches the given transaction from the given fork and executes it on the current state.
function transact(uint256 forkId, bytes32 txHash) external;
txGasPrice
Sets tx.gasprice
.
function txGasPrice(uint256 newGasPrice) external;
warp
Sets block.timestamp
.
function warp(uint256 newTimestamp) external;
expectCallMinGas
Expect a call to an address with the specified msg.value
and calldata, and a minimum amount of gas.
function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data) external;
expectCallMinGas
Expect given number of calls to an address with the specified msg.value
and calldata, and a minimum amount of gas.
function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data, uint64 count)
external;
expectCall
Expects a call to an address with the specified calldata.
Calldata can either be a strict or a partial match.
function expectCall(address callee, bytes calldata data) external;
expectCall
Expects given number of calls to an address with the specified calldata.
function expectCall(address callee, bytes calldata data, uint64 count) external;
expectCall
Expects a call to an address with the specified msg.value
and calldata.
function expectCall(address callee, uint256 msgValue, bytes calldata data) external;
expectCall
Expects given number of calls to an address with the specified msg.value
and calldata.
function expectCall(address callee, uint256 msgValue, bytes calldata data, uint64 count) external;
expectCall
Expect a call to an address with the specified msg.value
, gas, and calldata.
function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data) external;
expectCall
Expects given number of calls to an address with the specified msg.value
, gas, and calldata.
function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data, uint64 count) external;
expectEmitAnonymous
Prepare an expected anonymous log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.).
Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if
logs were emitted in the expected order with the expected topics and data (as specified by the booleans).
function expectEmitAnonymous(bool checkTopic0, bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData)
external;
expectEmitAnonymous
Same as the previous method, but also checks supplied address against emitting contract.
function expectEmitAnonymous(
bool checkTopic0,
bool checkTopic1,
bool checkTopic2,
bool checkTopic3,
bool checkData,
address emitter
) external;
expectEmitAnonymous
Prepare an expected anonymous log with all topic and data checks enabled.
Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if
logs were emitted in the expected order with the expected topics and data.
function expectEmitAnonymous() external;
expectEmitAnonymous
Same as the previous method, but also checks supplied address against emitting contract.
function expectEmitAnonymous(address emitter) external;
expectEmit
Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.).
Call this function, then emit an event, then call a function. Internally after the call, we check if
logs were emitted in the expected order with the expected topics and data (as specified by the booleans).
function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external;
expectEmit
Same as the previous method, but also checks supplied address against emitting contract.
function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter) external;
expectEmit
Prepare an expected log with all topic and data checks enabled.
Call this function, then emit an event, then call a function. Internally after the call, we check if
logs were emitted in the expected order with the expected topics and data.
function expectEmit() external;
expectEmit
Same as the previous method, but also checks supplied address against emitting contract.
function expectEmit(address emitter) external;
expectPartialRevert
Expects an error on next call that starts with the revert data.
function expectPartialRevert(bytes4 revertData) external;
expectRevert
Expects an error on next call with any revert data.
function expectRevert() external;
expectRevert
Expects an error on next call that exactly matches the revert data.
function expectRevert(bytes4 revertData) external;
expectRevert
Expects an error on next call that exactly matches the revert data.
function expectRevert(bytes calldata revertData) external;
expectSafeMemory
Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the current subcontext. If any other
memory is written to, the test will fail. Can be called multiple times to add more ranges to the set.
function expectSafeMemory(uint64 min, uint64 max) external;
expectSafeMemoryCall
Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the next created subcontext.
If any other memory is written to, the test will fail. Can be called multiple times to add more ranges
to the set.
function expectSafeMemoryCall(uint64 min, uint64 max) external;
skip
Marks a test as skipped. Must be called at the top of the test.
function skip(bool skipTest) external;
stopExpectSafeMemory
Stops all safe memory expectation in the current subcontext.
function stopExpectSafeMemory() external;