¿Qué pasó con el campo "tiempo" (y tiempo de bloqueo) de las transacciones sin procesar?

He estado llamando al método HTTP getrawtransactiondurante un tiempo para recuperar transacciones sin procesar. Antes, hasta hace poco, obtenía el timecampo 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 timecampo/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 timecampo/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 timey blocktimecampo/valor también tiene confirmationsy blockhash. La forma en que obtengo estas transacciones de bitcoin es que escucho el zmqpuerto, y una vez que llega el hash de una transacción, llamo al método HTTP getrawtransactionpara 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 timecampo/valor poblado.

¿Estoy especulando, en este punto, que estas transacciones que no están timeasociadas con ellas no están confirmadas? ¿Es correcto este entendimiento?

Si tengo entendido que algunas transacciones no tienen un timeasociado 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 timecampo, 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).

Respuestas (1)

¿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:

ingrese la descripción de la imagen aquí

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 getrawtransactionsalida RPC. Si lo necesita, puede obtenerlo del getrawmempoolRPC (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.

También puede usar getmempoolentry <txid>desde 0.13.0, creo.