Usando un cliente rpc (p. ej bitcoin-cli
.), para una transacción determinada y el índice de una salida de la misma, ¿cómo puedo saber si la salida es actualmente un utxo o si ya se ha gastado?
En el último caso, también me gustaría saber la transacción en la que se gastó.
Miré el gettxout
comando, pero no tengo claro cómo extraer la respuesta de los datos que devuelve.
Estoy ejecutando un nodo completo con txindex=1.
Si gettxout
devuelve algo, la salida no se gasta. Si no devuelve nada, la salida nunca existió o se gastó.
No necesitas -txindex
para esto.
Como @ pieter-wuille ya respondió la primera mitad de su pregunta:
Si
gettxout
devuelve algo, la salida no se gasta. Si no devuelve nada, la salida nunca existió o se gastó.
Para eso, agregaría que puede configurar el indicador no confirmado true
, por lo que también tiene en cuenta las transacciones no confirmadas.
Para responder a la segunda parte de su pregunta, aquí hay una forma subóptima de encontrar la transacción que gastó su txo:
Esto supone txindex=1
y prune=0
.
Para saber quién gastó el txout puedes averiguar el bloque con el que se confirmó: getrawtransaction {txid} 1
. A partir de aquí, puede recorrer todos los bloques hasta el último que llegó ( getblock
) y el mempool ( getrawmempool
), mientras verifica cada transacción:
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
}
}
shx2
Unconfirmed
parámetro es relevante aquí de alguna manera?pieter wuille
nopara73
The gettxout RPC returns details about a transaction output. Only unspent transaction outputs (UTXOs) are guaranteed to be available.
Esto significa que los txos gastados también pueden estar disponibles. Al jugar con RPC, parece que en la práctica si no devuelve nada, de hecho no se gastó, pero ¿está garantizado? ¿La referencia del desarrollador es incorrecta? bitcoin.org/en/developer-reference#gettxoutpieter wuille
nopara73