getDeployedCode
签名
function getDeployedCode(string calldata) external returns (bytes memory);
描述
此作弊码类似于 getCode
,但仅返回项目中合约的 部署 字节码(也称为运行时字节码)。
此作弊码的主要用例是将无状态合约快速部署到任意地址。
calldata 参数可以是 ContractFile.sol
(如果文件名和合约名相同),ContractFile.sol:ContractName
,或者是相对于项目根目录的工件路径。
ℹ️ 注意
getDeployedCode
需要输出目录的读取权限,请参阅 文件作弊码 。要授予读取访问权限,请在你的
foundry.toml
中设置fs_permissions = [{ access = "read", path = "./out"}]
。
例子
使用 getDeployedCode
和 etch
在任意地址部署无状态合约。
// A stateless contract that we want deployed at a specific address
contract Override {
event Payload(address sender, address target, bytes data);
function emitPayload(address target, bytes calldata message) external payable returns (uint256) {
emit Payload(msg.sender, target, message);
return 0;
}
}
// get the **deployedBytecode**
bytes memory code = vm.getDeployedCode("Override.sol:Override");
// set the code of an arbitrary address
address overrideAddress = address(64);
vm.etch(overrideAddress, code);
assertEq(
overrideAddress.code,
code
)
Supported formats
你可以通过合约路径或合约名称获取构件。也支持获取特定版本的构件。如果未提供版本,cheatcode 将默认为正在执行的测试版本或构件编译时的唯一版本。
vm.getDeployedCode("MyContract.sol:MyContract");
vm.getDeployedCode("MyContract");
vm.getDeployedCode("MyContract.sol:0.8.18");
vm.getDeployedCode("MyContract:0.8.18");
另请参阅
Forge 标准库