Cum zk-SNARKs îmbunătățesc sistemul Proof of Reserves al Binance

2023-03-28

Idei principale

  • În noiembrie 2022, Binance și-a lansat sistemul Proof of Reserves utilizând criptografia arborelui Merkle pentru a permite utilizatorilor să-și verifice deținerile.

  • Binance și-a îmbunătățit acum soluția prin implementarea zk-SNARKs, o formă de dovezi Zero-Knowledge.

  • Utilizatorii pot verifica acum dacă soldul net total al fiecărui cont nu este negativ și că toate activele utilizatorilor sunt incluse în soldul net total al activelor utilizatorilor pe care susține Binance că îl are – într-un mod privat și securizat.

Aflați mai multe despre noua soluție Proof-of-Reserves a Binance. Combinarea zk-SNARKs cu informațiile din arborele Merkle oferă utilizatorilor o modalitate nouă și îmbunătățită de a verifica starea rezervelor Binance.

În ultimele luni, echipa de dezvoltare Binance a muncit din greu pentru a construi soluții avansate de dovadă a solvabilității. Astfel de instrumente au devenit vitale pentru bursele centralizate de criptomonede pe fondul crizei de încredere care a cuprins industria în urma prăbușirii FTX. Fondurile utilizatorilor stocate pe Binance sunt susținute într-un raport de 1:1, plus rezerve, iar găsirea unei modalități de a demonstra publicului acest lucru într-un mod simplu a devenit o parte importantă a planului Binance de a restabili încrederea în industrie. 

În noiembrie 2022, am lansat sistemul nostru de dovadă a rezervelor utilizând o tehnică criptografică a arborelui Merkle pentru a le permite utilizatorilor să își verifice deținerile pe Binance. Deși este un progres în promovarea de către Binance a transparenței privind fondurile utilizatorilor, designul inițial al acestei soluții a avut două deficiențe:

  1. Pentru a proteja confidențialitatea utilizatorilor, nodurile frunzelor din dovada Merkle reprezentau hash-ul deținerii utilizatorilor – astfel, rădăcina Merkle nu putea reflecta informații despre suma soldurilor din nodurile frunzelor sale.

  1. Entitatea ale cărei rezerve erau în curs de verificare ar putea adăuga un sold negativ într-un cont fals undeva în arbore pentru a face ca rezervele totale necesare să pară mai mici. Următoarea diagramă de pe blogul lui Vitalik Buterin prezintă un astfel de exemplu de arbore Merkle înșelător (deși, în acest caz, rădăcina reflectă suma soldurilor tuturor nodurilor frunzelor, ceea ce poate ridica probleme de confidențialitate).

Avem acum o soluție care poate remedia aceste neajunsuri și, astfel, poate consolida sistemul Proof-of-Reserves al Binance. Bazându-ne pe protocoale cu dovezi zero-knowledge, zk-SNARK, putem demonstra că:

  1. Toate nodurile frunzelor arborelui Merkle au contribuit la soldul total declarat de Binance pentru fiecare activ al utilizatorilor.

  2. Nu există niciun utilizator cu un sold net total negativ (o valoare totală în USD a tuturor activelor pe care utilizatorul le deține) inclus în arborele Merkle.

Câteva detalii despre soldurile negative și performanță

Deoarece Binance oferă produse de tranzacționare în marjă, împrumuturi cripto și Futures, soldul fiecărui utilizator pentru fiecare activ cripto poate fi compus din active și datorii. Soldul unui utilizator pentru un anumit activ cripto poate fi negativ, dar soldul net total al tuturor activelor cripto nu ar trebui să fie negativ (deoarece toate împrumuturile sunt garantate în totalitate).

În acest scenariu ipotetic, să presupunem că Alice a depus 10.000 BUSD pe Binance, apoi a folosit 4.000 BUSD ca garanție pentru a împrumuta 2 BNB (la o rată de 1 BNB = 1.000 BUSD, presupunând că Binance supra-garantează întotdeauna). Următorul tabel arată bilanțul lui Alice.

BNB (preț: 1.000 BUSD)

BUSD (preț: 1 BUSD)

Sold net total (BUSD)

Active

Datorii

Active

Datorii

Alice

2

2

10.000

0

10.000

Dacă Alice tranzacționează apoi 1 BNB pentru 1.000 BUSD cu Bob (care a depus, de asemenea, 10.000 BUSD), bilanțul lor ar arăta astfel după asocierea tranzacției:

BNB (preț: 1.000 BUSD)

BUSD (preț: 1 BUSD)

Sold net total (BUSD)

Active

Datorii

Active

Datorii

Alice

1

2

11.000

0

10.000

Bob

1

0

9.000

0

10.000

În acest caz, soldul BNB al lui Alice va ajunge la -1, care nu este un nod valid într-un arbore Merkle și care acoperă doar un activ: BNB. Cu toate acestea, dacă ne uităm la soldurile nete totale, Alice are în continuare 10.000 BUSD.

O altă provocare este dată de mărimea bazei de utilizatori Binance. O soluție viabilă trebuie să genereze dovezi pentru utilizatori și dovezi zk-SNARK pentru zeci de milioane de utilizatori, dintre care unii pot deține peste 300 de active cripto pe platforma noastră. 

Per total, dorim să oferim dovada următoarelor fapte într-un interval de timp rezonabil:

  1. Activele fiecărui utilizator Binance fac parte din soldul total al utilizatorului, pe care noi declarăm că îl are, afișat în instantaneu. Utilizatorii pot verifica soldul total al utilizatorilor pe care declarăm că îl avem în raport cu activele deținute la adresele controlate de Binance folosind un explorator blockchain (cum ar fi Etherscan pentru portofelele Ethereum sau BscScan pentru portofelele BNB Chain).

  2. Soldul net total al fiecărui utilizator este non-negativ, ceea ce înseamnă că Binance nu a creat conturi fictive cu un sold negativ pentru a reduce artificial dimensiunea rezervelor noastre verificate.

Ce sunt zk-SNARKs?

Înainte de a aprofunda detaliile soluției noastre, este necesară o scurtă prezentare a mecanismului de dovezi Zero-Knowledge. Protocoalele Zero-Knowledge precum zk-SNARK permit unei părți, doveditorului, să demonstreze unei alte părți, verificatorului, că doveditorul a executat anumite calcule cu precizie cu anumite intrări, sub anumite constrângeri, totul fără a dezvălui intrările. Calculul poate consuma mult timp, dar mecanismul matematic de bază îl poate ajuta pe verificator să evalueze rapid și sigur dovada.

Doveditorul (Binance) începe cu definirea unui set de constrângeri ale calculului pe care dorește să-l dovedească. Constrângerile sunt definite în circuite care pot fi exprimate într-un limbaj de programare de nivel superior (în cazul nostru, o versiune bifurcată a gnark.)

Doveditorul execută apoi calculul greu, făcând hashing pentru toate ID-urile utilizatorilor și bilanțurile și generând dovada că calculul îndeplinește constrângerile stabilite anterior. Pentru a face acest lucru, utilizează urma de calcul (martor) și intrări publice sau private. 

Verificatorul (utilizatorul) obține dovada și o verifică cu intrarea publică a circuitului pentru a se asigura că calculul a fost executat cu acuratețe cu toate constrângerile îndeplinite. Durata calculului de verificare este extrem de mică în comparație cu timpul de dovedire. Dacă doveditorul nu generează dovada pe circuitele predefinite, nu poate produce o dovadă validă pentru a trece verificarea.

Pentru a vedea mai multe detalii despre zk-SNARK, puteți consulta această serie de articole.

Soluția noastră

Elementul fundamental al soluției actualizate Proof-of-Reserves este în continuare arborele Merkle. Pentru exemplul de mai sus, ar arăta astfel:

Pe lângă arborele Merkle, menținem și o stare globală care reprezintă o listă a soldurilor nete totale ale fiecărui activ pe care îl deține fiecare client Binance.

Pentru a ne dovedi rezervele, vom genera dovada zk-SNARK pentru construcția arborelui Merkle. Pentru soldul fiecărui utilizator – un nod frunză al arborelui Merkle – circuitul nostru se va asigura că:

  1. Soldul fiecărui activ al acestui utilizator este inclus în lista de stare globală menționată mai sus.

  2. Soldul net total al utilizatorului nu este negativ. 

  3. Modificarea rădăcinii arborelui Merkle este valabilă după actualizarea informațiilor acestui utilizator la hash-ul nodului frunză.

Consultați această specificație tehnică și codul nostru sursă pentru circuit (constrângeri) pentru detalii despre implementare. 

În fiecare caz de demonstrare a rezervelor noastre, vom publica:

1. Dovada Merkle: hash-urile pentru fiecare utilizator (pentru Alice, reprezentate prin noduri albastre în imaginea de mai sus).

2. Dovezi zk-SNARK și intrare publică (un hash al listei soldurilor totale nete ale fiecărui activ și rădăcina Merkle) a circuitului pentru toți utilizatorii. 

Prin verificarea dovezii Merkle, utilizatorii se pot asigura că bilanțul lor este inclus în rădăcina arborelui Merkle. Prin verificarea dovezii zk-SNARK, utilizatorii se pot asigura că construcția arborelui Merkle îndeplinește constrângerile definite în circuit.

Securitatea acestei soluții se bazează în mare măsură pe configurarea cheii de dovadă și a cheii de verificare. Lucrăm la o configurare descentralizată a cheilor. Când vine vorba de ceremoniile de configurare de încredere descentralizate existente, ceremonia Ethereum oferă un exemplu bun. Suntem foarte aproape de a avea o soluție MPC pentru a face configurarea fără încredere.

Performanță

Având în vedere numărul de utilizatori Binance ale căror solduri ar trebui incluse, nu există nicio modalitate de a obține o singură dovadă a construcției arborelui Merkle care să acopere toți utilizatorii simultan. O soluție la aceasta este împărțirea utilizatorilor în loturi de câte 864 fiecare, astfel încât să aibă un circuit la scară mai mică și proceduri de dovadă paralele.

Pentru un lot care conține 864 de utilizatori în care fiecare utilizator deține 350 de active diferite, să presupunem că fiecare sold de active este în intervalul [0, 2^64-1]. Cu un server cu 32 de nuclee de 128 GB, timpul de generare a probei zk este de aproximativ 110 secunde, iar timpul de verificare a dovezii este mai mic de o milisecundă. 

Binance va iniția 1.000 de doveditori în același timp, astfel încât să genereze dovezi pentru toate conturile în 2 ore. Costul acestui server doveditor pentru o oră este de aproximativ 0,56 USD, deci costul total al generării tuturor dovezilor zk care acoperă toți utilizatorii ar fi de aproximativ 1.000 USD.

Concluzie

Vom oferi prima iterație a dovezii pentru utilizatori generate de această nouă soluție într-un anunț ulterior privind Proof-of-Reserves. De asemenea, procesorul, doveditorul, circuitul și verificatorul de date ale utilizatorilor sunt cu sursă deschisă, astfel încât fiecare bursă centralizată care se bazează pe același model ca noi să poată genera cu ușurință dovezi pentru utilizatorii și activele lor. 

Sperăm că acest lucru va fi esențial pentru ca transparența industriei activelor digitale să ajungă la un nou nivel.  De asemenea, lucrăm la implementarea soluției menționate pe blogul lui Vitalik pentru a obține o performanță mai bună, ceea ce ne va permite să oferim dovada mai frecvent, la un cost mai mic.

Deoarece aceasta este prima versiune a zk-SNARK, așteptăm cu nerăbdare să primim feedbackul comunității, astfel încât să putem continua să îmbunătățim sistemul.

Cod și lecturi suplimentare