Jak technologie zk-SNARK na platformě Binance zlepšuje systém potvrzení o rezervách

2023-02-11

Hlavní body

  • Platforma Binance v listopadu 2022 zavedla systém potvrzení o rezervách využívající kryptografii pomocí Merkleova hashového stromu, pomocí kterého mohou uživatelé kontrolovat svá držená aktiva.

  • Platforma Binance toto řešení nyní vylepšila zavedením technologie zk-SNARK, což je druh důkazu s nulovou znalostí.

  • Uživatelé mohou nyní soukromým a bezpečným způsobem zkontrolovat, že celkový čistý zůstatek na každém účtu není záporný a že všechna uživatelská aktiva jsou součástí nárokovaného celkového čistého zůstatku uživatelských aktiv platformy Binance.

Pojďme se podívat, jak toto nové řešení potvrzení o rezervách platformy Binance funguje. Uživatelé mohou díky kombinaci informací z technologie zk-SNARK a Merkleova stromu novým a vylepšeným způsobem kontrolovat stav rezerv platformy Binance.

Tým vývojářů platformy Binance několik posledních měsíců pracoval na vývoji pokročilých řešení potvrzení o solventnosti. Uprostřed krize důvěry v odvětví po krachu společnosti FTX jsou tyto nástroje pro centralizované kryptoměnové burzy velmi důležité. Uživatelské prostředky jsou na platformě Binance zajištěny v poměru 1:1 a navíc existují další rezervy. Snažíme se obnovit důvěru v odvětví a součástí našeho plánu je také nalezení způsobu, jak to snadno veřejnosti prokázat. 

V listopadu 2022 jsme zavedli systém potvrzení o rezervách využívající kryptografii pomocí Merkleova hashového stromu, pomocí kterého mohou uživatelé zkontrolovat svá držená aktiva. Jednalo se o pokrok ohledně transparentnosti uživatelských prostředků na platformě Binance, ale toto počáteční řešení mělo dva nedostatky.

  1. Z důvodu ochrany soukromí uživatelů představovaly listové uzly v potvrzení pomocí Merkleova stromu hash držených uživatelských aktiv. Kořenový hash Merkleova stromu tudíž nemohl vyjadřovat součet zůstatků z jeho listových uzlů.

  1. Subjekt, u kterého probíhá kontrola rezerv, by mohl na nějaký falešný účet v rámci stromu přidat záporný zůstatek, aby byly celkové požadované rezervy zdánlivě menší. Následující schéma z blogu Vitalika Buterina zobrazuje příklad takového podvodného Merkleova stromu. (V tomto případě však kořen vyjadřuje součet zůstatků ze všech listových uzlů, což může způsobit problémy s ochranou soukromí.)

Nyní máme řešení těchto nedostatků, což náš systém potvrzení o rezervách dále zlepšuje. Pomocí protokolů s důkazy s nulovou znalostí (technologie zk-SNARK) můžeme potvrdit následující skutečnosti.

  1. Všechny listové uzly Merkleova stromu přispěly k nárokovanému celkovému uživatelskému zůstatku každého aktiva platformy Binance.

  2. V Merkleově stromě neexistuje žádný uživatel se záporným celkovým čistým zůstatkem (celková hodnota všech aktiv držených uživatelem v USD).

Poznámka o záporných zůstatcích a výkonnosti

Platforma Binance nabízí maržové produkty, kryptopůjčky a produkty pro obchodování s futures. Zůstatek každého kryptoměnového aktiva tudíž u každého uživatele tvoří aktiva a závazky(pasiva). Zůstatek příslušného kryptoměnového aktiva může být u uživatele záporný, ale jeho celkový čistý zůstatek všech kryptoměnových aktiv by záporný být neměl (protože všechny půjčky jsou plně zajištěné).

Představme si hypotetickou situaci, kdy Alice vložila na platformu Binance 10 000 BUSD a poté použila 4 000 BUSD jako zajištění, aby si půjčila 2 BNB (s kurzem 1 BNB = 1 000 BUSD, pokud budeme předpokládat, že platforma Binance vždy používá přezajištění). Následující tabulka zobrazuje rozvahu Alice.

BNB (cena: 1 000 BUSD)

BUSD (cena: 1 BUSD)

Celkový čistý zůstatek (BUSD)

Aktiva

Závazky

Aktiva

Závazky

ALICE

2

2

10 000

0

10 000

Pokud Alice poté smění 1 BNB s Bobem (který také vložil 10 000 BUSD) za 1 000 BUSD, po spárování obchodu by jejich rozvahy měly vypadat následovně:

BNB (cena: 1 000 BUSD)

BUSD (cena: 1 BUSD)

Celkový čistý zůstatek (BUSD)

Aktiva

Závazky

Aktiva

Závazky

ALICE

1

2

11 000

0

10 000

Bob

1

0

9 000

0

10 000

Zůstatek BNB bude u Alice v tomto případě −1, což není platný uzel v Merkleově stromě a zahrnuje pouze jedno aktivum (BNB). Její celkový čistý zůstatek však stále bude 10 000.

Dalším problémem je obrovský počet uživatelů platformy Binance. Použitelné řešení musí vygenerovat uživatelské potvrzení a potvrzení pomocí technologie zk-SNARK pro desítky milionů uživatelů. Někteří z nich na naší platformě drží více než 300 kryptoměnových aktiv. 

Celkově chceme v rozumném čase poskytnout potvrzení následujících skutečností:

  1. Všechna uživatelská aktiva na platformě Binance jsou součástí nárokovaného celkového uživatelského zůstatku uvedeného na snímku. Uživatelé mohou náš nárokovaný celkový uživatelský zůstatek zkontrolovat vůči aktivům drženým na adresách ovládaných platformou Binance, a to pomocí průzkumníka blockchainu (např. Etherscan pro peněženky sítě Ethereum nebo BscScan pro peněženky sítě BNB Chain).

  2. Celkový čistý zůstatek každého uživatele není záporný. To znamená, že platforma Binance nevytvořila fiktivní účty se záporným zůstatkem, aby uměle snížila velikost ověřených rezerv.

Co je technologie zk-SNARK?

Než se podrobněji podíváme na naše řešení, měli bychom stručně vysvětlit mechanismus důkazu s nulovou znalostí. Pomocí protokolů s důkazy s nulovou znalostí, jako je například technologie zk-SNARK, může jedna strana (tzv. dokazovatel) prokázat jiné straně (tzv. ověřovateli), že přesně provedla určité výpočty s určitými vstupy při určitých omezeních, aniž by vyzradila vstupy. Tento výpočet může být časově náročný, ale základní matematický mechanismus může ověřovateli pomoci rychle a bezpečně posoudit potvrzení.

Dokazovatel (Binance) začne tak, že definuje sadu omezení pro výpočet, který chce prokázat. Tato omezení jsou definována v obvodech a lze je vyjádřit v programovacím jazyku vyšší úrovně. (V našem případě jde o rozvětvenou verzi jazyka gnark.)

Dokazovatel poté spustí náročný výpočet s hashováním ID a rozvah všech uživatelů a vygeneruje potvrzení o výpočtu se splněním dříve nastavených omezení. K tomu použije sledování výpočtu (tzv. svědka) a veřejné nebo soukromé vstupy. 

Ověřovatel (uživatel) obdrží potvrzení a zkontroluje jej pomocí veřejného vstupu obvodu, čímž zkontroluje, že výpočet proběhl přesně s dodržením všech omezení. Výpočet kontroly je v porovnání s dobou dokazování velmi rychlý. Pokud dokazovatel nevygeneruje potvrzení v předem definovaných obvodech, nemůže vytvořit platné potvrzení, které projde kontrolou.

Podrobnější informace o technologii zk-SNARK naleznete v této sérii článků.

Naše řešení

Základním stavebním kamenem našeho vylepšeného řešení potvrzení o rezervách zůstává i nadále Merkleův strom. U výše uvedeného příkladu by vypadal takto:

Kromě Merkleova stromu udržujeme také globální stav, což představuje seznam všech celkových čistých zůstatků každého aktiva drženého každým zákazníkem platformy Binance.

Pomocí technologie zk-SNARK vygenerujeme potvrzení o konstrukci Merkleova stromu, abychom potvrdili naše rezervy. Náš obvod pro sadu zůstatků každého uživatele (listový uzel Merkleova stromu) zajistí následující skutečnosti.

  1. Zůstatek každého aktiva tohoto uživatele je zahrnut do výše zmíněného seznamu globálního stavu.

  2. Celkový čistý zůstatek uživatele není záporný. 

  3. Změna kořene Merkleova stromu je po aktualizaci informací o tomto uživateli do hashe listového uzlu platná.

Podrobnosti o implementaci naleznete v technické specifikaci a našem zdrojovém kódu pro obvod (omezení). 

V každé instanci potvrzení o rezervách zveřejníme:

1. potvrzení pomocí Merkleova stromu – hashe pro každého uživatele (pro Alici, kterou na výše uvedeném obrázku představují modré uzly),

2. potvrzení pomocí technologie zk-SNARK a veřejné vstupy (hash seznamu celkových čistých zůstatků každého aktiva a kořenový hash Merkleova stromu) obvodu pro všechny uživatele. 

Uživatelé mohou zkontrolovat potvrzení pomocí Merkleova stromu, čímž se ujistí, že jejich rozvaha je zahrnuta do kořenového hashe Merkleova stromu. Potvrzení pomocí technologie zk-SNARK jim dále umožní zkontrolovat, že konstrukce Merkleova stromu splňuje omezení definovaná v obvodu.

Bezpečnost tohoto řešení z výrazné části závisí na nastavení klíče dokazování a klíče kontroly. Pracujeme na decentralizovaném nastavení klíčů. Dobrým příkladem stávajícího decentralizovaného důvěryhodného vytvoření nastavení je vytvoření v síti Ethereum. Brzy budeme mít řešení založené na decentralizovaném výpočtu (tzv. MPC) pro nastavení bez nutnosti důvěry.

Výkonnost

Vzhledem k počtu uživatelů platformy Binance, jejichž zůstatky je nutné zahrnout, neexistuje žádný způsob, jak vytvořit konstrukci Merkleova stromu, která by najednou zahrnula všechny uživatele. Řešením je rozdělení uživatelů do skupin po 864 uživatelích, abychom mohli využít postupy s menšími obvody a paralelním dokazováním.

Předpokládejme, že u každé skupiny s 864 uživateli, kdy každý uživatel drží 350 různých aktiv, bude zůstatek každého aktiva v rozsahu [0, 2^64−1]. Server s 32jádrovým procesorem a 128 GB paměti bude k vygenerování důkazu s nulovou znalostí potřebovat 110 sekund a kontrola důkazu zabere necelou milisekundu. 

Platforma Binance spustí najednou 1 000 dokazovatelů, takže za 2 hodiny vygeneruje důkaz pro všechny účty. Náklady na jednu hodinu u tohoto serveru dokazovatele činí zhruba 0,56 USD. Celkové náklady na vygenerování všech důkazu s nulovou znalostí by tedy byly zhruba 1 000 USD.

Závěr

První verzi potvrzení pro uživatele vygenerovaného pomocí tohoto nového řešení poskytneme v následném oznámení potvrzení o rezervách. Dále poskytujeme otevřené zdroje našeho procesoru uživatelských dat, dokazovatele, obvodu a ověřovatele. Jakákoli centralizovaná burza, která používá stejný model jako my, tudíž může snadno vygenerovat potvrzení pro své uživatele. 

Doufáme, že tím pomůžeme dostat transparentnost v odvětví digitálních aktiv na novou úroveň.  Pracujeme také na zavedení řešení, které zmínil ve svém blogu Vitalik Buterin, abychom zvýšili výkon a mohli jsme potvrzení poskytovat častěji a s nižšími náklady.

Toto je naše první verze s technologií zk-SNARK. Rádi bychom tedy obdrželi zpětnou vazbu od komunity, abychom mohli systém nadále zlepšovat.

Kód a další čtení

Pro naše služby se již rozhodlo 300 558 174 uživatelů. Podívejte se nyní proč.