Was muss ich nach der Erstellung mit einer Coinbase-Transaktion tun?

Ich habe erfolgreich eine Coinbase-Transaktion mit dem Befehl erstellt:

createrawtransaction '[{"txid":"0000000000000000000000000000000000000000000000000000000000000000","vout":0}]' '{"12Evb28oMpkP76HRS2CZ7VjNMD25B84VMv":12.5}'

Was gibt eine Hex-Zeichenfolge für die Transaktion. Aber wenn ich es versuche, signrawtransactionbekomme ich diesen Fehler:

{
  "hex": "...",
  "complete": false,
  "errors": [
    {
      "txid": "0000000000000000000000000000000000000000000000000000000000000000",
      "vout": 0,
      "scriptSig": "",
      "sequence": ...,
      "error": "Input not found or already spent"
    }
  ]
}

mit sendrawtransactionsich habe:

Missing inputs (code -25)

Was muss ich mit dieser Transaktion tun, nachdem ich sie erstellt habe?

Antworten (1)

Eine Coinbase-Transaktion ist keine Transaktion, die signiert oder an das Netzwerk gesendet wird. Vielmehr sollte es die erste Transaktion in dem Block sein, den Sie abbauen. Außerdem müssen die ersten 4 Bytes der scriptSig die Höhe des Blocks sein (1 Byte für Pushdata 3 Bytes für die Höhe).

Das Ergebnis für den obigen Befehl createrawtransaction ist ein Hex-String. Um den Block zu erstellen, den ich senden möchte, brauche ich eine Transaktions-ID (txid)? Oder irre ich mich? Wenn nicht, wie erhalte ich die txid für die Coinbase-Transaktion?
Die txid ist der Hash der Bytes der Transaktion, also müssen Sie zuerst den Hexstring zu einem Array von Bytes machen und diesen dann mit sha256d hashen. Der Block enthält auch diese Transaktion, nicht die txid (die txid ist nur ein Teil der Merkle-Root), also muss Ihr Block, wenn Sie ihn senden, auch die Transaktion selbst enthalten.
Wissen Sie, wie Sie die Transaktion packen, um sie an den Block anzuhängen? Erstellen Sie einfach ein Array mit jedem Feld und hashen Sie es dann mit sha256d?
Der Hash ist nicht im Block enthalten. Es wird nur zum Erstellen der Merkle-Wurzel verwendet. Die Transaktion ist die Hex-Zeichenfolge, die Ihnen createrawtransaction gibt. Sie müssen es leicht modifizieren. Diese Hex-Zeichenfolge ist eine Zeichenfolgendarstellung der Bytes, daher müssen Sie sie in ein Array von Bytes konvertieren. Alle zwei Zeichen sind ein Byte.
Nicht die Coinbase-Transaktion, meine ich. Wie die Transaktionen in den Block gepackt werden: die vom getblocktemplateBefehl zurückgegebenen. Ich weiß bereits, wie ich die Daten von der json-rpc-Schnittstelle abrufen kann. Um die Merkle-Wurzel zu berechnen, erstelle ich ein Array mit allen txids. Welche anderen verfügbaren Daten muss ich verwenden, um die Transaktionsliste für den neuen Block zu erstellen?
Sie brauchen nur das Hex der Transaktion, das Sie mit getrawtransaction erhalten können.