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

Brownie Python .env变量加载失效 部署合约报Infura 401错误

Brownie 部署Rinkeby测试网合约报Infura 401未授权错误解决方案

问题背景

该问题出现于学习Youtube平台Patrick Collins出品的《Solidity, Blockchain, and Smart Contract Course – Beginner to Expert Python Tutorial》教程过程中。

问题现状

  • 现有配置:.env文件存储私钥、节点密钥等敏感配置;brownie-config.yaml中已配置dotenv项实现.env文件自动加载,wallets.from_key字段通过${PRIVATE_KEY}语法引用环境变量中的私钥值。
  • 已尝试操作:多次在Infura平台新建项目,将新生成的PROJECT_ID更新至.env文件,问题仍未解决。
  • 报错现象:执行brownie run scripts/main.py --network rinkeby命令部署SimpleStorage合约时触发异常,错误调用栈最终抛出如下错误,耗时2天排查仍未定位.env配置相关的根因:
HTTPError: 401 Client Error: Unauthorized for url: https://rinkeby.infura.io/v3/PROJECT_ID

根因定位与修复步骤

该报错本质是请求Infura节点时未携带合法的项目身份标识,90%以上的场景都是.env格式错误或环境变量名不匹配导致的,按以下顺序逐一排查即可:

  • 检查.env文件书写规范
    文件必须存放在项目根目录(与brownie-config.yaml同层级),文件名严格为.env(注意开头的半角点,Windows系统默认隐藏文件后缀,容易误存为.env.txt导致识别失败);文件内变量赋值不要加任何引号、等号两侧不要留空格:

    错误写法:PRIVATE_KEY="0xabc123" / WEB3_INFURA_PROJECT_ID = def456
    正确写法:PRIVATE_KEY=0xabc123 / WEB3_INFURA_PROJECT_ID=def456

  • 核对Brownie网络配置的环境变量名
    Brownie内置的Infura网络默认读取名为WEB3_INFURA_PROJECT_ID的环境变量,不是自定义的PROJECT_ID、INFURA_KEY等其他名称。执行brownie networks list找到rinkeby网络条目,确认host字段值为https://rinkeby.infura.io/v3/$WEB3_INFURA_PROJECT_ID,如果变量名不匹配,直接修改brownie-config.yaml里的网络配置,或者执行Brownie命令修改网络host参数即可。很多人这里自定义了环境变量名,Brownie读取不到值就会把PROJECT_ID作为字符串直接拼到请求URL里,自然返回401未授权。
  • 验证环境变量加载状态
    在项目根目录执行以下代码验证变量是否被正确读取:
    from dotenv import load_dotenv
    import os
    load_dotenv()
    print(os.getenv("WEB3_INFURA_PROJECT_ID"))
    
    如果输出为None,说明.env文件路径或格式有误,重新调整即可。
  • 特殊场景排查
    如果上述配置都正确仍报错,先关闭系统全局代理/VPN后重试,部分代理节点会篡改请求头导致Infura鉴权失败;同时登录Infura后台确认对应项目没有开启IP白名单限制,若开启了白名单需要将本地出口IP加入允许列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:57:08