如何向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文件更方便:
- 在项目根目录新建
.env文件,写入你的RPC地址:
GOERLI_ALCHEMY_SECRET_URL="https://eth-goerli.alchemyapi.io/v2/你的API密钥"
- 把
.env加到.gitignore里,别把API密钥提交到代码仓库:
.env
- 运行测试时指定加载
.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
相关产品推荐
相关产品推荐

