Also erstelle ich eine Transaktion mit TransactionBuilder wie folgt:
var builder = new TransactionBuilder();
Transaction tx = builder
.AddCoins(coins)
.AddKeys(privateKeys)
.Send(recipientAddress, Money.Coins(amount))
.SetChange(changeAddress)
.SendFees(Money.Coins(fee))
.BuildTransaction(sign: true);
Boolean verified = builder.Verify(tx);
Und dann gebe ich es wie folgt an das Netzwerk weiter:
using (var node = Node.ConnectToLocal(network))
{
node.VersionHandshake();
node.SendMessage(new InvPayload(InventoryType.MSG_TX, tx.GetHash()));
node.SendMessage(new TxPayload(tx));
Thread.Sleep(500);
}
Ich habe zwei Fragen:
Was builder.Verify(tx)
sagt uns das sogar? Es gibt einen booleschen Wert zurück, aber manchmal kann ich Transaktionen weitergeben, die zurückgegeben wurden false
. Was bedeutet verifizieren/tun?
Da Verify()
uns nicht wirklich gesagt wird, ob eine Transaktion erfolgreich weitergegeben wird, wie kann ich feststellen, wann eine mit TransactionBuilder durchgeführte Transaktion an das Netzwerk weitergegeben wird oder nicht?
Verify()
überprüft, ob die Transaktion ordnungsgemäß signiert ist.
Da Verify() uns nicht wirklich sagt, ob eine Transaktion erfolgreich weitergegeben wird
Es ist entweder falsch oder Sie haben einen Fehler gefunden.
node.SendMessage(new TxPayload(tx));
sollte perfekt sein. Stratis baut jedoch derzeit unter der Leitung von Nicolas Dorier, dem Schöpfer von NBitcoin, einen Bitcoin .NET Fullnode , daher sollten Sie sicher sein, dass die von ihnen verwendete Methode auf dem neuesten Stand ist. In ihren Tests machen sie es etwas anders:
node.VersionHandshake();
node.SendMessageAsync(new InvPayload(transaction));
node.SendMessageAsync(new TxPayload(transaction));
node.PingPong();
Ich kann nicht erklären, warum zwei SendMessageAsync
und PingPong
da sind. Vielleicht möchten Sie es herausfinden.
Um sicherzustellen, dass Sie einige andere Knoten fragen möchten, ob sie die Transaktion in ihrem Mempool haben, mit dem Sie verbunden sind, um die Weitergabe zu überprüfen. So was:
bool broadcasted = false;
foreach(var txid in node.GetMempool())
{
if(txid.Equals(tx.GetHash()))
{
broadcasted = true;
}
}
Alternativ können Sie auch nur Ihren Knoten fragen. Ich vermute stark, dass die Transaktion nicht in Ihren (Bitcoin Core) Mempool gelangen würde, wenn etwas nicht stimmt, aber darauf sollten Sie sich nicht verlassen. Theorie entspricht nicht immer der Praxis.
Datenschutzbedenken: Wenn Sie eine Transaktion ohne Tor übertragen, können interessierte Parteien dies bemerken und zu Schlussfolgerungen kommen.
rosstripi
nopara73
nopara73
rosstripi
nopara73
nopara73
f015
fügt es 2 ein,??
wenn ich es einfüge. (Win7, nicht sicher, ob das wichtig ist). Aus diesem Grund habe ich die Transaktionen auf den obigen Links nicht gesehen.nopara73