private void SendMoney(object sender, EventArgs e)
        {
            var authenticatedWallet = WalletStore.Instance().GetAuthenticatedWallet();

            if (authenticatedWallet == null)
            {
                MainWindowStore.Instance().DisplayError("You're not authenticated");
                return;
            }

            var receiverValue       = _viewModel.SendValue;
            var addr                = _viewModel.SendAddress;
            var selectedTransaction = _viewModel.SelectedTransaction;

            if (selectedTransaction == null)
            {
                MainWindowStore.Instance().DisplayError("A transaction must be selected");
                return;
            }

            if (receiverValue > selectedTransaction.Amount)
            {
                return;
            }

            var txFee       = _transactionHelper.GetMinFee();
            var senderValue = selectedTransaction.Amount - receiverValue - txFee;
            var walletAddr  = authenticatedWallet.Addresses.FirstOrDefault(a => a.Hash == selectedTransaction.Hash);

            if (walletAddr == null)
            {
                MainWindowStore.Instance().DisplayError("The selected tranasction is not linked to your wallet");
                return;
            }

            BlockChainAddress bcAddr = null;

            try
            {
                bcAddr = BlockChainAddress.Deserialize(addr);
            }
            catch (Exception)
            {
                MainWindowStore.Instance().DisplayError("The address is not correct");
            }

            if (bcAddr == null)
            {
                MainWindowStore.Instance().DisplayError("The address is not correct");
                return;
            }

            var newKey = _walletHelper.CreateNewAddress();
            var kh     = new BigInteger(newKey.GetPublicKeyHashed());
            var script = _scriptBuilder.New()
                         .AddToStack(walletAddr.Key.GetSignature())
                         .AddToStack(walletAddr.Key.GetPublicKey())
                         .Build();
            var pp          = walletAddr.Key.GetPublicKeyHashed();
            var senderSript = _scriptBuilder.New() // SEND MONEY TO MY WALLET.
                              .AddOperation(OpCodes.OP_DUP)
                              .AddOperation(OpCodes.OP_HASH160)
                              .AddToStack(newKey.GetPublicKeyHashed())
                              .AddOperation(OpCodes.OP_EQUALVERIFY)
                              .AddOperation(OpCodes.OP_CHECKSIG)
                              .Build();
            var receiverScript = _scriptBuilder.New() // SEND MONEY TO THE SELLER.
                                 .AddOperation(OpCodes.OP_DUP)
                                 .AddOperation(OpCodes.OP_HASH160)
                                 .AddToStack(bcAddr.PublicKeyHash)
                                 .AddOperation(OpCodes.OP_EQUALVERIFY)
                                 .AddOperation(OpCodes.OP_CHECKSIG)
                                 .Build();
            var txBuilder = _transactionBuilder.NewNoneCoinbaseTransaction()
                            .Spend(selectedTransaction.TxId.FromHexString(), (uint)selectedTransaction.Vout, script.Serialize())
                            .AddOutput((long)receiverValue, receiverScript);

            if (senderValue > 0)
            {
                txBuilder.AddOutput((long)senderValue, senderSript);
            }

            var tx        = txBuilder.Build();
            var s         = tx.Serialize().Count();
            var rpcClient = new RpcClient(authenticatedWallet.Network);

            rpcClient.SendRawTransaction(tx).ContinueWith((r) =>
            {
                try
                {
                    var res = r.Result;
                }
                catch (AggregateException ex)
                {
                    var exx = ex.InnerExceptions;
                }
            });
        }