async Task <CheckTransactionResult> GetTransactionStatusesByAddressBlockCypher(string address, int tryCount = 2, int delayMS = 1000) { CheckTransactionResult result = null; for (int i = 0; i < tryCount; i++) { try { AddressResponse transaction = null; //var requestUrl = string.Format(BlockCypher_AddressUrl, serviceConfiguration.BlockCypherRootNetwork, address); //using (var client = new HttpClient()) //{ var response = await _client1.GetStringAsync($"{_config.BlockCypherRootNetwork}/addrs/{address}"); if (!string.IsNullOrEmpty(response)) { transaction = AddressResponse.FromJson(response); } //} if (transaction != null) { if (transaction.UnconfirmedTxrefs != null && transaction.UnconfirmedTxrefs.Any()) { var t = transaction.UnconfirmedTxrefs.First(); result = new CheckTransactionResult() { TxId = t.TxHash, Amount = t.Value, Confirmations = (int)t.Confirmations, Status = t.DoubleSpend ? TransactionStatus.DoubleSpent : TransactionStatus.Created }; break; } if (transaction.Txrefs != null && transaction.Txrefs.Any()) { var t = transaction.Txrefs.First(); result = new CheckTransactionResult() { TxId = t.TxHash, Amount = t.Value, Confirmations = (int)t.Confirmations, Status = t.DoubleSpend ? TransactionStatus.DoubleSpent : TransactionStatus.Created }; } break; } } catch (Exception ex) { Debug.WriteLine(ex.Message); } await Task.Delay(delayMS); } return(result); }
private async Task <CheckTransactionResult> GetTransactionStatusesByAddressBlockchainCom(string address, int tryCount = 2, int delayMS = 1000) { CheckTransactionResult result = null; BlockchainNetModels.AddressResponse transaction = null; BlockchainNetModels.Tx unconfirmedAddress = null; for (int i = 0; i < tryCount; i++) { try { var unconfirmedRequest = $"unconfirmed-transactions?format=json"; var requestUrl = $"rawaddr/{address}"; var response = await _client2.GetStringAsync(requestUrl); if (!string.IsNullOrEmpty(response)) { transaction = BlockchainNetModels.AddressResponse.FromJson(response); } var unconfirmedResponse = await _client2.GetStringAsync(unconfirmedRequest); if (!string.IsNullOrEmpty(unconfirmedResponse)) { var unconfirmedTransactions = BlockchainNetModels.UnconfirmedTransactions.FromJson(unconfirmedResponse); if (unconfirmedTransactions != null) { unconfirmedAddress = unconfirmedTransactions.Txs.FirstOrDefault( x => x.Inputs.Any(y => y.PrevOut?.Addr == address) || x.Out.Any(z => z.Addr == address)); } } if (transaction != null) { if (transaction.Txs != null && transaction.Txs.Any()) { var t = transaction.Txs.First(); TransactionStatus transactionStatus = TransactionStatus.Confirmed; if (unconfirmedAddress != null) { transactionStatus = unconfirmedAddress.DoubleSpend ? TransactionStatus.DoubleSpent : TransactionStatus.Created; } result = new CheckTransactionResult() { TxId = t.Hash, Amount = transaction.TotalReceived, Confirmations = 0, Status = transactionStatus }; break; } } } catch (Exception ex) { Debug.WriteLine(ex.Message); } await Task.Delay(delayMS); } return(result); }