Solana 检查钱包的所有 spl 代币余额
Solana check all spl token balances of a wallet
我正在使用 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可以查看以太坊钱包余额,想知道他们是怎么做到的
大多数标准 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",
},
],
},
]
});
如果您需要获得自己代币的余额,您可以使用 json rpc api 并遵循 post.
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"
}
]
}
'
由于所有令牌(遵循标准)都是令牌程序的“子代”,您可以通过一次 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
}
我正在使用 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可以查看以太坊钱包余额,想知道他们是怎么做到的
大多数标准 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",
},
],
},
]
});
如果您需要获得自己代币的余额,您可以使用 json rpc api 并遵循 post.
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"
}
]
}
'
由于所有令牌(遵循标准)都是令牌程序的“子代”,您可以通过一次 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
}