private IEnumerable <AssetOwner> CalculateOwnership(int height) { var owners = new Dictionary <string, long> { { _asset.AccountRs, _asset.QuantityQnt } }; var index = 0; while (index < _asset.NumberOfTrades) { var getTradesResult = _assetService.GetTrades(AssetIdOrAccountId.ByAssetId(_asset.AssetId), index, index + 99, includeAssetInfo: false).Result; foreach (var trade in getTradesResult.Trades.Where(t => t.Height <= height)) { UpdateOwnership(owners, trade.BuyerRs, trade.SellerRs, trade.QuantityQnt); } index += 100; } index = 0; while (index < _asset.NumberOfTransfers) { var getTransfersResult = _assetService.GetAssetTransfers(AssetIdOrAccountId.ByAssetId(_asset.AssetId), index, index + 99, includeAssetInfo: false).Result; foreach (var transfer in getTransfersResult.Transfers.Where(t => t.Height <= height)) { UpdateOwnership(owners, transfer.RecipientRs, transfer.SenderRs, transfer.QuantityQnt); } index += 100; } return(owners.Where(o => o.Value != 0).Select(o => new AssetOwner(o.Key, o.Value))); }
private IList <Asset> GetAssetList(ProgramOptions options) { var assetList = new List <Asset>(); if (options.Mode == Mode.All) { assetList = _assetService.GetAllAssets().Result.AssetList; } else if (options.Mode == Mode.Account) { _transfers = _assetService.GetAssetTransfers(AssetIdOrAccountId.ByAccountId(options.Id.ToString()), includeAssetInfo: false).Result.Transfers; _trades = _assetService.GetTrades(AssetIdOrAccountId.ByAccountId(options.Id.ToString()), includeAssetInfo: false).Result.Trades; var assetIds = _transfers.Select(transfer => transfer.AssetId).Union(_trades.Select(trade => trade.AssetId)).Distinct(); assetList = _assetService.GetAssets(assetIds).Result.AssetList; } else if (options.Mode == Mode.Asset) { assetList = new List <Asset> { _assetService.GetAsset(options.Id).Result }; } return(assetList); }
private static void GetAllTransfers() { foreach (var asset in Assets) { var transfers = new List <AssetTransfer>(); AssetTransfers[asset.AssetId] = transfers; var index = 0; int replyCount; const int increase = 100; do { var transfersReply = AssetExchangeService.GetAssetTransfers(AssetIdOrAccountId.ByAssetId(asset.AssetId), index, index + increase - 1, includeAssetInfo: false).Result; transfers.AddRange(transfersReply.Transfers); foreach (var assetTransfer in transfersReply.Transfers) { AssetTransferCount[assetTransfer.SenderId] = GetValueOrDefault(AssetTransferCount, assetTransfer.SenderId) + 1; AssetTransferCount[assetTransfer.RecipientId] = GetValueOrDefault(AssetTransferCount, assetTransfer.RecipientId) + 1; } replyCount = transfersReply.Transfers.Count; index += increase; } while (replyCount == increase); } }