ZK coprocessor là gì? Tầm quan trọng của ZK coprocessor
![Avatar](/_next/image?url=https%3A%2F%2Ffiles.amberblocks.com%2Fuserdata%2Fusr9580exg5m50m04fo1iskezbg3s5nt%2Fprofile-pictures%2Ffk49yv2ifvrm1tgz9wtzk9c0fe8cktvf%2Fava.jpeg&w=3840&q=20)
![zk coprocessor là gì](https://files.amberblocks.com/thumbnail/chnbzaa92ook5tnj/posts/pu036z0hosz24rkt/fjfp7uhv3w89wdzpzh5wgdkjc9d0kz65/zk-coprocessor.jpg)
ZK coprocessor là gì?
ZK coprocessor, bộ đồng xử lý Zero Knowledge, là một loại cơ sở hạ tầng blockchain mới. Chúng cho phép nhà phát triển hợp đồng thông minh chứng minh rằng một phép tính ngoài chuỗi (offchain) đã được thực hiện chính xác dựa trên dữ liệu hiện có trên chuỗi (onchain), mà không cần lưu trữ trạng thái (stateless).
Nói cách khác, stateless đề cập đến việc toàn bộ dữ liệu hoặc kết quả tính toán không cần phải lưu trữ hoàn toàn trên blockchain hay lưu trữ onchain. Thay vì lưu trữ tất cả, hệ thống chỉ tạo ra bằng chứng cho thấy các tính toán đã được thực hiện chính xác. Điều này giúp hệ thống tiết kiệm tài nguyên và tăng tốc độ xử lý, liên quan đến vấn đề mở rộng blockchain - blockchain scaling.
Mặc dù có những lo ngại liên quan đến vấn đề bảo mật và độ tin cậy của các ZK coprocessor vì chúng là bên thứ ba, tuy nhiên các giải pháp này vẫn đang tiếp tục được nghiên cứu để hạn chế các rủi ro liên quan.
![zk coprocessor là gì](https://files.amberblocks.com/media/chnbzaa92ook5tnj/posts/pu036z0hosz24rkt/fbm4p0ikbyph1p2ktolj4oo3sj4lrt5k/zk-coprocessor-landscape.jpeg)
Hiểu về ZK coprocessor trong kiến trúc blockchain
Trong bối cảnh của thiết kế chip phần cứng, thuật ngữ coprocessor - bộ đồng xử lý, bắt nguồn từ Web 2.0 cùng sự giới thiệu của GPU. Nó dùng để chỉ một chip được thiết kế riêng nhằm hỗ trợ song song cho bộ xử lý trung tâm của hệ thống - CPU, giảm tải các tác vụ từ tính toán, đồ họa, tín hiệu, chuỗi (string), mật mã (cryptography)...
Điểm mấu chốt trong thiết kế của coprocessor đó là phân chia các tác vụ cụ thể cho đơn vị xử lý chuyên biệt. Nó tương tự như mối liên quan giữa CPU và GPU của máy tính. Trong đó, CPU xử lý hầu hết các tác vụ còn GPU xử lý một số tác vụ liên quan đến đồ họa. Có thể xem CPU như processor và GPU như coprocessor.
Ở khía cạnh ứng dụng trong công nghệ blockchain, các coprocessor đặc biệt hữu ích với môi trường tính toán bị hạn chế và đắt đỏ như EVM. Sự kết hợp giữa công nghệ ZKP với coprocessor để tạo nên ZK coprocessor được xem như mở rộng tính ứng dụng của chip đồng xử lý trong công nghệ máy tính và công nghệ blockchain.
Trong đó, có thể xem smart contract đóng vai trò như CPU và ZK coprocessor tương tự như GPU. Chúng như bạn đồng hành, hoạt động song song và cùng thúc đẩy một mục đích cuối - blockchain scaling.
Tại sao chúng ta cần ZK coprocessor?
Cần lưu ý rằng, việc dữ liệu lịch sử được lưu trữ trên blockchain và việc smart contract có thể truy cập dữ liệu lịch sử trên các EVM blockchain là hoàn toàn khác nhau. Tại sao lại có sự khác biệt này và tại sao chúng ta cần xem xét khía cạnh khác biệt này?
Trên Ethereum có 3 loại node chính, bao gồm: full node, light node và archive node. Trong đó, mỗi loại sẽ có tác dụng khác nhau. Ở bài viết này, chúng ta quan tâm đến archive node - node lưu trữ, chúng có nhiệm vụ lưu trữ toàn bộ thông tin trạng thái dữ liệu của blockchain trên Data Availability layer.
Các archive node sẽ cho phép các bên phân tích dữ liệu offchain như Dune Analytics, Nansen, DefiLlama, Etherscan, 0xscope… có thể trực tiếp thu thập và truy xuất dữ liệu lịch sử blockchain.
Đối với các smart contract trên Ethereum, chúng có thể truy cập vào:
- Dữ liệu trạng thái của máy ảo VM (không bao gồm dữ liệu giao dịch hoặc sự kiện)
- Dữ liệu block header* của 256 block gần nhất
- Dữ liệu công khai của các smart contract khác thông qua các hàm "view" (không bao gồm dữ liệu riêng tư hoặc nội dung của hợp đồng).
Tuy nhiên, để truy cập dữ liệu lịch sử, các smart contract này cần truy xuất ngược trên từng block.
*Block header hay tiêu đề khối, chứa tất cả thông tin của blockchain đến block hiện tại, được nén ở dạng 32-byte hash bởi Merkle tree và thuật toán băm Keccak.
![zk coprocessor là gì](https://files.amberblocks.com/media/chnbzaa92ook5tnj/posts/pu036z0hosz24rkt/fij5nutge4lmfzcjbq0rkdwzrptwtsco/smart-contract-giai-nen.png)
Về mặt lý thuyết, để truy xuất ngược dữ liệu lịch sử, các smart contract sẽ giải nén dữ liệu của từng block, nhưng không đơn giản. Để truy cập dữ liệu từ một khối trước đó, cần thực hiện nhiều bước phức tạp như lấy dữ liệu offchain và xây dựng bằng chứng xác thực. Nghĩa là, smart contract phải thực hiện một khối lượng tính toán khổng lồ, tốn kém về cả chi phí và thời gian.
Tuy nhiên, cần phải biết rằng các máy ảo blockchain như EVM không được thiết kế để xử lý khối lượng lớn dữ liệu và các tác vụ tính toán nặng như giải nén ngược. Chúng được thiết kế nhằm thực thi smart contract code song song với việc đảm bảo bảo mật và tính phi tập trung của mạng.
Do đó, các giải pháp thay thế giúp xử lý khối lượng tính toán phức tạp trở nên cần thiết. ZK coprocessor cung cấp một giải pháp hiệu quả để xử lý các tác vụ tính toán nặng, giúp smart contract truy cập dữ liệu lịch sử một cách an toàn và hiệu quả. Thay vì thực hiện tất cả các thao tác trong EVM, các nhà phát triển có thể chuyển các thao tác tốn kém sang ZK coprocessor và chỉ cần sử dụng kết quả on-chain.
![zk coprocessor](https://files.amberblocks.com/media/chnbzaa92ook5tnj/posts/pu036z0hosz24rkt/fuhli6u2yaoavkifi3zgm3lirn0u221d/bat-cap-cua-smart-contract.png)
ZK rollup thực tế là những ZK coprocessor đầu tiên, hỗ trợ cùng loại tính toán được sử dụng trên L1 nhưng ở quy mô và số lượng lớn hơn nhiều. Bộ xử lý này hoạt động ở mức độ giao thức, còn đối với ZK coprocessor ở mức độ ứng dụng phi tập trung (dApp).
Bằng cách tách biệt việc truy cập dữ liệu và tính toán ra khỏi sự đồng thuận của blockchain, ZK coprocessor cung cấp một cách tiếp cận mới để mở rộng ứng dụng của smart contract. Chúng loại bỏ hạn chế rằng mọi tính toán phải được thực hiện trong máy ảo blockchain. Các tính toán phức tạp và tốn kém sẽ được chuyển sang cho ZK coprocessor.
Điều này cho phép các ứng dụng truy cập nhiều dữ liệu hơn và hoạt động ở quy mô lớn hơn trước đây, trong khi vẫn kiểm soát được chi phí gas, tăng khả năng mở rộng và hiệu quả của các hợp đồng thông minh mà không làm giảm tính phi tập trung và bảo mật.
Tuy nhiên, đặt ngược lại vấn đề, trước kia không tồn tại ZK coprocessor thì smart contract truy xuất dữ liệu onchain như thế nào?
Điểm nổi bật của các ZK coprocessor
Trước khi có giải pháp ZK coprocessor, chúng ta đã được làm quen với nhiều giải pháp. Mỗi giải pháp tồn tại những ưu và nhược điểm riêng, nhưng chúng đều đóng góp ở một khía cạnh nào đó.
Một số loại hình có thể kể đến như:
- Oracle như Chainlink… Chúng có thể cung cấp dữ liệu lịch sử nhưng đòi hỏi sự tin tưởng vào các bên cung cấp dữ liệu.
- Dịch vụ lưu trữ và truy vấn offchain như Dune Analytics, The Graph, Nansen…
- Archive Node: Các ứng dụng có thể gửi truy vấn đến các node này để lấy dữ liệu lịch sử. Tuy nhiên, việc lấy dữ liệu từ archive node và xử lý chúng vẫn tốn kém và không hiệu quả khi thực hiện trực tiếp trên blockchain.
- Giải pháp mở rộng Layer 2: Layer 2 chủ yếu giải quyết vấn đề về mở rộng quy mô hơn là việc truy xuất dữ liệu lịch sử cụ thể.
Tóm lại, các giải pháp trước đây tập trung vào việc giảm tải tính toán và lưu trữ onchain. Tuy nhiên, các giải pháp này vẫn có hạn chế về chi phí, hiệu suất và mức độ tin cậy.
Điểm nổi bật nhất của ZK coprocessor là mang lại một cách tiếp cận hiệu quả hơn bằng cách sử dụng các bằng chứng ZK proof để xác minh dữ liệu và tính toán offchain, đảm bảo về độ tin cậy và tiết kiệm chi phí.
ZK coprocessor giải quyết vấn đề gì?
Trong kiến trúc của ZK coprocessor, có hai vấn đề chính được chú trọng giải quyết:
- Fetching data/Data access: Lấy dữ liệu từ blockchain và chứng minh thông qua ZK rằng dữ liệu là chính xác, không bị giả mạo.
- Compute: Thực hiện các tính toán tương ứng dựa trên dữ liệu đã thu thập và chứng minh thông qua ZK rằng kết quả tính toán cũng là chính xác, không bị giả mạo. Kết quả tính toán sau đó có thể được smart contract sử dụng dưới dạng “chi phí thấp và không cần tin tưởng” - “low cost + trustless".
Fetching data/Data access
Để thực hiện tính toán trên coprocessor, điều quan trọng là phải đảm bảo rằng tất cả dữ liệu đầu vào đều được trích xuất đúng từ lịch sử của blockchain. Tuy nhiên, điều này khá khó khăn vì smart contract chỉ có thể truy cập trạng thái hiện tại của blockchain và thậm chí việc truy cập này là phần tốn kém nhất của tính toán. Có nghĩa là, những đầu vào quan trọng cho tính toán không có sẵn để smart contract có thể xác minh kết quả từ coprocessor.
Có ba cách khác nhau để giải quyết vấn đề này, với sự đánh đổi giữa chi phí, bảo mật và độ phức tạp để phát triển:
- Lưu trữ dữ liệu trong blockchain state và đọc lưu trữ dữ liệu của EVM để xác thực dữ liệu của coprocessor. Cách này rất tốn kém và trở nên không khả thi về mặt chi phí khi xử lý lượng lớn dữ liệu.
- Tin tưởng Oracle hoặc người ký xác nhận thông qua multisig provider. Rõ ràng là khi có sự góp mặt của bên thứ ba, chúng liên quan đến bảo mật.
- Sử dụng ZK proof để kiểm tra rằng bất kỳ dữ liệu on-chain nào được sử dụng trong coprocessor đều được cam kết trong lịch sử dữ liệu của blockchain. Điều này đảm bảo về mặt mật mã học (cryptographic guarantee) cho tính hợp lệ của dữ liệu (data validity) và không yêu cầu giả định tin tưởng bổ sung (trust assumption).
Việc lựa chọn giữa các cách như thế nào tùy thuộc vào khía cạnh ưu tiên của các dự án làm về mảnh ghép này. Trong đó, hầu hết các dự án coprocessor sử dụng phương pháp thứ ba - ZK coprocessor.
Compute
Để thực thi tính toán offchain trong ZK coprocessor, cần chuyển đổi các chương trình sang ZK circuit. Tuy nhiên, việc viết các circuit cũng là một thách thức vì có những khác biệt trong mô hình tính toán.
Vì vậy, có ba phương pháp chính để chỉ định các tính toán trong ZK coprocessor, mỗi phương pháp cân bằng giữa hiệu suất, tính linh hoạt và độ phức tạp để phát triển:
- Custom Circuit: Nhà phát triển viết circuit cho từng ứng dụng. Phương pháp này có hiệu suất cao nhất nhưng đòi hỏi nỗ lực đáng kể từ các nhà phát triển.
- eDSL/DSL for Circuit: Nhà phát triển viết circuit cho từng ứng dụng trong khuôn khổ tóm tắt các vấn đề đặc trưng của ZK. Tuy nhiên, điều này làm giảm hiệu suất.
- zkVM: Các nhà phát triển viết circuit trong VM và thực thi trong ZK. Việc sử dụng các VM mang lại trải nghiệm đơn giản nhất cho các nhà phát triển, nhưng hiệu suất và tính linh hoạt thấp hơn do sự khác biệt trong các mô hình tính toán giữa VM và ZK.
Nhìn chung, ZK coprocessor mở ra nhiều ứng dụng mới đối với các dApp có liên quan đến việc sử dụng dữ liệu và tính toán offchain, giúp tối ưu chi phí và tài nguyên mạng.