Use sdk.wallets.getMultichainBalances to fetch token balances across multiple chains and networks in a single call. Use it for portfolio-style views instead of calling getBalance per wallet.
import DynamicSDKSwiftlet sdk = DynamicSDK.instance()func getMultichainBalances(wallet: BaseWallet) async { let request = MultichainBalanceRequest( balanceRequests: [ BalanceRequestItem( address: wallet.address, chain: .evm, networkIds: [1, 137, 56] // Ethereum, Polygon, BNB ) ], filterSpamTokens: true ) do { let response = try await sdk.wallets.getMultichainBalances(balanceRequest: request) for token in response.balances { print("\(token.symbol ?? ""): \(token.balanceDecimal ?? "")") } } catch { print("Failed to get balances: \(error)") }}
response.balances is a flat list of TokenBalance items. Each item exposes balance, balanceDecimal, symbol, name, decimals, networkId, chain, logoUrl, and isNative.
getBalance returns the native asset only (for example ETH on Ethereum, SOL on Solana) for the wallet’s active network. For token balances across chains and networks, use getMultichainBalances above.
The SDK provides a unified method to get balance for any wallet type:
import DynamicSDKSwiftlet sdk = DynamicSDK.instance()func getBalance(wallet: BaseWallet) async { do { let balance = try await sdk.wallets.getBalance(wallet: wallet) print("Balance: \(balance)") } catch { print("Failed to get balance: \(error)") }}
// Use BigUInt for EVM to avoid precision lossimport BigIntlet wei = BigUInt("1500000000000000000")! // 1.5 ETHlet eth = BalanceConverter.weiToEth(wei)// Use UInt64 for Solanalet lamports: UInt64 = 1_500_000_000 // 1.5 SOLlet sol = BalanceConverter.lamportsToSol(lamports)