Wenn der Bitcoin-Client eine Transaktion erhält, prüft er, ob die Transaktion bestätigt wurde. Dies geschieht, indem überprüft wird, ob die Transaktion im Merkle-Baum korrekt zur Merkle-Wurzel in einem Block gehasht wird.
Woher weiß der Client, welcher Block die Merkle-Wurzel der Transaktion enthält?
Wie wird der Merkle-Zweig erworben, nachdem der richtige Block gefunden wurde?
Im aktuellen P2P-Protokoll gibt es keine Möglichkeit, eine historische (=bestätigte) Transaktion anzufordern, ohne den Block anzufordern, in dem sie sich befindet. Um dies zu unterstützen, müsste der Peer jemals einen vollständigen Index aller Transaktionen haben, was für den Normalfall nicht erforderlich ist Betrieb.
Um eine Transaktion anzufordern, werden Sie entweder:
getdata MSG_TX <txid>
, um einen Speicherpool oder eine kürzlich weitergeleitete Transaktion anzufordern. In diesem Fall sind keine Blockinformationen vorhanden.getdata MSG_BLOCK <blkid>
, um einen vollständigen Block anzufordern. In diesem Fall erhalten Sie den Block damit und müssen trotzdem den vollständigen Merkle-Baum überprüfen.getdata MSG_FILTERED_BLOCK <blkid>
Sie diese Option, um einen gefilterten Block anzufordern (siehe BIP37). In diesem Fall können Sie den partiellen Merkle-Baum überprüfen, um sicherzustellen, dass die Transaktion tatsächlich Teil des Blocks ist.
Sommerzwiebel
Steven Rose
getdata
Methode nicht? Ist es neu?Pieter Wuille
getblocks
/inv
/getdata
/block
-Zyklus verwenden.Pieter Wuille
getdata
ist eine P2P-Nachricht, kein RPC-Aufruf. Sie können nur diegetblock
undgetblockhash
RPC-Befehle verwenden, um Blöcke aus der Datenbank anzufordern.