Solana 检查钱包的所有 spl 代币余额
Posted
技术标签:
【中文标题】Solana 检查钱包的所有 spl 代币余额【英文标题】:Solana check all spl token balances of a wallet 【发布时间】:2021-12-10 11:21:30 【问题描述】:我正在使用 solana json rpc api 从我的 javascript 应用程序中检查钱包的代币余额。我已经像这样使用了它的功能
const getTokenBalance = async (walletAddress, tokenMintAddress) =>
const response = await axios(
url: `https://api.mainnet-beta.solana.com`,
method: "post",
headers: "Content-Type": "application/json" ,
data:
jsonrpc: "2.0",
id: 1,
method: "getTokenAccountsByOwner",
params: [
walletAddress,
mint: tokenMintAddress,
,
encoding: "jsonParsed",
,
],
,
);
if (
Array.isArray(response?.data?.result?.value) &&
response?.data?.result?.value?.length > 0 &&
response?.data?.result?.value[0]?.account?.data?.parsed?.info?.tokenAmount
?.amount > 0
)
return (
Number(
response?.data?.result?.value[0]?.account?.data?.parsed?.info
?.tokenAmount?.amount
) / 1000000000
);
else
return 0;
;
但是我想通过一个电话获得所有的代币余额,而不是通过为每个代币提供一个铸币厂地址来询问代币余额,这使我的 api 响应像 10 分钟一样,有什么友好的方法可以做到这一点吗?
我看到Covalent api可以检查以太坊钱包余额,想知道他们是怎么做到的
【问题讨论】:
【参考方案1】:大多数标准 RPC 接受批处理请求,您应该能够发送您想要的所有请求的数组,注意响应也是一个数组。
// For example
const response = await axios(
url: `https://api.mainnet-beta.solana.com`,
method: "post",
headers: "Content-Type": "application/json" ,
data: [
jsonrpc: "2.0",
id: 1,
method: "getTokenAccountsByOwner",
params: [
walletAddress,
mint: tokenMintAddress,
,
encoding: "jsonParsed",
,
],
,
jsonrpc: "2.0",
id: 1,
method: "getTokenAccountsByOwner",
params: [
walletAddress2,
mint: tokenMintAddress2,
,
encoding: "jsonParsed",
,
],
,
]
);
【讨论】:
我会试试这个,如果它有效,我会回复你! 答案是正确的,只要我们传入数据数组的对象超过256个,就会抛出太大的请求错误,代码413,=。所以我只是通过迭代令牌数组来调用每个令牌,并在每次调用中使用 256 个对象调用 api。谢谢!【参考方案2】:由于所有令牌(遵循标准)都是令牌程序的“孩子”,因此您可以通过一次 RPC 调用获得所有令牌:
curl https://api.mainnet-beta.solana.com -X POST -H "Content-Type:
application/json" -d '
"jsonrpc":"2.0",
"method":"getTokenAccountsByOwner",
"params": [
"walletAddress",
"programId": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
,
"encoding": "jsonParsed"
],
"id":4
【讨论】:
【参考方案3】:如果您需要获得自己代币的余额,您可以使用带有后续帖子的 json rpc api。
curl https://api.devnet.solana.com/ -X POST -H "Content-Type: application/json" -d '
"jsonrpc": "2.0",
"id": 1,
"method": "getTokenAccountsByOwner",
"params": [
"uja3w9XG1g6DQSVT6YASK99FVmdVwXoHVoQEgtEJdLv",
"mint": "7TMzmUe9NknkeS3Nxcx6esocgyj8WdKyEMny9myDGDYJ"
,
"encoding": "jsonParsed"
]
'
【讨论】:
以上是关于Solana 检查钱包的所有 spl 代币余额的主要内容,如果未能解决你的问题,请参考以下文章
通过向关联令牌元数据帐户发送资金来解决 Solana 钱包问题
如何通过 Phantom 钱包集成使用 Vanilla JS 和 JSON-RPC 获取 Solana 帐户信息和/或 SOL 余额?
前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能