- @solana/kit
- @solana/web3.js
- Anchor
import { useParaSolanaSigner } from '@getpara/react-sdk';
import { createSolanaRpc, address } from '@solana/kit';
import { getAssociatedTokenAddress } from '@solana/spl-token';
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
function WalletBalance() {
const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
const [solBalance, setSolBalance] = useState(0);
const [tokenBalance, setTokenBalance] = useState(0);
const fetchBalances = async () => {
if (!solanaSigner) return;
try {
// Get SOL balance
const { value } = await rpc.getBalance(solanaSigner.address).send();
setSolBalance(Number(value) / 1e9);
// Get SPL token balance
const usdcMint = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const tokenAccount = await getAssociatedTokenAddress(
usdcMint,
solanaSigner.address
);
const { value: accountData } = await rpc.getAccountInfo(tokenAccount).send();
if (accountData && accountData.data) {
const parsed = JSON.parse(accountData.data);
setTokenBalance(Number(parsed.parsed.info.tokenAmount.amount) / 1e6);
} else {
setTokenBalance(0);
}
} catch (error) {
console.error("Error fetching balances:", error);
}
};
return (
<div>
<button onClick={fetchBalances}>Refresh Balances</button>
<p>SOL Balance: {solBalance}</p>
<p>USDC Balance: {tokenBalance}</p>
</div>
);
}
import { useParaSolana } from './hooks/useParaSolana';
import { LAMPORTS_PER_SOL, PublicKey } from '@solana/web3.js';
import { TOKEN_PROGRAM_ID, getAccount, getAssociatedTokenAddress } from '@solana/spl-token';
function WalletBalance() {
const { connection, signer } = useParaSolana();
const [solBalance, setSolBalance] = useState(0);
const [tokenBalance, setTokenBalance] = useState(0);
const fetchBalances = async () => {
try {
// Get SOL balance
const balance = await connection.getBalance(signer.sender);
setSolBalance(balance / LAMPORTS_PER_SOL);
// Get SPL token balance (example: USDC)
const usdcMint = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const tokenAccount = await getAssociatedTokenAddress(
usdcMint,
signer.sender
);
try {
const accountInfo = await getAccount(connection, tokenAccount);
setTokenBalance(Number(accountInfo.amount) / 1e6); // USDC has 6 decimals
} catch (error) {
console.log("Token account not found");
setTokenBalance(0);
}
} catch (error) {
console.error("Error fetching balances:", error);
}
};
return (
<div>
<button onClick={fetchBalances}>Refresh Balances</button>
<p>SOL Balance: {solBalance}</p>
<p>USDC Balance: {tokenBalance}</p>
</div>
);
}
Query balances using the RPC client directly:
import { useParaSolanaSigner } from "@getpara/react-sdk";
import { createSolanaRpc, lamports } from "@solana/kit";
const rpc = createSolanaRpc("https://api.devnet.solana.com");
function QueryBalances() {
const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
const getBalance = async () => {
if (!solanaSigner) return;
const { value: balance } = await rpc.getBalance(solanaSigner.address as any).send();
console.log("SOL Balance:", Number(balance) / 1e9);
// Query token accounts
const { value: tokenAccounts } = await rpc.getTokenAccountsByOwner(
solanaSigner.address as any,
{ programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" as any },
{ encoding: "jsonParsed" },
).send();
for (const account of tokenAccounts) {
const parsed = account.account.data.parsed.info;
console.log(`Token: ${parsed.mint}, Balance: ${parsed.tokenAmount.uiAmountString}`);
}
};
if (isLoading) return <p>Loading...</p>;
return <button onClick={getBalance}>Query Balances</button>;
}