Hlavní Takeaways

  • V listopadu 2022 vydala společnost Binance svůj systém Proof of Reserves využívající kryptografii stromů Merkle, která uživatelům umožňuje ověřit jejich držby.

  • Binance nyní vylepšila své řešení implementací zk-SNARKs, 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í nárokovaného celkového čistého zůstatku uživatelských aktiv Binance – soukromým a bezpečným způsobem.

Podívejte se pod pokličku nového řešení Binance pro ověření rezerv. Kombinace zk-SNARKs a informací o stromech Merkle poskytuje uživatelům nový a vylepšený způsob ověřování stavu rezerv Binance.

Během posledních několika měsíců vývojový tým Binance usilovně pracoval na vytváření pokročilých řešení pro prokázání platební schopnosti. Takové nástroje se staly kritickými pro centralizované kryptoburzy uprostřed krize důvěry, která zachvátila průmysl v důsledku kolapsu FTX. Uživatelské prostředky uložené na Binance jsou zálohovány v poměru 1:1 plus rezervy a nalezení způsobu, jak to veřejnosti bezproblémově dokázat, se stalo hlavní součástí plánu Binance obnovit důvěru v odvětví.

V listopadu 2022 jsme vydali náš systém ověřování rezerv využívající kryptografickou techniku ​​Merkle Tree, která uživatelům umožňuje ověřit jejich držby na Binance. Ačkoli pokrok v transparentnosti uživatelských fondů společnosti Binance, původní návrh tohoto řešení měl dva nedostatky:

  1. Aby bylo chráněno soukromí uživatelů, listové uzly v Merkle proof reprezentovaly hash držení uživatelů – kořen Merkle tedy nemohl odrážet součet informací o zůstatku jeho listových uzlů.

  1. Subjekt, jehož rezervy byly ověřovány, by mohl 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 takového škodlivého stromu Merkle (ačkoli v tomto případě kořen odráží součet zůstatků všech listových uzlů, což může způsobit problémy s ochranou soukromí).

Nyní máme řešení, které může tyto nedostatky napravit, a tím posílit systém prokazování rezerv Binance. Spoléháním se na protokoly s nulovými znalostmi, zk-SNARK, můžeme dokázat, že:

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

  2. Ve stromu Merkle není žádný uživatel se záporným celkovým čistým zůstatkem (celková hodnota všech aktiv, která uživatel drží v USD).

Slovo o záporných zůstatcích a výkonu

Vzhledem k tomu, že Binance nabízí marži, kryptopůjčky a produkty pro obchodování s futures, může zůstatek každého uživatele každého kryptoaktiva složen z aktiv a 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 by neměl 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 na 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řezajišťuje). Následující tabulka ukazuje Alicinu rozvahu.

BNB (cena: 1000 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é zobchoduje 1 BNB za 1 000 BUSD s Bobem (který rovněž vložil 10 000 BUSD), jejich rozvaha by po spárování obchodu vypadala takto:

BNB (cena: 1000 BUSD)

BUSD (cena: 1 BUSD)

Celkový čistý zůstatek (BUSD)

Aktiva

Závazky

Aktiva

Závazky

Alice

1

2

11 000

0

10 000

Bobe

1

0

9000

0

10 000

V tomto případě bude Alicův BNB zůstatek -1, což není platný uzel ve stromu Merkle a pokrývá pouze jedno aktivum: BNB. Pokud se však podíváme na celkové čisté zůstatky, Alice je stále na 10 000.

Další výzva pochází z pouhého rozsahu uživatelské základny Binance. Životaschopné řešení musí generovat uživatelský důkaz a důkaz zk-SNARK pro desítky milionů uživatelů, z nichž někteří mohou mít na naší platformě více než 300 kryptografických aktiv.

Celkově vzato chceme v přiměřené lhůtě poskytnout důkaz o následujících skutečnostech:

  1. Aktiva každého uživatele Binance jsou součástí našeho nárokovaného celkového uživatelského zůstatku zobrazeného na snímku. Uživatelé si mohou ověřit náš nárokovaný celkový uživatelský zůstatek oproti aktivům drženým na adresách kontrolovaných Binance pomocí blockchain exploreru (jako Etherscan pro peněženky Ethereum nebo BscScan pro peněženky BNB Chain).

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

Co jsou 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ě, ověřovateli, prokázat druhé straně, ověřovateli, že zkoušeč provedl určité výpočty přesně s určitými vstupy za určitých omezení, to vše bez zveřejnění vstupů. Výpočet může být časově náročný, ale základní matematický mechanismus může ověřovateli pomoci posoudit důkaz rychle a bezpečně.

Prover (Binance) začíná definováním sady omezení výpočtu, který chce dokázat. Omezení jsou definována v obvodech, které lze vyjádřit v programovacím jazyce vyšší úrovně (v našem případě rozvětvená verze gnark.)

Dokazovač pak provede náročný výpočet, hashuje všechna uživatelská ID a rozvahy a vygeneruje důkaz o tom, že výpočet splňuje dříve stanovená omezení. K tomu využívá výpočetní trasování (svědek) a veřejné nebo soukromé vstupy.

Ověřovatel (uživatel) získá důkaz a ověří jej veřejným vstupem obvodu, aby se ujistil, že výpočet byl proveden přesně se splněnými všemi omezeními. Verifikační výpočet trvá extrémně krátkou dobu ve srovnání s dobou dokazování. Pokud ověřovatel nevygeneruje důkaz na předem definovaných obvodech, nemůže předložit platný důkaz pro úspěšné ověření.

Chcete-li se hlouběji podívat pod kapotu zk-SNARKs, můžete se podívat na tuto sérii článků.

Naše řešení

Základním stavebním kamenem modernizovaného řešení pro ověření 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ých čistých zůstatků každého aktiva, které každý zákazník Binance drží.

Abychom prokázali naše rezervy, vygenerujeme důkaz zk-SNARK pro stavbu stromu Merkle. Pro sadu vyvážení každého uživatele – listový uzel stromu Merkle – by náš obvod zajistil, že:

  1. Zůstatek každého aktiva tohoto uživatele je zahrnut ve výše uvedeném globálním seznamu stavů.

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

  3. Změna kořene stromu Merkle je platná po aktualizaci informací tohoto uživatele na hash listového uzlu.

Podrobnosti implementace naleznete v této technické specifikaci a v našem zdrojovém kódu obvodu (omezení).

V každém případě prokazování našich rezerv zveřejníme:

1. Merkleův důkaz: hash pro každého uživatele (pro Alici, reprezentovaný modrými uzly na obrázku výše).

2. Důkazy zk-SNARK a veřejný vstup (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 se uživatelé mohou ujistit, že jejich rozvaha je zahrnuta v kořeni stromu Merkle. Ověřením důkazu zk-SNARK se uživatelé mohou ujistit, že konstrukce Merkleho stromu splňuje omezení definovaná v obvodu.

Zabezpečení tohoto řešení do značné míry závisí na nastavení ověřovacího klíče a ověřovacího klíče. Pracujeme na decentralizovaném nastavení klíčů. Pokud jde o existující decentralizované ceremonie důvěryhodného nastavení, obřad Ethereum nabízí dobrý příklad. Jsme velmi blízko k tomu, abychom měli řešení MPC, aby bylo nastavení důvěryhodné.

Výkon

Vzhledem k počtu uživatelů Binance, jejichž zůstatky by měly být zahrnuty, neexistuje způsob, jak získat jediný důkaz o konstrukci stromu Merkle, který by pokryl všechny uživatele najednou. Řešením je rozdělení uživatelů do dávek po 864 kusech, aby byl zajištěn okruh v menším měřítku a paralelní postupy ověřování.

U dávky, která obsahuje 864 uživatelů, kde každý uživatel vlastní 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 vygenerování zk proof asi 110 sekund a doba proofverification je kratší než 1 milisekunda.

Binance spustí 1000 důkazů současně, aby vygeneroval důkaz pro všechny účty za 2 hodiny. Cena tohoto dokazovacího serveru za jednu hodinu je asi 0,56 USD, takže celkové náklady na generování všech zk proofs pokrývajících všechny uživatele by byly asi 1000 USD.

Závěr

První iteraci důkazu pro uživatele generované tímto novým řešením poskytneme v následném oznámení o ověření rezerv. Také jsme vytvořili open source náš procesor uživatelských dat, dokazovač, okruh a ověřovatel, takže každá 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 pomůže při posunu transparentnosti odvětví digitálních aktiv na novou úroveň. Pracujeme také na implementaci řešení zmíněného na blogu Vitalik, abychom dosáhli lepšího výkonu, což nám umožní poskytovat důkaz častěji za nižší náklady.

Protože se jedná o první verzi našeho zk-SNARK, těšíme se na zpětnou vazbu od komunity, abychom mohli systém dále zlepšovat.

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