public async void SendTransfer(NewSendModel sendModel) { var syncModel = new CancelSyncModel() { Text = "Sending the transaction" }; walletModel.SyncModels.Add(syncModel); try { await SendTransfer(sendModel, syncModel); } catch (OperationCanceledException) { } catch (Exception e) { sendModel.ErrorText = e.Message; sendModel.Open(); } finally { walletModel.SyncModels.Remove(syncModel); } }
public virtual NewSendModel OpenSend(string addressToSend, decimal?amount, params AddressItemModel[] addressModels) { if (Wallet.View is NewSendModel sm) { return(sm); } var oldView = Wallet.View; var sendModel = new NewSendModel(Wallet, addressModels, (m) => { SendTransfer(m); }) { AddressValidation = a => IotaExtensions.ValidateAddress(a), Address = addressToSend, Value = amount, }; sendModel.Open(); return(sendModel); }
public async Task SendTransfer(NewSendModel sendModel, CancelSyncModel syncModel) { var addressModels = sendModel.Addresses.ToArray(); if (addressModels == null || addressModels.Length == 0) { addressModels = addressesModel.GetAddressModels(); } var addressItems = addressModels.Select(a => a.Tag).OfType <AddressItem>().ToArray(); var api = CreateIotaClient(); long value = 0; if (sendModel.Value.HasValue) { value = (long)Convert.ChangeType(sendModel.Value.Value, typeof(long)); // long.Parse(sendModel.Value.ToString()); } if (value < 0) { throw new Exception("Value cannot be less than zero"); } var addressToSend = sendModel.Address; addressToSend = IotaExtensions.ValidateAddress(addressToSend); if (addressToSend.Length == 90) { addressToSend = Borlay.Iota.Library.Utils.Checksum.RemoveChecksum(addressToSend); } var transfer = new TransferItem() { Address = addressToSend, Value = value, Tag = sendModel.MessageTag, Message = sendModel.Message }; if (value > 0) { syncModel.Text = "Renew the balances"; await api.RenewAddresses(addressItems); var filteredAddressItems = addressItems.FilterBalance(value).ToArray(); var filterReminder = filteredAddressItems.Select(a => a.Address).ToList(); filterReminder.Add(addressToSend); syncModel.Text = "Searching for the remainder"; var remainderAddressItem = await GetRemainder(filterReminder.ToArray(), syncModel.Token); var transactions = transfer.CreateTransactions(remainderAddressItem.Address, filteredAddressItems).ToArray(); await SendTransactions(transactions, syncModel, true); } else { var transactions = transfer.CreateTransactions().ToArray(); await SendTransactions(transactions, syncModel, false); } }