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

Publicat la 21 mar. 2023Actualizat la 1 apr. 20259 min citire30

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

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 details

Selectaț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 data

Selectaț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" } }

4. 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-7

Selectați descărcare pentru a obține raportul

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

  2. 6. 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

7. Rulați comanda și localizați directorul dosarului descărcat. În cazul nostru, introduceți comanda: cd ~/Downloads/proof-of-reserve

8. 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

9. 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

10. 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.