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

如何使用Solana web3.js查询指定公钥地址持有的代币资产

Solana地址代币资产查询解决方案

为什么当前代码无法获取代币数据

你调用的connection.getAccountInfoAndContext(publicKey)仅会查询目标公钥对应的原生SOL账户信息,Solana上所有SPL代币都存储在与用户主地址关联的*代币关联账户(ATA)*中,不会直接存放在主地址账户下,因此返回的data字段为空属于正常情况。

两种实现方案

方案1:通过web3.js直接从链上查询(无需依赖Phantom接口)

你可以使用getParsedTokenAccountsByOwner方法直接拉取该地址下所有SPL代币账户的解析后数据,代码示例如下:

// 需提前安装 @solana/spl-token 依赖
import { getParsedTokenAccountsByOwner, TOKEN_PROGRAM_ID } from "@solana/spl-token";

// 传入已实例化的connection对象、目标公钥
const tokenAccounts = await connection.getParsedTokenAccountsByOwner(
  publicKey,
  { programId: TOKEN_PROGRAM_ID }
);

// 遍历解析代币数据
const tokenAssets = tokenAccounts.value.map(account => {
  const accountInfo = account.account.data.parsed.info;
  return {
    mintAddress: accountInfo.mint, // 代币合约地址
    amount: accountInfo.tokenAmount.amount, // 原始数量(未精度换算)
    decimals: accountInfo.tokenAmount.decimals, // 代币精度
    uiAmount: accountInfo.tokenAmount.uiAmount // 换算后可读数量
  }
});

方案2:通过Phantom钱包接口直接获取

Phantom提供了专用的钱包资产查询接口,无需自行处理链上数据解析,调用代码如下:

// 从已连接的Phantom provider调用资产查询接口
const assets = await window.solana.request({
  method: "wallet_getAssets"
});

// 返回结果中会直接包含所有SPL代币、NFT资产的结构化数据
const splTokens = assets.result.assets.filter(item => item.type === "spl_token");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:27:03