Как найти подтверждённую 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