Summa
Chúng tôi thường nắm giữ tiền điện tử và thường mua, bán và trao đổi tiền tệ trên các sàn giao dịch tập trung. Giao dịch trên các sàn giao dịch tập trung rất thuận tiện và nhanh chóng, trong hơn mười năm kể từ khi Bitcoin được phát hành, nhiều sàn giao dịch tập trung đã xuất hiện trên thị trường, điều này tạo điều kiện thuận lợi rất nhiều cho hoạt động mua và bán tiền điện tử của người dùng. Tuy nhiên, với sự thịnh vượng của các sàn giao dịch tập trung, gian lận và các hành vi nguy hiểm như rút tiền và bỏ trốn là điều phổ biến. Netflix đã đặc biệt quay một video quảng cáo về sự sụp đổ đột ngột của sàn giao dịch và cái chết bí ẩn của người sáng lập: Đừng tin bất cứ ai, bí ẩn về tiền ảo [1]. Đặc biệt, việc FTX tuyên bố phá sản do mất khả năng thanh toán vào năm 2022 đã gây chấn động thế giới, nhiều người dùng và công ty quỹ chịu thiệt hại nặng nề.
Trên thực tế, không chỉ trong lĩnh vực tiền điện tử mà các lĩnh vực truyền thống khác cũng có vô số hành vi lừa dối nhà đầu tư thông qua gian lận kế toán. Chẳng hạn như sự cố Enron gây chấn động thế giới đầu thế kỷ 21. Enron được tạp chí Fortune bình chọn là “Công ty sáng tạo nhất nước Mỹ” trong 6 năm liên tiếp, tuy nhiên, công ty có tài sản hàng trăm tỷ USD này đã phá sản chỉ sau vài tuần vào năm 2002. Một ví dụ khác là Công ty Evergrande, công ty đã chuyển nguồn vốn ban đầu được sử dụng để xây dựng các tòa nhà sang các mục đích khác, cuối cùng vô số chủ sở hữu phải gánh khoản vay thế chấp 30 năm và chờ đợi những ngôi nhà chưa hoàn thiện.
Một nguyên nhân quan trọng đằng sau tình trạng gian lận liên miên trong nhiều lĩnh vực khác nhau là do bản thân công tác kế toán, kiểm toán chưa hoàn toàn công khai, minh bạch, tạo cơ hội lớn cho tham nhũng và gian lận. . Tuy nhiên, để bảo vệ lợi ích của công ty và quyền riêng tư của nhà đầu tư, các dữ liệu tài chính quan trọng không thể hoàn toàn công khai và minh bạch, do đó, chưa có giải pháp tốt nào để chống gian lận tài chính ngoại trừ việc tăng cường giám sát. có thể thấy điều đó để tìm ra giải pháp mới.
Nếu mọi người dùng đều có thể xác minh xem một số tài sản của họ có gian lận tài chính hay không, thì miễn là có đủ người dùng được xác minh thì tổ chức đó muốn thực hiện Lừa đảo tài chính sẽ rất khó khăn. Và bởi vì quá trình xác minh là không có kiến thức, ngay cả khi bên thứ ba chặn dữ liệu trong quá trình truyền dữ liệu xác minh qua mạng, anh ta cũng không biết tài sản thực sự của người dùng là gì. Bằng cách này, quá trình xác minh có thể được thực hiện hoàn toàn trong mạng, được hiển thị công khai trên Internet. Với sự trợ giúp của công nghệ chứng minh không có kiến thức, một lượng đáng kể công việc kiểm toán không còn là bằng sáng chế của một số tổ chức như công ty kế toán Big Four và được tiến hành bí mật sau cánh cửa đóng kín. Đúng hơn, đó là một quá trình mở mà bất kỳ bên liên quan nào cũng có thể tham gia.
Summa[2] là một dự án nghiên cứu PSE nhằm mục đích sử dụng phương pháp zk để xác minh tài sản của người dùng. Nội dung sau đây của bài viết sẽ giới thiệu ngắn gọn về dự án và các nguyên tắc kỹ thuật thực hiện.
Hợp đồng
Luồng dữ liệu tổng thể của Summa được hiển thị trong hình. Hợp đồng thông minh chủ yếu được sử dụng ở đây để lưu trữ và xác minh một số dữ liệu công khai. Nó không nhất thiết phải bị ràng buộc chặt chẽ với Ethereum, ngay cả khi nó được triển khai trên các blockchain khác như Solana trong tương lai (miễn là Halo2 có hỗ trợ blockchain tương ứng, một số hợp đồng trong dự án này được tạo ra bởi Halo2 proof[3 ]< /sup>).
Người giám sát trong hình đại diện cho một sàn giao dịch tập trung. Hợp đồng được sàn giao dịch triển khai trên chuỗi và quyền sở hữu hợp đồng thuộc về sàn giao dịch. Dữ liệu công khai chỉ có thể được sàn giao dịch gửi. Dữ liệu công khai bao gồm hai phần, một phần là thông tin cơ bản của chuỗi được kiểm soát bởi sàn giao dịch và chữ ký số.
p> p>
Phần thứ hai là thông tin về tài sản trên chuỗi, bao gồm hàm băm gốc của cây tổng Merkle và số dư gốc (số lượng tài sản cụ thể trên chuỗi, chẳng hạn như có bao nhiêu BTC), Phần dữ liệu này sẽ được sử dụng làm đầu vào mẫu của bằng chứng zk.
p> p>
Cả hai phần của dữ liệu đều dễ dàng được cung cấp công khai trên chuỗi (ngoại trừ hàm băm gốc). Sẽ rất khó để các sàn giao dịch gian lận dữ liệu này. Bất kỳ ai cũng có thể so sánh dữ liệu được lưu trữ trong hợp đồng với kết quả dữ liệu thực tế trên địa chỉ blockchain.
Việc tạo bằng chứng hiện đang được sàn giao dịch tạo ra. Người dùng gửi thông tin chính cần được xác minh cho sàn giao dịch, sau đó sàn giao dịch sẽ tạo ra bằng chứng và trả lại cho người dùng. Người dùng có thể yêu cầu hợp đồng thông minh với bằng chứng này và hợp đồng sẽ xác minh bằng chứng.
Cuối cùng, Xác minh bằng chứng là nơi người dùng tương tác trực tiếp với hợp đồng. Phần hợp đồng này được mạch Halo2 dịch sang mã Solidity và sau đó được triển khai trên chuỗi dưới dạng một hợp đồng xác minh riêng biệt.
p> p>
Trong sử dụng thực tế, bằng chứng có thể được chuyển vào để tính toán và xác minh trên chuỗi.
p> p>
Ví dụ mã sau đây là hàm được sử dụng trong phép toán Hash thực tế. Bạn có thể thấy rằng bản thân toàn bộ phép tính băm không sử dụng các phép toán bit, chỉ có phép cộng và phép nhân tính toán, rất thân thiện với zk.
p> p>
Sự khác biệt giữa tính toán dữ liệu zk và tính toán chương trình truyền thống là dữ liệu zk phải được tính toán trong miền hữu hạn. Khi xây dựng Cây Merkle, hãy đảm bảo rằng dữ liệu của mỗi nút không thể vượt quá miền hữu hạn, điều này là rất cần thiết, vì lý do này, dữ liệu phải được kiểm tra phạm vi trước khi tính toán để dữ liệu bị tràn.
Nguyên tắc chung của việc kiểm tra phạm vi tương tự như ví dụ bên dưới. Đầu tiên, đối với dữ liệu đầu vào, sử dụng 8 bit làm đơn vị độ dài và cắt ra nhiều bản sao để tạo điều kiện thuận lợi cho các hoạt động trừ sau này. Sau đó, mỗi lần bạn thực hiện phép tính số tiếp theo, hãy làm theo các bước tính toán trong ví dụ bên dưới. Khi mạch kiểm tra phạm vi tạo ra các ràng buộc, nó thực sự tạo ra các ràng buộc dựa trên kết quả trung gian diff = z_cur - z_next * Expression::Constant(Fp::from(1 << 8))
, yêu cầu khác Miễn là nó nằm trong 8 chữ số. Theo cách này, ràng buộc dữ liệu 32 bit chỉ yêu cầu 4 ô tính toán và 256 bảng tra cứu. Trong tương lai, ràng buộc thể hiện với bit cao nhất là 0 là đủ. Nếu nó không được thiết kế theo cách này, thì chỉ cần thực hiện kiểm tra phạm vi các giá trị 32 bit sẽ yêu cầu một bảng tra cứu có kích thước . Rõ ràng, mạch như vậy sẽ quá lớn và không thể áp dụng trong thực tế.
p> p>
Với những cấu trúc phụ trợ này, Cây tổng Merkle có thể được xây dựng chính thức. Mỗi dữ liệu đầu vào của người dùng được gọi là Entry và cấu trúc của nó là:
Phương thức tính toán băm của nút giữa của Merkle Tree là H(LeftChild.balance[0 ] + RightChild.balance[0], LeftChild.balance[1] + RightChild.balance[1], ..., LeftChild.balance[N_CURRENCIES - 1] + RightChild.balance[N_CURRENCIES - 1], LeftChild.hash, RightChild .hash)
, do đó độ dài thực tế của mảng vec cần tính là N_CURRENCIES + 2
.
Hãy xây dựng toàn bộ Cây Merkle một cách hoàn chỉnh. Phần nút lá tương đối đơn giản, bạn chỉ cần chuyển Entry sang Node. Các nút trung gian cần được xây dựng theo từng lớp và giá trị của mỗi nút trung gian liên quan đến giá trị của cây con bên trái và cây con bên phải của lớp tiếp theo. Cuối cùng, đưa kết quả nút trung gian đã tính toán vào mảng cây:
Tiếp theo, chúng tôi sử dụng Merkle Tree để xây dựng bằng chứng zk. Điều zk muốn chứng minh là mục nhập của người dùng thực sự nằm trên Merkle Tree. Do đó, trước tiên chúng ta cần xây dựng một chỉ mục đầu vào cụ thể và tạo cấu trúc dữ liệu cần thiết cho bằng chứng zk dựa trên Cây Merkle.
p> p>
Chúng ta có thể khéo léo đạt được hiệu ứng ràng buộc là làm cho toàn bộ phương trình bằng 0 bằng cách đặt 0 và 1.
Các ràng buộc zk của Merkle Tree chủ yếu có hai phần. Một phần là ràng buộc hoán đổi để đảm bảo rằng khi trao đổi tạo ra bằng chứng, nó thực sự được tạo theo đúng thứ tự của hình trên. Phần còn lại là ràng buộc cân bằng, nghĩa là số dư của nút cha đến từ tổng của nút con bên trái và nút con bên phải. Ràng buộc tổng về số dư tương đối đơn giản, ở đây chúng ta tập trung vào ràng buộc hoán đổi.
Cấu trúc dữ liệu cây Merkle zk sibling_middle_node_hash_preimages
mà chúng tôi đã giới thiệu trước đây là một mảng và không chứa thông tin vị trí. Vị trí của hộp chấm trong hình nên ở bên trái hay bên phải của cây phải được đánh giá bằng 0 và 1 của path_indices
. Do đó, chúng ta phải đảm bảo rằng khi giá trị bằng 0, nút cha được tạo ở bên trái và nút anh chị em tương ứng cùng cấp của nó ở bên phải và khi nó bằng 1 thì điều ngược lại là đúng. Khi dữ liệu được nhập vào mạch zk, logic này có thể được triển khai dễ dàng bằng mã:
Quy trình chứng minh zk tổng thể của Merkle Sum Tree là xử lý từng lớp dữ liệu, và sau đó chuyển đổi kiểm tra mạch ràng buộc zk đầu vào dữ liệu Vị trí tương ứng. Xây dựng toàn bộ Cây Merkle. Đầu ra cuối cùng là hàm băm của nút gốc và tổng số dư, phải nhất quán với dữ liệu tương ứng trong hợp đồng. Hãy sử dụng phiên bản để xác minh tính nhất quán. Nếu tất cả các xác minh đều chính xác thì toàn bộ công việc chứng minh Merkle Tree sẽ kết thúc.
Xác minh khả năng thanh toán
Quy trình tạo bằng chứng là để người dùng yêu cầu trao đổi và sau đó giao dịch Dữ liệu bằng chứng được trả lại sau đó sẽ được người dùng xác minh với hợp đồng thông minh. Hiện tại, dự án không hỗ trợ người dùng bỏ qua sàn giao dịch để tự tạo bằng chứng, nhưng có cảm giác rằng đó có thể là một hướng có thể khám phá trong tương lai. Bằng chứng được tạo trực tiếp bởi người dùng thay vì được trao đổi lại. Toàn bộ mạch chứng minh halo2 có thể được đóng gói vào tập hợp web bằng cách sử dụng Rust, sau đó sử dụng ete rs[7] để tạo API tương tác tương ứng. Độ phức tạp về thời gian của quá trình xác minh gốc Merkle Tree là log(n). Có thể không mất quá nhiều thời gian để thiết bị của người dùng xác minh, điều này giúp tăng cường hơn nữa tính bảo mật của quá trình phân quyền.
Tham khảo
[1]
Đừng tin bất cứ ai, bí ẩn tiền ảo: https://www.netflix.com/hk/title/81349029
[2] < /p>
Tóm tắt: https://github.com/summa-dev
[3] < /p>
Đã tạo bằng chứng Halo2: https://github.com/privacy-scaling-explorations/halo2-solidity-verifier
[4]
Băm Poseidon: https://github.com/ingonyama-zk/poseidon-hash
< p style="text-align: left;">[5]
Giai đoạn chuẩn bị tham số và giai đoạn vận hành Hash: https://autoparallel.github.io/ tổng quan/index.html
[6]
Thanh ghi dịch chuyển phản hồi tuyến tính: https: //en.wikipedia.org/wiki/Linear-feedback_shift_register
[7]
ethers rs: https://github.com/gakonst/ethers-rs
Nên đọc
Chuỗi thông tin chuyên sâu về ZK
Ghi chú nghiên cứu zkp
Wen Building Podcast
Nghiên cứu phân tích loạt bài viết
Loạt bài dịch tốt của Uniswap
Antalpha Labs là một cộng đồng nhà phát triển Web3 phi lợi nhuận chuyên thúc đẩy sự đổi mới và ứng dụng công nghệWeb3 bằng cách khởi xướng và hỗ trợ phần mềm nguồn mở.
Trang web chính thức:https://labs.antalpha.com
Twitter:https://twitter.com/Antalpha_Labs
Youtube:https:/ / www.youtube.com/channel/UCNFowsoGM9OI2NcEP2EFgrw
Liên hệ với chúng tôi:[email protected]