Wie verifiziere ich Vermögenswerte im OKX-Merkle-Baum? (Merkle-Baum V1)
Was ist ein Merkle Tree?
Ein Merkle Tree (oder Hash Tree) ist eine Datenstruktur, die normalerweise ein binärer Baum ist. Er verwendet vordefinierte Funktionen, um den Hash-Wert eines Knotens von unten nach oben bis zum obersten Wurzelknoten des Baums zu berechnen.
Knoteninformation
In jedem Baumknoten sind folgende Informationen gespeichert:
Hash-Wert des Knotens
Während der Prüfung als Momentaufnahme erfasster Kryptowährungsbetrag eines Benutzers/einer Benutzerin (z. B. BTC, ETC oder USDT)
Hash-Wert,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"} be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}
Hash-Regel
Blattknoten (außer Paddingknoten)
Hash=SHA256 (Nonce + Saldos)
OKX weist jedem Benutzer und jeder Benutzerin eine einzigartige Nonce (Zufallszahl) zu, die auf der Prüfungsseite des Benutzers/der Benutzerin angezeigt wird; Saldos sind ein JSON-String, der sich aus den Vermögenswerten eines Benutzers/einer Benutzerin und den während der Prüfung als Momentaufnahme erfassten Beträgen zusammensetzt, zum Beispiel: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (HINWEIS: Es ist eine Genauigkeit von acht Nachkommastellen einzuhalten; die darauffolgenden Nullen sind wegzulassen)
Elternknoten
Hash eines Elternknotens = SHA256(h1+h2+(h1 BTC-Betrag+h2 BTC-Betrag)+(h1 ETH-Betrag+h2 ETH-Betrag)+(h1 USDT-Betrag+h2 USDT-Betrag)+Höhe)
h1 = Hash des linken Unterknotens des aktuellen Knotens, h2 = Hash des rechten untergeordneten Knotens des aktuellen Knotens, audit_id = ID des aktuellen Audits, height = die Höhe des Knotens h1 (oder h2) Definition der Höhe: Höhe des untersten Blattknotens=1, Höhe eines Elternknotens=Höhe seines untergeordneten Knotens + 1, Wurzelknoten hat die maximale Höhe
Regel für Paddingknoten
Für den Aufbau eines vollständigen Merkle Tree (eines vollständigen Binärbaums) sind 2^n Blattknoten erforderlich. Es kann jedoch vorkommen, dass die vorhandenen Daten nicht ausreichen, um diese Voraussetzung zu erfüllen, oder dass Daten in ungerader Anzahl auftreten. In diesen Fällen, d. h. wenn der Knoten k keinen Geschwisterknoten besitzt, wird automatisch ein Geschwisterknoten k' als Paddingknoten erzeugt (der engl. Begriff „padding“ bedeutet wörtlich „auffüllen“), sodass hash(k')=hash(k) gilt; die Vermögenswertbeträge werden dabei für alle Währungen auf 0 gesetzt. Beispiel:
Hash | Saldos |
---|---|
h1 | {"BTC": 1, "ETH": 1,"USDT": 1} |
h2 | {"BTC": 1, "ETH": 2,"USDT": 3} |
h3 | {"BTC": 1, "ETH": 2,"USDT": 4} |
In diesem Beispiel ist der Paddingknoten h4=h3, der im Knoten gespeicherte „balances“-Wert ist {"BTC": 0, "ETH": 0,"USDT": 0}, wie unten im Bild (grüner Knoten) dargestellt:
Hash des Elternknotens = SHA256(h1+h2+(h1 BTC-Betrag+h2 BTC-Betrag)+(h1 ETH-Betrag+h2 ETH-Betrag)+(h1 USDT-Betrag+h2 USDT-Betrag)+Höhe) Daher: h6 = SHA256(h3 + h4 + (1+0)+(2+0)+(4+0)+Höhe)
Wie überprüfe ich, ob meine Vermögenswerte im OKX-Merkle-Baum enthalten sind?
Verifizierungstheorie
Aufbauend auf der Definition des Merkle Tree von OKX können Sie den Hash-Wert eines Elternknotens von unten nach oben auf Basis seiner linken und rechten Kindknoten berechnen, bis Sie zum Hash-Wert des Wurzelknotens gelangen. Anschließend können Sie den berechneten Hash-Wert des Wurzelknotens mit dem vom Merkle-Tree-Pfad-Wurzelknoten referenzierten Hash-Wert vergleichen. Sind beide identisch, war die Verifizierung erfolgreich (und umgekehrt).
Beispiel: Sehen Sie sich das Bild und den JSON-Text unten an. Auf Basis des eigenen Knotens des Benutzers/der Benutzerin h3 und mithilfe seines Geschwisterknotens h4 lässt sich ihr Elternknoten h6 berechnen, und mithilfe von h6' der Geschwisterknoten h5, mit dem sich wiederum der Hash-Wert des Elternknotens h7 errechnen lässt. Dieser kann daraufhin mit dem h7'-Hash-Wert des Merkle Tree-Pfad-Wurzelknotens verglichen werden, um zu ermitteln, ob diese identisch sind, womit der Verifizierungsprozess abgeschlossen wäre.
JSON-Text der Merkle-Tree-Pfad-Daten:
{ "self": { "balances": { "BTC": "1", "ETH": "1", "USDT": "1" }, "nonce": "aa8442ee975df827dc14e527e3ea01db71fe5a6cfe867d77f6a4148fc492743c", "hash": "ca080cc4b04630c9e667e3177be7b093af743101a300cd737dd2da6dbe801be6", "type": 1, "height": 1 }, "path": [{ "balances": { "BTC": "1", "ETH": "2", "USDT": "3" }, "hash": "7d16e6b5203299b85498aa35b964c83903a933d549f99ff3ca8b20c243c2be3e", "type": 2, "height": 1 }, { "balances": { "BTC": "1", "ETH": "2", "USDT": "4" }, "hash": "4d6376b3a51693be961dd402b620c3f2536cb3f7275629fa23e2d1c6c7b319db", "type": 2, "height": 2 }, { "balances": { "BTC": "3", "ETH": "5", "USDT": "8" }, "hash": "af1787033e8d32d600e2e40dc616c1f8d4271e1c182ed57b6e9585e1ac5aa959", "type": 3, "height": 3 }] }
Verifizierungsschritte
Um zu verifizieren, ob der Vermögenssaldo Ihres Kontos als Merkle-Blatt enthalten ist, melden Sie sich in Ihrem OKX-Konto an, wählen Sie Vermögenswerte und besuchen Sie Prüfungen , um die letzten Audits zu sehen, wählen Sie Details ansehen, um Ihre Auditdaten anzuzeigen
Wählen Sie Vermögenswerte und Details anzeigen für ein besseres Verständnis der Datenprüfung
Sie können Ihre Vermögenswerte auch manuell im Merkle Tree verifizieren, indem Sie den Schritten in unserem Leitfaden folgen. Die für die manuelle Verifizierung erforderlichen Daten erhalten Sie über die Schaltfläche Daten kopieren
Wählen Sie Daten kopieren für die manuelle Verifizierung
Nachdem Sie Daten kopieren ausgewählt haben, öffnen Sie den Texteditor (z. B. Notepad/Windows-Editor), fügen die Daten ein und speichern den JSON-String als JSON-Datei.
Vorgangsschritte:
Mac:
Öffnen Sie das Terminal und geben Sie den Befehl touch merkle_proof_file.json ein, woraufhin eine JSON-Datei erzeugt wird. Die Datei wird standardmäßig auf dem Desktop des Systems gespeichert
Sie können Finder öffnen und nach merkle_proof_file.json suchen, um diese Datei zu finden. Öffnen Sie diese JSON-Datei, fügen Sie die kopierten Daten ein und speichern Sie sie
Windows:
Öffnen Sie einen Texteditor (z. B. den Windows-Editor) per Doppelklick, fügen Sie die Daten ein und speichern Sie sie als JSON-Datei. In unserem Fall nennen wir die Datei merkle_proof_file.json. Der JSON-Text der Merkle-Tree-Pfad-Daten ist nachfolgend aufgeführt:
{ "self": { "balances": { "BTC": "1", "ETH": "1", "USDT": "1" }, "nonce": "aa8442ee975df827dc14e527e3ea01db71fe5a6cfe867d77f6a4148fc492743c", "hash": "ca080cc4b04630c9e667e3177be7b093af743101a300cd737dd2da6dbe801be6", "type": 1, "height": 1 }, "path": [{ "balances": { "BTC": "1", "ETH": "2", "USDT": "3" }, "hash": "7d16e6b5203299b85498aa35b964c83903a933d549f99ff3ca8b20c243c2be3e", "type": 2, "height": 1 }, { "balances": { "BTC": "1", "ETH": "2", "USDT": "4" }, "hash": "4d6376b3a51693be961dd402b620c3f2536cb3f7275629fa23e2d1c6c7b319db", "type": 2, "height": 2 }, { "balances": { "BTC": "3", "ETH": "5", "USDT": "8" }, "hash": "af1787033e8d32d600e2e40dc616c1f8d4271e1c182ed57b6e9585e1ac5aa959", "type": 3, "height": 3 }] }Laden Sie das Open-Source-Verifizierungstool von OKX (MerkleValidator) herunter
Speichern Sie das Open-Source-Verifizierungstool von OKX (MerkleValidator) und die Datendatei (merkle_proof_file.json) im selben Ordner. In diesem Fall befinden sich das Tool und die Datendatei im Ordner Downloads und tragen den Namen proof-of-reserves, wie unten dargestellt:
Öffnen Sie die Terminal-Anwendung (für Mac: Terminal bei Windows: Eingabeaufforderung)
Führen Sie den Befehl aus und lokalisieren Sie das Verzeichnis des heruntergeladenen Ordners. In unserem Fall geben Sie den Befehl ein: cd ~/Downloads/proof-of-reserve
Geben Sie den nachfolgenden Befehl ein und drücken Sie die Eingabetaste, um die Verifizierung zu starten:
Mac: ./MerkleValidator --merkle_proof_file merkle_proof_file.json
Windows: MerkleValidator.exe --merkle_proof_file merkle_proof_file.json
Hinweis: Wenn Sie einen Mac verwenden und ein Dialogfeld mit der Meldung "Die Tools können nicht geöffnet werden, da der Entwickler nicht verifiziert werden kann" angezeigt wird, gehen Sie zu Systemeinstellungen > Datenschutz & Sicherheit > Sicherheit > und wählen Sie im Abschnitt Sicherheit App Store und identifizierte Entwickler aus, um das [Tool] zuzulassenÜberprüfen Sie das Ergebnis War die Verifizierung erfolgreich, dann wird das Ergebnis Validierung des Merkle-Tree-Pfads erfolgreich angezeigt, wie nachfolgend dargestellt:
Wenn die Verifizierung fehlschlägt, wird das Ergebnis Validierung des Merkle-Tree-Pfads fehlgeschlagen wie folgt angezeigt:
Sie können auch unter Rückgriff auf den Code des Open-Source-Verifizierungstools von OKX (MerkleValidator) und auf die Definition des Merkle Tree von OKX selbst ein Programm schreiben, um zu verifizieren, ob Ihre im Merkle Tree enthaltenen Vermögenswerte mit jenen der Momentaufnahme im Rahmen der Prüfung identisch sind. Verwenden Sie hierfür die in Schritt 2 referenzierten Merkle-Tree-Pfad-Daten.