使用Alchemy与Sepolia铸造NFT时遇404错误求助
解决Alchemy铸造NFT时的404 Not Found错误
以下是针对该问题的排查和修复步骤:
1. 修正AlchemyProvider的使用方式(最可能的触发原因)
在ethers v6版本中,AlchemyProvider的第二个参数要求传入纯Alchemy API密钥字符串,而非完整的RPC请求URL。如果你传入的是类似https://eth-sepolia.g.alchemy.com/v2/xxx的完整地址,会导致请求路径错误,返回404。
两种修复方案:
- 方案一:改用
JsonRpcProvider传入完整URL:// 替换原有provider创建代码 const provider = new ethers.JsonRpcProvider(process.env.API_URL); - 方案二:将环境变量
API_URL改为仅存储Alchemy API密钥,保留AlchemyProvider:// 确保process.env.API_KEY仅为你的Alchemy密钥字符串 const provider = new ethers.AlchemyProvider("sepolia", process.env.API_KEY);
2. 确保环境变量正确加载
你的代码未显式加载环境变量配置,若未做全局配置,process.env中的变量可能为空,导致请求无效地址。
在mint.js顶部添加环境变量加载代码:
require('dotenv').config(); // 需先安装依赖:npm install dotenv
同时检查.env文件的变量格式是否正确:
API_URL=https://eth-sepolia.g.alchemy.com/v2/你的Alchemy密钥 PRIVATE_KEY=你的钱包私钥 CONTRACT_ADDRESS=Sepolia网络上的合约地址 PUBLIC_KEY=你的钱包公钥
3. 验证Alchemy API密钥的网络匹配
登录Alchemy后台,确认你的API密钥对应的App是创建在Sepolia测试网下,而非主网或已停用的Goerli等其他测试网。
4. 确认合约地址有效性
检查CONTRACT_ADDRESS是否为你在Sepolia网络上成功部署的合约地址,复制时避免多空格或字符缺失。
修复后的完整示例代码
require('dotenv').config(); const { ethers } = require("ethers"); const contract = require("../artifacts/contracts/avatar.sol/avatar.json"); const contractInterface = contract.abi; const provider = new ethers.JsonRpcProvider(process.env.API_URL); const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider); const Avatar = new ethers.Contract(process.env.CONTRACT_ADDRESS, contractInterface, wallet); const main = async () => { try { const transaction = await Avatar.mint(process.env.PUBLIC_KEY); console.log("交易哈希:", transaction.hash); await transaction.wait(); // 等待交易上链确认 console.log("NFT铸造完成"); } catch (e) { console.log("something went wrong", e); } }; main();
内容的提问来源于stack exchange,提问作者picha
相关产品推荐
相关产品推荐

