You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓开发中如何使用Web3j Java获取ERC20代币的TotalSupply?

获取ERC20代币总供应量的解决方案

核心实现步骤

ERC20标准合约的totalSupply()是公开只读方法,只要合约实例加载正确就能调用,以下是具体落地步骤:

1. 定义ERC20合约接口

Web3j需要对应合约的Java接口,你可以直接手动定义包含核心方法的接口,不用复杂生成:

import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.protocol.core.RemoteCall;

public interface ERC20 {
    // 对应ERC20的totalSupply()方法
    RemoteCall<Uint256> totalSupply();
    // 如果需要处理小数格式,建议同时定义decimals方法
    RemoteCall<Uint256> decimals();
}

2. 正确加载合约实例

之前load方法失败大概率是参数配置问题,只读方法不需要有效签名凭证,正确写法如下:

// 你已通过Infura初始化的Web3j实例
Web3j web3j = Web3j.build(new HttpService("你的Infura节点URL"));

// 目标代币的合约地址(确认是对应网络的正确地址)
String tokenContractAddr = "0x...";

// 加载合约,只读方法可传空Credentials或无效密钥,无需签名
ERC20 tokenContract = ERC20.load(
    tokenContractAddr,
    web3j,
    Credentials.create(""), // 只读方法无需有效凭证
    new DefaultGasProvider()
);

3. 调用方法并处理结果

Android中务必用异步线程调用,避免阻塞主线程:

new Thread(() -> {
    try {
        // 获取总供应量原始值(Uint256类型)
        Uint256 supplyUint = tokenContract.totalSupply().send();
        BigInteger rawSupply = supplyUint.getValue();
        
        // 如果需要转换为带小数的可读格式,先获取代币小数位数
        Uint256 decimalsUint = tokenContract.decimals().send();
        int decimals = decimalsUint.getValue().intValue();
        
        // 转换为用户友好的格式
        BigDecimal displaySupply = new BigDecimal(rawSupply)
                .divide(new BigDecimal(Math.pow(10, decimals)))
                .toPlainString();
        
        // 更新UI需切回主线程
        runOnUiThread(() -> {
            // 将displaySupply显示到TextView等组件
            // textView.setText("总供应量:" + displaySupply);
        });
    } catch (Exception e) {
        e.printStackTrace();
        // 处理异常:合约地址错误、网络故障、节点不匹配等
    }
}).start();

常见问题排查

  • 确认合约地址与Infura节点网络匹配(比如主网代币不能用测试网节点)
  • 检查AndroidManifest.xml是否添加了网络权限:<uses-permission android:name="android.permission.INTERNET"/>
  • 确保接口方法名与ERC20标准完全一致(大小写、参数都不能错)

内容的提问来源于stack exchange,提问作者Sparky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:18