Máy ảo Ethereum là một môi trường vận hành mã được xây dựng trên blockchain Ethereum. Mã hợp đồng có thể được cách ly hoàn toàn với bên ngoài và chạy bên trong EVM. Chức năng chính của nó là xử lý các hợp đồng thông minh trong hệ thống Ethereum. Lý do tại sao Ethereum hoàn thiện Turing là các nhà phát triển có thể sử dụng ngôn ngữ Solidity để tạo các ứng dụng chạy trên EVM và tất cả các vấn đề tính toán đều có thể được tính toán. Nhưng chỉ sự hoàn chỉnh của Turing là không đủ. Mọi người cũng cố gắng đóng gói EVM trong hệ thống chống ZK, nhưng vấn đề là khi đóng gói sẽ có rất nhiều phần dư thừa. "Chế độ bảng nhỏ" zkEVM do Fox phát minh sẽ không chỉ đảm bảo rằng các nhà phát triển Solidity Ethereum bản địa có thể di chuyển sang zkEVM một cách liền mạch mà còn giảm đáng kể chi phí dự phòng cho việc đóng gói EVM vào hệ thống chống ZK.
EVM đang trải qua quá trình chuyển đổi ZK hoành tráng kể từ khi thành lập vào năm 2015. Quá trình chuyển đổi lớn này có hai hướng chính.
Hướng đầu tiên là cái gọi là đường zkVM. Dự án theo dõi này được dành riêng để cải thiện hiệu suất của Ứng dụng đến mức tối ưu và khả năng tương thích với máy ảo Ethereum không phải là yếu tố cần cân nhắc chính. Có hai hướng phụ ở đây. Một là tạo DSL (Ngôn ngữ dành riêng cho miền) của riêng bạn. Ví dụ: StarkWare cam kết quảng bá ngôn ngữ Cairo, ngôn ngữ này không dễ quảng bá. Thứ hai là mục tiêu tương thích với các ngôn ngữ tương đối trưởng thành hiện có. Ví dụ: RISC Zero cam kết làm cho zkVM tương thích với C++ và Rust. Khó khăn của bài hát này là các ràng buộc của đầu ra cuối cùng phức tạp hơn do sự ra đời của tập lệnh ISA.
Hướng thứ hai là cái gọi là đường zkEVM. Dự án theo dõi này dành riêng cho khả năng tương thích của EVM Bytecode, nghĩa là các mã EVM ở cấp Bytecode và trên hết là tạo ra các bằng chứng không kiến thức tương ứng thông qua zkEVM, để các nhà phát triển Solidity Ethereum bản địa có thể chuyển sang zkEVM miễn phí . Những người chơi trên đường đua này chủ yếu bao gồm Polygon zkEVM, Scroll, Taiko và Fox. Khó khăn của đường đua này là nó tương thích với EVM, không phù hợp để gói gọn chi phí dự phòng trong hệ thống chống ZK. Sau một thời gian dài suy nghĩ và tranh luận, Fox cuối cùng đã tìm ra chìa khóa để giảm thiểu một cách cơ bản sự dư thừa rất lớn của thế hệ zkEVM đầu tiên: "chế độ bảng nhỏ" zkEVM.
Mạch dữ liệu và bằng chứng là hai yếu tố cốt lõi của zkEVM để tạo bằng chứng. Một mặt, trong zkEVM, người chứng minh cần tất cả dữ liệu liên quan đến giao dịch để chứng minh rằng việc chuyển trạng thái do giao dịch mang lại là chính xác, trong khi dữ liệu trong EVM lớn và có cấu trúc phức tạp. Do đó, làm thế nào để tổ chức và sắp xếp dữ liệu cần thiết cho bằng chứng là một vấn đề cần được xem xét cẩn thận để xây dựng một zkEVM hiệu quả. Mặt khác, làm thế nào để chứng minh (hoặc xác minh) hiệu quả tính hợp lệ và chính xác của việc thực hiện tính toán thông qua một loạt các ràng buộc mạch là cơ sở để đảm bảo tính bảo mật của zkEVM.
Trước tiên hãy nói về câu hỏi thứ hai, bởi vì đây là câu hỏi mà tất cả các nhóm thiết kế zkEVM cần phải xem xét. Bản chất của câu hỏi này thực sự là "chúng ta muốn chứng minh điều gì?" Hiện tại, suy nghĩ của mọi người về câu hỏi này là tương tự nhau, bởi vì Một giao dịch (hoặc mã op mà nó liên quan) có thể đa dạng và việc chứng minh trực tiếp rằng các thay đổi trạng thái do từng bước của hoạt động mang lại là đúng theo trình tự là không thực tế. , vì vậy chúng tôi cần bằng chứng phân loại.
Ví dụ: chúng tôi tập hợp từng thay đổi của các phần tử trong ngăn xếp, đặc biệt viết chứng minh mạch ngăn xếp, viết một tập hợp các mạch số học cho các phép toán số học thuần túy, v.v. Bằng cách này, các tình huống mà mỗi mạch cần xem xét trở nên tương đối đơn giản. Các mạch này với các chức năng khác nhau có các tên khác nhau trong các zkEVM khác nhau. Một số người gọi chúng là mạch trực tiếp, trong khi những người khác gọi chúng là máy trạng thái (phụ), nhưng bản chất của ý tưởng là như nhau.
Để giải thích rõ hơn ý nghĩa của việc làm này, chúng tôi xin đưa ra một ví dụ, giả sử rằng bây giờ chúng ta muốn chứng minh phép cộng (lấy 2 phần tử trên của ngăn xếp và đưa tổng của chúng trở lại đầu ngăn xếp ):
Giả sử ngăn xếp ban đầu là [1,3,5,4,2]
Khi đó nếu không phân loại và tách, ta cần thử chứng minh ngăn xếp trở thành [1,3,5,6] sau các phép toán trên.
Còn nếu phân loại thì ta chỉ cần chứng minh riêng các điều sau:
Điều đáng chú ý là độ phức tạp của chứng minh có liên quan đến số lượng tình huống mà mạch cần xem xét. Nếu không được phân loại và chia nhỏ, khả năng mạch cần được phủ sẽ là rất lớn.
Một khi phân loại được tách ra, tình huống của từng phần sẽ trở nên tương đối đơn giản, do đó độ khó chứng minh sẽ giảm đi đáng kể.
Nhưng việc phân loại và chia tách cũng sẽ mang đến những vấn đề khác, đó là vấn đề nhất quán dữ liệu của các loại mạch khác nhau. Chẳng hạn, trong ví dụ trên, thực tế chúng ta cần chứng minh hai điều sau:
Để giải quyết vấn đề này, chúng ta quay lại câu hỏi đầu tiên, đó là cách chúng ta tổ chức dữ liệu liên quan đến giao dịch và chúng ta sẽ thảo luận về chủ đề này tiếp theo:
Một phương pháp trực quan là: thông qua theo dõi, chúng ta có thể phân tách từng bước liên quan đến tất cả các giao dịch, biết dữ liệu liên quan và gửi yêu cầu đến nút để lấy phần dữ liệu không có trong dấu vết, sau đó chúng ta sẽ Nó được sắp xếp thành một bảng lớn T như sau:
Vì vậy, trong ví dụ trên, chúng ta sẽ có một dòng ghi
C4 trên có thể được chứng minh như sau:
C5 cũng tương tự. Thao tác này (để chứng minh rằng một số phần tử xuất hiện trong bảng) được gọi là tra cứu. Chúng tôi sẽ không giới thiệu thuật toán tra cứu cụ thể trong bài viết này, nhưng có thể hình dung rằng độ phức tạp của thao tác tra cứu có liên quan chặt chẽ với kích thước của bảng lớn T. Vì vậy, bây giờ chúng ta quay lại câu hỏi đầu tiên: làm thế nào để tổ chức dữ liệu mà sẽ được sử dụng trong các bằng chứng?
Chúng tôi xem xét một loạt các cấu trúc bảng sau đây:
Từ Ta:
Từ Tb:
Ưu điểm của việc xây dựng nhiều bảng nhỏ theo cách này là chúng ta có thể trực tiếp thực hiện tra cứu trong các bảng nhỏ tương ứng theo các loại thao tác liên quan đến dữ liệu được yêu cầu. Bằng cách này, hiệu quả có thể được cải thiện rất nhiều.
Một ví dụ đơn giản (giả sử chúng ta chỉ có thể tra cứu một phần tử tại một thời điểm) là nếu chúng ta muốn chứng minh rằng 8 chữ cái a~h tồn tại trong [a,b,c,d,e,f,g,h], chúng ta cần Thực hiện 8 lần tra cứu trên một bảng có kích thước là 8, nhưng nếu chia bảng thành [a,b,c,d] và [e,f,g,h] thì chỉ cần tra cứu 2 Bảng này đã được tra cứu 4 lần trên đó!
Thiết kế của bảng nhỏ này được sử dụng trong zkEVM của lớp 2 của FOX để cải thiện hiệu quả. Để đảm bảo bằng chứng đầy đủ trong các tình huống khác nhau, phương pháp chia bảng nhỏ cụ thể cần được thiết kế cẩn thận và nâng cao hiệu quả. Điều quan trọng là cân bằng việc phân loại nội dung của bảng với kích thước của nó. Mặc dù việc triển khai một zkEVM hoàn chỉnh trong khuôn khổ này đòi hỏi một khối lượng công việc khổng lồ, nhưng chúng tôi kỳ vọng rằng một zkEVM như vậy sẽ có một bước đột phá về hiệu suất.
Kết luận: "Chế độ bảng nhỏ" zkEVM do Fox phát minh không chỉ đảm bảo rằng các nhà phát triển Solidity Ethereum bản địa có thể chuyển sang zkEVM miễn phí mà còn giảm đáng kể chi phí dư thừa khi đóng gói EVM vào hệ thống bằng chứng ZK. Đây là một thay đổi lớn trong cấu trúc của zkEVM, sẽ có tác động sâu sắc đến kế hoạch mở rộng của Ethereum.
Tất cả bình luận