Как я могу отправить биткойн с помощью С# и библиотеки nbitcoin?

Я использую NBitcoinбиблиотеку для создания личных ключей и адресов, но не могу найти пример отправки биткойнов.

У кого-нибудь есть c#пример кода для отправки биткойнов с помощью NBitcoinбиблиотеки?

Ответы (2)

Вы можете найти пример здесь .

В частности, посмотрите первый пример, где Алиса отправляет биткойны Сатоши:

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();

Обратите внимание на результаты (начальные монеты Алисы). Первый использует GetAddress() для получения биткойн-адреса, соответствующего закрытому ключу Алисы (т. е. P2PKH), а второй использует открытый ключ Алисы (т. е. P2PK).

И транзакция построена здесь:

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
Спасибо за ваш ответ. В этом примере в codeproject они отправляют цветные монеты, я попробовал этот пример, и когда я отправляю его в блок-цепочку, я получаю сообщение об ошибке, говорящее: «неверная транзакция».
Ссылка ведет прямо к простому примеру (с заголовком, начинающимся с «Платеж P2PK, P2PKH, Multi Sig»). Пример с цветными монетами находится намного ниже. Я отредактировал свой ответ, включив в него пример, на который я ссылался. Если это тот, который вы пробовали и не сработали, я мог бы попробовать позже запустить пример самостоятельно.
хорошо для переменной aliceFunding, должен ли я загрузить свой txn последней транзакции для «Алисы»? например, var blockr = new BlockrTransactionRepository(); Транзакция aliceFunding = blockr.Get("4ebf7f7ca0a5dafd10b9bd74d8cb93a6eb0831bcb637fec8e8aabf842f1c2688");
Да. Кстати, в этой электронной книге можно найти еще один полезный ресурс (если вы его еще не знаете) .

хорошо, я обновил код:

//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)); 
Как это сделать с переменным числом адресов отправки, т. е. за пределами свободного блока?