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

Solana调用getTokenAccountBalance报错“Invalid param: not a Token account”排查

问题分析:Solana调用getTokenAccountBalance提示“not a Token account”

问题重现

你调用Solana公共网关的请求示例:

curl --request POST \
     --url https://solana-mainnet.g.alchemy.com/v2/demo \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
     "id": 1,
     "jsonrpc": "2.0",
     "method": "getTokenAccountBalance",
     "params": [
          "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
     ]
}
'

返回结果:

{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid param: not a Token account"},"id":1}

后续使用地址5Xm6nU1Bi6UewCrhJQFk1CAV97ZJaRiFw4tFNhUbXy3u请求,仍返回相同错误。

核心原因

  1. 第一个地址是Token程序账户:TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA是Solana官方的Token标准程序账户,负责处理所有代币的创建、转账等核心逻辑,本身并不存储用户的代币余额,不符合getTokenAccountBalance方法要求的代币账户类型。
  2. 第二个地址是原生SOL账户:5Xm6nU1Bi6UewCrhJQFk1CAV97ZJaRiFw4tFNhUbXy3u是普通的Solana原生SOL账户,仅用于存储SOL代币,不是关联USDT的专属代币账户。Solana体系中,用户的每种代币都对应独立的代币账户,和原生SOL账户是完全分开的。

解决方案

要获取USDT余额,你需要使用用户的USDT专属代币账户地址,具体步骤如下:

  1. 先通过用户的原生SOL账户地址,调用getTokenAccountsByOwner方法,指定USDT的Mint地址(Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB),获取该用户对应的USDT代币账户:
    curl --request POST \
         --url https://solana-mainnet.g.alchemy.com/v2/demo \
         --header 'accept: application/json' \
         --header 'content-type: application/json' \
         --data '
    {
         "id": 1,
         "jsonrpc": "2.0",
         "method": "getTokenAccountsByOwner",
         "params": [
              "用户的原生SOL账户地址",
              {
                   "mint": "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"
              }
         ]
    }
    '
    
  2. 从返回结果中提取代币账户地址,再用这个地址调用getTokenAccountBalance,即可获取目标用户的USDT余额。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:50:21