Cum pot verifica activele din arborele OKX Merkle? (Arbore Merkle V1)

Publicat la 21 mar. 2023Actualizat la 11 apr. 20247 min citire38

Ce este un Arbore Merkle?

Un Arbore Merkle (sau Arborele Hash) este o structură de date care este în mod normal un arbore binar. Acesta folosește funcții predefinite pentru a calcula valoarea hash a unui nod de jos în sus, până la nodul rădăcină superior al arborelui.

Informații despre nod

Fiecare nod al arborelui stochează informațiile următoare:

  • Valoarea hash a nodului
  • Suma în criptomonede a unui utilizator captată de instantaneul de audit (de exemplu, BTC, ETH, USDT)
Bash
valoarea hash,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}

Regula Hash

  • Noduri frunză (cu excepția nodurilor de umplutură)
TOML, also INI
hash=SHA256(număr arbitrar + solduri)

OKX va atribui un număr arbitrar unic pentru fiecare utilizator, care poate fi găsit pe pagina de audit a utilizatorului; soldurile reprezintă un șir json format din activele și sumele utilizatorilor care au fost captate de instantaneul de audit, de exemplu: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (OBSERVAȚIE: renunțăm la zerourile finale și păstrăm 8 zecimale de precizie)

  • Noduri părinte
Bash
valoarea hash a unui nod părinte = SHA256(h1 + h2 + (sumă h1 BTC + sumă h2 BTC) + (sumă h1 ETH + sumă h2 ETH) + (sumă h1 USDT + sumă h2 USDT) + înălțime) 

h1 = valoarea hash a nodului copil stâng al nodului curent, h2 = valoarea hash a nodului copil drept al nodului curent, audit_id = ID al auditului curent, înălțime = înălțimea nodului h1 (sau h2) Definiția înălțimii: înălțimea nodului frunză inferior = 1, înălțimea unui nod părinte = înălțimea nodului său copil + 1, nodul rădăcină are înălțimea maximă

Regula nodurilor de umplutură

Pentru a construi un arbore Merkle complet (un arbore binar complet), este nevoie de 2^n noduri frunză, dar este posibil ca datele reale să nu îndeplinească această cerință și ar putea exista și un număr impar de date. În astfel de circumstanțe, dacă nodul k nu are noduri frate, un nod frate k' va fi generat automat ca nod de umplutură, astfel încât hash(k')=hash(k), iar valorile activelor vor fi stabilite la 0 pentru toate monedele.
De exemplu:

Hash Solduri
h1 {"BTC": 1, "ETH": 1,"USDT": 1}
h2 {"BTC": 1, "ETH": 2,"USDT": 3}
h3 {"BTC": 1, "ETH": 2,"USDT": 4}

În acest exemplu, nodul de umplutură h4=h3, iar soldurile stocate în nod sunt {"BTC": 0, "ETH": 0,"USDT": 0}, așa cum se arată în imaginea de mai jos (nodul verde):
CT-verifymerkletree-v1-1
valoarea hash a unui nod părinte = SHA256(h1 + h2 + (sumă h1 BTC + sumă h2 BTC) + (sumă h1 ETH + sumă h2 ETH) + (sumă h1 USDT + sumă h2 USDT) + înălțime) Deci: h6 = SHA256(h3 + h4 + (1 + 0) + (2 + 0) + (4 + 0) + înălțime)

Cum verific dacă activele mele sunt incluse în arborele Merkle OKX?

Teoria verificării

Pe baza definiției arborelui merkle OKX, puteți calcula valoarea hash a unui nod părinte de jos în sus, pe baza nodurilor sale copil din stânga și copil din dreapta, până când obțineți valoarea hash a nodului rădăcină, apoi puteți compara valoarea hash calculată a nodului rădăcină cu cea colectată de la nodul rădăcină din calea arborelui merkle, dacă sunt identice, verificarea este admisă și invers.

  • Exemplu: consultați imaginea de mai sus și textul json de mai jos, pe baza nodului de sine al utilizatorului h3 și a nodului său frate h4, se poate calcula valoarea hash a nodului lor părinte h6 și, cu condiția ca nodul frate h5 al lui h6, să se calculeze valoarea hash a nodului lor părinte h7, apoi comparați valoarea hash a lui h7 cu cea colectată în nodul rădăcină al arborelui merkle și vedeți dacă sunt identice pentru a finaliza procesul de verificare.
  • Textul json privind datele căii arborelui Merkle:
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
 }]
}

Pași de verificare

  1. Pentru a verifica dacă soldul activelor din cont a fost inclus ca o frunză Merkle, conectați-vă la contul OKX, selectați Active și vizitați Audituri pentru a vedea auditurile recente, selectați Vizualizare detalii pentru a vedea datele de audit.
    CT-verifymerkletree-v1-2Selectați Active și Vizualizare detalii pentru o mai bună înțelegere a auditului de date
  2. Puteți să vă verificați manual activele în arborele Merkle, urmând pașii din ghidul nostru. Obțineți datele de care aveți nevoie pentru verificarea manuală selectând Copiere date.
    CT-verifymerkletree-v1-3Selectați Copiere date pentru procesul de verificare manuală
  3. După ce selectați Copiere date, deschideți editorul de text (de exemplu, notebook), apoi lipiți și salvați șirul json ca fișier json.
    Pași operaționali:
    Mac: Deschideți terminalul, introduceți comanda touch merkle_proof_file.json și se va crea un fișier json. Fișierul este salvat implicit în dosarul sistemului. Puteți deschide aplicația Finder și căutați merkle_proof_file.json pentru a găsi acest fișier. Deschideți acest fișier json, lipiți datele copiate și salvați-l.
    Windows: Dați dublu clic pentru a deschide un editor de text (de exemplu, notebook), lipiți datele și salvați-le ca fișier json.
    În cazul nostru, numim fișierul merkle_proof_file.json. Textul json pentru datele căii arborelui Merkle este prezentat ca mai jos:
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. Descărcați instrumentul de verificare cu sursă deschisă (MerkleValidator)
  2. Salvați instrumentul de verificare cu sursă deschisă OKX (MerkleValidator) și fișierul de date (merkle_proof_file.json) în același dosar. În acest caz, instrumentul și fișierul de date sunt plasate în dosarul Descărcări și se numesc proof-of-reserves, după cum se arată mai jos:
    CT-verifymerkletree-v1-4
  3. Deschideți aplicația terminalului (pentru Mac: Terminal, iar pentru Windows: Linie de comandă)
  4. Rulați comanda și localizați directorul dosarului descărcat. În cazul nostru, introduceți comanda: cd ~/Downloads/proof-of-reserve
  5. Introduceți comanda de mai jos și apăsați tasta Enter pentru a începe verificarea:
    Mac: ./MerkleValidator --merkle_proof_file merkle_proof_file.json
    Windows: MerkleValidator.exe --merkle_proof_file merkle_proof_file.json
    Observație: dacă folosiți Mac și apare o casetă de dialog cu mesajul „nu se pot deschide instrumentele deoarece dezvoltatorul nu poate fi verificat”, puteți accesa Setări sistem > Confidențialitate și securitate > Securitate > Selectați App Store și dezvoltatorii identificați în secțiunea Securitate pentru a oferi permisiune [instrumentului]
  6. Verificați rezultatul
    În cazul în care verificarea este aprobată, se va afișa un rezultat care indică Calea arborelui Merkle a fost validată, după cum urmează:
    CT-verifymerkletree-v1-6
    În cazul în care verificarea eșuează, se va afișa un rezultat care indică „Calea arborelui Merkle nu a fost validată, după cum urmează:
    CT-verifymerkletree-v1-5
  7. Puteți, de asemenea, consultați codul instrumentului de verificare cu sursă deschisă OKX (MerkleValidator) și definiția arborelui merkle, scrie un program pentru a verifica dacă activele sunt captate de arborele merkle construit din instantaneul de audit, utilizând datele privind traseul arborelui merkle colectate la pasul 2.