Các nội dung chính
- Vào tháng 11 năm 2022, Binance đã ra mắt hệ thống bằng chứng dự trữ sử dụng mật mã cây Merkle để cho phép người dùng xác minh tài sản họ đang nắm giữ.
- Binance hiện đã cải thiện giải pháp bằng cách triển khai zk-SNARK, một dạng zero-knowledge proof.
- Người dùng giờ có thể kiểm tra xem tổng số dư ròng của mỗi tài khoản có âm không và tất cả tài sản của người dùng là một phần trong tổng số dư tài sản ròng được xác nhận của Binance – theo cách riêng tư và bảo mật.
Hãy xem bản chất của giải pháp bằng chứng dự trữ mới của Binance. Kết hợp thông tin cây Merkle và zk-SNARK, giải pháp này mang đến cho người dùng cách thức mới và cải tiến để xác minh trạng thái dự trữ của Binance.
Trong vài tháng qua, nhóm phát triển của Binance đã làm việc hăng say để xây dựng các giải pháp chứng minh khả năng thanh toán tiên tiến. Những công cụ này đã trở thành một phần quan trọng đối với các sàn giao dịch tiền mã hóa tập trung trong bối cảnh khủng hoảng niềm tin đã nhấn chìm ngành sau sự sụp đổ của FTX. Tiền của người dùng lưu trữ trên Binance được đảm bảo theo tỷ lệ 1:1 cộng với dự trữ. Việc tìm cách chứng minh điều này với công chúng một cách liền mạch đã trở thành một phần quan trọng trong kế hoạch khôi phục lòng tin vào ngành của Binance.
Vào tháng 11 năm 2022, chúng tôi đã ra mắt hệ thống bằng chứng dự trữ sử dụng kỹ thuật mã hóa cây Merkle để cho phép người dùng xác minh tài sản nắm giữ của họ trên Binance. Mặc dù có tiến bộ trong việc thúc đẩy tính minh bạch với tiền của người dùng của Binance, nhưng thiết kế ban đầu của giải pháp này có hai thiếu sót:
- Để bảo vệ quyền riêng tư của người dùng, các node lá trong bằng chứng Merkle đại diện cho băm của tài sản người dùng đang nắm giữ – do đó, gốc Merkle không thể phản ánh thông tin tổng số dư của các node lá.
- Pháp nhân có dự trữ đang được xác minh có khả năng thêm số dư âm vào tài khoản giả ở đâu đó trong cây, mục đích để khiến tổng dự trữ bắt buộc có vẻ nhỏ hơn. Sơ đồ sau đây từ blog của Vitalik Buterin cho thấy một ví dụ về cây Merkle độc hại như trên (mặc dù trong trường hợp này, gốc phản ánh tổng số dư của tất cả các node lá và có thể gây ra các vấn đề về quyền riêng tư).
Chúng tôi hiện đã có một giải pháp có thể khắc phục những thiếu sót này và củng cố hệ thống bằng chứng dự trữ của Binance. Dựa vào các giao thức zero-knowledge proof, zk-SNARK, chúng tôi có thể chứng minh rằng:
- Tất cả các node lá của cây Merkle đều đóng góp vào tổng số dư người dùng được xác nhận của Binance cho mỗi tài sản.
- Không người dùng nào có tổng số dư ròng âm (giá trị tổng thể tính bằng USD của tất cả tài sản do người dùng nắm giữ) được bao gồm trong cây Merkle.
Đôi lời về số dư âm và hiệu suất
Vì Binance cung cấp dịch vụ Ký quỹ, Vay tiền mã hóa và các sản phẩm giao dịch tương lai, số dư của mỗi người dùng đối với mỗi tài sản tiền mã hóa có thể bao gồm tài sản và nợ phải trả. Số dư của người dùng đối với một tài sản tiền mã hóa cụ thể có thể âm, nhưng tổng số dư ròng trên tất cả các tài sản tiền mã hóa của họ không được âm (vì tất cả các khoản vay đều được thế chấp hoàn toàn).
Trong tình huống giả định này, giả sử Alice đã nạp 10.000 BUSD vào Binance, rồi sử dụng 4.000 BUSD làm tài sản đảm bảo để vay 2 BNB (với tỷ lệ 1 BNB = 1.000 BUSD, giả sử Binance luôn thế chấp quá mức). Bảng sau đây cho thấy bảng cân đối kế toán của Alice.
BNB (giá: 1.000 BUSD) |
BUSD (giá: 1 BUSD) |
Tổng số dư ròng (BUSD) |
|||
Tài sản |
Nợ phải trả |
Tài sản |
Nợ phải trả |
||
Alice |
2 |
2 |
10.000 |
0 |
10.000 |
Nếu Alice giao dịch 1 BNB lấy 1.000 BUSD với Bob (người cũng đã nạp 10.000 BUSD), bảng cân đối kế toán của họ sẽ như thế này sau khi giao dịch được khớp:
BNB (giá: 1.000 BUSD) |
BUSD (giá: 1 BUSD) |
Tổng số dư ròng (BUSD) |
|||
Tài sản |
Nợ phải trả |
Tài sản |
Nợ phải trả |
||
Alice |
1 |
2 |
11.000 |
0 |
10.000 |
Bob |
1 |
0 |
9.000 |
0 |
10.000 |
Trong trường hợp này, số dư BNB của Alice sẽ là -1, đây không phải là node hợp lệ trong cây Merkle và chỉ bao gồm một tài sản: BNB. Tuy nhiên, nếu chúng ta xem xét tổng số dư ròng, giá trị của Alice vẫn là 10.000 BUSD.
Một thách thức khác đến từ việc quy mô cơ sở người dùng của Binance quá lớn. Một giải pháp khả thi phải tạo bằng chứng người dùng và bằng chứng zk-SNARK cho hàng chục triệu người dùng, trong đó một số người có thể nắm giữ hơn 300 tài sản tiền mã hóa trên nền tảng của chúng tôi.
Nhìn chung, chúng tôi muốn cung cấp bằng chứng về các sự kiện sau trong một khoảng thời gian hợp lý:
- Mỗi tài sản của người dùng Binance đều là một phần trong tổng số dư người dùng được xác nhận của chúng tôi, thể hiện trong dữ liệu thu thập. Người dùng có thể xác minh tổng số dư người dùng được xác nhận của chúng tôi đối với tài sản nắm giữ tại các địa chỉ do Binance kiểm soát bằng trình khám phá blockchain (như Etherscan cho các ví Ethereum hoặc BscScan cho các ví BNB Chain).
- Tổng số dư ròng của mỗi người dùng là không âm, nghĩa là Binance không tạo tài khoản giả có số dư âm để giảm quy mô dự trữ đã xác minh của chúng tôi một cách giả tạo.
zk-SNARK là gì?
Trước khi đi sâu vào chi tiết của giải pháp này, chúng tôi sẽ giới thiệu tổng quan ngắn gọn về cơ chế zero-knowledge proof. Các giao thức zero-knowledge như zk-SNARK cho phép một bên, trình chứng minh, chứng minh cho một bên khác, trình xác minh, rằng trình chứng minh đã thực hiện chính xác một số tính toán với một số đầu vào và hạn chế nhất định, tất cả đều không tiết lộ đầu vào. Việc tính toán có thể mất thời gian, nhưng cơ chế toán học cơ bản có thể giúp trình xác minh đánh giá bằng chứng một cách nhanh chóng và an toàn.
Trình chứng minh (Binance) bắt đầu bằng việc xác định một tập hợp các hạn chế cho tính toán mà trình này muốn chứng minh. Những hạn chế được xác định trong các mạch có thể được thể hiện bằng ngôn ngữ lập trình cấp cao hơn (trong trường hợp của chúng tôi là phiên bản fork của gnark.)
Sau đó, trình chứng minh thực hiện các tính toán cồng kềnh, băm tất cả ID và bảng cân đối của người dùng, đồng thời tạo bằng chứng về việc tính toán đáp ứng các hạn chế đã đặt ra trước đó. Để làm vậy, trình chứng minh sử dụng dấu vết tính toán (nhân chứng) và đầu vào công khai hoặc riêng tư.
Trình xác minh (người dùng) lấy bằng chứng và xác minh bằng đầu vào công khai của mạch để tự thỏa mãn rằng tính toán đã được thực hiện chính xác và đáp ứng tất cả các hạn chế. Thời gian xác minh tính toán là cực kỳ ngắn so với thời gian chứng minh. Nếu không tạo ra bằng chứng trên các mạch xác định trước, trình chứng minh không thể tạo ra bằng chứng hợp lệ để hoàn tất xác minh.
Để có cái nhìn sâu hơn về zk-SNARK, bạn có thể tham chiếu loạt bài viết này.
Giải pháp của chúng tôi
Block xây dựng cơ bản của giải pháp bằng chứng dự trữ sau khi nâng cấp vẫn là cây Merkle. Đối với ví dụ trên, giải pháp này sẽ như sau:
Ngoài cây Merkle, chúng tôi cũng duy trì trạng thái toàn cầu thể hiện danh sách tổng số dư ròng của từng tài sản mà mỗi khách hàng của Binance nắm giữ.
Để chứng minh dự trữ của mình, chúng tôi sẽ tạo bằng chứng zk-SNARK cho việc xây dựng cây Merkle. Đối với bộ số dư của mỗi người dùng – một node lá của cây Merkle – mạch của chúng tôi sẽ đảm bảo:
- Mọi số dư tài sản của người dùng này được bao gồm trong danh sách trạng thái toàn cầu được đề cập ở trên.
- Tổng số dư ròng của người dùng không âm.
- Việc thay đổi gốc cây Merkle có hiệu lực sau khi cập nhật thông tin của người dùng này vào hàm băm node lá.
Vui lòng tham chiếu thông số kỹ thuật này và mã nguồn của chúng tôi cho mạch (các hạn chế) để biết chi tiết triển khai.
Trong mỗi trường hợp chứng minh dự trữ của mình, chúng tôi sẽ công bố:
1. Bằng chứng Merkle: hàm băm cho mỗi người dùng (đối với Alice, được biểu thị bằng các node màu xanh da trời trong hình trên).
2. Bằng chứng zk-SNARK và đầu vào công khai (hàm băm của danh sách tổng số dư ròng của từng tài sản và gốc Merkle) của mạch cho tất cả người dùng.
Bằng cách xác minh bằng chứng Merkle, người dùng có thể đảm bảo rằng bảng cân đối kế toán của họ được bao gồm trong gốc cây Merkle. Bằng cách xác minh bằng chứng zk-SNARK, người dùng có thể đảm bảo việc xây dựng cây Merkle đáp ứng các hạn chế được xác định trong mạch.
Tính bảo mật của giải pháp này chủ yếu dựa vào việc thiết lập khóa chứng minh và khóa xác minh. Chúng tôi đang xây dựng thiết lập phi tập trung của các khóa. Khi nói đến các chuỗi khối thiết lập đáng tin cậy phi tập trung hiện có, chuỗi Ethereum là một ví dụ điển hình. Chúng tôi sắp có một giải pháp MPC để xây dựng thiết lập không cần niềm tin.
Hiệu suất
Với số lượng người dùng Binance có số dư cần bao gồm trong cây Merkle, không có cách nào để có bằng chứng duy nhất về một cấu trúc cây Merkle có thể bao gồm tất cả người dùng cùng một lúc. Giải pháp cho vấn đề này là chia người dùng thành từng nhóm 864 người để có một mạch quy mô nhỏ hơn và các quy trình chứng minh song song.
Đối với một nhóm 864 người dùng, trong đó mỗi người dùng sở hữu 350 tài sản khác nhau, giả sử mỗi số dư tài sản nằm trong phạm vi [0, 2^64-1]. Với máy chủ 32-core 128GB, thời gian tạo bằng chứng zk là khoảng 110 giây và thời gian xác minh bằng chứng là dưới 1 mili giây.
Binance sẽ khởi động 1.000 trình chứng minh cùng lúc để tạo bằng chứng cho tất cả các tài khoản trong 2 giờ. Chi phí cho máy chủ của trình chứng minh này trong một giờ là khoảng 0,56 USD, do đó tổng chi phí để tạo tất cả bằng chứng zk cho tất cả người dùng sẽ là khoảng 1.000 USD.
Tổng kết
Chúng tôi sẽ cung cấp vòng lặp bằng chứng đầu tiên cho người dùng do giải pháp mới này tạo ra trong thông báo về bằng chứng dự trữ tiếp theo. Ngoài ra, chúng tôi đã tạo mã nguồn mở cho bộ xử lý dữ liệu người dùng, trình chứng minh, mạch và trình xác minh để mọi sàn giao dịch tập trung dựa trên cùng một mô hình như chúng tôi có thể tạo bằng chứng cho người dùng và tài sản của họ một cách dễ dàng.
Chúng tôi hy vọng đây sẽ là công cụ thúc đẩy tính minh bạch của lĩnh vực tài sản kỹ thuật số lên một tầm cao mới. Chúng tôi cũng đang nỗ lực triển khai giải pháp được đề cập trong blog của Vitalik để đạt được hiệu suất tốt hơn, điều này sẽ cho phép chúng tôi cung cấp bằng chứng thường xuyên hơn với chi phí thấp hơn.
Vì đây là phiên bản đầu tiên của zk-SNARK nên chúng tôi rất mong nhận được phản hồi của cộng đồng để có thể tiếp tục cải thiện hệ thống.