public void create(TransactionTemporaryViewModel transactionVM) { var secret = new ExtKey().GetWif(_network); var source = BitcoinAddress.Create(transactionVM.SourceAddress); var client = new QBitNinjaClient(_network); Transaction tx = new Transaction(); var input = new TxIn(); var transactionId = uint256.Parse(transactionVM.PrevTransactionId); input.PrevOut = new OutPoint(new uint256(transactionVM.Hex), 1); //Transaction ID input.ScriptSig = source.ScriptPubKey; tx.AddInput(input); TxOut output = new TxOut(); var desctination = BitcoinAddress.Create(transactionVM.DestinationAddress); Money fee = Money.Satoshis(40000); output.Value = Money.Coins(0.1m) - fee; output.ScriptPubKey = desctination.ScriptPubKey; tx.AddOutput(output); tx.Sign(secret, false); BroadcastResponse broadcastResponse = client.Broadcast(tx).Result; }
public IActionResult Contact(TransactionTemporaryViewModel transactionVM) { ViewData["Message"] = "Your contact page."; var network = Network.TestNet; // generate private key var privateKey = new Key(); var bitcoinPrivateKey = privateKey.GetWif(network); var address = bitcoinPrivateKey.GetAddress(); // get transaction info var client = new QBitNinjaClient(network); var transactionId = uint256.Parse(transactionVM.Hex); var transactionResponse = client.GetTransaction(transactionId).Result; // from where var receivedCoins = transactionResponse.ReceivedCoins; OutPoint outPointToSpend = null; foreach (var coin in receivedCoins) { if (coin.TxOut.ScriptPubKey == bitcoinPrivateKey.ScriptPubKey) { outPointToSpend = coin.Outpoint; } } // create transaction var transaction = new Transaction(); transaction.Inputs.Add(new TxIn() { PrevOut = outPointToSpend }); // to where var destinationAddress = BitcoinAddress.Create("mzp4No5cmCXjZUpf112B1XWsvWBfws5bbB"); // how match TxOut spentTxOut = new TxOut() { Value = new Money((decimal)transactionVM.Quantity, MoneyUnit.BTC), ScriptPubKey = destinationAddress.ScriptPubKey }; TxOut changeBackTxOut = new TxOut() { Value = new Money((decimal)(transactionVM.Balance - transactionVM.Quantity - transactionVM.Fee), MoneyUnit.BTC), ScriptPubKey = bitcoinPrivateKey.ScriptPubKey }; transaction.Outputs.Add(spentTxOut); transaction.Outputs.Add(changeBackTxOut); // sign transaction transaction.Sign(bitcoinPrivateKey, false); BroadcastResponse broadcastResponse = client.Broadcast(transaction).Result; return(View()); }