运行brownie部署到Rinkeby网络出现ValueError如何解决?
问题解决方案
首先明确报错根因:Brownie在拼接Rinkeby节点访问地址时,无法读取到WEB3_INFURA_PROJECT_ID环境变量,导致地址拼接失败。
分步操作步骤
第一步:安装环境变量加载依赖
执行命令安装python-dotenv,用于读取.env文件中的配置:pip install python-dotenv第二步:创建.env配置文件
在项目根目录创建名为.env的文件,Windows系统如果无法直接创建开头带点的文件,可先命名为.env.,系统会自动修正为.env。文件内容填写如下:# 替换为你Infura后台对应项目的Project ID WEB3_INFURA_PROJECT_ID=你自己的Infura项目ID # 替换为你的测试钱包私钥,不要泄露给任何人 PRIVATE_KEY=你自己的测试钱包私钥第三步:配置brownie-config.yaml
在项目根目录创建brownie-config.yaml文件,用于告诉Brownie加载.env配置、读取钱包和网络信息,内容如下:dotenv: .env wallets: from_key: ${PRIVATE_KEY} networks: rinkeby: host: https://rinkeby.infura.io/v3/${WEB3_INFURA_PROJECT_ID} chainid: 4第四步:修改deploy.py加载环境变量
在deploy.py的头部导入dotenv并加载配置,修改后的头部代码如下:from brownie import accounts, config, SimpleStorage, network import os from dotenv import load_dotenv load_dotenv()第五步:重新执行部署命令
所有配置完成后,重新执行原部署命令即可:brownie run .\scripts\deploy.py --network rinkeby
注意事项
- 不要将包含私钥的.env文件上传到任何公开代码仓库,建议把.env加入.gitignore文件避免误上传
- Rinkeby测试网目前已官方弃用,若后续出现节点无法访问的问题,可替换为Goerli或Sepolia测试网,同步修改Infura节点地址和brownie-config.yaml中的chainid即可
- 若配置完成后仍读取不到环境变量,可在当前执行命令的终端中先临时设置变量验证:
再执行部署命令,该方式的变量仅在当前终端生效,关闭终端后就会失效。set WEB3_INFURA_PROJECT_ID=你的Infura项目ID set PRIVATE_KEY=你的测试钱包私钥
内容的提问来源于stack exchange,提问作者3lii06
相关产品推荐
相关产品推荐

