C# 如何使用NBitcoin从ExtPrivKey获取比特币私钥
因此,我正试图通过使用NBitcoin发送一些资金,有一个步骤我失败了,那就是创建de bitcoin secret来签署交易,我有地址和ExtPrivKey,但我没有得到任何运气签署它,任何建议,这是我下面的代码C# 如何使用NBitcoin从ExtPrivKey获取比特币私钥,c#,bitcoin,private-key,nbitcoin,C#,Bitcoin,Private Key,Nbitcoin,因此,我正试图通过使用NBitcoin发送一些资金,有一个步骤我失败了,那就是创建de bitcoin secret来签署交易,我有地址和ExtPrivKey,但我没有得到任何运气签署它,任何建议,这是我下面的代码 var priv = mbwallet.SelectedWallet.PrivateKeys[0].ToWif(); //var ool = new BitcoinSecret(base58, App.Network); var privkey =
var priv = mbwallet.SelectedWallet.PrivateKeys[0].ToWif();
//var ool = new BitcoinSecret(base58, App.Network);
var privkey = mbwallet.SelectedWallet.PrivateKeys[0].PrivateKey.GetBitcoinSecret(App.Network).ToWif();
var key = Key.Parse(privkey, App.Network);
var keysT = key.GetWif(App.Network);
//var myaddress = mbwallet.SelectedWallet.PrivateKeys[0].PrivateKey.PubKey.GetAddress(App.Network);
var myaddress = mbwallet.SelectedWallet.CurrentAddress;
string address = Address.Text;
var destination = BitcoinAddress.Create(address, App.Network);
decimal value = Convert.ToDecimal(Value.Text);
var coins2 = GetCoins(value);
TransactionBuilder txBuilder = new TransactionBuilder();
var tx = txBuilder.AddCoins(coins2)
.AddKeys(keysT)
.SetChange(myaddress)
.Send(destination, new Money(value, MoneyUnit.BTC))
.SendFees("0.0002");
//.BuildTransaction(true);
var tx2 = txBuilder.BuildTransaction(true);
//Console.WriteLine(txBuilder.Verify(tx));
var hello = tx2.ToHex();
var txRepo = new NoSqlTransactionRepository();
//txRepo.Put(tx.GetHash(), tx);
//Assert(txBuilder.Verify(tx)); //check fully signed
List<ICoin> GetCoins(decimal sendAmount)
{
//var mbwallet = (root.DataContext as MainWindowViewModel);
var amountMoney = new Money(sendAmount, MoneyUnit.BTC);
var client = new QBitNinjaClient(App.Network);
var txInAmount = Money.Zero;
var coins1 = new List<ICoin>();
foreach (var balance in client.GetBalance(mbwallet.SelectedWallet.CurrentAddress,//MBWallet.Wallet.Address,
true).Result.Operations)
{
var transactionId = balance.TransactionId;
var transactionResponse =
client.GetTransaction(transactionId).Result;
var receivedCoins = transactionResponse.ReceivedCoins;
foreach (Coin coin in receivedCoins)
{
if (coin.TxOut.ScriptPubKey ==
mbwallet.SelectedWallet.CurrentAddress.ScriptPubKey)//MBWallet.Wallet.BitcoinPrivateKey.ScriptPubKey) // this may not be necessary
{
coins1.Add(coin);
txInAmount += (coin.Amount as Money);
}
}
}
return coins1;
}
var priv=mbwallet.SelectedWallet.PrivateKeys[0].ToWif();
//var ool=新的比特币密码(base58,App.Network);
var privkey=mbwallet.SelectedWallet.PrivateKeys[0].PrivateKey.GetBitcoinSecret(App.Network.ToWif();
var key=key.Parse(privkey,App.Network);
var keysT=key.GetWif(应用程序网络);
//var myaddress=mbwallet.SelectedWallet.PrivateKey[0]。PrivateKey.PubKey.GetAddress(App.Network);
var myaddress=mbwallet.SelectedWallet.CurrentAddress;
字符串地址=address.Text;
var destination=BitcoinAddress.Create(地址,App.Network);
十进制值=Convert.ToDecimal(value.Text);
var coins2=获得硬币(价值);
TransactionBuilder txBuilder=新TransactionBuilder();
var tx=txBuilder.AddCoins(coins2)
.AddKeys(keysT)
.SetChange(我的地址)
.Send(目的地,新货币(value,MoneyUnit.BTC))
.发送费(“0.0002”);
//.BuildTransaction(真实);
var tx2=txBuilder.BuildTransaction(true);
//Console.WriteLine(txBuilder.Verify(tx));
var hello=tx2.ToHex();
var txRepo=新的NoSqlTransactionRepository();
//txRepo.Put(tx.GetHash(),tx);
//断言(txBuilder.Verify(tx))//完全签名支票
列表获取硬币(十进制发送金额)
{
//var mbwallet=(root.DataContext作为MainWindowViewModel);
var amountMoney=新货币(sendAmount,MoneyUnit.BTC);
var客户端=新的QBItnijaClient(应用程序网络);
var txInAmount=货币。零;
var coins1=新列表();
foreach(客户端.GetBalance中的var余额)(mbwallet.SelectedWallet.CurrentAddress,//mbwallet.Wallet.Address,
正确)。结果。操作)
{
var transactionId=balance.transactionId;
var transactionResponse=
GetTransaction(transactionId).Result;
var receivedCoins=transactionResponse.receivedCoins;
foreach(接收硬币中的硬币)
{
如果(coin.TxOut.ScriptPubKey==
mbwallet.SelectedWallet.CurrentAddress.ScriptPubKey)//mbwallet.Wallet.BitcoinPrivateKey.ScriptPubKey)//这可能不是必需的
{
硬币1.添加(硬币);
txInAmount+=(硬币。作为货币的金额);
}
}
}
返回硬币1;
}
我在代码中看到,您已经将私钥添加到构建器中,因此基本上您只需要签名,类似这样
已签名事务=txBuilder.SignTransaction(tx2)