Как найти подтверждённую Bitcoin-транзакцию по хешу блока
Если индексатор сохраняет хеш блока вместе с идентификатором транзакции, он сможет запросить её у Bitcoin Core с выключенным txindex. Для этого на ноде должно сохраниться тело блока.
Проверьте транзакцию из последнего блока
block=$(bitcoin-cli getbestblockhash)
tx=$(bitcoin-cli getblock "$block" 1 | jq -r '.tx[0]')
bitcoin-cli getrawtransaction "$tx" 1 "$block" | jq '{txid, blockhash, in_active_chain}'
Пример берёт первую транзакцию блока — coinbase. Третий аргумент указывает Core, в каком именно блоке искать. Сверьте возвращённые идентификаторы и in_active_chain. Если между запросами произошла реорганизация, блок может оставаться доступным для чтения и при этом уже находиться вне активной цепочки.
Разберите ошибку поиска только по идентификатору
bitcoin-cli getindexinfo txindex
bitcoin-cli getrawtransaction "$tx" 1
Без хеша блока Core ищет транзакцию в своём мемпуле либо использует индекс транзакций. На ноде без индекса вторая команда может завершиться ошибкой для той же подтверждённой транзакции, которую удалось прочитать выше. Пустой объект в ответе getindexinfo txindex означает отсутствие такого активного индекса. Если запись есть, перед обслуживанием исторических запросов проверьте synced и best_block_height.
Если вы загружаете транзакции в свою базу, сохраняйте оба идентификатора сразу при чтении блока. Для последующего запроса к уже удалённому при очистке блоку понадобится нода, где остались его данные. Хеш указывает место поиска, но для чтения нужен сам блок.
bitcoincore.org getrawtransaction · bitcoincore.org getindexinfo