求助:用WalletConnect+ethers.js转以太坊自定义代币时Trust Wallet显示异常
自定义代币转账时Trust Wallet误显示ETH的修复方案
问题根源
Trust Wallet无法正确识别自定义代币,核心原因有两个:
ethers.utils.parseUnits默认采用ETH的18位小数解析金额,若自定义代币小数位不同,会导致参数异常,钱包无法识别代币类型- 代码中存在合约地址拼写错误(
contractAdderss),可能导致钱包读取错误的合约信息
具体修复步骤
修正金额解析逻辑
必须根据代币实际小数位解析金额,先通过合约获取小数位,再传入parseUnits方法:const decimals = await contract.decimals(); const transferAmount = ethers.utils.parseUnits(amount, decimals);修正合约地址拼写
将代码中的contractAdderss改为正确的contractAddress,确保指向目标代币合约完整修复代码
const web3 = new ethers.providers.Web3Provider(ethereumProvider); const signer = web3.getSigner(); const contract = new ethers.Contract( contractAddress, // 修正拼写错误 ABI, signer ); // 获取代币小数位 const decimals = await contract.decimals(); // 按代币实际小数位解析转账金额 const transferAmount = ethers.utils.parseUnits(amount, decimals); // 执行转账 const transfer = await contract.transfer( walletAddress, transferAmount );额外验证项
- 确认合约地址是目标自定义代币的正确地址,而非ETH相关地址
- 检查WalletConnect连接的链ID与代币所在链完全一致(比如以太坊主网是1,BSC是56)
- 确保Trust Wallet已添加该代币,或钱包能通过合约地址自动识别代币信息
内容的提问来源于stack exchange,提问作者Misbah Ghalib
相关产品推荐
相关产品推荐

