UXTO-DB-Struktur

Nach dem Update von Bitcoin Core auf Version 0.15 hat die Chainstate-Datenbank das Datenformat geändert.

Das alte Präfix des Schlüssels war 0x63 , jetzt 0x43 , und Schlüssel/Wert sind unterschiedlich

Wo ist das neue Format beschrieben, oder kann jemand daran arbeiten?

AKTUALISIERT

Probe

Taste:

43000000dcf3713a29f3da53dbde07ea93ace52a4393ba9a009d8ac17c853c18e500

Wert:

d42ade0dfd6a93b6ecbc6098336feedaa21b79128e29d5b7ee2d42

Präfix-BYTE:

0x43

Transaktions-ID:

e5183c857cc18a9d009aba93432ae5ac93ea07dedb53daf3293a71f3dc000000

Index VARINT:

0x00 -> 0x00(0)

Code VARINT:

0xD42A -> 0x2AAA(10922)

Blockhöhe:

Code >> 1 = 0x1555(5461)

Ist Coinbase:

Code & 1 = 0x00(0)

Wert VARINT:

0xDE0D -> 0x2F8D(12173) -> decompressMSB128 -> 0x21084(135300)

Geben Sie VARINT ein:

0xFD6A -> 0x3F6A(16234)
Wenn Sie UTXOs finden möchten, finde ich das Scannen der Blockchain eine bessere Option: bitcoin.stackexchange.com/a/65083/2075

Antworten (1)

Jeder Eintrag im neuen 0.15-Format ist als definiert outpoint:coinund hat die folgende Struktur:

Outpoint wird gebildet durch: key | tx_hash | index.

Wo das keyentspricht b'C', oder 43in hex. Das transaction hashin ist in Little Endian kodiert und das indexist ein base128 varint. Den entsprechenden Quellcode von Bitcoin Core finden Sie hier .

Andererseits wird eine Münze gebildet durch: code | value | out_type | script.

Wo codekodiert die Blockhöhe und ob die Transaktion Coinbase ist oder nicht, als 2*height + coinbase, das valueist ein txout compressed base128 varint, das out_typeist auch ein base128 varint, und das scriptsind die verbleibenden Daten. Den entsprechenden Quellcode von Bitcoin Core finden Sie hier .

Version 0.15 verwendete immer noch einen Verschleierungsschlüssel, um das Auslösen von Antivirensoftware zu vermeiden. Sie können diese Antwort überprüfen, um zu erfahren, wie sie in der Datenbank gespeichert ist und wie Sie sie verwenden können, um Ihre Daten zu entschlüsseln.

Wenn Sie schließlich einen Decoder für beide Versionen 0.14 (0.8-0.14) und das neue 0.15-Format benötigen, können Sie dieses GitHub-Repo überprüfen (insbesondere Funktionen decode_utxound decode_utxo_v08_v014von utils.py ).

Haftungsausschluss: Ich bin der Autor des Repos.

Ich habe Key analysiert , aber mit Value habe ich ein Problem. Frage aktualisiert
Was ist das Problem?
Kann da noch was sein? Daten konvergieren nicht. In Frage versuche ich, das Beispiel von db zu analysieren. Ich bekomme txhash und index von outpoint . blockchain.info/tx/… . Aber alle anderen Felder in der Münze sind ungültig. Das einfachste Feld ist das Skript, da es unverändert bleibt. Ich kann keinen Teil des Skripts in der Transaktion finden
Für das, was ich sehe, stimmen die Münze und der Endpunkt, den Sie als Beispiel angeben, nicht überein. Die entsprechende Münze für „43000000dcf3713a29f3da53dbde07ea93ace52a4393ba9a009d8ac17c853c18e500“ ist „bafe78849575007b8268c6115b707d17cccfdf9be636467a80f9e4“. In jedem Fall stimmen die Daten, die Sie in Ihrer aktualisierten Frage dekodiert haben, mit der von Ihnen bereitgestellten Münze überein, aber da die Münze nicht korrekt zu sein scheint, geht die Analyse am Ende schief.
Sehr eigenartig. I wait full synced of my wallet and double checked value for 43000000dcf3713a29f3da53dbde07ea93ace52a4393ba9a009d8ac17c8‌ in two different leveldb driver github.com/syndtr/goleveldb and github.com/golang/leveldb and my value still is D42ADE0DFD6A93B6ECBC6098336FEEDAA21B79128E29D5B7EE2D42 . Daten sind irgendwie komprimiert, verschlüsselt? Ist die Datenbank für jeden Knoten eindeutig?
Ich habe die Antwort mit Informationen über den Verschleierungsschlüssel und Links zu einem Repo mit Tools für die Dekodierung von Utxo-Sets aktualisiert.
Vielen Dank! Verschleierungsschlüssel - ich verwirrt. Was ist der Sinn dabei? Dies ist einfach XOR, der in dieser Datenbank gespeichert ist.
Die Verwendung von Chainstate zum Auslösen einiger Antivirensoftware in Windows-Systemen, durch XORing der Informationen ändert sich die Signatur der Daten und es gibt keine Fehlalarme mehr mit AV.
Ich habe Ihre Anweisungen befolgt und alles außer dem Skriptteil erfolgreich dekodiert: TxID: e5183c857cc18a9d009aba93432ae5ac93ea07dedb53daf3293a71f3dc000000 DecodedValue: bafe78849575007bba135794915ad83d8f25cbd406b9c92b52963a Code: 983032 Height: 491516 Amount: 942800 (84853) OutType: 0 (P2PKH) Script: 7bba135794915ad83d8f25cbd406b9c92b52963aDer eigentliche Hash160 muss 7b8268c6115b707d17cccfdf9be636467a80f9e4 sein. Ist das Skript irgendwie kodiert?
Wie geht es dir 7bba135794915ad83d8f25cbd406b9c92b52963a? Das ist die Antwort, die ich bekomme:{'coinbase': 0, 'tx_id': '000000dcf3713a29f3da53dbde07ea93ace52a4393ba9a009d8ac17c853c18e5', 'height': 491516, 'outs': [{'amount': 942800, 'out_type': 0, 'data': '7b8268c6115b707d17cccfdf9be636467a80f9e4'}], 'index': 0}