Was ist mit dem Feld "Zeit" (und Blockzeit) von Rohtransaktionen passiert?

Ich rufe seit einiger Zeit die HTTP-Methode getrawtransactionauf, um Rohtransaktionen abzurufen. Bis vor kurzem bekam ich das timeFeld bei jeder Transaktion. Allerdings ist mir in den letzten Tagen aufgefallen, dass dieses Feld bei einigen Transaktionen nicht mehr vorhanden ist. Was ist mit diesem Feld passiert?

Hier ist ein Beispiel, das das timeFeld/den Wert hat:/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"
}

Hier ist ein Beispiel, das das timeFeld/den Wert nicht hat: /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"
}

Mir ist aufgefallen, dass dies bei neueren und eingehenden Bitcoin-Transaktionen der Fall ist, aber nicht bei älteren. Ein wesentlicher Unterschied zwischen den beiden JSON-Ausgaben besteht darin, dass die Transaktion mit timeund blocktimeFeld/Wert auch über confirmationsund verfügt blockhash. Ich bekomme diese Bitcoin-Transaktionen so, dass ich den zmqPort abhöre und sobald der Hash einer Transaktion durchkommt, rufe ich dann die HTTP-Methode getrawtransactionauf, um den Hash zu decodieren. Ich stelle fest, dass, wenn ich eine Weile warte oder weiter versuche anzurufen getrawtransaction(z. B. die Aufwärtspfeiltaste + Enter mehrmals über einen Zeitraum von einigen Sekunden drücken), die zurückgegebene JSON-Transaktion schließlich das timeFeld/den Wert ausgefüllt hat.

Ich spekuliere an dieser Stelle, dass diese Transaktionen, die nichts timemit ihnen zu tun haben, unbestätigt sind? Ist dieses Verständnis richtig?

Wenn ich richtig verstehe, dass einige Transaktionen nicht timemit ihnen verbunden sind, weil sie unbestätigt sind, werden sie dann, wenn sie bestätigt werden, über das Netzwerk (z. B. über zmq) erneut gesendet, damit ich eine weitere Chance habe, sie zu erhalten?

Bitte beachten Sie, dass ich nicht versuche, Daten zu erstellen oder zu manipulieren, sondern nur eingehende neue Transaktionen abhöre und sie parse. Eine meiner Logiken dreht sich um das timeFeld, und da ich festgestellt habe, dass nicht alle Transaktionen dieses Feld haben, "bricht" dieser Code (da davon ausgegangen wird, dass alle decodierten Transaktionen ein solches Feld / einen solchen Wert haben).

Antworten (1)

Ich spekuliere an dieser Stelle, dass diese Transaktionen, denen keine Zeit zugeordnet ist, unbestätigt sind? Ist dieses Verständnis richtig?

Ja. Die Bitcoin.org-Entwicklerreferenz erklärt:

Geben Sie hier die Bildbeschreibung ein

Der Grund dafür ist, dass die Transaktion selbst kein Zeitfeld enthält, sodass die einzigen Zeiten, die verwendet werden können, entweder (1) wann der Knoten die Transaktion zum ersten Mal erhalten hat oder (2) das Zeitfeld aus einem Block, der die Transaktion enthält .

Bitcoin Core verfolgt zwar #1, zeigt es aber nicht in der getrawtransactionRPC-Ausgabe an. Wenn Sie es brauchen, können Sie es vom getrawmempoolRPC bekommen (versuchen Sie, diesen RPC mit dem Parameter aufzurufen true). Beachten Sie, dass sich die Zeit ändern kann, wenn eine Transaktion aus dem Mempool entfernt (aufgrund von Alter oder niedrigen Gebühren) und später wieder hinzugefügt wird.

Sie können auch getmempoolentry <txid>seit 0.13.0 verwenden, denke ich.