Bằng chứng tài sản dựa trên ZK

Bài viết này được dịch máy
Xem bản gốc

tổng hợp

Chúng tôi thường nắm giữ crypto và thường tiến hành các hoạt động mua bán và trao đổi tiền tệ trên sàn giao dịch tập trung. Giao dịch trên 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 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 crypto của người dùng. Tuy nhiên, với sự thịnh vượng của 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 rồi bỏ trốn là điều phổ biến. Netflix đã đặc biệt quay một video quảng cáo về sự vỡ nợ đột ngột sàn giao dịch và cái chết bí ẩn của người sáng lập: Đừng tín nhiệm ai, tiền ảo chưa được giải quyết [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 crypto mà các lĩnh vực truyền thống khác cũng xảy ra vô số trường hợp lừa dối nhà đầu tư thông qua kế toán sai. 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 không ngừng nghỉ ở nhiều lĩnh vực khác nhau là do bản thân công tác kiểm toán, kế toán chưa hoàn toàn công khai, minh bạch, tạo cơ hội rất lớn cho tham nhũng, 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ư, 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 Bằng chứng không tri thức 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 có thể xác minh xem một số tài sản của mình 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 sẽ rất khó thực hiện gian lận tài chính. 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 dữ liệu 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ệ Bằng chứng không tri 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 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] ).

Trong hình, Người giám sát đại diện cho 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 gửi bởi sàn giao dịch. 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ố.

iyyfWjPfKHJcL4s5INyo9G0jgJFAuDccDsxwBwlt.png

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ư 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.

c1miZfFRIOB4Zp7L2i8dFvh6PxtgW5UasNEstxAp.png

Cả hai phần của dữ liệu đều dễ dàng được cung cấp công khai trên chuỗi và có thể được truy vấn (ngoại trừ hàm băm gốc). Sẽ rất khó 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 tạo ra bởi sàn giao dịch. 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, Proof Verify 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.

YQRmpm6qKGHWDiLdIOEBtmbeJ4ZFXJcAmiFTJbjO.png

Trong sử dụng thực tế, nó có thể được tính toán và xác minh trên chuỗi bằng cách chuyển bằng chứng.

9YydLp45uvMaNmjb7zXfbsRIVUtfr2o1WghjXsqZ.png

Ví dụ về mã sau đây là hàm được sử dụng trong hoạt động Hash thực tế. Bạn có thể thấy rằng toàn bộ phép tính băm không sử dụng các phép toán bit, chỉ có các phép tính cộng và nhân, thân thiện với ZooKeeper.

xOCfOLIEsYSELqHknDGVfOwN13VaMafEvo6lyY1L.png

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 một miền hữu hạn. Khi xây dựng Cây Merkle, cần đả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. Vì lý do này, dữ liệu phải được đặt trong phạm vi trước khi tính toán. Kiểm tra xem dữ liệu có bị tràn trong tương lai hay không.

Nguyên tắc chung của việc kiểm tra phạm vi tương tự như ví dụ dưới đây. Đầu tiên, đối với dữ liệu đầu vào, hãy 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)) Độ lệch bắt buộc phải nằm trong khoảng 8- giá trị bit. . Theo cách này, đối với ràng buộc dữ liệu 32 bit, chỉ cần 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 lớn, rõ ràng là một mạch như vậy sẽ quá lớn để có thể thực hiện được.

bY8TLJjsgoNu89Sjca3AyBqdgSJ6N58gtlqJlBht.png

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à:

o9aIgUzysC7YzXzGdrQMzeLtyyaHKXEsXhOK6Lab.png

Phương thức tính toán băm của nút trung gian 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:

YMAQ8kTVGgDriOT3kbwxjzW8vqynweadGShXKBSS.png

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 một người dùng nào đó thực sự có 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.

XV0YjYQ4algxTjfbj5wR4O0rnfWXETv6nRUnQwtd.png

Chúng ta có thể khéo léo đạt được hiệu ứng ràng buộc bằng cách làm cho toàn bộ phương trình bằng 0 bằng cách đặt 0 và 1.

oRyRD1H8D48iZx6fNgqte3C4aAV4ePLYIexfumrv.png

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 swap để đảm bảo rằng sàn giao dịch thực sự được tạo ra theo đúng thứ tự của hình trên khi tạo bằng chứng. 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 swap .

Cấu trúc dữ liệu cây Merkle zk sibling_middle_node_hash_preimages 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 ô 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 thực hiện dễ dàng bằng mã:

MCeVGEFrHhW61H6gMBDBOQm5BY2CexGTUdIZLfxB.png

Quy trình chứng minh zk tổng thể của Merkle Sum Tree là xử lý dữ liệu, sau đó nhập dữ liệu vị trí tương ứng vào mạch ràng buộc zk để kiểm tra. Xây dựng toàn bộ Cây Merkle. Đầu ra cuối cùng là hàm băm nút 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

Quá trình tạo bằng chứng là để người dùng yêu cầu sàn giao dịch, sau đó sàn giao dịch sẽ trả về dữ liệu bằng chứng và sau đó người dùng xác minh nó bằng 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 người dùng trực tiếp tạo ra thay vì được sàn giao dịch trả lại. Toàn bộ mạch chứng minh halo2 có thể được đóng gói thành một tập hợp web bằng cách sử dụng Rust và sau đó API tương tác tương ứng có thể được tạo bằng cách sử dụng ethers rs [7] . Độ phức tạp về thời gian của việc xác minh gốc Merkle Tree là log(n), có thể không mất quá nhiều thời gian để xác minh thiết bị của người dùng, điều này giúp tăng cường hơn nữa tính bảo mật của phi tập trung.

tham khảo

[1]

Đừng tín nhiệm ai, bí ẩn tiền ảo: https://www.netflix.com/hk/title/81349029

[2]

Tóm tắt: https://github.com/summa-dev

[3]

Bằng chứng Halo2 đã được tạo: https://github.com/privacy-scaling-explorations/halo2-solidity-verifier

[4]

Băm Poseidon: https://github.com/ingonyama-zk/poseidon-hash

[5]

Giai đoạn chuẩn bị tham số và giai đoạn vận hành Hash: https://autoparallel.github.io/overview/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

Đề nghị đọc

Sê-Ri thông tin chi tiết về ZK

ghi chú nghiên cứu zkp

Tòa nhà Wen Podcast

Sê-Ri bài viết nghiên cứu và phân tích

Sê-Ri dịch tốt Uniswap

Antalpha Labs là cộng đồng nhà phát triển Web3 phi lợi nhuận chuyên thúc đẩy đổ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 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: hello.labs@antalpha.com

Nguồn
Tuyên bố từ chối trách nhiệm: Nội dung trên chỉ là ý kiến của tác giả, không đại diện cho bất kỳ lập trường nào của Followin, không nhằm mục đích và sẽ không được hiểu hay hiểu là lời khuyên đầu tư từ Followin.
Thích
Thêm vào Yêu thích
Bình luận