public static async Task UpdateBalance() { IBitcoinService bitcoinService; using (var db = new DatabaseContext()) { await db.SaveChangesAsync(); foreach (var address in db.Addresses.Include(a => a.Coin)) { bitcoinService = BitcoinService.GetBitcoinService(address.Coin.CoinShortcut); var bal = await bitcoinService.GetBalanceAsync(address.AddressString); address.ConfirmedBalance = bal.Balance; address.UnconfirmedBalance = bal.UnconfirmedBalance; db.Addresses.Update(address); } await db.SaveChangesAsync(); foreach (var coin in db.Coins.Include(c => c.Addresses)) { var viewModel = walletViewModels.SingleOrDefault(v => v.Shortcut.Equals(coin.CoinShortcut)); if (viewModel != null) { viewModel.Balance = coin.BalanceString; } } } }
async void NextButton_Clicked(object sender, EventArgs e) { var bitcoinTransaction = new BitcoinTransaction(selectedCoin.Name); var bitcoinService = BitcoinService.GetBitcoinService(selectedCoin.Shortcut); var tx = await bitcoinService.CreateTransactionAsync(new BitcoinTX() { Inputs = new List <BitcoinTXInput> { new BitcoinTXInput { Addresses = new List <string> { selectedCoin.DefaultAddress } } }, Outputs = new List <BitcoinTXOutput> { new BitcoinTXOutput { Addresses = new List <string> { toAddressEntry.Text }, Value = 100000 } } }); foreach (var input in tx.Tx.Inputs) { var newInput = new BitcoinTransactionInput { AddressNs = Repository.GetAddress(input.Addresses[0]).GetAddressPath(), Amount = (ulong)input.OutputValue, PrevHash = input.PrevHash.ToBytes(), PrevIndex = (uint)input.OutputIndex, Sequence = (uint)input.Sequence }; var inputTx = await bitcoinService.GetTransactionAsync(input.PrevHash); newInput.PrevTransaction = new BitcoinTransaction(selectedCoin.Shortcut, (uint)inputTx.Ver, (uint)inputTx.LockTime); foreach (var prevInput in inputTx.Inputs) { newInput.PrevTransaction.Inputs.Add(new BitcoinTransactionInput { PrevHash = prevInput.PrevHash.ToBytes(), ScriptSig = prevInput.Script.ToBytes(), PrevIndex = (uint)prevInput.OutputIndex, Sequence = (uint)prevInput.Sequence, ScriptType = InputScriptType.Spendaddress }); } foreach (var prevOutput in inputTx.Outputs) { newInput.PrevTransaction.Outputs.Add(new BitcoinTransactionOutput { Amount = (ulong)prevOutput.Value, Script = prevOutput.Script.ToBytes() }); } bitcoinTransaction.Inputs.Add(newInput); } foreach (var output in tx.Tx.Outputs) { bitcoinTransaction.Outputs.Add(new BitcoinTransactionOutput { Address = output.Addresses[0], Script = output.Script.ToBytes(), Amount = (ulong)output.Value, AddressType = OutputAddressType.Spend, ScriptType = OutputScriptType.Paytoscripthash, }); } var signedTx = await DeviceCommPage.SignBitcoinTransaction(this, bitcoinTransaction); Log.Debug(JsonConvert.SerializeObject(signedTx)); var txPushResult = await bitcoinService.PushRawTransactionAsync(new BitcoinTXRaw { Tx = signedTx.SerializedTx.ToHex().ToLower() }); Log.Debug(JsonConvert.SerializeObject(txPushResult)); }