He estado llamando al método HTTP getrawtransaction
durante un tiempo para recuperar transacciones sin procesar. Antes, hasta hace poco, obtenía el time
campo con cada transacción. Sin embargo, en los últimos días, noté que este campo ya no está presente en algunas transacciones. ¿Qué pasó con este campo?
Aquí hay un ejemplo que tiene el time
campo/valor:/usr/local/bin/bitcoin-cli getrawtransaction b6a26cc6d1573473724ad3bd49b16a33a69a738f4d1eb9e5992e39ec0be086a9 1
{
"result":{
"hex":"01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4b03e8d0030551fdc4495efabe6d6d7a81d2b72c3811f3a24b5a5d4431f46d284993aa067a25ec6abdb030209eacb8010000000000000000454d432055533200d0298378097f0000a19d0000ffffffff01b11d0096000000001976a914740ecaf436d5867903c722d783fc994c25a29b1588ac00000000",
"txid":"b6a26cc6d1573473724ad3bd49b16a33a69a738f4d1eb9e5992e39ec0be086a9",
"hash":"b6a26cc6d1573473724ad3bd49b16a33a69a738f4d1eb9e5992e39ec0be086a9",
"size":160,
"vsize":160,
"version":1,
"locktime":0,
"vin":[
{
"coinbase":"03e8d0030551fdc4495efabe6d6d7a81d2b72c3811f3a24b5a5d4431f46d284993aa067a25ec6abdb030209eacb8010000000000000000454d432055533200d0298378097f0000a19d0000",
"sequence":4294967295
}
],
"vout":[
{
"value":25.16590001,
"n":0,
"scriptPubKey":{
"asm":"OP_DUP OP_HASH160 740ecaf436d5867903c722d783fc994c25a29b15 OP_EQUALVERIFY OP_CHECKSIG",
"hex":"76a914740ecaf436d5867903c722d783fc994c25a29b1588ac",
"reqSigs":1,
"type":"pubkeyhash",
"addresses":[
"1Baf75Ferj6A7AoN565gCQj9kGWbDMHfN9"
]
}
}
],
"blockhash":"000000000000003d8ec00e2cbaf8090697b1598abe1e209960e55f0884d6044e",
"confirmations":10,
"time":1375585378,
"blocktime":1375585378
},
"id":"bitcoin"
}
Aquí hay un ejemplo que no tiene el time
campo/valor: /usr/local/bin/bitcoin-cli getrawtransaction 0a5c687bafb7f5008028efc4dcdd510c15be86347b0607e5bf461f211ecbaf78 1
.
{
"result": {
"hex": "010000000153af347ad5e3c28296b7fc833a02612dbf9a5b76752133b18fd51a532803556c010000006a473044022052622e673e12298315553671df71c4795a5baffb5992ae2b90a95f84539a8d9302200c81def7655facab2f3860345a9b35fe157e2b08b27721f7af49c5ec80483d9a012103628a2f0c158be42a1c8ce37dfffd9951dd3c8bf9ca13e592b864e46784cc9ebffeffffff0292cf032f070000001976a914df01a3394df97f114943a8e37ada789ea6d7bef788ac00e1f505000000001976a9141e5e089913ff694d2f3f3b8ed1ec1e24bdc311c488ac1f020700",
"txid": "0a5c687bafb7f5008028efc4dcdd510c15be86347b0607e5bf461f211ecbaf78",
"hash": "0a5c687bafb7f5008028efc4dcdd510c15be86347b0607e5bf461f211ecbaf78",
"size": 225,
"vsize": 225,
"version": 1,
"locktime": 459295,
"vin": [
{
"txid": "6c550328531ad58fb1332175765b9abf2d61023a83fcb79682c2e3d57a34af53",
"vout": 1,
"scriptSig": {
"asm": "3044022052622e673e12298315553671df71c4795a5baffb5992ae2b90a95f84539a8d9302200c81def7655facab2f3860345a9b35fe157e2b08b27721f7af49c5ec80483d9a[ALL] 03628a2f0c158be42a1c8ce37dfffd9951dd3c8bf9ca13e592b864e46784cc9ebf",
"hex": "473044022052622e673e12298315553671df71c4795a5baffb5992ae2b90a95f84539a8d9302200c81def7655facab2f3860345a9b35fe157e2b08b27721f7af49c5ec80483d9a012103628a2f0c158be42a1c8ce37dfffd9951dd3c8bf9ca13e592b864e46784cc9ebf"
},
"sequence": 4294967294
}
],
"vout": [
{
"value": 308.5354997,
"n": 0,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 df01a3394df97f114943a8e37ada789ea6d7bef7 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a914df01a3394df97f114943a8e37ada789ea6d7bef788ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"1ML9eZVM3NTLvM25w4eYfWLQC9gHwRuBJb"
]
}
},
{
"value": 1,
"n": 1,
"scriptPubKey": {
"asm": "OP_DUP OP_HASH160 1e5e089913ff694d2f3f3b8ed1ec1e24bdc311c4 OP_EQUALVERIFY OP_CHECKSIG",
"hex": "76a9141e5e089913ff694d2f3f3b8ed1ec1e24bdc311c488ac",
"reqSigs": 1,
"type": "pubkeyhash",
"addresses": [
"13mZvKjZ3TtzfL7z4EqsG5sMNWayzjNHtY"
]
}
}
]
},
"error": null,
"id": "bitcoin"
}
Me di cuenta de que esto sucede con las transacciones de bitcoin más nuevas y entrantes, pero no con las más antiguas. Una diferencia clave entre las dos salidas JSON es que la transacción con time
y blocktime
campo/valor también tiene confirmations
y blockhash
. La forma en que obtengo estas transacciones de bitcoin es que escucho el zmq
puerto, y una vez que llega el hash de una transacción, llamo al método HTTP getrawtransaction
para decodificar el hash. Me doy cuenta de que si espero un rato o sigo intentando llamar getrawtransaction
(por ejemplo, presiono la tecla de flecha hacia arriba + ingresar varias veces durante unos segundos), entonces la transacción que JSON devolvió finalmente tiene el time
campo/valor poblado.
¿Estoy especulando, en este punto, que estas transacciones que no están time
asociadas con ellas no están confirmadas? ¿Es correcto este entendimiento?
Si tengo entendido que algunas transacciones no tienen un time
asociado porque no están confirmadas, cuando se confirman, ¿se retransmiten a través de la red (por ejemplo, a través de zmq) para que tenga otra oportunidad de obtenerlas?
Tenga en cuenta que no estoy tratando de crear o manipular datos, simplemente escucho las nuevas transacciones entrantes y las analizo. Una de mis lógicas se centra en el time
campo, y dado que noté que no todas las transacciones tienen este campo, ese código "se rompe" (ya que se supone que todas las transacciones decodificadas tendrán dicho campo/valor).
¿Estoy especulando, en este punto, que estas transacciones que no tienen tiempo asociado con ellas no están confirmadas? ¿Es correcto este entendimiento?
Sí. La referencia para desarrolladores de Bitcoin.org explica:
La razón de esto es que las transacciones en sí mismas no contienen un campo de tiempo, por lo que las únicas veces que se pueden usar son (1) cuando el nodo recibió la transacción por primera vez o (2) el campo de tiempo de un bloque que incluye la transacción. .
Bitcoin Core realiza un seguimiento del número 1, pero no lo muestra en la getrawtransaction
salida RPC. Si lo necesita, puede obtenerlo del getrawmempool
RPC (intente llamar a ese RPC con el parámetro true
). Tenga en cuenta que el tiempo puede cambiar si una transacción se desaloja del mempool (debido a la antigüedad o a tarifas bajas) y luego se vuelve a agregar.
pieter wuille
getmempoolentry <txid>
desde 0.13.0, creo.