Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }