Здравствуй,
Я создаю интернет-кошелек & Я использую C # (WebAPI) в качестве моего поддерживаемого языка сценариев.
Я также использую NBitcoin & Пакеты QBitninja NuGet разработан NicolasDorier.
Некоторые, как я создал проверить транзакцию, но сеть не может транслировать эту сделку.
Команда: - Bitcoin-кли signrawtransaction 010000000001012be
973e52a7f8efbc91ef9c397a81df05c047e8138c76920fd9225df19aaea360000000000ffffffff 0
2a4c0e400000000001976a9140ecd86fcda32df67e7cbd989eddd38d00bb2504f88ac40420f0000 0
000001976a9145da61fbc2b8de68bbe1b666b4e84bec9d2e3edae88ac02473044022061199488e5
5fe9c3db4678eadc08b92de1d0881dd13ac3af5b39b15543ae4c202205ff7aeead9ba8c3f4bc89a с
0614802ae19f781be8bfa8c74fb01bd50b96c7cf4012103e970de664249bb560ec1501ea8a98571 d
a983c899ee02888d6e41aaab2ff56b300000000
Err. : -
{
"наговор": "010000000001012be973e52a7f8efbc91ef9c397a81df05c047e8138c76920fd9225df
19aaea360000000000ffffffff02a4c0e400000000001976a9140ecd86fcda32df67e7cbd989edd d
38d00bb2504f88ac40420f00000000001976a9145da61fbc2b8de68bbe1b666b4e84bec9d2e3eda е
88ac02473044022061199488e5a5fe9c3db4678eadc08b92de1d0881dd13ac3af5b39b15543ae4c 2
02205ff7aeead9ba8c3f4bc89ac0614802ae19f781be8bfa8c74fb01bd50b96c7cf4012103e970d е
664249bb560ec1501ea8a98571da983c899ee02888d6e41aaab2ff56b300000000",
"полный": ложный,
"ошибки": [
{
"TXID": "36eaaa19df2592fd2069c738817e045cf01da897c3f91ec9fb8e7f2ae573e92b"
,
"Vout": 0,
"scriptSig": "",
"последовательность": 4294967295,
"ошибка": "Вход не найден или уже потратили"
}
]
}
Демо-код: -
струнное SendBitCoins общественного (INT идентификатор пользователь, внутр walletID, строка DestinationAddress, десятичная сумма)
{
пытаться
{
вар MasterKey = новый GetMasterWallet (идентификатор пользователя);
вар PrivateKey = masterKey.PrivateKey;
Плата за деньги = Money.Satoshis (8476);
Деньги transactionAmount = Money.Satoshis (Convert.ToInt64 (количество * 100000000));
вар транзакции = CreateTransaction (идентификатор пользователя, walletID, privateKey.PubKey, transactionAmount, плата, MasterKey);
вар transactionhex = BuildTransaction (транзакция, PrivateKey, DestinationAddress, сумма, плата);
вернуться transactionhex;
}
улов (Исключение)
{
бросить;
}
}
общественная сделка CreateTransaction (интермедиат идентификатор пользователя, внутр userWalletID, Публичных sourcePublicKey, сумма денег, деньги плата, ExtKey masterwallet)
{
пытаться
{
вар INIT = новая сделка ();
если (userWalletID! = 0)
{
вар клиент = новый QBitNinjaClient (Network.TestNet);
вар totalAmount = сумма + плата;
долго transactionAmount = 0;
вар userRequestAddress = _unitOfWork.UserRequestAddressRepository
.GetManyQueryable (х => x.UserID == идентификатор пользователя &&
x.UserWalletID == userWalletID && x.Amount > 0 && ! X.IsActive);
вар userPrivateWalletKey = новый UserWalletChainService (_unitOfWork) .GetUserWalletKey (userWalletID, masterwallet);
вар userPublicWalletKey = userPrivateWalletKey.Neuter ();
userRequestAddress.ToList (). ForEach (х => {
вар extPubKey = userPublicWalletKey.Derive (
новый ключевой ресурс (Convert.ToString (x.ChainDerivationKey)));
// переменная extPrivateKey = userPrivateWalletKey.Derive (
// новый ключевого ресурса (Convert.ToString (x.ChainDerivationKey)));
client.GetBalance (extPubKey.PubKey.Hash.GetAddress (Network.TestNet), правда)
.Result.Operations.ToList (). ForEach (г => {
z.ReceivedCoins.ForEach (л => {
если (totalAmount.Satoshi > transactionAmount)
//init.Outputs.Add(new TxOut (Money.Coins (1m), GetP2WPKH (sourcePublicKey)));
init.Outputs.Add (новые TxOut (Money.Coins (Convert.ToDecimal ((l.Amount, как деньги) .Satoshi) / 100000000), GetP2WPKH (sourcePublicKey)));
//init.Outputs.Add(new TxOut (Money.Coins (Convert.ToDecimal ((l.Amount как деньги) .Satoshi) / 100000000), GetP2WPKH (userPrivateWalletKey.PrivateKey.PubKey)));
transactionAmount + = (l.Amount как деньги) .Satoshi;
});
});
});
}
//init.Outputs.Add(new TxOut (Money.Coins (1m), GetP2WPKH (sourcePublicKey)));
вернуться INIT;
}
улов (Исключение)
{
бросить;
}
}
публичная строка BuildTransaction (транзакция Transaction, Key sourcePriveatKey, строка DestinationAddress, десятичная сумма, деньги плата)
{
TransactionBuilder строитель = NULL;
пытаться
{
вар назначения = BitcoinAddress.Create (DestinationAddress) .ScriptPubKey;
Монета. [] монеты = transaction.Outputs.AsCoins () ToArray ();
строитель = новый TransactionBuilder ();
Сделка Ого = построитель
.AddCoins (монеты [0])
.AddKeys (sourcePriveatKey)
.Отправить (назначения, Money.Coins (сумма))
.SetChange (sourcePriveatKey)
.SendFees (платно)
.BuildTransaction (знак: верно);
если (builder.Verify (TX))
вернуть tx.ToHex ();
еще
вернуть "";
}
улов (Исключение)
{
бросить;
}
}
Пожалуйста, дайте мне предложение кто-нибудь знает, что я делаю неправильно.