You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Foundry测试文件传入环境变量实现Goerli网络分叉?

如何将环境变量中的Alchemy RPC URL传入Foundry测试文件

直接在测试代码中读取环境变量

Solidity测试里可以用Foundry的vm.envString()作弊码直接读取系统环境变量,把你原来的代码改成这样:

vm.createSelectFork(vm.envString("GOERLI_ALCHEMY_SECRET_URL"), block_number);

运行测试前,先在终端设置好环境变量:

  • Linux/macOS终端:
export GOERLI_ALCHEMY_SECRET_URL="https://eth-goerli.alchemyapi.io/v2/你的API密钥"
forge test
  • Windows PowerShell:
$env:GOERLI_ALCHEMY_SECRET_URL="https://eth-goerli.alchemyapi.io/v2/你的API密钥"
forge test

用.env文件统一管理环境变量

不想每次手动输环境变量的话,用.env文件更方便:

  1. 在项目根目录新建.env文件,写入你的RPC地址:
GOERLI_ALCHEMY_SECRET_URL="https://eth-goerli.alchemyapi.io/v2/你的API密钥"
  1. 把.env加到.gitignore里,别把API密钥提交到代码仓库:
.env
  1. 运行测试时指定加载.env文件,或者配置到foundry.toml里:
    • 临时运行:
    forge test --env-file .env
    
    • 永久配置(修改foundry.toml):
    [profile.default]
    test = { env_file = ".env" }
    
    之后直接跑forge test就能自动加载环境变量了。

同一测试环境管理多个分叉

要切换不同网络的分叉很简单,多定义几个环境变量就行:

GOERLI_ALCHEMY_URL="你的Goerli RPC地址"
MAINNET_ALCHEMY_URL="你的Mainnet RPC地址"

然后在测试合约里写不同的测试函数,或者在单个函数里切换分叉:

  • 分开测试不同分叉:
function testGoerliForkBehavior() public {
    vm.createSelectFork(vm.envString("GOERLI_ALCHEMY_URL"), 9000000);
    // 这里写Goerli分叉的测试逻辑
}

function testMainnetForkBehavior() public {
    vm.createSelectFork(vm.envString("MAINNET_ALCHEMY_URL"), 18000000);
    // 这里写Mainnet分叉的测试逻辑
}
  • 单个测试里切换分叉:
function testCrossForkLogic() public {
    uint256 goerliForkId = vm.createFork(vm.envString("GOERLI_ALCHEMY_URL"), 9000000);
    uint256 mainnetForkId = vm.createFork(vm.envString("MAINNET_ALCHEMY_URL"), 18000000);

    vm.selectFork(goerliForkId);
    // 测试Goerli上的逻辑

    vm.selectFork(mainnetForkId);
    // 测试Mainnet上的逻辑
}

内容的提问来源于stack exchange,提问作者parseb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:06:26