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; } }); }