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()
     });
 }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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));
 }