public static AssetDirectoryViewModel Create(IEnumerable <IAssetDefinition> assetDefinitions, IDictionary <string, IAssetCoinholdersIndex> assetCoinholdersIndices, IDictionary <string, IAssetScore> assetScoresDictionaries, int take = int.MaxValue) { return(new AssetDirectoryViewModel { Assets = assetDefinitions.Select(p => { var assetId = p.AssetIds.FirstOrDefault(); IAssetCoinholdersIndex index = null; if (assetCoinholdersIndices.ContainsKey(assetId)) { index = assetCoinholdersIndices[assetId]; } IAssetScore assetScore = null; if (assetScoresDictionaries.ContainsKey(assetId)) { assetScore = assetScoresDictionaries[assetId]; } return Asset.Create(p, index, assetScore); }) .OrderBy(p => p.Score).ToList().Take(take) }); }
public static Asset Create(IAssetDefinition source, IAssetCoinholdersIndex index, IAssetScore assetScore) { return(new Asset { AssetIds = source.AssetIds ?? Enumerable.Empty <string>(), ContactUrl = source.ContactUrl, Description = source.Description, DescriptionMime = source.DescriptionMime, Divisibility = source.Divisibility, IconUrl = source.IconUrl, ImageUrl = source.ImageUrl, Issuer = source.Issuer, LinkToWebsite = source.LinkToWebsite, Name = source.Name, NameShort = source.NameShort, Type = source.Type, Version = source.Version, IsVerified = source.IsVerified(), CoinholdersCount = index?.CoinholdersCount, TotalQuantity = index?.TotalQuantity, Score = assetScore?.Score ?? 1, IssuerEncoded = (source.Issuer ?? "").ToBase64(), IssuerWebSite = source.IssuerWebsite() }); }
public static double CalculateAssetScore(IAssetDefinition assetDefinition, IAssetCoinholdersIndex index, IEnumerable <IAssetCoinholdersIndex> allIndexes) { var assetCoinholdersIndices = allIndexes as IAssetCoinholdersIndex[] ?? allIndexes.ToArray(); var isVerified = (assetDefinition?.IsVerified() ?? false) ? 0 : 1; var lastMonthTxCoubtCoef = Calc(index.LastMonthTransactionCount, assetCoinholdersIndices.Select(p => p.LastMonthTransactionCount)); var totalTransactionsCountCoef = Calc(index.TransactionsCount, assetCoinholdersIndices.Select(p => p.TransactionsCount)); var coinholdersCountCoef = Calc(index.CoinholdersCount, assetCoinholdersIndices.Select(p => p.CoinholdersCount)); var totalQuantityCoef = Calc(index.TotalQuantity, assetCoinholdersIndices.Select(p => p.TotalQuantity)); var lastTxDaysPastCoef = (index.LastTxDateDaysPast() != null ? Calc(index.LastTxDateDaysPast().Value, assetCoinholdersIndices.Select(p => p.LastTxDateDaysPast() ?? 0), true) : 1); var result = Weight(Coef.IsVerified) * isVerified + Weight(Coef.LastMonthTxCount) * lastMonthTxCoubtCoef + Weight(Coef.TotalTransactionsCount) * totalTransactionsCountCoef + Weight(Coef.CoinholdersCount) * coinholdersCountCoef + Weight(Coef.TotalQuantity) * totalQuantityCoef + Weight(Coef.LastTxDateDaysPast) * lastTxDaysPastCoef + Weight(Coef.TopCoinholderShare) * index.TopCoinholderShare + Weight(Coef.HerfindalShareIndex) * index.HerfindalShareIndex; return(Math.Round(result, 6)); }
public static int?LastTxDateDaysPast(this IAssetCoinholdersIndex index) { if (index.LastTxDate != null) { return((DateTime.Now - index.LastTxDate.Value).Days); } return(null); }
public static AssetCoinholdersIndexEntity Create(IAssetCoinholdersIndex source) { return(new AssetCoinholdersIndexEntity { AssetIds = source.AssetIds.ToJson(), RowKey = GenerateRowKey(source.AssetIds), PartitionKey = GeneratePartitionKey(), CoinholdersCount = source.CoinholdersCount, TotalQuantity = source.TotalQuantity, LastTxDate = source.LastTxDate, HerfindalShareIndex = source.HerfindalShareIndex, TransactionsCount = source.TransactionsCount, TopCoinholderShare = source.TopCoinholderShare, LastMonthTransactionCount = source.LastMonthTransactionCount }); }
public async Task InserOrReplaceAsync(IAssetCoinholdersIndex index) { await _tableStorage.InsertOrReplaceAsync(AssetCoinholdersIndexEntity.Create(index)); }