Skip to content

prompt

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);

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.

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.

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.

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";
}

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);