Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
            }
        }