prompt
Signature
Section titled “Signature”function prompt( string calldata promptText) external returns (string memory input);function promptSecret( string calldata promptText) external returns (string memory input);function promptSecretUint( string calldata promptText) external returns (uint256);Description
Section titled “Description”Display an interactive prompt to the user for inserting arbitrary data.
vm.prompt displays an interactive input, while vm.promptSecret & vm.promptSecretUint display a
hidden input, used for passwords and other secret information that should not
leak to the terminal.
Configuration
Section titled “Configuration”In order to prevent unwanted hangups, vm.prompt has a timeout configuration.
In your Solidity tests configuration, you can set it using promptTimeout = 120.
Default value is 120 and values are in seconds.
Best practices
Section titled “Best practices”Testing scripts that use vm.prompt
Section titled “Testing scripts that use vm.prompt”When testing scripts containing vm.prompt it is recommended to use the
following pattern:
contract Script { function run() public { uint256 myUint = vm.parseUint(vm.prompt("enter uint")); run(myUint); }
function run(uint256 myUint) public { // actual logic }}That way, we are keeping the UX gain (don’t have to provide --sig argument
when running the script), but tests can set any value to myUint and not just
a hardcoded default.
Handling timeouts
Section titled “Handling timeouts”When a user fails to provide an input before the timeout expires, the
vm.prompt cheatcode reverts. If you’d like, timeouts can be handled by using
try/catch:
string memory input;
try vm.prompt("Username") returns (string memory res) { input = res;}catch (bytes memory) { input = "Anonymous";}Examples
Section titled “Examples”Choose RPC endpoint
Section titled “Choose RPC endpoint”Provide an option to choose the RPC/chain to run on.
In your Solidity tests configuration:
forking: { rpcEndpoints: { mainnet: "https://eth.llamarpc.com", polygon: "https://polygon.llamarpc.com", }}In your script:
string memory rpcEndpoint = vm.prompt("RPC endpoint");vm.createSelectFork(rpcEndpoint);