public static AssetCoinholdersViewModel Create(AssetViewModel asset, IBalanceSummary balanceSummary, int?atBlockHeight, IDictionary <string, double> addressChanges, IEnumerable <IBalanceBlock> blocksWithChanges, IBlockHeader currentBlock, IBlockHeader atBlockInfo) { var total = balanceSummary.AddressSummaries.Sum(p => p.Balance); var addressSummaries = balanceSummary.AddressSummaries .Select( p => BalanceAddressSummary.Create(p, total, asset.Divisibility, addressChanges.ContainsKey(p.Address) ? addressChanges[p.Address] : 0)) .Where(p => p.Balance != 0 || p.ChangeAtBlock != 0) .OrderByDescending(p => p.Balance) .ToList(); return(new AssetCoinholdersViewModel { Asset = asset, AddressSummaries = addressSummaries, Total = BitcoinUtils.CalculateColoredAssetQuantity(total, asset.Divisibility), Pagination = BlockPagination.Create(blocksWithChanges.Select(p => p.Height), atBlockHeight ?? currentBlock?.Height, currentBlock), CoinholdersCount = addressSummaries.Count, AtBlockDateTime = (atBlockInfo ?? currentBlock)?.Time.ToUniversalTime() }); }
public static BlockPagination Create(IEnumerable <int> changedAtHeights, int?atBlock, IBlockHeader currentBlock) { var ordered = changedAtHeights.OrderBy(p => p).ToList(); var at = atBlock ?? ordered.LastOrDefault(); if (currentBlock != null) { ordered.Add(currentBlock.Height); } var result = new BlockPagination { ChangedAtHeights = ordered.Distinct().ToList(), AtBlock = at, ShowCurrentBlock = atBlock != null }; return(result); }