Используя клиент rpc (например bitcoin-cli
), для данной транзакции и индекса ее вывода, как я могу определить, является ли вывод в настоящее время utxo или он уже был потрачен?
В последнем случае я также хотел бы знать транзакцию, на которую она потрачена.
Я посмотрел на gettxout
команду, но мне непонятно, как извлечь ответ из возвращаемых ею данных.
Я запускаю полный узел с txindex=1.
Если gettxout
что-то возвращает, результат остается неизрасходованным. Если он ничего не возвращает, вывод либо никогда не существовал, либо был потрачен.
Вам для этого не нужно -txindex
.
Поскольку @pieter-wuille уже ответил на первую половину вашего вопроса:
Если
gettxout
что-то возвращает, результат остается неизрасходованным. Если он ничего не возвращает, вывод либо никогда не существовал, либо был потрачен.
Для этого я бы добавил, что вы можете установить неподтвержденный флаг true
, чтобы он также учитывал неподтвержденные транзакции.
Чтобы ответить на вторую часть вашего вопроса, вот неоптимальный способ найти транзакцию, которая потратила ваш txo:
это предполагает txindex=1
и prune=0
.
Чтобы узнать, кто потратил txout, вы можете определить блок, которым он был подтвержден: getrawtransaction {txid} 1
. Отсюда вы можете перебирать все блоки до последнего пришедшего ( getblock
) и мемпула ( getrawmempool
), проверяя каждую транзакцию:
foreach(var input in tx.inputs)
{
if(input.prevout.txid == myTxo.txid && input.prevout.index == myTxo.index)
{
// tx spent the txo you were looking for
}
}
шх2
Unconfirmed
параметр здесь как-то актуален?Питер Уилле
нопара73
The gettxout RPC returns details about a transaction output. Only unspent transaction outputs (UTXOs) are guaranteed to be available.
это означает, что потраченные txos также могут быть доступны. Играя с RPC, на практике кажется, что если он ничего не возвращает, он действительно не потрачен, но гарантируется ли это? Ссылка разработчика неверна? bitcoin.org/en/developer-reference#gettxoutПитер Уилле
нопара73