Skip to main content

Get wallet balance

BaseWallet wallet = DynamicSDK.Instance.Wallets.UserWallets[0];
string balance = await DynamicSDK.Instance.Wallets.GetBalance(wallet);
Debug.Log($"Balance: {balance}");

Query multichain balances

Query balances across multiple chains and addresses:
var request = new MultichainBalanceRequest
{
    FilterSpamTokens = true,
    BalanceRequests = new List<BalanceRequestItem>
    {
        new()
        {
            Address = wallet.Address,
            Chain = "SOL", // or "EVM"
            NetworkIds = new List<object> { 103 }, // Solana Devnet
        }
    }
};

var response = await DynamicSDK.Instance.Wallets.GetMultichainBalances(request);

foreach (var token in response.Balances)
{
    Debug.Log($"{token.Symbol}: {token.Balance} (mint: {token.MintAddress})");
}

Query specific token balance

Use WhitelistedContracts to query a specific token by its contract/mint address:
var request = new MultichainBalanceRequest
{
    FilterSpamTokens = false,
    BalanceRequests = new List<BalanceRequestItem>
    {
        new()
        {
            Address = wallet.Address,
            Chain = "SOL",
            NetworkIds = new List<object> { 103 },
            WhitelistedContracts = new List<string>
            {
                "4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU" // USDC Devnet
            },
        }
    }
};

var response = await DynamicSDK.Instance.Wallets.GetMultichainBalances(request);

Common token mint addresses

Solana

TokenNetworkMint Address
USDCMainnet (101)EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
USDCDevnet (103)4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU

Complete example

using DynamicSDK.Core;
using UnityEngine;
using System.Collections.Generic;

public class BalanceManager : MonoBehaviour
{
    public async void LoadAllBalances()
    {
        var wallets = DynamicSDK.Instance.Wallets.UserWallets;
        
        foreach (var wallet in wallets)
        {
            // Get native balance
            string balance = await DynamicSDK.Instance.Wallets.GetBalance(wallet);
            Debug.Log($"{wallet.Chain} Native Balance: {balance}");
            
            // Get token balances
            var request = new MultichainBalanceRequest
            {
                FilterSpamTokens = true,
                BalanceRequests = new List<BalanceRequestItem>
                {
                    new()
                    {
                        Address = wallet.Address,
                        Chain = wallet.Chain,
                        NetworkIds = GetNetworkIds(wallet.Chain),
                    }
                }
            };
            
            var response = await DynamicSDK.Instance.Wallets.GetMultichainBalances(request);
            
            foreach (var token in response.Balances)
            {
                Debug.Log($"  {token.Symbol}: {token.Balance}");
            }
        }
    }
    
    private List<object> GetNetworkIds(string chain)
    {
        return chain.ToUpper() switch
        {
            "SOL" => new List<object> { 103 }, // Devnet
            "EVM" => new List<object> { 84532 }, // Base Sepolia
            _ => new List<object>()
        };
    }
}

Next steps