0xc100000000000000000000000000000000000000 上暴露一个预编译合约。从交易内部调用此预编译上的函数可让您的合约直接操纵链上状态、存储槽、ETH 余额、ERC-20 代币余额、nonce 和事件日志,而无需假冒账户或部署辅助代理。
这些作弊码是对 Admin RPC 方法的补充。Admin RPC 方法从交易外部操纵状态(通过 JSON-RPC)。预编译从交易内部操纵状态(通过 Solidity 调用)。当您的设置需要保持原子性、可从 tx 哈希重放,或者要在多个槽上循环执行时,请使用预编译。
接口
将此文件作为IVnetPrecompile.sol 添加到您的项目中:
IVnetPrecompile.sol
函数
Storage
Balance
ERC-20 balances
预编译会自动定位代币的余额存储槽,因此无需提供槽输入。标准的 mapping 布局可直接解析,并在第一个持有者之后被缓存;非标准布局通过探测代币的
balanceOf 执行来发现。
在余额存储槽中打包额外标志位的代币会相应地报告
balanceOf。例如,USDC 保留了该槽的最高位,因此在 setMaxErc20Balance 之后,其 balanceOf 返回 2^255 - 1。Nonce
Events
emitEvent 触发一条 address 字段为 target(而不是调用合约)的日志。下游消费者(索引器、subgraph、webhook)会将该日志视为来自 target 的真实发出。
九个重载覆盖了从零到四个索引 topic,以及可选的未索引 data 载荷:
topic1 通常是 keccak256("EventName(type,type,...)")。示例,伪造一次 USDC 的 Transfer:
Cheatcode events
每个改变状态的作弊码都会从预编译地址(0xc100000000000000000000000000000000000000)发出对应的事件:
检查通过
emitEvent 伪造的日志的收据时,请按目标地址过滤 logs[] 以忽略预编译自身的条目。
已知限制
- 基于 Base 的 Virtual Environments。 Solidity 作弊码在 Base 上不可用。
- 基于 Arbitrum 的 Virtual Environments。 由于 Arbitrum 内部机制,通过
eth_call进行的作弊码调用无法工作。交易、gas 估算和模拟按预期工作。
另请参阅
- Admin RPC,用于从交易外部操纵状态的等价 JSON-RPC 方法。
- Foundry 作弊码教程,部署可复用作弊码演练环境的端到端教程。