Jak mogę zweryfikować aktywa w drzewie OKX Merkle? (Drzewo merkle V1)

Opublikowano 21 mar 2023Zaktualizowano 11 kwi 20247 min czytania38

Co to jest drzewo Merkle?

Merkle Tree (lub drzewo hash) to struktura danych, która zazwyczaj jest drzewem binarnym. Używa predefiniowanych funkcji do obliczania wartości skrótu węzła od dołu do góry, do najwyższego węzła korzenia drzewa.

Szczegóły węzła

Każdy węzeł drzewa przechowuje następujące informacje:

  • Wartość hash węzła
  • Kwota kryptowaluty użytkownika przechwycona przez migawkę audytu (na przykład BTC, ETH, USDT)
Bash
wartość hash,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"}

Zasada Hash

  • Węzły liści (z wyjątkiem węzłów przedłużających)
TOML, also INI
hash=SHA256(nonce+salda) 

OKX przypisze jedną, unikatową wartość nonce dla każdego użytkownika, którą można znaleźć na stronie audytu użytkownika; salda to ciąg json składający się z aktywów i kwot użytkowników, które zostały przechwycone na przykład przez migawkę audytu: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (UWAGA: należy pozbyć się końcowych zer i zachować precyzję 8 miejsc po przecinku)

  • Węzły nadrzędne
Bash
hash węzła nadrzędnego = SHA256(h1+h2+(h1 kwota BTC+h2 kwota BTC)+(h1 kwota ETH+h2 kwota ETH)+(h1 kwota USDT+h2 kwota USDT)+height) 

h1 = Hash lewego węzła podrzędnego bieżącego węzła, h2 = Hash prawego węzła podrzędnego bieżącego węzła, audit_id = ID bieżącego audytu, wysokość = wysokość węzła h1 (lub h2) Definicja wysokości: wysokość dolnego węzła liścia=1, wysokość węzła nadrzędnego=wysokość jego węzła podrzędnego + 1, węzeł główny ma maksymalną wysokość

Zasada węzłów przedłużających

Aby zbudować pełne drzewo Merle (pełne drzewo binarne), wymagane są 2^n węzły terminalne, lecz aktualne dane mogą nie spełniać takiego wymagania, jak również może występować nieparzysta liczba danych. W takiej sytuacji, jeżeli węzeł k nie ma węzłów równorzędnych, jeden węzeł równorzędny k’ zostanie automatycznie wygenerowany jako węzeł przedłużający, tak aby hash(k')=hash(k), a kwoty aktywów zostaną ustawione na 0 dla wszystkich walut.
Na przykład:

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

W tym przykładzie, węzeł przedłużający h4=h3 i salda przechowywane w węźle wynoszą {"BTC": 0, "ETH": 0,"USDT": 0} jak pokazano na rysunku poniżej (węzeł zielony):
CT-verifymerkletree-v1-1
hash węzła nadrzędnego = SHA256(h1+h2+(h1 kwota BTC+h2 kwota BTC)+(h1 kwota ETH+h2 kwota ETH)+(h1 kwota USDT+h2 kwota USDT)+wysokość) Więc: h6 = SHA256(h3 + h4 + (1+0)+(2+0)+(4+0)+height)

Jak sprawdzić, czy moje aktywa są uwzględnione w drzewie Merkle OKX?

Teoria weryfikacji

W oparciu o definicję drzewa Merkle OKX, możesz obliczyć wartość hash węzła nadrzędnego oddolnie, na podstawie jego lewych i prawych węzłów równorzędnych, aż do uzyskania wartości hash węzła centralnego, a następnie możesz porównać obliczoną wartość hash węzła centralnego z wartością pobraną węzła centralnego ścieżki drzewa Merkle, jeżeli są one identyczne, wtedy weryfikacja powiodła się, jak również możesz zrobić to odwrotnie.

  • Na przykład: spójrz na obraz powyżej oraz tekst json poniżej, w oparciu o własny węzeł użytkownika h3 i przedstawiony węzeł równorzędny h4, można obliczyć wartość hash ich węzła nadrzędnego h6 oraz w oparciu o przedstawiony węzeł równorzędny h5 dla h6, można obliczyć wartość hash ich węzła nadrzędnego h7, następnie można porównać wartość hash h7 z wartością zgromadzoną na węźle centralnym ścieżki drzewa Merkle i sprawdzić, czy są one identyczne, w celu przeprowadzenia procesu weryfikacji.
  • Tekst json danych ścieżki drzewa 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
 }]
}

Kroki weryfikacji

  1. Aby zweryfikować, czy saldo aktywów Twojego konta zostało uwzględnione jako liść Merkle, zaloguj się na swoje konto OKX, wybierz Aktywa i odwiedź stronę Audyty, aby wyświetlić ostatnie audyty, wybierz Wyświetl szczegóły, aby wyświetlić dane audytu.
    CT-verifymerkletree-v1-2Wybierz aktywa i wyświetl szczegóły, aby lepiej zrozumieć audyt danych
  2. Możesz również ręcznie zweryfikować swoje aktywa w drzewie Merkle postępując zgodnie ze wskazówkami zawartymi w wytycznych. Pobierz dane potrzebne do ręcznej weryfikacji, wybierając opcję Kopiuj dane.
    CT-verifymerkletree-v1-3Wybierz Kopiuj dane dla procesu weryfikacji ręcznej
  3. Po wybraniu opcji Kopiuj dane otwórz edytor tekstu (na przykład notatnik), a następnie wklej i zapisz ciąg json jako plik json.
    Kroki operacyjne:
    Mac: Otwórz terminal, wpisz polecenie touch merkle_proof_file.json; zostanie utworzony plik json. Plik jest domyślnie zapisany na biurku systemu. Możesz otworzyć Finder i wyszukać merkle_proof_file.json, aby znaleźć ten plik. Otwórz plik json, wklej skopiowane dane i zapisz plik.
    Windows: Kliknij dwukrotnie, aby otworzyć edytor tekstu (na przykład notatnik), wklej dane i zapisz je jako plik json.
    W naszym przypadku nazwiemy plik merkle_proof_file.json. Poniżej pokazano tekst json danych ścieżki drzewa 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
 }]
}
  1. Pobierz narzędzie narzędzie weryfikacji OKX typu open-source (MerkleValidator)
  2. Zapisz narzędzie weryfikacji OKX typu open-source (MerkleValidator) i plik danych (merkle_proof_file.json) w tym samym folderze. W tym przypadku narzędzie i plik danych są umieszczone w folderze Pobrane i nazwane proof-of-reserves, jak pokazano poniżej:
    CT-verifymerkletree-v1-4
  3. Otwórz aplikację terminala (dla komputerów Mac: Terminal, a w systemie Windows: Wiersz polecenia)
  4. Uruchom polecenie i zlokalizuj katalog pobranego folderu. W naszym przypadku wprowadź polecenie: cd ~/Downloads/proof-of-reserve
  5. Wpisz poniższe polecenie i naciśnij enter, aby rozpocząć weryfikację:
    Mac: ./MerkleValidator --merkle_proof_file merkle_proof_file.json
    Windows: MerkleValidator.exe --merkle_proof_file merkle_proof_file.json
    Uwaga: jeśli korzystasz z komputera Mac i napotkasz okno dialogowe „nie można otworzyć narzędzi, ponieważ nie można zweryfikować dewelopera”, możesz przejść do Ustawienia systemowe > Prywatność i ochrona > Ochrona > Wybierz App Store i od zidentyfikowanych deweloperów w sekcji Ochrona, aby zezwolić na [narzędzie]
  6. Sprawdź wynik
    Jeśli weryfikacja będzie pomyślna, pojawi się komunikat Pomyślne zatwierdzenie ścieżki drzewa Merkle zgodnie z poniższym:
    CT-verifymerkletree-v1-6
    Jeśli weryfikacja będzie niepomyślna, pojawi się komunikat Niepomyślne zatwierdzenie ścieżki drzewa Merkle zgodnie z poniższym:
    CT-verifymerkletree-v1-5
  7. Możesz także odnieść się do kodu narzędzia weryfikacji OKX typu open-source (MerkleValidator) i definicji drzewa Merkle OKX i samodzielnie napisać program, aby zweryfikować, że Twoje aktywa są zarejestrowane przez drzewo Merkle zbudowane z migawki audytu, używając danych ścieżki drzewa Merkle zgromadzonych w kroku 2.