Estoy usando solana json rpc api para verificar el saldo del token de una billetera desde mi aplicación javascript. He usado la función para ello así
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; } };
Sin embargo, quiero obtener todo el saldo de tokens con una llamada en lugar de pedir un saldo de tokens dando una dirección de menta para cada token, lo que hace que mi API responda como 10 minutos, ¿hay alguna forma amigable de hacerlo?
Vi que Covalent api puede hacerlo para verificar el saldo de la billetera ethereum, me pregunto cómo pueden hacerlo
La mayoría de los RPC estándar aceptan solicitudes por lotes, debería poder enviar una matriz de todas las solicitudes que desee, tenga en cuenta que la respuesta también será una matriz.
// 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", }, ], }, ] });
Como todos los tokens (que siguen el estándar) son "hijos" del Programa de tokens, puede obtenerlos todos con una sola llamada 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 }
Si necesita obtener un saldo de su propio token, puede usar la API json rpc con la siguiente publicación.
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" } ] } '