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



