Я отдаю себе отчет в новом -walletnotify флаг, но я рассматриваю это как farily супертяжелом решение, потому что его использование требует порождения нового процесса, а затем этот процесс должен сделать jsonrpc вызов обратно bitcoind для того, чтобы позвонить gettransaction и, наконец, получить необходимую информацию , И я заметил, что иногда bitcoind это лага отвечает на запросы jsonrpc.
Таким образом, мое первоначальное рассуждение было то, что было бы гораздо эффективнее просто регистрировать сделки в формате JSON с того же места, что walletnotify обработка происходит в bitcoind. внутри CWallet :: AddToWallet ().
Я реализовал патч, который делает это. Первая проблема заключается в том, что утверждение всегда сообщается как 0. Таким образом, моя рабочая теория, что, возможно, код выполняется слишком рано codepath, прежде чем поле счетчика подтверждения обновляется.
Кроме того, кажется, что для принимает, функция AddToWallet () вызывается дважды, но посылает он вызывается 3 раза. В идеале, эта функция регистрации будет регистрировать до N подтверждений, поэтому на самом деле она должна быть где-то, что вызывается для каждого подтверждения. любые предложения, где? (Очевидно, что это ограничение для -walletnotify функции, а также.)
Вот пример вывода из файла журнала для принятого сделки:
[{"Счет":"","адрес":"AHBL4ezNrqdipSXknANkbGGKXfJtzvv7A6","категория":"Получать","количество": 0.10000000,"подтверждения": 0,"TXID":"3b69b0bcc907c22803fd32299324b38b6d5082ba55fd1a8eaebf5759f5330754","время": 1374792299,"timereceived": 1374792299}] [{"Счет":"","адрес":"AHBL4ezNrqdipSXknANkbGGKXfJtzvv7A6","категория":"Получать","количество": 0.10000000,"подтверждения": 0,"TXID":"3b69b0bcc907c22803fd32299324b38b6d5082ba55fd1a8eaebf5759f5330754","время": 1374792299,"timereceived": 1374792299}]
Это мой первый раз погружение в bitcoind код, и я в настоящее время намеревающийся этот патч только для моего личного использования. Я знаю, что это грубо - так, пожалуйста, не ворошить меня над углями слишком много. 😉 Вот патч:
Diff --git а / SRC / init.cpp б / SRC / init.cpp
Индекс 3dce3cf..4bfdc65 100644
--- а / SRC / init.cpp
+++ б / SRC / init.cpp
@@ -354,0 +355 @@ станд :: строка HelpMessage ()
+ " -walletlog =<файл> " + _ ("Вход в файл при изменении транзакции бумажника. нестандартное.") + "\ п" +
Diff --git а / SRC / wallet.cpp б / SRC / wallet.cpp
Индекс 872afae..364c992 100644
--- а / SRC / wallet.cpp
+++ б / SRC / wallet.cpp
@@ -12,0 +13,4 @@
+#включают <повышение / filesystem.hpp>
+#включают "JSON / json_spirit_value.h"
+#включают "JSON / json_spirit_writer_template.h"
+
@@ -13,0 +18 @@, используя патезрас;
+с использованием пространства имен json_spirit;
@@ -14,0 +20 @@ с помощью патезрасе;
+недействительным ListTransactions (Const CWalletTx& WTX, Const строка& strAccount, внутр nMinDepth, BOOL fLong, массив& RET);
@@ -496,0 +503,17 @@ BOOL CWallet :: AddToWallet (Const CWalletTx& wtxIn)
+ станд :: строка strLog = GetArg ("-walletlog", "");
+ если (! strLog.empty ())
+ {
+ FILE * Fh = Еореп (strLog.c_str (), "");
+ если (! СПЧ) {
+ Е ("Не удалось открыть файл журнала бумажника:% s", StrLog.c_str ());
+ }
+ еще {
+ Массив RET;
+ ListTransactions (WTX, "*", 0, правда, RET);
+
+ Строка вывода = write_string (Значение (RET), ложно) + "\ п";
+ fputs (output.c_str (), ФХ);
+ fclose (АЯ);
+ }
+ }
+