/// <summary> /// query relate my wallet balances /// </summary> /// <returns></returns> public async Task <object> GetMyTotalBalance(UInt160[] assets = null) { if (CurrentWallet == null) { return(Error(ErrorCode.WalletNotOpen)); } var addresses = CurrentWallet.GetAccounts().Select(a => a.ScriptHash).ToList(); using var db = new TrackDB(); var balances = db.FindAssetBalance(new BalanceFilter() { Addresses = addresses, Assets = assets }); var result = balances.GroupBy(b => new { b.Asset, b.AssetDecimals, b.AssetSymbol }).Select(g => new AssetBalanceModel { Asset = g.Key.Asset, Symbol = g.Key.AssetSymbol, Balance = new BigDecimal(g.Select(b => b.Balance).Sum(), g.Key.AssetDecimals) }).ToList(); if (assets.IsEmpty()) { AppendDefaultNeoAndGas(result); } return(result); }
/// <summary> /// query relate my wallet balances /// </summary> /// <returns></returns> public async Task <object> GetMyBalances(UInt160 address = null, UInt160[] assets = null) { if (CurrentWallet == null) { return(Error(ErrorCode.WalletNotOpen)); } var addresses = CurrentWallet.GetAccounts().Select(a => a.ScriptHash).ToList(); if (address != null) { if (!addresses.Contains(address)) { return(Error(ErrorCode.AddressNotFound)); } addresses = new List <UInt160>() { address }; } using var db = new TrackDB(); var balances = db.FindAssetBalance(new BalanceFilter() { Addresses = addresses, Assets = assets }); var result = balances.ToLookup(b => b.Address).ToAddressBalanceModels(); if (assets.IsEmpty()) { AppendDefaultNeoAndGas(result, addresses); } return(result); }
public async Task <object> GetAddressBalance(UInt160[] addresses, UInt160[] assets) { using var db = new TrackDB(); var balances = db.FindAssetBalance(new BalanceFilter() { Addresses = addresses, Assets = assets, }); return(balances.ToLookup(b => b.Address).ToAddressBalanceModels()); }