Hlavní bod
V listopadu 2022 vydala společnost Binance systém Proof of Reserves, který využívá stromovou kryptografii Merkle, aby uživatelům umožnil ověřit jejich držby.
Binance nyní vylepšila své řešení implementací zk-SNARK, což je forma důkazu nulových znalostí.
Uživatelé nyní mohou zkontrolovat, že celkový čistý zůstatek každého účtu není záporný a že všechna uživatelská aktiva jsou součástí celkového čistého zůstatku uživatelských aktiv nárokovaných Binance – soukromě a bezpečně.
Podívejte se, jak funguje nové řešení Binance proof-of-reserve. Kombinací informací o stromech zk-SNARK a Merkle mají uživatelé nový a lepší způsob, jak ověřit stav rezerv Binance.
Během posledních několika měsíců vývojový tým Binance usilovně pracoval na budování nejmodernějšího důkazu solventnosti. Tento nástroj se stal zásadním nástrojem pro centralizované kryptoburzy uprostřed krize důvěry, která zasáhla průmysl po kolapsu FTX. Uživatelské prostředky držené na Binance jsou kryté v poměru 1:1 plus rezervy a nalezení způsobu, jak to veřejnosti bez problémů dokázat, bylo hlavní součástí plánu Binance na obnovení důvěry v odvětví.
V listopadu 2022 jsme vydali systém proof-of-reserve využívající techniku kryptografie Merkle tree, která uživatelům umožňuje ověřit jejich držby na Binance. I když se jedná o pokrok ve zvyšování transparentnosti prostředků uživatelů Binance, původní návrh tohoto řešení měl dvě chyby:
Kvůli ochraně soukromí uživatelů představují listové uzly v důkazu Merkle hash vlastnictví uživatele – kořenový adresář Merkle tedy nemůže odrážet množství informací o zůstatku jeho listových uzlů.
Subjekty, jejichž rezervy jsou v procesu ověřování, by mohly potenciálně přidat záporný zůstatek pod falešný účet někde ve stromu, aby se celkové požadované rezervy jevily menší. Následující diagram z blogu Vitalika Buterina ukazuje příklad škodlivého stromu Merkle (ačkoli v tomto případě kořeny odrážejí součet zůstatků všech listových uzlů, což by mohlo způsobit problémy s ochranou soukromí).
Nyní máme řešení, které může tuto chybu napravit, a tím posílit systém Binance proof-of-Reserves. Spoléháním se na protokol důkazu o nulových znalostech, zk-SNARK, můžeme dokázat, že:
Všechny listové uzly stromu Merkle přispěly k celkovému zůstatku uživatelů, který si Binance nárokuje u každého aktiva.
Ve stromu Merkle nejsou zahrnuti žádní uživatelé se záporným celkovým čistým zůstatkem (celá hodnota všech aktiv ve vlastnictví uživatele v USD).
Slovo o záporných zůstatcích a výkonu
Protože Binance nabízí marži, půjčování kryptoměn a obchodování s futures, zůstatek každého uživatele u každého kryptoaktiva se může skládat jak z aktiv, tak z pasiv. Zůstatek konkrétního krypto aktiva uživatele může být záporný, ale jeho celkový čistý zůstatek napříč všemi krypto aktivy nemůže být záporný (protože všechny půjčky jsou plně zajištěny).
V tomto hypotetickém scénáři řekněme, že Alice uložila 10 000 BUSD do Binance a poté použila 4 000 BUSD jako zajištění k vypůjčení 2 BNB (při sazbě 1 BNB = 1 000 BUSD, za předpokladu, že Binance vždy překolateralizuje). Následující tabulka ukazuje rozvahu Alice.
Pokud Alice poté zobchoduje 1 BNB za 1 000 BUSD s Bobem (který rovněž vložil 10 000 BUSD), jejich rozvaha by po spárování obchodů vypadala takto:
V tomto případě by Alicin zůstatek BNB činil -1, což není platný uzel ve stromu Merkle a zahrnuje pouze jedno aktivum: BNB. Pokud se však podíváme na celkovou čistou bilanci, Alice je stále 10 000 BUSD.
Další výzva pochází z rozsahu uživatelské základny Binance. Životaschopné řešení by mělo generovat uživatelské důkazy a důkazy zk-SNARK pro desítky milionů uživatelů, z nichž někteří mohou na naší platformě vlastnit více než 300 kryptografických aktiv.
Celkově bychom rádi v přiměřené době poskytli důkazy o následujících skutečnostech:
Aktiva každého uživatele Binance jsou součástí celkového zůstatku nárokovaného uživatele zobrazeného na snímku. Uživatelé mohou ověřit náš nárokovaný celkový uživatelský zůstatek na základě aktiv držených na adresách ovládaných Binance pomocí blockchain exploreru (jako je Etherscan pro peněženky Ethereum nebo BscScan pro peněženky BNB Chain).
Celkový čistý zůstatek každého uživatele není záporný. To znamená, že Binance nevytváří fiktivní účty se zápornými zůstatky, aby uměle snižovala velikost našich ověřených rezerv.
Co je zk-SNARK?
Než se ponoříme do podrobností našeho řešení, je na místě stručný přehled mechanismu důkazu nulových znalostí. Protokoly s nulovými znalostmi, jako je zk-SNARK, umožňují jedné straně, jmenovitě dokazovateli, prokázat druhé straně, jmenovitě ověřovateli, že dokazovač provedl určitý výpočet přesně s určitými vstupy za určitých omezení, to vše bez zveřejnění vstupu. Výpočet může být časově náročný, ale základní matematické mechanismy mohou ověřovatelům pomoci posoudit důkazy rychle a bezpečně.
Prover (Binance) začíná definováním sady výpočetních omezení, které chce dokázat. Omezení jsou definována v obvodech, které lze vyjádřit v programovacím jazyce na vysoké úrovni (v našem případě rozvětvená verze gnark.)
Prover pak provede náročné výpočty, hashuje id a rozvahy všech uživatelů a vytvoří výpočetní důkaz, který splňuje předem definovaná omezení. K tomu využívá výpočetní stopy (svědky) a veřejné nebo soukromé vstupy.
Ověřovatel (uživatel) získá důkaz a ověří jej veřejným vstupem z obvodu, aby se ujistil, že výpočet byl proveden přesně se splněnými všemi omezeními. Ověřovací výpočet trvá velmi krátkou dobu ve srovnání s dobou důkazu. Pokud zkoušející nepředloží důkaz na předem definovaném okruhu, nemůže předložit platný důkaz pro úspěšné ověření.
Pro hlubší pohled na to, jak zk-SNARK funguje, se můžete podívat na tuto sérii článků.
Naše řešení
Základním stavebním kamenem vylepšeného řešení prokazování rezerv je stále strom Merkle. Ve výše uvedeném příkladu by to vypadalo takto:
Kromě stromu Merkle také udržujeme globální stav, který představuje seznam celkového čistého zůstatku každého aktiva vlastněného každým zákazníkem Binance.
Abychom dokázali naši nepředvídatelnost, zkonstruujeme důkaz zk-SNARK pro stavbu stromu Merkle. Pro každou sadu uživatelských zůstatků – listových uzlů stromu Merkle – náš obvod zajistí, že:
Zůstatek každého aktiva tohoto uživatele je zahrnut ve výše uvedeném globálním seznamu stavů.
Celkový čistý zůstatek uživatele není záporný.
Změny kořene stromu Merkle se projeví po aktualizaci těchto uživatelských informací na hashe listového uzlu.
Podrobnosti o implementaci naleznete v této technické specifikaci a v našem zdrojovém kódu obvodu (omezení).
V každém příkladu důkazu návrhu zveřejníme:
1. Merkle Proof: hash pro každého uživatele (pro Alici, reprezentovaný modrým uzlem na obrázku výše).
2. Doklad o zk-SNARK a veřejném vstupu (hash seznamu celkových čistých zůstatků každého aktiva a Merkle root) okruhu pro všechny uživatele.
Ověřením důkazu Merkle mohou uživatelé zajistit, aby jejich rozvaha byla zahrnuta do kořene stromu Merkle. Ověřením důkazu zk-SNARK mohou uživatelé zajistit, že konstrukce stromu Merkle vyhovuje omezením specifikovaným v obvodu.
Zabezpečení tohoto řešení do značné míry závisí na nastavení kontrolních klíčů a ověřovacích klíčů. Pracujeme na nastavení decentralizovaných klíčů. Když mluvíme o existujících decentralizovaných obřadech nastavení založených na důvěře, dobrým příkladem jsou obřady Ethereum. Brzy budeme mít řešení MPC pro důvěryhodné nastavení.
Výkon
Vzhledem k počtu uživatelů Binance, jejichž zůstatky musí být zahrnuty, neexistuje způsob, jak získat jediný důkaz z konstrukce stromu Merkle, který by zahrnoval všechny uživatele najednou. Řešením je rozdělit uživatele do dávek po 864, aby bylo možné mít obvody v menším měřítku a paralelní zkušební postupy.
Pro skupinu 864 uživatelů, kde má každý uživatel 350 různých aktiv, předpokládejme, že každý zůstatek aktiv je v rozsahu [0, 2^64-1]. U 32jádrového 128GB serveru je doba generování zk proof asi 110 sekund a doba proofverification je méně než 1 milisekunda.
Binance spustí 1000 nátisků současně, aby vygenerovala nátisky pro všechny účty do 2 hodin. Serverová cena tohoto nátisku za jednu hodinu je asi 0,56 USD, takže celkové náklady na vygenerování všech zk nátisků pokrývajících všechny uživatele jsou asi 1000 USD.
Závěr
První uživatelsky ověřené iterace generované tímto novým řešením poskytneme v našem dalším oznámení o proof-of-reserve. Navíc jsme vytvořili open source naše procesory uživatelských dat, provery, okruhy a verifikátory, takže jakákoli centralizovaná burza, která se spoléhá na stejný model jako my, může snadno vytvářet důkazy pro své uživatele a aktiva.
Doufáme, že to bude hrát důležitou roli při posunu transparentnosti průmyslu digitálních aktiv na novou úroveň. Pracujeme také na implementaci řešení zmíněných na blogu Vitalik, abychom dosáhli lepšího výkonu, což nám umožní poskytovat důkazy častěji za nižší náklady.
Protože se jedná o první verzi našeho zk-SNARK, doufáme, že obdržíme zpětnou vazbu od komunity, abychom mohli pokračovat ve zlepšování systému.
Kód a další čtení
Náš zdrojový kód
Binance důkaz o rezervách: Co je strom Merkle
Binance Academy – Zlepšení transparentnosti kryptoměn s důkazem nulových znalostí
Vitalikův blog: Mít bezpečný CEX: důkaz o solventnosti i mimo ni

