Skip to content

startPrank

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;
  • startPrank(address msgSender): sets msg.sender for all subsequent calls until stopPrank is called.
  • startPrank(address msgSender, address txOrigin): sets msg.sender and tx.origin for all subsequent calls until stopPrank is called.
  • startPrank(address msgSender, bool delegateCall): if delegateCall value is true then sets msg.sender for all subsequent delegate calls until stopPrank is called.
  • startPrank(address msgSender, address txOrigin, bool delegateCall): if delegateCall value is true then sets msg.sender and tx.origin for all subsequent delegate calls until stopPrank is called.
  • 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);
}
}
Terminal window
== Logs ==
accountAccesses.kind 1
accountAccesses.accessor proxy
accountAccesses.account Impl
0xcd16ecbf000000000000000000000000000000000000000000000000000000000000002a

Forge Standard Library

startHoax, changePrank