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;
        }
Example #2
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;
        }