Cum pot verifica activele din arborele OKX Merkle? (Arbore Merkle V1)
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) 
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 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 
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):
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: 
{ "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
- 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 - Selectați Active și Vizualizare detalii pentru o mai bună înțelegere a auditului de date 
- 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 - Selectați Copiere date pentru procesul de verificare manuală 
- 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: 
 { "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 }] }
- Descărcați instrumentul de verificare cu sursă deschisă (MerkleValidator) 
- 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: 
- Deschideți aplicația terminalului (pentru Mac: Terminal, iar pentru Windows: Linie de comandă) 
- Rulați comanda și localizați directorul dosarului descărcat. În cazul nostru, introduceți comanda: cd ~/Downloads/proof-of-reserve 
- 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]
- 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ă: - Î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ă: 
- 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