В этой ссылке упоминается, что
«[ getdata ] можно использовать для извлечения транзакций, но только если они находятся в пуле памяти или наборе реле — произвольный доступ к транзакциям в цепочке не разрешен…»
Но не может ли узел SPV сделать следующее, чтобы получить произвольный доступ к транзакции T (я предполагаю, что узел SPV знает хэш блока H блока B, содержащего T):
Разве этот механизм на самом деле не дает произвольный доступ к транзакциям?
Это основано на минимальной индексации, необходимой для запуска полного узла.
Сообщение getdata для пиров может запрашивать только ресурсы TX в мемпуле (действительно, не подтверждено). Не все полные узлы индексируют подтвержденные транзакции. UTXO и mempool tx обязательно индексируются для проверки и создания шаблона распространения/блока tx соответственно.
Подтвержденная транзакция предоставляется как часть запроса getdata с блок-хэшами. Блоки индексируются всеми полными узлами. (Поскольку новые заголовки блоков должны ссылаться на предыдущие заголовки, даже если они расширяют ветвь, а не расширяют сильную цепочку)
Исправление (см. комментарий ниже):
Джеймс С.