Я хочу получить статистику о том, сколько процентов неподтвержденных транзакций в мемпуле имеют попытки двойных трат и какое значение имеют. Для этого я хочу получать уведомления, когда приходит неподтвержденный tx, конфликтующий с существующим tx в мемпуле. Я понимаю, что биткойн примет первую транзакцию, которую он увидит, и отклонит следующую. Могу ли я настроить/исправить биткойн, чтобы он отправлял мне уведомление о такой попытке двойной траты?
PS: я понимаю, что двойная трата может произойти при прямом включении новых транзакций в следующий блок без появления в списке неподтвержденных транзакций. Я думаю, что для этого требуется прямой доступ к пулу майнинга и достаточные гарантии того, что блок будет добыт. Для моего эксперимента я могу игнорировать этот случай, поскольку он имеет низкую вероятность.
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. Возможно, благодаря этому интерфейсу вы получите больше уведомлений.