Cara zk-SNARK Memperbaiki Sistem Proof of Reserves Binance

2023-02-18

Poin Utama

  • Pada bulan November 2022, Binance merilis sistem Proof of Reserves yang menggunakan kriptografi pohon Merkle untuk memungkinkan pengguna memverifikasi kepemilikan mereka.

  • Binance kini telah meningkatkan solusinya dengan mengimplementasikan zk-SNARK, sebuah bentuk zero-knowledge proof.

  • Pengguna sekarang dapat memeriksa bahwa saldo bersih total setiap akun adalah non-negatif dan bahwa semua aset pengguna adalah bagian dari saldo bersih total aset pengguna yang diklaim oleh Binance – secara pribadi dan aman.

Lihatlah cara kerja solusi proof-of-reserve baru Binance. Dengan menggabungkan zk-SNARK dan informasi pohon Merkle, pengguna memiliki cara yang baru dan lebih baik untuk memverifikasi status cadangan Binance.

Selama beberapa bulan terakhir, tim pengembang Binance telah bekerja keras membangun proof-of-solvency yang canggih. Alat tersebut telah menjadi alat amat penting untuk bursa kripto tersentralisasi di tengah krisis kepercayaan yang melanda industri setelah keruntuhan FTX. Dana pengguna yang disimpan di Binance didukung dengan rasio 1:1, plus cadangan, dan menemukan cara untuk membuktikannya kepada publik tanpa masalah telah menjadi bagian utama dari rencana Binance untuk memulihkan kepercayaan industri. 

Pada bulan November 2022, kami merilis sistem proof-of-reserve menggunakan teknik kriptografi pohon Merkle untuk memungkinkan pengguna memverifikasi kepemilikan mereka di Binance. Meskipun ini sebuah kemajuan dalam mendorong transparansi dana pengguna Binance, desain awal dari solusi ini memiliki dua kekurangan:

  1. Untuk melindungi privasi pengguna, node daun di bukti Merkle mewakili hash kepemilikan pengguna – dengan demikian, akar Merkle tidak dapat mencerminkan jumlah informasi saldo node daunnya.

  1. Entitas yang memiliki cadangan sedang dalam proses verifikasi berpotensi menambahkan saldo negatif di bawah akun palsu di suatu tempat di pohon untuk membuat total cadangan yang diperlukan tampak lebih kecil. Diagram berikut dari blog Vitalik Buterin menunjukkan contoh pohon Merkle yang berbahaya (walaupun dalam kasus ini akarnya mencerminkan jumlah saldo semua node daun yang dapat menimbulkan masalah privasi).

Kami sekarang memiliki solusi yang dapat memperbaiki kekurangan ini dan dengan demikian memperkuat sistem proof-of-reserves Binance. Dengan mengandalkan protokol zero-knowledge proof, zk-SNARK, kami dapat membuktikan bahwa:

  1. Semua node daun dari pohon Merkle telah berkontribusi pada total saldo pengguna yang diklaim Binance untuk setiap aset.

  2. Tidak ada pengguna dengan total saldo bersih negatif (keseluruhan nilai USD dari semua aset yang dimiliki oleh pengguna) yang disertakan dalam pohon Merkle.

Kata tentang Saldo dan Kinerja Negatif

Karena Binance menawarkan margin, pinjaman kripto, dan produk perdagangan futures, saldo setiap pengguna dari setiap aset kripto dapat terdiri dari aset dan liabilitas. Saldo pengguna aset kripto tertentu bisa negatif, tetapi total saldo bersih mereka di semua aset kripto tidak boleh negatif (karena semua pinjaman dijamin sepenuhnya).

Dalam skenario hipotetis ini, katakanlah Alice telah menyetor 10.000 BUSD ke Binance, lalu menggunakan 4.000 BUSD sebagai jaminan untuk meminjam 2 BNB (dengan kurs 1 BNB = 1.000 BUSD, dengan asumsi bahwa Binance selalu memberi jaminan berlebih). Tabel berikut menunjukkan neraca Alice.

BNB (harga: 1000 BUSD)

BUSD (harga: 1 BUSD)

Saldo Bersih Total (BUSD)

Aset

Kewajiban

Aset

Kewajiban

ALICE

2

2

10000

0

10000

Jika Alice kemudian memperdagangkan 1 BNB untuk 1.000 BUSD dengan Bob (yang juga telah menyetor 10.000 BUSD), neraca mereka akan terlihat seperti ini setelah perdagangan dicocokkan:

BNB (harga: 1000 BUSD)

BUSD (harga: 1 BUSD)

Saldo Bersih Total (BUSD)

Aset

Kewajiban

Aset

Kewajiban

ALICE

1

2

11000

0

10000

Bob

1

0

9000

0

10000

Dalam hal ini, saldo BNB Alice akan berjumlah -1, yang bukan node valid di pohon Merkle dan hanya mencakup satu aset: BNB. Namun, jika kita melihat total saldo bersih, Alice masih 10.000 BUSD.

Tantangan lain datang dari skala basis pengguna Binance. Solusi layak harus menghasilkan bukti pengguna dan bukti zk-SNARK untuk puluhan juta pengguna, beberapa di antaranya mungkin memiliki lebih dari 300 aset kripto di platform kami. 

Secara keseluruhan, kami ingin memberikan bukti sejumlah fakta berikut dalam jangka waktu wajar:

  1. Setiap aset pengguna Binance adalah bagian dari saldo total pengguna yang kami klaim yang ditampilkan dalam snapshot. Pengguna dapat memverifikasi saldo total pengguna yang kami klaim berdasarkan aset yang disimpan di alamat yang dikendalikan oleh Binance menggunakan penjelajah blockchain (seperti Etherscan untuk dompet Ethereum atau BscScan untuk dompet BNB Chain).

  2. Saldo bersih total setiap pengguna adalah non-negatif. Artinya, Binance tidak membuat akun dummy dengan saldo negatif untuk mengurangi ukuran cadangan terverifikasi kami secara artifisial.

Apa Itu zk-SNARK?

Sebelum kami menyelami detail solusi kami, gambaran umum singkat tentang mekanisme zero-knowledge proof sudah beres. Protokol zero-knowledge seperti zk-SNARK memungkinkan satu pihak, yaitu pembukti, untuk menunjukkan kepada pihak lain, yaitu pemverifikasi, bahwa pembukti telah mengeksekusi komputasi tertentu secara akurat dengan input tertentu di bawah batasan tertentu, semua tanpa mengungkapkan input. Komputasi mungkin memakan waktu, tetapi mekanisme matematis yang mendasarinya dapat membantu pemverifikasi menilai bukti dengan cepat dan aman.

Pembukti (Binance) memulai dengan mendefinisikan set batasan komputasi yang ingin dibuktikannya. Batasan didefinisikan dalam sirkuit yang dapat diungkapkan dalam bahasa pemrograman tingkat tinggi (dalam kasus kami, versi hasil fork dari gnark.)

Pembukti kemudian mengeksekusi komputasi berat, melakukan hash pada id serta neraca semua pengguna, dan menghasilkan bukti komputasi yang memenuhi batasan yang ditetapkan sebelumnya. Untuk melakukannya, ia menggunakan jejak komputasi (saksi) dan input publik atau swasta. 

Pemverifikasi (pengguna) mendapatkan bukti dan memverifikasinya dengan input publik dari sirkuit untuk meyakinkan dirinya sendiri bahwa komputasi telah dijalankan secara akurat dengan semua batasan terpenuhi. Komputasi verifikasi membutuhkan waktu amat singkat dibandingkan dengan waktu pembuktian. Jika pembukti tidak menghasilkan bukti pada sirkuit yang ditentukan sebelumnya, pembukti tidak dapat menghasilkan bukti yang valid untuk lulus verifikasi.

Untuk melihat lebih dalam tentang cara kerja zk-SNARK, Anda dapat melihat seri artikel ini.

Solusi Kami

Blok bangunan fundamental dari solusi proof-of-reserves yang ditingkatkan masih merupakan pohon Merkle. Untuk contoh di atas, akan terlihat seperti ini:

Selain pohon Merkle, kami juga mempertahankan keadaan global yang mewakili daftar saldo bersih total dari tiap aset yang dimiliki oleh tiap pelanggan Binance.

Untuk membuktikan cadangan kami, kami akan membuat bukti zk-SNARK untuk konstruksi pohon Merkle. Untuk setiap set saldo pengguna – node daun dari pohon Merkle – sirkuit kami akan memastikan bahwa:

  1. Saldo setiap aset dari pengguna ini disertakan dalam daftar keadaan global yang disebutkan di atas.

  2. Saldo bersih total pengguna tidak negatif. 

  3. Perubahan akar pohon Merkle berlaku setelah memperbarui informasi pengguna ini ke hash node daun.

Silakan lihat spesifikasi teknis ini dan kode sumber kami untuk sirkuit (batasan) untuk detail implementasi. 

Dalam setiap contoh pembuktian cadangan, kami akan menerbitkan:

1. Bukti Merkle: hash untuk setiap pengguna (untuk Alice, diwakili oleh node biru pada gambar di atas).

2. Bukti zk-SNARK dan input publik (hash dari daftar saldo bersih total dari tiap aset dan akar Merkle) dari sirkuit untuk semua pengguna. 

Dengan memverifikasi bukti Merkle, pengguna dapat memastikan neraca mereka disertakan dalam akar pohon Merkle. Dengan memverifikasi bukti zk-SNARK, pengguna dapat memastikan konstruksi pohon Merkle memenuhi batasan yang ditentukan di sirkuit.

Keamanan solusi ini sangat bergantung pada penyiapan kunci pembuktian dan kunci verifikasi. Kami sedang mengerjakan penyiapan kunci terdesentralisasi. Berbicara tentang seremoni penyiapan berbasis trust terdesentralisasi yang ada, upacara Ethereum menawarkan contoh yang baik. Kami tidak lama lagi memiliki solusi MPC agar pengaturan bersifat trustless.

Kinerja

Mengingat jumlah pengguna Binance yang saldonya harus disertakan, tidak ada cara untuk mendapatkan satu bukti pun dari konstruksi pohon Merkle yang akan mencakup semua pengguna sekaligus. Solusi untuk ini adalah membagi pengguna ke dalam batch yang masing-masing berisi 864 sehingga memiliki sirkuit berskala lebih kecil dan prosedur pembuktian paralel.

Untuk batch yang berisi 864 pengguna di mana setiap pengguna memiliki 350 aset berbeda, misalkan setiap saldo aset berada dalam rentang [0, 2^64-1]. Dengan server 32-core 128GB, waktu pembuatan bukti zk sekitar 110 detik, dan waktu verifikasi bukti kurang dari 1 milidetik. 

Binance akan memulai 1000 pembukti pada saat yang sama untuk menghasilkan bukti untuk semua akun dalam 2 jam. Biaya server pembukti ini selama satu jam adalah sekitar 0,56 USD, sehingga biaya total untuk menghasilkan semua bukti zk yang mencakup semua pengguna adalah sekitar 1000 USD.

Kesimpulan

Kami akan memberikan iterasi bukti pertama untuk pengguna yang dihasilkan oleh solusi baru ini dalam pengumuman proof-of-reserve berikutnya. Selain itu, kami telah membuka pemroses, pembukti, sirkuit, dan pemverifikasi data pengguna kami dari sumber terbuka, sehingga setiap bursa tersentralisasi yang mengandalkan model sama seperti yang kami lakukan dapat menghasilkan bukti untuk pengguna dan aset mereka dengan mudah. 

Kami berharap hal ini akan berperan penting dalam mendorong transparansi industri aset digital ke taraf yang baru.  Kami juga berupaya mengimplementasikan solusi yang disebutkan dalam blog Vitalik untuk mencapai kinerja yng lebih baik, yang memungkinkan kami memberikan bukti lebih sering dengan biaya lebih rendah.

Karena ini adalah versi pertama dari zk-SNARK kami, kami berharap dapat menerima umpan balik dari komunitas agar kami dapat terus memperbaiki sistem.

Kode & Bacaan Lebih Lanjut