使用ethers在Goerli封装ETH为WETH后余额未显示问题
Goerli测试网WETH封装后Etherscan不显示余额的问题解决
核心问题点
- 初始用错合约地址:
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2是主网WETH地址,Goerli测试网的正确WETH地址为0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6,这是第一个关键错误。 - Etherscan代币列表不会自动同步所有代币:即使交易成功,平台也可能不会将新代币自动加入你的持仓列表,需要手动添加。
- 更新1的操作无效:你调用
transfer往自身地址转WETH,但此前使用错误合约,合约内根本没有你的WETH余额,自然不会产生效果。
分步解决方法
1. 先确认真实的WETH余额
别只依赖Etherscan的持仓显示,直接通过合约调用查询:
async function checkWethBalance(walletAddress) { const wethContract = new ethers.Contract("0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6", WETH_ABI, provider); const balance = await wethContract.balanceOf(walletAddress); console.log("真实WETH余额:", ethers.utils.formatEther(balance)); }
如果返回数值大于0,说明WETH已在你地址中,只是Etherscan未显示;如果为0,再去核查交易是否真的成功。
2. 手动在Etherscan添加WETH代币
操作步骤:
- 打开你的Goerli Etherscan钱包页面
- 找到「Token Holdings」区域,点击「Add Token」
- 选择「Custom Token」,输入Goerli WETH地址
0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6,平台会自动填充WETH的符号和18位小数 - 点击「Add Token」,即可看到余额
3. 修正deposit代码的细节问题
你的代码未添加await等待交易确认,规范写法应补充:
async function myWrap(prKey) { let wallet = new ethers.Wallet(prKey, provider); const contract = new ethers.Contract("0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6", WETH_ABI, wallet); const balance = await provider.getBalance(wallet.address); const gasPrice = await provider.getGasPrice(); const balanceMinusGas = balance.sub(gasPrice.mul(30000)); // 30000足够覆盖deposit交易的gas消耗 let tx = await contract.deposit({value: balanceMinusGas}); await tx.wait(); // 等待交易上链确认 return tx; }
4. 排查更新2的交易问题
如果更换正确地址后仍无余额:
- 去Goerli Etherscan查询你的交易哈希,确认交易状态为「Success」
- 查看交易的「Input Data」,确认调用的是
deposit函数,且「Value」字段为你存入的ETH数量 - 确认钱包地址和合约地址均无书写错误
内容的提问来源于stack exchange,提问作者mondichuk
相关产品推荐
相关产品推荐

