Jak si ověřím aktiva v Merklově stromu společnosti OKX? (Merklův strom V2)
Platí pro období auditu po březnu 2023
Co je Merklův strom?
Merklův strom (nebo také hashový strom) je datová struktura, která je obvykle binárním stromem. Používá předdefinované funkce pro výpočet hodnoty hash uzlu zdola nahoru až po vrcholový uzel kořene stromu.
Informace o uzlu
V každém uzlu stromu jsou uloženy určité informace, například:
- Hash hodnota uzlu
- Množství kryptoměny uživatele zachycené na snímku auditu (jako příklad můžeme uvést BTC, ETH, USDT).### Hash pravidlo
hash hodnota,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
be324cf06aee0616b4ec20c3,{"BTC":"1.023","ETH":"0","USDT":"20.2343322"} - Koncové uzly (s výjimkou doplňkových uzlů)OKX přiřadí každému uživateli jedinečné __nonce__, které je možné najít na stránce auditu uživatele. __Zůstatky__ představují řetězec ve formátu json, který se skládá z aktiv uživatele a částek, které jsou zachycené na snímku auditu, například: {"BTC":"1.023","ETH":"0","USDT":"20.2343322"} (POZNÁMKA: je nutné smazat nuly na konci a nechat jen 8 desetinných čísel přesnosti) ### Nadřazené uzly__
hash=SHA256(nonce + zůstatky) __h1__ = Hash hodnota levého podřízeného uzlu aktuálního uzlu, __h2__ = Hash hodnota pravého podřízeného uzlu aktuálního uzlu, __audit_id__ = ID aktuálního auditu, __výška__ = výška uzlu h1 (nebo h2) Definice výšky: výška dolního koncového uzlu = 1, výška nadřazeného uzlu = výška jeho podřazeného uzlu + 1, uzel kořene má maximální výšku.hash hodnota nadřazeného uzlu = SHA256(h1 + h2 + (množství BTC při h1 + množství BTC při h2) + (množství ETH při h1 + množství ETH při h2) + (množství USDT při h1 + množství USDT při h2) + výška)
Pravidlo rozdělení uzlů
Z důvodu ochrany soukromí zákazníků společnost OKX náhodně rozdělí aktiva uživatelů do dvou uzlů s náhodným rozsahem mezi 0 a 1. Pokud jsou například aktiva uživatele: {"BTC": "10.2", "ETH": "4", "USDT": "5"} a náhodné číslo je 0,6, budou aktiva uživatele rozdělena na 60 % a 40 %.
Při následném generování Merklova stromu budou rozdělené koncové uzly náhodně zakódovány a rozděleny různé pozice ve stromu.
Pravidlo doplňkových uzlů
Pro konstrukci celého Merklova stromu (kompletního binárního stromu) je nutné 2^n koncových uzlů, ale vlastní data nemusí tyto požadavky splňovat, proto je možné mít i lichý počet dat. V takových případech, kdy uzel nemá žádný svůj protějšek, mu bude jeden automaticky vygenerován v podobě tzv. padding uzlu, (doplňkového uzlu), například hash(k') = hash(k). Hodnota aktiv tohoto doplňkového uzlu pak bude nastavena pro všechny měny na 0.
např.
Hash | zůstatky |
---|---|
h1 | {"BTC": 1, "ETH": 1,"USDT": 1} |
h2 | {"BTC": 1, "ETH": 2,"USDT": 3} |
h3 | {"BTC": 1, "ETH": 2,"USDT": 4} |
hash hodnota nadřazeného uzlu = SHA256(h1 + h2 + (množství BTC při h1 + množství BTC při h2) + (množství ETH při h1 + množství ETH při h2) + (množství USDT při h1 + množství USDT při h2) + výška) |
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"} |
Kroky ověření
Přihlaste se ke svému účtu OKX, přejděte na Aktiva > Audity pro zobrazení posledních auditů a vyberte Podrobnosti pro zobrazení údajů o auditu.
Vyberte Aktiva a Zobrazit podrobnosti pro lepší pochopení údajů o audituSvá aktiva v Merklově stromu můžete ověřit i ručně, pokud vyberte možnost Kopírovat data.
Vyberte Kopírovat data_ pro proces ručního ověřeníOtevřete textový editor (například poznámkový blok), vložte a uložte řetězec json jako soubor json.
Kroky postupu
Mac: Otevřete terminál, zadejte příkaz touch merkle_proof_file.json, tím vytvoříte soubor json. Soubor se ve výchozím nastavení uloží do systémové složky. Pokud ho chcete vyhledat, stačí otevřít Finder a zadat hledání souboru merkle_proof_file.json Vyhledaný soubor otevřete, vložte zkopírovaná data a uložte ho.
Windows: Dvojitým kliknutím otevřete textový editor (například poznámkový blok), vložte data a soubor uložte jako soubor json.
V našem případě dáme souboru název merkle_proof_file.json. Text souboru json pro data cesty Merklova stromu vidíte níže:
{
"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" }
}
Stáhněte si soubory „Kompletní Merklův strom“ ve zprávě o závazcích, stažený soubor rozbalte a získáte tak „Kompletní Merklův strom“.
Vyberte Stáhnout pro získání zprávyStáhněte si opensourcový ověřovací nástroj OKX (MerkleValidator)
Uložte opensourcový ověřovací nástroj OKX (MerkleValidator) a oba datové soubory (merkle_proof_file.json, full-liabilities-merkle-tree.txt) do téže složky. V našem případě uložíme nástroj i datový soubor do složky Stažené soubory a pojmenujeme jej proof-of-reserves, jak je uvedeno níže:
7. Spusťte příkaz a vyhledejte adresář stažené složky. V našem případě zadáme příkaz: cd ~/Downloads/proof-of-reserveZadejte níže uvedený příkaz a stisknutím klávesy Enter zahajte ověření:
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
Poznámka: Pokud používáte Mac a zobrazí se vám chyba Nástroj nelze otevřít, protože vývojáře nelze ověřit, přejděte prosím do Předvolby systému > Zabezpečení a ochrana soukromí > Obecné > __Kliknutím na zámek proveďte změny __ > Povolit aplikace stažení z App Store a od identifikovaných vývojářů.Zkontrolujte výsledek:
Pokud ověření proběhne úspěšně, zobrazí se výsledek Ověření cesty k Merklově stromu bylo úspěšné, jak je uvedeno níže:
Pokud ověření proběhne neúspěšně, zobrazí se výsledek Ověření cesty Merklova stromu se nezdařilo, jak je uvedeno níže:Můžete si také projít kód opensourcového ověřovacího nástroje OKX (MerkleValidator) a definici Merklova stromu v OKX a napsat si sami a program, který ověří, že jsou vaše aktiva zachycena v Merklově stromu vytvořeném na základě snímku auditu s využitím dat cesty Merklova stromu získaných v kroku 2.