Wie verifiziere ich Vermögenswerte im OKX-Merkle-Baum? (Merkle-Baum V1)

Veröffentlicht am 21. März 2023Aktualisiert am 11. Apr. 2024Lesezeit: 7 Min.38

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)
Bash
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)
TOML, also INI
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
Java
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:
CT-verifymerkletree-v1-1
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:
JSON
{
 "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

  1. 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.
    CT-verifymerkletree-v1-2Wählen Sie Vermögenswerte und Details anzeigen für ein besseres Verständnis der Datenprüfung
  2. 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.
    CT-verifymerkletree-v1-3Wählen Sie Daten kopieren für die manuelle Verifizierung
  3. 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:
JSON
{
 "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
 }]
}
  1. Laden Sie das Open-Source-Verifizierungstool von OKX (MerkleValidator) herunter
  2. 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:
    CT-verifymerkletree-v1-4
  3. Öffnen Sie die Terminal-Anwendung (für Mac: Terminal bei Windows: Eingabeaufforderung)
  4. 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
  5. 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
  6. Überprüfen Sie das Ergebnis
    War die Verifizierung erfolgreich, dann wird das Ergebnis Validierung des Merkle-Tree-Pfads erfolgreich angezeigt, wie nachfolgend dargestellt:
    CT-verifymerkletree-v1-6
    Wenn die Verifizierung fehlschlägt, wird das Ergebnis Validierung des Merkle-Tree-Pfads fehlgeschlagen wie folgt angezeigt:
    CT-verifymerkletree-v1-5
  7. 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.