Exemplo n.º 1
0
        private async Task GetDexEosContractsCostAsync(TokenCostServiceSettings settings, decimal eosToUsd, List <TokenCost> tokenCosts, CancellationToken token)
        {
            var client  = new HttpClient();
            var message = await client.GetAsync($"{settings.DexEosApi}/token", token)
                          .ConfigureAwait(false);

            message.EnsureSuccessStatusCode();

            var json = await message.Content.ReadAsStringAsync()
                       .ConfigureAwait(false);

            var typedResult = JsonConvert.DeserializeObject <DexEosToken.RootObject[]>(json);

            foreach (var item in typedResult)
            {
                var tokenCost = new TokenCost
                {
                    Contract  = BaseName.StringToName(item.code),
                    TokenName = item.symbol.ToUpper(),
                    EosRate   = item.summary.last_price,
                    UsdRate   = item.summary.last_price * eosToUsd
                };

                if (tokenCosts.Any(t => t.Contract == tokenCost.Contract && t.TokenName.Equals(tokenCost.TokenName)))
                {
                    continue;
                }

                tokenCosts.Add(tokenCost);
            }
        }
Exemplo n.º 2
0
        private async Task <decimal> GetEosUsdAsync(TokenCostServiceSettings settings, CancellationToken token)
        {
            var currency = "EOS";

            var client = new HttpClient();

            client.DefaultRequestHeaders.Add("X-CMC_PRO_API_KEY", settings.CoinmarketcapApiKey);

            var message = await client.GetAsync($"{settings.CoinmarketcapApi}/cryptocurrency/quotes/latest?symbol={currency}", token)
                          .ConfigureAwait(false);

            message.EnsureSuccessStatusCode();

            var json = await message.Content.ReadAsStringAsync()
                       .ConfigureAwait(false);

            var root  = JsonConvert.DeserializeObject <Coinmarketcap.RootObject>(json);
            var price = root.data.EOS.quote.USD.price;

            return(price);
        }
Exemplo n.º 3
0
        protected override async Task DoSomethingAsync(NpgsqlConnection connection, CancellationToken token)
        {
            var settings = new TokenCostServiceSettings();

            Configuration.GetSection("TokenCostServiceSettings").Bind(settings);

            var eosToUsd = await GetEosUsdAsync(settings, token);

            var tokenCost = new List <TokenCost>
            {
                new TokenCost
                {
                    Contract  = 6138663591592764928, //eosio.token
                    TokenName = "EOS",
                    EosRate   = 1,
                    UsdRate   = eosToUsd
                }
            };

            await GetNewDexContractsCostAsync(settings, eosToUsd, tokenCost, token);
            await GetDexEosContractsCostAsync(settings, eosToUsd, tokenCost, token);

            connection.Open();
            NpgsqlTransaction transaction = null;

            try
            {
                transaction = connection.BeginTransaction();
                await connection.UpdateTokenCost(tokenCost, token);

                transaction.CommitAndDispose();
            }
            catch (Exception)
            {
                transaction.RollbackAndDispose();
                throw;
            }
        }
Exemplo n.º 4
0
        private async Task GetNewDexContractsCostAsync(TokenCostServiceSettings settings, decimal eosToUsd, List <TokenCost> tokenCosts, CancellationToken token)
        {
            var client  = new HttpClient();
            var message = await client.GetAsync($"{settings.NewDexApi}/tickers", token)
                          .ConfigureAwait(false);

            message.EnsureSuccessStatusCode();

            var json = await message.Content.ReadAsStringAsync()
                       .ConfigureAwait(false);

            var typedResult = JsonConvert.DeserializeObject <NewDexToken.RootObject>(json);

            foreach (var item in typedResult.data)
            {
                if (!item.symbol.EndsWith("-eos"))
                {
                    continue;
                }

                var tokenCost = new TokenCost
                {
                    Contract  = BaseName.StringToName(item.contract),
                    TokenName = item.currency.ToUpper(),
                    EosRate   = item.last,
                    UsdRate   = item.last * eosToUsd
                };

                if (tokenCosts.Any(t => t.Contract == tokenCost.Contract && t.TokenName.Equals(tokenCost.TokenName)))
                {
                    continue;
                }

                tokenCosts.Add(tokenCost);
            }
        }