如何通过Ethplorer API查询USDT、SHIB余额并解决104地址格式报错
问题原因与解决方案
报错根因
104地址格式错误是因为Ethplorer的getAddressInfo接口不支持直接传代币符号作为token参数值,该参数要求传入合规的ERC20代币合约地址,你传入的SHIB是代币符号,不符合地址格式要求,所以触发格式校验报错。
前置准备
提前确认以太坊链上对应代币的合约地址:
- USDT(ERC20)合约地址:
0xdAC17F958D2ee523a2206206994597C13D831ec7 - SHIB(ERC20)合约地址:
0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE
修正后的实现方案
提供两种常用实现方式,可根据需求选择:
方式1:单次请求拉取所有代币余额(推荐,减少API调用次数)
一次请求拉取目标地址下所有持有的代币信息,直接过滤出你需要的USDT和SHIB余额即可:
// 请把api_key替换为你自己的Ethplorer API密钥,测试可临时用免费密钥freekey,有调用频率限制 fetch("https://api.ethplorer.io/getAddressInfo/0x27cbc493b894e35f3f34ab273d0d634550af025d?apiKey=api_key") .then(async (response) => { const data = await response.json(); const tokens = data.tokens || []; // 过滤指定代币 const usdtInfo = tokens.find(item => item.tokenInfo.symbol === 'USDT'); const shibInfo = tokens.find(item => item.tokenInfo.symbol === 'SHIB'); // 原始余额除以对应代币精度得到实际显示余额,USDT精度为6,SHIB精度为18 const usdtBalance = usdtInfo ? usdtInfo.balance / Math.pow(10, 6) : 0; const shibBalance = shibInfo ? shibInfo.balance / Math.pow(10, 18) : 0; console.log('USDT余额:', usdtBalance); console.log('SHIB余额:', shibBalance); }) .catch( e => console.log('请求错误:', e));
方式2:单独查询指定代币余额
如果需要单独查询某个代币的余额,把token参数替换为对应代币的合约地址即可:
// 单独查询SHIB余额示例 fetch("https://api.ethplorer.io/getAddressInfo/0x27cbc493b894e35f3f34ab273d0d634550af025d?apiKey=api_key&token=0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE") .then(async (response) => { const data = await response.json(); const shibBalance = data.tokenBalance / Math.pow(10, 18); console.log('SHIB余额:', shibBalance); }) .catch( e => console.log('请求错误:', e));
内容的提问来源于stack exchange,提问作者Oasis Inc
相关产品推荐
相关产品推荐

