Пример #1
0
        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;
                    }
                }
            }
        }
Пример #2
0
        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));
        }