Обнаружение неподтвержденных двойных расходов с помощью биткойнов

Я хочу получить статистику о том, сколько процентов неподтвержденных транзакций в мемпуле имеют попытки двойных трат и какое значение имеют. Для этого я хочу получать уведомления, когда приходит неподтвержденный tx, конфликтующий с существующим tx в мемпуле. Я понимаю, что биткойн примет первую транзакцию, которую он увидит, и отклонит следующую. Могу ли я настроить/исправить биткойн, чтобы он отправлял мне уведомление о такой попытке двойной траты?

PS: я понимаю, что двойная трата может произойти при прямом включении новых транзакций в следующий блок без появления в списке неподтвержденных транзакций. Я думаю, что для этого требуется прямой доступ к пулу майнинга и достаточные гарантии того, что блок будет добыт. Для моего эксперимента я могу игнорировать этот случай, поскольку он имеет низкую вероятность.

Ответы (2)

bitcoindимеет параметр отладки с именем mempoolrej. Вы можете включить это, добавив

debug=mempoolrej

в ваш файл bitcoin.conf.

Эти параметры отладки говорят bitcoindраспечатать информацию о транзакциях, которые он отклоняет из мемпула, включая причину. Таким образом, вы можете включить эту опцию, а также хвост и grep debug.logфайл, ищущий строку

was not accepted

Эта строка встречается только в mempoolrejсообщении, имеющем вид

<txid> from peer=<peer id> was not accepted: <reason>

Вы reasonищете . txn-mempool-conflictТаким образом, вы можете использовать хвост и grep для всей строки:

was not accepted: txn-mempool-conflict

Затем с помощью некоторого bash-fu вы можете заставить это уведомлять вас всякий раз, когда эта строка находится в debug.logфайле.

Обычно bitcoind не дает такого уведомления, но Bitcoind поддерживает подключение через ZeroMQ. Возможно, благодаря этому интерфейсу вы получите больше уведомлений.