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

例子

使用 getDeployedCodeetch 在任意地址部署无状态合约。

// 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 标准库

getCode etch