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

Publicat la 21 mar. 2023Actualizat la 12 apr. 20248 min citire

Aplicabil pentru perioada de audit de după luna martie 2023

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 (luați ca exemplu BTC, ETH, USDT)
    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ă)
    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 compus 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
    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ă de jos = 1, înălțimea unui nod părinte = înălțimea nodului copil + 1, nodul rădăcină are înălțimea maximă

Regula de împărțire a nodurilor

Pentru a proteja confidențialitatea clienților, OKX va împărți aleatoriu activele utilizatorului în două noduri, cu un interval aleatoriu între 0 și 1. De exemplu, dacă activele unui utilizator sunt: {"BTC": "10.2", "ETH": "4", "USDT": "5"} iar numărul aleatoriu este 0,6, activele utilizatorului vor fi împărțite în 60% și 40%.
CT-web-POR-4
În timpul generării ulterioare a arborelui Merkle, nodurile frunză împărțite vor fi amestecate aleatoriu pentru a le distribui în diferite poziții în arbore.

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.
e.g.

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 1 (nodul verde): ![CT-web-POR-5;;1124x336](//images.ctfassets.net/tofttmniq0qv/1zvnyvb7al1wwVYjpFWnzS/680b0bb32c5010e91e1a73ab80b54c72/CT-web-POR-5.JPEG)*Imaginea 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

Conform definiției arborelui Merkle OKX, puteți calcula valoarea hash a unui nod părinte, pornind de jos în sus, folosind valorile hash ale nodurilor sale copil stâng și drept. În cele din urmă, veți obține valoarea hash a nodului rădăcină. Apoi puteți compara această valoare hash calculată a nodului rădăcină cu cea obținută din nodul rădăcină al arborelui Merkle. În cazul în care acestea coincid, verificarea este efectuată; în caz contrar, eșuează.
Exemplu: consultați imaginea 1 și textul de mai jos, pe baza nodului de sine al utilizatorului h3 și a nodului frate al acestuia h4, se poate calcula valoarea hash a nodului părinte h6 și, în funcție de nodul frate h5 al lui h6, se poate calcula valoarea hash a nodului părinte h7, apoi se compară valoarea hash a lui h7 cu cea colectată în nodul rădăcină al arborelui Merkle și se verifică dacă sunt identice pentru a finaliza procesul de verificare.
Text privind datele căii arborelui Merkle:

h7,3,{"BTC":"3","ETH":"5","USDT":"8"}
h6,2,{"BTC":"1","ETH":"2","USDT":"4"}
h5,2,{"BTC":"2","ETH":"3","USDT":"4"}
h4,1,{"BTC":"0","ETH":"0","USDT":"0"}
h3,1,{"BTC":"1","ETH":"2","USDT":"4"}
h2,1,{"BTC":"1","ETH":"2","USDT":"3"}
h1,1,{"BTC":"1","ETH":"1","USDT":"1"}
__Observație__: OKX a introdus instantaneul activelor nete la generarea arborelui Merkle. O datorie (de exemplu, capital negativ) va fi înregistrată în instantaneu dacă utilizatorul a împrumutat active. Pentru mai multe detalii, puteți consulta acest articol.

Pași de verificare

  1. Conectați-vă la [contul OKX, accesați Active > Audituri pentru a vizualiza auditurile recente, selectați Detalii pentru a vizualiza datele de audit.
    CT-web-POR-view audit detailsSelectați Active și Vizualizare detalii pentru o mai bună înțelegere a auditului de date

  2. De asemenea, puteți verifica manual activele în arborele Merkle selectând Copiere date
    CT-web-POR-copy dataSelectați Copiere date pentru procesul de verificare manuală

  3. Deschideți editorul de text (de exemplu, notebook) , lipiți și salvați șirul json ca fișier json.

Etape operaționale

Mac: Deschideți terminalul, introduceți comanda touch merkle_proof_file.json, iar apoi 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, denumim fișierul „merkle_proof_file.json”. Textul json pentru datele căii arborelui Merkle este prezentat ca mai jos:
{
"hash": "7e5a588806ff1de23f81e3a092860de43367fb4ea5503a53d95a5bc36d77e0c2",
"nodes": [
{ "balances": { "BTC": "0.49997703", "ETH": "0", "USDT": "16.62437479" },
"hash": "4087972e6b4bd3897c19f76b94b27db8eaf19f0d27d1b73e18297c18c850c3c1"
},
{ "balances": { "BTC": "0.40002297", "ETH": "0", "USDT": "12.18752303" },
"hash": "da14bd34c8d933781b8ec20a7e16109d0d650306b049da52c755437c4f7ec5e5" }
],
"nonce": "b6f6ea7584742839791ab923f4f1980d7ca3ff7c5d3f3fd9cc2a18c598503553",
"totalBalances": { "BTC": "0.9", "ETH": "0", "USDT": "28.81189782" }
}

  1. Descărcați fișierele „Full Merkle Tree” sub raportul de responsabilitate și dezarhivați fișierul descărcat pentru a obține un „Fișier complet de arbore Merkle”.
    CT-web-POR-7Selectați descărcare pentru a obține raportul

  2. Descărcați instrumentul de verificare cu sursă deschisă OKX (MerkleValidator)

    1. Salvați instrumentul de verificare cu sursă deschisă OKX (MerkleValidator) și cele două fișiere de date (merkle_proof_file.json, full-liabilities-merkle-merkle-tree.txt) în același dosar. În cazul nostru: am pus instrumentul, precum și fișierul de date în dosarul Descărcări, numit proof-of-reserves, așa cum se arată mai jos:
      CT-web-POR-8
  3. Rulați comanda și localizați directorul dosarului descărcat. În cazul nostru, introduceți comanda: cd ~/Downloads/proof-of-reserve

  4. Introduceți comanda de mai jos și apăsați tasta Enter pentru a începe verificarea:
    Mac
    ./MerkleValidator --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json
    Windows
    MerkleValidator.exe --merkle_file full-liabilities-merkle-tree.txt --user_info_file merkle_proof_file.json
    Observație: Dacă utilizați Mac și întâmpinați „instrumentele nu pot fi deschise, deoarece dezvoltatorul nu poate fi verificat”, accesați Preferințe sistem > Securitate și intimitate > General > Faceți clic pe lacăt pentru a face modificări > Permite aplicațiile descărcate din App Store și de la dezvoltatorii identificați

  5. Verificați rezultatul
    În cazul în care verificarea trece, rezultatul Calea arborelui Merkle a fost validată va fi afișat mai jos:
    CT-web-POR-9 În cazul în care verificarea eșuează, rezultatul Calea arborelui Merkle nu a fost validată va fi afișat mai jos:
    CT-web-POR-10

  6. Puteți, de asemenea, consulta codul instrumentului de verificare cu sursă deschisă OKX (MerkleValidator) și definiția arborelui Merkle OKX, scrie un program pentru a verifica dacă activele vă sunt capate de arborele Merkle construit din instantaneul de audit, utilizând datele privind traseul arborelui Merkle colectate la pasul 2.