Windows Ubuntu下truffle migrate连接Rinkeby报401错误咨询
报错根因
Unexpected server response: 401是Websocket连接区块链节点时鉴权失败的标准返回,和合约编译逻辑无关,问题由两个核心原因导致:
- Rinkeby测试网已于2022年底正式关停,包括Infura在内的所有节点服务商都已停止Rinkeby节点服务,你配置的
wss://rinkeby.infura.io地址本身已经失效 - 配置存在逻辑错误:代码开头定义了从环境变量读取私钥和Infura ID,但实际初始化HDWalletProvider时硬编码了打码截断的私钥、打码的Infura地址,即便Rinkeby没关停,残缺的鉴权参数也会被节点直接拒绝连接返回401。
修复步骤
- 弃用已下线的Rinkeby测试网,更换为当前官方支持的Sepolia测试网
- 修正配置逻辑,不要硬编码打码的私钥、节点地址,统一从环境变量读取有效参数,避免参数残缺
- 调整网络参数匹配Sepolia规则,删除Rinkeby专属的无效配置
- 确认Infura控制台中对应项目状态正常,若开启了强制Project Secret鉴权,需要在初始化Provider时传入对应secret参数
修正后的可用truffle-config.js配置参考:
const HDWalletProvider = require('@truffle/hdwallet-provider'); const privateKey = process.env.privateKey; const infuraId = process.env.infuraId; module.exports = { networks: { sepolia: { provider: () => new HDWalletProvider( privateKey, `wss://sepolia.infura.io/ws/v3/${infuraId}` ), gas: 5000000, gasPrice: 15000000000, network_id: 11155111, timeoutBlocks: 200, confirmations: 2 }, }, mocha: {}, compilers: { solc: { version: "0.8.11", settings: { optimizer: { enabled: true, runs: 200 }, evmVersion: "london" } } }, };
配置完成后,提前给部署钱包地址领好Sepolia测试ETH,执行truffle migrate --network sepolia即可完成部署。
安全提示:不要把私钥硬编码在配置文件中,避免私钥泄露造成资产损失。
内容的提问来源于stack exchange,提问作者theone satoshi
相关产品推荐
相关产品推荐

