startPrank
Signature
Section titled “Signature”function startPrank(address msgSender) external;function startPrank(address msgSender, bool delegateCall) external;function startPrank(address msgSender, address txOrigin) external;function startPrank( address msgSender, address txOrigin, bool delegateCall) external;Description
Section titled “Description”startPrank(address msgSender): setsmsg.senderfor all subsequent calls untilstopPrankis called.startPrank(address msgSender, address txOrigin): setsmsg.senderandtx.originfor all subsequent calls untilstopPrankis called.startPrank(address msgSender, bool delegateCall): ifdelegateCallvalue istruethen setsmsg.senderfor all subsequent delegate calls untilstopPrankis called.startPrank(address msgSender, address txOrigin, bool delegateCall): ifdelegateCallvalue istruethen setsmsg.senderandtx.originfor all subsequent delegate calls untilstopPrankis called.
Examples
Section titled “Examples”- prank delegate call and record state diffs
contract ImplementationTest { uint public num; address public sender;
function setNum(uint _num) public { num = _num; }}
contract ProxyTest { uint public num; address public sender;}
contract CheatcodesIssue is Script { function run() public { ProxyTest proxy = new ProxyTest(); ImplementationTest impl = new ImplementationTest();
vm.label(address(proxy), "proxy"); vm.label(address(impl), "Impl");
uint num = 42; vm.startPrank(address(proxy), true); vm.startStateDiffRecording(); (bool successTwo, ) = address(impl).delegatecall( abi.encodeWithSignature("setNum(uint256)", num) );
Vm.AccountAccess[] memory accountAccesses = vm.stopAndReturnStateDiff(); console.log("accountAccesses.kind", uint8(accountAccesses[0].kind)); console.log( "accountAccesses.accessor", vm.getLabel(accountAccesses[0].accessor) ); console.log( "accountAccesses.account", vm.getLabel(accountAccesses[0].account) ); console.logBytes(accountAccesses[0].data); }}== Logs == accountAccesses.kind 1 accountAccesses.accessor proxy accountAccesses.account Impl 0xcd16ecbf000000000000000000000000000000000000000000000000000000000000002aSEE ALSO
Section titled “SEE ALSO”Forge Standard Library