Wie finde ich utxo?

Ich denke vielleicht zu viel darüber nach, aber ich versuche herauszufinden, wie ich am besten einen nicht ausgegebenen Ausgabepool aufbauen kann. Sollte ich einfach naiv jeden Block parsen? Jede Eingabe wird aus dem Hash-Set entfernt und jede Ausgabe wird wieder hinzugefügt? Scheint schrecklich ineffizient. Die Sache ist, dass es anscheinend sowieso nicht möglich ist, diesen Utxo-Pool genau zu erstellen, ohne die Blockkette mindestens einmal zu durchlaufen und zu erstellen. Gibt es eine gut definierte Abkürzung, die ich beachten sollte? Hinweise willkommen.

Ich denke, ich kann zuerst die Blöcke auf der Festplatte durchlaufen und dann aktualisieren, wenn Blöcke eintreffen.

Das klingt überhaupt nicht ineffizient. Was erscheint Ihnen daran ineffizient?
Ich glaube, ich dachte nur, dass es einen effizienteren Weg geben könnte. Ich dachte, der offizielle Client hat den utxo-Pool in einer Art Baumstruktur gespeichert, um nur zu versuchen, mehr Einblick darin zu bekommen.
Sie können einfach RPC verwenden, um den nicht ausgegebenen Ausgabepool direkt von Bitcoin zu erhalten.
@goatse Welcher Befehl?
GROSSE Frage. Das ist genau die Art von Details, die die BITS nicht für wichtig halten und die die meisten selbst nicht verstehen. bitcoin.org bezeichnete Bitcoin Core als experimentell. Wenn der UTXO-Pool jemals nicht mehr mit dem Ledger synchron ist, selbst wenn nur ein SAT vorhanden ist, gibt es keine zentrale Autorität, um eine Wiederherstellung einzuleiten.

Antworten (4)

Es gibt bereits einen Pool mit den Informationen, die Sie zu bauen bereit sind: the UTXO set. Sie können darauf zugreifen, indem Sie die LevelDB abfragen, die sich in .bitcoin/chainstateeinem vollständigen Knoten befindet.

Es gibt jedoch keine einfache Möglichkeit, dies mit RPC-Befehlen zu tun, Sie sollten die Informationen selbst extrahieren.

Ich kann Ihnen bei Bedarf eine Möglichkeit dazu bieten und eine ausführliche Erklärung dessen, was Sie in jedem Eintrag der LevelDB finden werden.

chainstateist nur der Index der vollständigen Kette
Im Chainstate finden Sie alle Daten, die Sie möglicherweise über die UTXOs wissen müssen, wie z. B. die ID, den Out-Index, den Betrag, den scriptPubKey, den Block, in den es aufgenommen wurde, und ob es sich um eine Coinbase handelt oder nicht.
Können Sie etwas über das Dateiformat „*.ldb“ sagen?
Sicher, Sie können diese Antwort überprüfen: bitcoin.stackexchange.com/a/52167/30668

Sie können das UTXO-Set direkt von Bitcoin mit einem listunspentRPC-Aufruf erhalten.

Nur für UTXOs, die Ihnen gehören (oder anderweitig zum Guthaben Ihrer eigenen Brieftasche beitragen).

Es gibt keinen einfachen Weg, das zu bekommen, was Sie wollen, außer auf dem Weg, den Sie zu beschreiben versuchen.

RPC hat keinen Befehl von dem, was Sie wollen, unterstützt.

Wenn Sie UTXOs benötigen, müssen Sie jede *.datBinärdatei von Anfang an der Reihe nach zerlegen und jede Ausgabe aufbewahren, um zukünftige Ausgaben zu überprüfen.

Entschuldigung, aber nicht wahr, was @Matt zu bauen bereit ist, ist bereits Teil des Bitcoin-Core-Clients, er muss nur das UTXO-Set überprüfen. Der Zugriff ist in der Tat nicht einfach, da kein RPC-Befehl verfügbar ist, sodass er auf die LevelDB-Speicher in /chainstate zugreifen und höchstwahrscheinlich seinen eigenen Parser codieren müsste. Es ist jedoch viel einfacher, als jede .dat-Datei zu zerlegen und zu überprüfen, wann jeder UTXO im Laufe der Jahre ausgegeben wurde.
@sr-gi Ich habe es ohne Client gemacht. UTXO-Datenbank aus rohen dat-Dateien.

Folgendes hat für mich in einem Bash-Befehlsfenster funktioniert:

curl https://blockchain.info/unspent?active=place_bitcoin_address_here