Principalele produse la pachet

  • În noiembrie 2022, Binance și-a lansat sistemul Proof of Reserves folosind 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 de zero cunoștințe.

  • Utilizatorii pot verifica acum dacă soldul net total al fiecărui cont nu este negativ și că toate activele utilizatorilor fac parte din soldul net total revendicat al activelor utilizatorilor de către Binance – într-un mod privat și securizat.

Aruncă o privire sub capota noii soluții de dovadă a rezervelor Binance. Combinând zk-SNARK-urile și 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 a lui Binance a muncit din greu pentru a construi soluții avansate de dovadă a solvabilității. Astfel de instrumente au devenit critice pentru schimburile de criptomonede centralizate 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 acest lucru publicului fără probleme 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 un progres în promovarea transparenței fondurilor utilizatorilor de la Binance, designul inițial al acestei soluții a avut două deficiențe:

  1. Pentru a proteja confidențialitatea utilizatorilor, nodurile frunze din Merkle proof au reprezentat hash-ul deținerii utilizatorilor – astfel, rădăcina Merkle nu a putut reflecta suma informațiilor de echilibru ale nodurilor sale frunze.

  1. Entitatea ale cărei rezerve erau verificate 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 exemplu de arbore Merkle așa rău intenționat (deși, în acest caz, rădăcina reflectă suma soldurilor tuturor nodurilor frunzelor, ceea ce poate introduce probleme de confidențialitate).

Avem acum o soluție care poate remedia aceste neajunsuri și, astfel, poate consolida sistemul de dovadă a rezervelor Binance. Bazându-ne pe protocoale cu dovezi zero cunoștințe, zk-SNARK, putem demonstra că:

  1. Toate nodurile frunze ale arborelui Merkle au contribuit la soldul total al utilizatorilor revendicat de Binance pentru fiecare activ.

  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.

Un cuvânt despre soldurile negative și performanța

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

În acest scenariu ipotetic, să presupunem că Alice a depus 10.000 BUSD la 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 este întotdeauna supra-colateralizare). Următorul tabel arată bilanţul lui Alice.

BNB (preț: 1000 BUSD)

BUSD (preț: 1 BUSD)

Sold net total (BUSD)

Active

Datorii

Active

Datorii

Alice

2

2

10000

0

10000

Dacă Alice tranzacționează apoi 1 BNB pentru 1.000 BUSD cu Bob (care a depus și 10.000 BUSD), bilanţul lor ar arăta astfel după ce tranzacția este egală:

BNB (preț: 1000 BUSD)

BUSD (preț: 1 BUSD)

Sold net total (BUSD)

Active

Datorii

Active

Datorii

Alice

1

2

11000

0

10000

Bob

1

0

9000

0

10000

În acest caz, soldul BNB al lui Alice se va ridica 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 este încă la 10.000.

O altă provocare vine din amploarea 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 utilizatorilor revendicat, afișat în instantaneu. Utilizatorii pot verifica soldul total al utilizatorilor revendicat î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 nenegativ, ceea ce înseamnă că Binance nu a creat conturi fictive cu un sold negativ pentru a reduce dimensiunea rezervelor noastre verificate în mod artificial.

Ce sunt zk-SNARK-urile?

Înainte de a ne aprofunda în detaliile soluției noastre, este necesară o scurtă prezentare a mecanismului de demonstrare a cunoștințelor zero. Protocoalele de zero cunoștințe precum zk-SNARK permit unei părți, demonstratorului, să demonstreze unei alte părți, verificatorului, că probatorul a executat anumite calcule cu precizie cu anumite intrări sub anumite constrângeri, toate 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 demonstrația.

Proverul (Binance) începe cu definirea unui set de constrângeri ale calculului pe care dorește să-l demonstreze. 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 lui gnark.)

Demonstratorul execută apoi calculul greu, hashing ID-urile și bilanțurile tuturor utilizatorilor și generează dovezi 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. Calculul de verificare durează un timp extrem de scurt în comparație cu timpul de probă. Dacă probatorul nu generează dovada pe circuitele predefinite, nu poate produce o dovadă validă pentru a trece verificarea.

Pentru a arunca o privire mai profundă sub capota lui zk-SNARK, vă puteți referi la această serie de articole.

Soluția noastră

Elementul fundamental al soluției actualizate de dovadă a rezervelor este încă un arbore 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 fiecare client Binance îl deține.

Pentru a ne demonstra 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ă.

Vă rugăm să 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: hashe-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 nete totale 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 verificare și a cheii de verificare. Lucrăm la o configurare descentralizată a tastelor. 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 probare 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 de secunde, iar timpul de verificare a probei este mai mic de 1 milisecundă.

Binance va porni 1000 de probe în același timp, astfel încât să genereze dovezi pentru toate conturile în 2 ore. Costul acestui server prover 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 1000 USD.

Concluzie

Vom oferi prima iterație a dovezii pentru utilizatorii generate de această nouă soluție într-un anunț ulterior de dovadă a rezervelor. De asemenea, ne-am creat cu sursă deschisă procesorul, probatorul, circuitul și verificatorul de date ale utilizatorilor, astfel încât fiecare schimb centralizat care se bazează pe același model ca și noi să poată genera cu ușurință dovezi pentru utilizatorii și activele lor.

Sperăm că acest lucru va fi esențial în împingerea transparenței industriei activelor digitale la un nou nivel. De asemenea, lucrăm la implementarea soluției menționate în blogul Vitalik pentru a obține o performanță mai bună, ceea ce ne va permite să furnizăm dovezile mai frecvent la un cost mai mic.

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

Cod și lecturi suplimentare

  • Codul nostru sursă

  • Dovada de rezerve Binance: Ce este un arbore Merkle

  • Academia Binance - Îmbunătățirea transparenței criptografice cu dovada de cunoștințe zero

  • Blogul lui Vitalik: Având un CEX sigur: dovada solvabilității și nu numai