C# NBitcoin交易符号(机密,bool)给出错误。它说的不是布尔,而是传递硬币
我正在使用NBitcoin签署交易。这里的事务符号(secret,bool)方法给出了错误。 (我已经在互联网上搜索过了,但没有任何帮助。)与其说是传递硬币物体,不如说我该怎么做? 这是我的密码:C# NBitcoin交易符号(机密,bool)给出错误。它说的不是布尔,而是传递硬币,c#,blockchain,bitcoin,nbitcoin,C#,Blockchain,Bitcoin,Nbitcoin,我正在使用NBitcoin签署交易。这里的事务符号(secret,bool)方法给出了错误。 (我已经在互联网上搜索过了,但没有任何帮助。)与其说是传递硬币物体,不如说我该怎么做? 这是我的密码: var fee = Money.Coins(0.0001m); Transaction payment=Transaction.Create(bitcoinNetwork); payment.Inputs.Add(new TxIn() {
var fee = Money.Coins(0.0001m);
Transaction payment=Transaction.Create(bitcoinNetwork);
payment.Inputs.Add(new TxIn()
{
PrevOut = new OutPoint(fundingTransaction.GetHash(), 1)
});
payment.Outputs.Add(new TxOut()
{
Value = amount-fee,
ScriptPubKey = toAddress.ScriptPubKey
});
var output = fundingTransaction.Outputs[0];
payment.Outputs.Add(new TxOut()
{
Value = output.Value - amount - fee,
ScriptPubKey = output.ScriptPubKey
});
var message = "Thanks :)";
var bytes = Encoding.UTF8.GetBytes(message);
payment.Outputs.Add(new TxOut()
{
Value = Money.Zero,
ScriptPubKey = TxNullDataTemplate.Instance.GenerateScriptPubKey(bytes)
});
Console.WriteLine(payment);
payment.Inputs[0].ScriptSig = fundingTransaction.Outputs[1].ScriptPubKey;
payment.Sign(secret, false); // the problem arises here
using (var node = Node.Connect(Network.Main))
{
Console.WriteLine("Doing version handshake");
node.VersionHandshake();
Console.WriteLine("Sending message");
node.SendMessage(new InvPayload(InventoryType.MSG_TX, payment.GetHash()));
node.SendMessage(new TxPayload(payment));
Thread.Sleep(500);
}
我将代码更改如下(以防将来有人需要):
public static bool SendBTC(string secret, string toAddress, decimal amount, string fundingTransactionHash)
{
Network bitcoinNetwork = Network.TestNet;
var bitcoinPrivateKey = new BitcoinSecret(secret, bitcoinNetwork);
var address = bitcoinPrivateKey.GetAddress(ScriptPubKeyType.Legacy);
var client = new QBitNinjaClient(bitcoinNetwork);
var transactionId = uint256.Parse(fundingTransactionHash);
var transactionResponse = client.GetTransaction(transactionId).Result;
var receivedCoins = transactionResponse.ReceivedCoins;
OutPoint outPointToSpend = null;
foreach (var coin in receivedCoins)
{
if (coin.TxOut.ScriptPubKey == bitcoinPrivateKey.GetAddress(ScriptPubKeyType.Legacy).ScriptPubKey)
{
outPointToSpend = coin.Outpoint;
}
}
var transaction = Transaction.Create(bitcoinNetwork);
transaction.Inputs.Add(new TxIn()
{
PrevOut = outPointToSpend
});
var receiverAddress = BitcoinAddress.Create(toAddress, bitcoinNetwork);
var txOutAmount = new Money(amount, MoneyUnit.BTC);
// Tx fee
var minerFee = new Money(0.0005m, MoneyUnit.BTC);
// Change
var txInAmount = (Money)receivedCoins[(int)outPointToSpend.N].Amount;
var changeAmount = txInAmount - txOutAmount - minerFee;
transaction.Outputs.Add(txOutAmount, receiverAddress.ScriptPubKey);
transaction.Outputs.Add(changeAmount, bitcoinPrivateKey.GetAddress(ScriptPubKeyType.Legacy).ScriptPubKey);
transaction.Inputs[0].ScriptSig = address.ScriptPubKey;
//Sign Tx
transaction.Sign(bitcoinPrivateKey, receivedCoins.ToArray());
//Broadcast Tx
BroadcastResponse broadcastResponse = client.Broadcast(transaction).Result;
return broadcastResponse.Success;
}