Ejemplo n.º 1
0
        private async void GetTransactions()
        {
            Status      = "Updating transaction lists...";
            Errors      = string.Empty;
            IsReceiving = true;

            BalanceApi ba = new BlockCypher();
            // Bech32 addresses in AddressList should be ignored until the block explorers and forks start supporting it.
            Response resp = await ba.UpdateTransactionListAsync(AddressList.Where(x =>
                                                                                  !x.Address.StartsWith("bc1", StringComparison.OrdinalIgnoreCase)).ToList());

            Coindesk pa    = new Coindesk();
            DateTime start = AddressList.Where(x =>
                                               !x.Address.StartsWith("bc1", StringComparison.OrdinalIgnoreCase))
                             .Min(x => x.TransactionList.Min(y => y.ConfirmedTime));
            DateTime end = AddressList.Where(x =>
                                             !x.Address.StartsWith("bc1", StringComparison.OrdinalIgnoreCase)).Max(x => x.TransactionList.Max(y => y.ConfirmedTime));;
            Response <List <PriceHistory> > resp2 = await pa.GetPriceHistoryAsync(start, end);

            foreach (var adr in AddressList)
            {
                if (adr.TransactionList == null)
                {
                    continue;
                }
                foreach (var tx in adr.TransactionList)
                {
                    PriceHistory ph = resp2.Result.Find(x => x.Time.Date.Equals(tx.ConfirmedTime.Date));
                    if (ph != null)
                    {
                        tx.UsdValue = ph.Price;
                    }
                }
            }

            if (resp.Errors.Any())
            {
                Errors = resp.Errors.GetErrors();
                Status = "Encountered an error!";
            }
            else
            {
                Save();
                Status = "Transaction Update Success!";
            }

            IsReceiving = false;
        }
        private async void GetBalance()
        {
            if (!AddressList.ToList().TrueForAll(x => !x.HasErrors))
            {
                Errors = "Fix the errors in addresses first!";
                return;
            }
            Status      = "Updating Balances...";
            Errors      = string.Empty;
            IsReceiving = true;

            BalanceApi api = null;

            switch (SettingsInstance.SelectedBalanceApi)
            {
            case BalanceServiceNames.BlockCypher:
                api = new BlockCypher();
                break;

            case BalanceServiceNames.Blockonomics:
                api = new Blockonomics();
                break;

            default:
                api = new BlockCypher();
                break;
            }

            Response resp = await api.UpdateBalancesAsync(AddressList.ToList());

            if (resp.Errors.Any())
            {
                Errors = resp.Errors.GetErrors();
                Status = "Encountered an error!";
            }
            else
            {
                DataManager.WriteFile(AddressList, DataManager.FileType.Wallet);
                RaisePropertyChanged("BitcoinBalance");
                Status = "Balance Update Success!";
            }

            IsReceiving = false;
        }
Ejemplo n.º 3
0
        private async void GetBalance()
        {
            if (!AddressList.ToList().TrueForAll(x => !x.HasErrors))
            {
                Errors = "Fix the errors in addresses first!";
                return;
            }
            Status      = "Updating Balances...";
            Errors      = string.Empty;
            IsReceiving = true;

            BalanceApi api = null;

            switch (SettingsInstance.SelectedBalanceApi)
            {
            case BalanceServiceNames.BlockchainInfo:
                api = new BlockchainInfo();
                break;

            case BalanceServiceNames.BlockExplorer:
                api = new BlockExplorer();
                break;

            case BalanceServiceNames.BlockCypher:
                api = new BlockCypher();
                break;

            case BalanceServiceNames.Blockonomics:
                api = new Blockonomics();
                break;

            default:
                api = new BlockchainInfo();
                break;
            }

            // Not all exchanges support Bech32 addresses!
            // The following "if" is to solve that.
            bool hasSegWit = AddressList.Any(x => x.Address.StartsWith("bc1", System.StringComparison.InvariantCultureIgnoreCase));

            if (hasSegWit && !SettingsInstance.SelectedBalanceApi.Equals(BalanceServiceNames.Blockonomics))
            {
                BalanceApi            segApi      = new Blockonomics();
                List <BitcoinAddress> legacyAddrs = new List <BitcoinAddress>(AddressList.Where(x =>
                                                                                                !x.Address.StartsWith("bc1", System.StringComparison.OrdinalIgnoreCase)));
                List <BitcoinAddress> segWitAddrs = new List <BitcoinAddress>(AddressList.Where(x =>
                                                                                                x.Address.StartsWith("bc1", System.StringComparison.OrdinalIgnoreCase)));

                Response respSW = await segApi.UpdateBalancesAsync(segWitAddrs);

                if (respSW.Errors.Any())
                {
                    Errors = "SegWit API error: " + respSW.Errors.GetErrors();
                    Status = "Error in SegWit API! Continue updating legacy balances...";
                }
                Response resp = await api.UpdateBalancesAsync(legacyAddrs);

                if (resp.Errors.Any())
                {
                    Errors = resp.Errors.GetErrors();
                    Status = "Encountered an error!";
                }
                else
                {
                    DataManager.WriteFile(AddressList, DataManager.FileType.Wallet);
                    RaisePropertyChanged("BitcoinBalance");
                    Status = "Balance Update Success!";
                }
            }
            else
            {
                Response resp = await api.UpdateBalancesAsync(AddressList.ToList());

                if (resp.Errors.Any())
                {
                    Errors = resp.Errors.GetErrors();
                    Status = "Encountered an error!";
                }
                else
                {
                    DataManager.WriteFile(AddressList, DataManager.FileType.Wallet);
                    RaisePropertyChanged("BitcoinBalance");
                    Status = "Balance Update Success!";
                }
            }

            IsReceiving = false;
        }