Wie kann ich Bitcoin mit c# und der nbitcoin-Bibliothek senden?

Ich verwende die NBitcoinBibliothek, um meine privaten Schlüssel und Adressen zu erstellen, aber ich kann kein Beispiel zum Senden von Bitcoin finden.

Hat jemand einen c#Beispielcode zum Senden von Bitcoin mithilfe der NBitcoinBibliothek?

Antworten (2)

Ein Beispiel finden Sie hier .

Siehe insbesondere das erste Beispiel, in dem Alice Bitcoins an Satoshi sendet:

Transaction aliceFunding = new Transaction()
{
   Outputs =
   {
       new TxOut("0.45", alice.GetAddress()),
       new TxOut("0.8", alice.Key.PubKey)
   }
};
Coin[] aliceCoins = aliceFunding
                    .Outputs
                    .Select((o, i) => new Coin(new OutPoint(aliceFunding.GetHash(), i), o))
                    .ToArray();

Beachten Sie die Ausgänge (Alices anfängliche Münzen). Der erste verwendet GetAddress(), um die Bitcoin-Adresse zu erhalten, die dem privaten Schlüssel von Alice (dh P2PKH) entspricht, während der zweite den öffentlichen Schlüssel von Alice (dh P2PK) verwendet.

Und die Transaktion wird hier konstruiert:

var txBuilder = new TransactionBuilder();
var tx = txBuilder
    .AddCoins(aliceCoins)
    .AddKeys(alice.Key)
    .Send(satoshi.GetAddress(), "1.00")
    .SendFees("0.001")
    .SetChange(alice.GetAddress())
    .BuildTransaction(true);
Assert(txBuilder.Verify(tx)); //check fully signed
Vielen Dank für Ihre Antwort. In diesem Beispiel in Codeproject senden sie farbige Münzen. Ich habe das Beispiel ausprobiert und wenn ich es an die Blockchain sende, erhalte ich eine Fehlermeldung mit der Aufschrift - fehlerhafte Transaktion.
Der Link führt Sie direkt zu einem einfachen Beispiel (mit einer Überschrift, die mit „P2PK, P2PKH, Multi-Sig-Zahlung“ beginnt). Das Beispiel der farbigen Münzen befindet sich viel weiter unten. Ich habe meine Antwort so bearbeitet, dass sie das Beispiel enthält, auf das ich mich bezog. Wenn Sie das versucht haben und nicht funktioniert haben, kann ich später versuchen, das Beispiel selbst auszuführen.
ok für die Variable aliceFunding, soll ich meine txn der letzten Transaktion für "Alice" laden? zB var blockr = new BlockrTransactionRepository(); Transaktion aliceFunding = blockr.Get("4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf842f1c2688");
Ja. Übrigens, eine weitere Ressource, die nützlich sein könnte (falls Sie sie noch nicht kennen), finden Sie in diesem E-Book .

ok ich habe den Code aktualisiert:

//Load latest transaction:
        var blockr = new BlockrTransactionRepository();

        NBitcoin.uint256 check = new NBitcoin.uint256("4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf842f1c2688");

        Transaction aliceFunding = blockr.Get(check);


        Coin[] aliceCoins = aliceFunding
                                .Outputs
                                .Select((o, i) => new Coin(new OutPoint(aliceFunding.GetHash(), i), o))
                                .ToArray();

        txBuilder = new TransactionBuilder();
        tx = txBuilder
            .AddCoins(aliceCoins)
            .AddKeys(alice.Key)
            .Send(satoshi.GetAddress(), "0.05")
            .SendFees("0.001")
            .SetChange(alice.GetAddress())
            .BuildTransaction(true);


        Assert(txBuilder.Verify(tx)); 
Wie macht man das mit einer variablen Anzahl von Sendeadressen, also außerhalb des Fluent-Blocks?