Kluczowe punkty
W listopadzie 2022 r. Binance udostępniło system Proof of Reserves, który wykorzystuje kryptografię drzewa Merkle, aby umożliwić użytkownikom weryfikację ich zasobów.
Binance ulepszyło teraz swoje rozwiązanie, wdrażając zk-SNARK, formę dowodu z wiedzą zerową.
Użytkownicy mogą teraz sprawdzić, czy całkowite saldo netto każdego konta jest nieujemne i czy wszystkie aktywa użytkownika są częścią całkowitego salda netto aktywów użytkownika, o które ubiega się Binance – prywatnie i bezpiecznie.
Przyjrzyj się, jak działa nowe rozwiązanie Binance dotyczące dowodu rezerwacji. Łącząc informacje o drzewie zk-SNARK i Merkle, użytkownicy mają nowy i lepszy sposób weryfikacji statusu rezerw Binance.
W ciągu ostatnich kilku miesięcy zespół programistów Binance ciężko pracował nad stworzeniem najnowocześniejszego dowodu wypłacalności. Narzędzie stało się kluczowym narzędziem dla scentralizowanych giełd kryptowalut w obliczu kryzysu zaufania, który dotknął branżę po upadku FTX. Fundusze użytkowników przechowywane na Binance są zabezpieczone w stosunku 1:1 plus rezerwy, a znalezienie sposobu na bezproblemowe udowodnienie tego społeczeństwu było główną częścią planu Binance mającego na celu przywrócenie zaufania branży.
W listopadzie 2022 r. udostępniliśmy system dowodu rezerwy wykorzystujący technikę kryptografii drzewa Merkle, aby umożliwić użytkownikom weryfikację ich zasobów na Binance. Chociaż jest to postęp w zapewnianiu przejrzystości środków użytkowników Binance, początkowy projekt tego rozwiązania miał dwie wady:
Aby chronić prywatność użytkownika, węzły liści w dowodzie Merkle reprezentują skrót własności użytkownika – dlatego korzeń Merkle nie może odzwierciedlać ilości informacji o saldzie swoich węzłów liści.
Podmioty, których rezerwy są w trakcie weryfikacji, mogą potencjalnie dodać ujemne saldo pod fałszywym kontem gdzieś w drzewie, aby łączne wymagane rezerwy wyglądały na mniejsze. Poniższy diagram z bloga Vitalika Buterina przedstawia przykład złośliwego drzewa Merkle (chociaż w tym przypadku korzenie odzwierciedlają sumę sald wszystkich węzłów liści, co może powodować problemy związane z prywatnością).
Mamy teraz rozwiązanie, które może naprawić tę wadę, a tym samym wzmocnić system dowodu rezerw Binance. Opierając się na protokole dowodu z wiedzą zerową, zk-SNARK, możemy udowodnić, że:
Wszystkie węzły-liście drzewa Merkle przyczyniły się do całkowitego salda użytkowników, które Binance twierdzi za każdy zasób.
Żaden użytkownik z ujemnym całkowitym saldem netto (cała wartość w USD wszystkich aktywów posiadanych przez użytkownika) nie jest uwzględniany w drzewie Merkle.
Słowo o ujemnym saldzie i wynikach
Ponieważ Binance oferuje produkty z depozytem zabezpieczającym, pożyczkami kryptograficznymi i handlem kontraktami futures, saldo każdego użytkownika kryptowalut może składać się zarówno z aktywów, jak i pasywów. Saldo użytkownika określonego aktywa kryptograficznego może być ujemne, ale jego całkowite saldo netto wszystkich aktywów kryptograficznych nie może być ujemne (ponieważ wszystkie pożyczki są w pełni zabezpieczone).
W tym hipotetycznym scenariuszu załóżmy, że Alicja zdeponowała 10 000 BUSD na Binance, a następnie wykorzystała 4 000 BUSD jako zabezpieczenie, aby pożyczyć 2 BNB (przy stopie 1 BNB = 1 000 BUSD, zakładając, że Binance zawsze dokonuje nadzabezpieczenia). Poniższa tabela przedstawia bilans Alicji.
Jeśli następnie Alicja wymieni 1 BNB na 1000 BUSD z Bobem (który również zdeponował 10 000 BUSD), jej bilans będzie wyglądał następująco:
W tym przypadku saldo BNB Alicji wyniosłoby -1, co nie jest prawidłowym węzłem w drzewie Merkle i obejmuje tylko jeden zasób: BNB. Jeśli jednak spojrzymy na całkowite saldo netto, Alicja nadal wynosi 10 000 BUSD.
Kolejnym wyzwaniem jest skala bazy użytkowników Binance. Realne rozwiązanie powinno generować dowody użytkownika i dowody ZK-SNARK dla dziesiątek milionów użytkowników, z których niektórzy mogą posiadać ponad 300 zasobów kryptograficznych na naszej platformie.
Ogólnie rzecz biorąc, chcielibyśmy w rozsądnym terminie przedstawić dowody potwierdzające następujące fakty:
Aktywa każdego użytkownika Binance są częścią całkowitego salda naszego użytkownika pokazanego na migawce. Użytkownicy mogą zweryfikować nasze deklarowane całkowite saldo użytkownika w oparciu o aktywa przechowywane pod adresami kontrolowanymi przez Binance za pomocą eksploratora blockchain (takiego jak Etherscan dla portfeli Ethereum lub BscScan dla portfeli BNB Chain).
Całkowite saldo netto każdego użytkownika jest nieujemne. Oznacza to, że Binance nie tworzy fałszywych kont z ujemnym saldem, aby sztucznie zmniejszyć wielkość naszych zweryfikowanych rezerw.
Co to jest zk-SNARK?
Zanim zagłębimy się w szczegóły naszego rozwiązania, warto dokonać krótkiego przeglądu mechanizmu dowodu z wiedzą zerową. Protokoły wiedzy zerowej, takie jak zk-SNARK, umożliwiają jednej stronie, a mianowicie weryfikatorowi, wykazanie drugiej stronie, a mianowicie weryfikatorowi, że weryfikator wykonał dokładnie określone obliczenia przy określonych danych wejściowych i przy określonych ograniczeniach, a wszystko to bez ujawniania danych wejściowych. Obliczenia mogą być czasochłonne, ale leżące u ich podstaw mechanizmy matematyczne mogą pomóc weryfikatorom szybko i bezpiecznie ocenić dowody.
Osoba dowodząca (Binance) zaczyna od zdefiniowania zestawu ograniczeń obliczeniowych, które chce udowodnić. Ograniczenia są definiowane w obwodach, które można wyrazić w języku programowania wysokiego poziomu (w naszym przypadku rozwidloną wersją gnarka).
Następnie moduł sprawdzający wykonuje ciężkie obliczenia, miesza identyfikatory i bilanse wszystkich użytkowników i tworzy dowód obliczeniowy, który spełnia wcześniej zdefiniowane ograniczenia. W tym celu wykorzystuje ślady obliczeniowe (świadków) oraz dane wejściowe publiczne lub prywatne.
Weryfikator (użytkownik) uzyskuje dowód i weryfikuje go za pomocą publicznych danych wejściowych z obwodu, aby upewnić się, że obliczenia zostały wykonane dokładnie i przy spełnieniu wszystkich ograniczeń. Obliczenia weryfikacyjne zajmują bardzo mało czasu w porównaniu z czasem sprawdzania. Jeśli udowadniający nie przedstawi dowodu na wcześniej zdefiniowanym obwodzie, nie może przedstawić ważnego dowodu, który przejdzie weryfikację.
Aby uzyskać bardziej szczegółowe informacje na temat działania zk-SNARK, możesz zapoznać się z tą serią artykułów.
Nasze rozwiązanie
Podstawowym elementem ulepszonego rozwiązania w zakresie dowodu rezerwy jest nadal drzewo Merkle. W powyższym przykładzie wyglądałoby to tak:
Oprócz drzewa Merkle utrzymujemy również stan globalny, który reprezentuje listę całkowitego salda netto każdego aktywa posiadanego przez każdego klienta Binance.
Aby udowodnić naszą przypadkowość, skonstruujemy dowód ZK-SNARK dla konstrukcji drzewa Merkle. Dla każdego zestawu wag użytkownika – węzłów liścia drzewa Merkle – nasz obwód zapewni, że:
Saldo każdego majątku tego użytkownika jest zawarte na powyższej liście stanów globalnych.
Całkowite saldo netto użytkownika nie jest ujemne.
Zmiany w korzeniu drzewa Merkle zaczynają obowiązywać po zaktualizowaniu informacji o użytkowniku do skrótów węzła liścia.
Aby poznać szczegóły implementacji, zapoznaj się z tą specyfikacją techniczną i naszym kodem źródłowym obwodu (ograniczenia).
W każdym przykładzie potwierdzającym sugestię opublikujemy:
1. Merkle Proof: hash dla każdego użytkownika (dla Alicji, reprezentowanej przez niebieski węzeł na powyższym obrazku).
2. Dowód zk-SNARK i publiczne dane wejściowe (skrót listy całkowitych sald netto każdego aktywa i pierwiastek Merkle) obwodu dla wszystkich użytkowników.
Weryfikując dowód Merkle, użytkownicy mogą mieć pewność, że ich bilans znajduje się w katalogu głównym drzewa Merkle. Weryfikując dowód zk-SNARK, użytkownicy mogą upewnić się, że konstrukcja drzewa Merkle'a spełnia ograniczenia określone w obwodzie.
Bezpieczeństwo tego rozwiązania w dużej mierze zależy od skonfigurowania kluczy potwierdzających i kluczy weryfikacyjnych. Pracujemy nad skonfigurowaniem zdecentralizowanych kluczy. Jeśli chodzi o istniejące zdecentralizowane ceremonie konfiguracji oparte na zaufaniu, dobrym przykładem są ceremonie Ethereum. Wkrótce będziemy mieli rozwiązanie MPC do konfiguracji bez zaufania.
Wydajność
Biorąc pod uwagę liczbę użytkowników Binance, których salda muszą zostać uwzględnione, nie ma możliwości uzyskania jednego dowodu z konstrukcji drzewa Merkle, który obejmowałby wszystkich użytkowników jednocześnie. Rozwiązaniem tego problemu jest podzielenie użytkowników na partie po 864 sztuki, aby mieć obwody o mniejszej skali i równoległe procedury sprawdzające.
W przypadku grupy 864 użytkowników, z których każdy ma 350 różnych zasobów, załóżmy, że saldo każdego majątku mieści się w przedziale [0, 2^64-1]. W przypadku 32-rdzeniowego serwera o pojemności 128 GB czas generowania dowodu ZK wynosi około 110 sekund, a czas weryfikacji dowodu jest krótszy niż 1 milisekunda.
Binance uruchomi 1000 dowodów jednocześnie, aby wygenerować dowody dla wszystkich kont w ciągu 2 godzin. Koszt serwera tego dowodu na godzinę wynosi około 0,56 USD, więc całkowity koszt wygenerowania wszystkich dowodów ZK obejmujących wszystkich użytkowników wynosi około 1000 USD.
Wniosek
Pierwsze wersje dowodu rezerwacji wygenerowane przez to nowe rozwiązanie przedstawimy w następnym ogłoszeniu dotyczącym dowodu rezerwacji. Ponadto udostępniamy na zasadach open source nasze procesory danych użytkowników, moduły dowodzące, obwody i weryfikatory, dzięki czemu każda scentralizowana giełda oparta na tym samym modelu co my może z łatwością generować dowody dla swoich użytkowników i zasobów.
Mamy nadzieję, że odegra to ważną rolę w wyniesieniu przejrzystości branży zasobów cyfrowych na nowy poziom. Pracujemy również nad wdrożeniem rozwiązań, o których mowa na blogu Vitalika, aby osiągnąć lepszą wydajność, co pozwoli nam częściej dostarczać dowody przy niższych kosztach.
Ponieważ jest to pierwsza wersja naszego zk-SNARK, mamy nadzieję otrzymać opinie od społeczności, abyśmy mogli w dalszym ciągu udoskonalać system.
Kod i dalsze czytanie
Nasz kod źródłowy
Dowód rezerw Binance: Czym jest drzewo Merkle
Akademia Binance - Poprawa przejrzystości kryptowalut dzięki dowódowi wiedzy zerowej
Blog Vitalika: Posiadanie bezpiecznego CEX: dowód wypłacalności i nie tylko

