1. Đặt vấn đề
Với sự bùng nổ của DeFi, GameFi, NFT, ... số lượng người dùng cũng như giao dịch trên Ethereum nói riêng và trên các mạng lưới blockchain trở nên tăng một cách đột biến. Tuy nhiên, với khả năng chỉ xử lý được khoảng 40 giao dịch/giây, mạng lưới Ethereum đối mặt vấn đề mở rộng khi tốc độ xử lý giao dịch thấp, cùng với đó là chi phí giao dịch đắt đỏ, tốn kém.
Nhiều giải pháp đã được đề xuất và triển khai nhằm giải quyết bài toán mở rộng mạng lưới Ethereum, trong đó Layer 2 là một giải pháp xu thế đang được phát triển rất tích cực.
Layer 2
Layer 2 là tên gọi chung cho các giải pháp được phát triển trên nền Layer 1 nhằm mở rộng mạng lưới. Layer 2 là cũng một blockchain riêng biệt, mở rộng và kế thừa các đặc tính của Layer 1.
Vậy layer 1 là gì ?
Layer 1 là các blockchain cơ sở. Ethereum và Bitcoin là 2 blockchain layer 1 tiêu biểu vì chúng đều là các nền tảng mà các layer 2 xây dựng ngay trên đó. Các blockchain layer 1 sẽ có các đặc điểm như sau:
- Có 1 mạng lưới các node ngang hàng làm nhiệm vụ xác thực giao dịch và đảm bảo tính an toàn
- Có cơ chế đồng thuận giữa các node
- Các block được tạo liên tục
- Lịch sử tất cả các giao dịch được ghi vào các block
2. Rollups
Rollups là một trong những giải pháp phổ biến nhất đang được áp dụng cho các nền tảng Layer 2 trên Ethereum. Ý tưởng chính của phương pháp này là chúng ta sẽ thực hiện chuyển tài sản từ Layer 1 qua Layer 2, giao dịch trên blockchain Layer 2 và sau đó các giao dịch sẽ được gom lại (Rollups bundle) thành các lô. Kết quả của các lô được đăng lên chuỗi chính Ethereum, nơi có thể được xác minh bởi bất kỳ ai.
Dữ liệu giao dịch được gửi từ Layer 2 lên Layer 1 cần phải có cơ chế, thuật toán để xác minh tính chính xác, loại bỏ các giao dịch không hợp lệ. Hiện nay, Rollups đang có 2 hướng tiếp cận gồm:
- Optimistic rollups
- Zero-knowledge rollups
Optimistic rollups
Đúng như cái tên gọi optimistic (lạc quan), cách tiếp cận này xem rằng các giao dịch off-chain (trên layer 2) đều hợp lệ và không gửi kèm bất cứ bằng chứng gì lên chuỗi chính Ethereum. Thay vào đó sẽ có một khoảng thời gian thử thách (challenge period) trước khi giao dịch được gửi lên. Trong khoảng thời gian đó, bất kỳ validator nào nhận thấy các giao dịch có vấn đề đều có thể kiểm tra và chứng minh các giao dịch không hợp lệ. Hướng tiếp cận này được gọi với cái tên fraud-proving scheme.
Cơ chế này khuyến khích tìm lỗi sai trong các giao dịch để nhận thưởng, cũng như hình phạt dành cho các validator nếu lô giao dịch được gom ko hợp lệ.
P/s: Thời gian thử thách của các layer 2 Optimistic rollups từ khoảng 1 tuần. Vậy nên khi muốn rút chuyển tiền từ Layer 2 về lại Ethereum, người dùng phải đợi khi thời gian thử thách kết thúc.
Zero-knowledge rollups
Zero Knowledge Proof (ZKP)
ZKP là một cách chứng minh tính hợp lệ của một tuyên bố mà không cần phải tiết lộ về tuyên bố đó.
Một ví dụ để mô tả về ZKP khi Alice muốn chứng minh cho Bob rằng mình biết mật khẩu két sắt nhưng không muốn tiết lộ về mật khẩu cho Bob. Khi đó, Bob có thể xáo mật khẩu két sắt thật nhiều lần, nếu Alice đều mở được két sắt thì điều đó chứng tỏ Alice biết mật khẩu là gì
ZKP trong blockchain ứng dụng những thành tựu của mật mã học giúp việc chứng minh theo kiểu zero-knowledge trên các hệ thống máy tính thành hiện thực.
Một giao thức zero-knowledge phải đáp ứng đủ cả 3 yếu tố sau:
- Completeness (Tính toàn vẹn): Nếu chứng minh được kiểm chứng là đúng, thì kết quả trả về sẽ phải là đúng.
- Soundness (Tính chính xác): Nếu chứng minh là không đúng đắn, thì nó sẽ không bao giờ được chấp nhận bởi người xác minh.
- Zero-knowledge (không tiết lộ thông tin): Người xác minh không biết gì về một tuyên bố ngoài tính hợp lệ của tuyên bố đó.
Về cơ bản, zero-knowledge proof được tạo thành từ ba thành phần:
- Witness: Là thông tin bí mật chỉ được biết bởi người chứng minh (prover), cần chứng minh cho người xác minh rằng biết về witness nhưng tiết lộ nó.
- Challenge: Người xác minh (verifier) ngẫu nhiên các câu hỏi và yêu cầu người chứng minh trả lời.
- Response: Người chứng minh sẽ cần trả lời các câu hỏi, từ đó người xác minh sẽ biết rằng đáp án các câu trả lời từ đó xác nhận rằng người kia có thực sự biết về witness hay không ?
Để tìm hiểu sâu hơn về ZKP, các bạn có thể đọc thêm bài viết Zero Knowledge Proof và privacy trên Blockchain.
ZKP ứng dụng vào layer 2
Các giao dịch được thực hiện trên Layer 2, sau đó được gom theo lô. Khác với Optimistic rollups, ZK rollups sẽ gửi bằng chứng dưới dạng mật mã lên Ethereum, để chứng minh tính hợp lệ của các giao dịch ngoài chuỗi.
Với việc sử dụng bằng chứng dạng mật mã có thể xác minh được, ZK rollups gần như sẽ không có độ trễ trong việc rút tài sản từ Layer 2 trở về Layer 1 như Optimistic rollups, cùng với đó bằng chứng có kích thước lưu trữ bé hơn so với thông tin về giao dịch mà Optimistic gửi lên, qua đó tiết kiệm được cả chi phí giao dịch
Kiến trúc của ZK rollups sẽ bao gồm 2 phần chính:
- On-chain contracts: Bao gồm các hợp đồng thông minh được triển khai trên Ethereum như lưu trữ trạng thái rollups, quản lý tiền người dùng gửi và hợp đồng xác minh bằng chứng zero-knowledge được gửi từ Layer 2.
- Off-chain VM: Môi trường thực thi cho các giao dịch ngoài chuỗi (off-chain), nơi các giao dịch được người dùng gửi đi, gom theo lô và tạo bằng chứng zero-knowledge gửi trở lại Layer 1 để xác minh. Đây chính là blockchain Layer 2 sẽ cần xây dựng thêm.
3. zkEVM
Hơn một năm trở lại đây, các sản phẩm Layer 2 theo cơ chế Optimistic như Arbitrum hay Optimism được ra mắt và thu hút được một lượng lớn người dùng và tài sản tương ứng.
Tổng giá trị tài sản được khóa (TVL) của 2 dự án Layer 2 Optimistic nổi bật nhất tại thời điểm bài viết (theo defillama.com)
Dù có nhiều ưu điểm hơn Optimistic rollups, nhưng ZK rollups khó hơn nhiều về mặt kỹ thuật cũng như khả năng triển khai thực tế. Đó là lý do mà các dự án Optimistic bùng nổ trước khi những nghiên cứu về zkEVM đạt được những kết quả nhất định, giúp việc triển khai ZK rollups không còn nằm trên lý thuyết.
zkEVM là gì ?
EVM không được thiết kế để có thể hỗ trợ zero-knowledge proofs, điều cần làm là điều chỉnh để EVM có thể thực hiện được các tính toán ZK. Đó là lý do xuất hiện khái niệm zkEVM.
zkEVM là một môi trường máy ảo hỗ trợ zero-knowledge proofs, tương thích một phần hoặc hoàn toàn với EVM.
Kiến trúc của zkEVM
ZkEVM được chia thành ba phần: môi trường thực thi, mạch chứng minh và hợp đồng xác minh. Mỗi thành phần tham gia vào quá thực hiện chương trình của zkEVM, tạo bằng chứng và xác minh bằng chứng.
1. Môi trường thực thi (The execution environment)
Là nơi các chương trình (hợp đồng thông minh) được chạy trong zkEVM. Môi trường thực thi của zkEVM hoạt động giống như EVM: lấy trạng thái ban đầu và sự thay đổi của giao dịch để tạo ra trạng thái mới.
2. Mạch chứng minh (The proving circuit)
Mạch chứng minh là nơi tạo ra các bằng chứng zero-knowledge để xác minh tính hợp lệ của các giao dịch. Với đầu vào là thông tin của các giao dịch, trạng thái. Đầu ra là bằng chứng ngắn gọn về tính hợp lệ của các giao dịch trong quá trình chuyển đổi trạng thái.
3. Hợp đồng xác minh (The verifier contract)
ZK-rollup gửi bằng chứng hợp lệ cho hợp đồng thông minh được triển khai trên Layer 1 (Ethereum) để xác minh. Hợp đồng sẽ tính toán dựa trên bằng chứng được cung cấp và xác nhận rằng kết quả đầu ra có chính xác hay không.
Hướng tiếp cận để phát triển zkEVM
Do EVM vốn không hỗ trợ zero-knowledge proofs, nên công việc các nhà phát triển cần làm là tùy chỉnh và phát triển thêm để có thể xử lý các tính toán ZK.
Xây dựng logic tính toán zero-knowledge từ các EVM opcodes
Cách tiếp cận này yêu cầu triển khai logic tính toán ZK từ các EVM opcodes (một nhiệm vụ rất phức tạp và tốn nhiều thời gian). Bù lại, việc tương thích hoàn toàn với EVM giúp các nhà phát triển có thể "bê" nguyên mã nguồn hợp đồng từ Layer 1 sang Layer 2 mà không cần phải chỉnh sửa gì.
Tạo ngôn ngữ mới cho các tính toán ZK
Cách tiếp cận này yêu cầu xây dựng một ngôn ngữ mới, được thiết kế để hỗ trợ ZK với opcodes mới mà EVM ko có . Các nhà phát triển sẽ cần phải viết hợp đồng trực tiếp bằng ngôn ngữ mới hoặc biên dịch mã nguồn Solidity thành các mã opcode zkEVM.
Mặc dù phương pháp này thường dễ thực hiện hơn phương pháp đầu tiên nhưng nó cũng có những nhược điểm không thể tái sử dụng các mã nguồn hợp đồng sẵn có, phải chỉnh sửa nhiều hoặc viết lại hoàn toàn bằng ngôn ngữ mới.
Kết luận
Trong khuôn khổ bài viết, còn nhiều điều chúng ta chưa kịp cùng nhau tìm hiểu như cơ chế mật mã chi tiết của ZK hoạt động như thế nào, độ bảo mật của nó được thể hiện ra sao. Hy vọng trong một bài viết không xa chúng ta sẽ cùng nhau đi sâu hơn về các thuật toán ZK đang ứng dụng vào blockchain.
Tài liệu tham khảo
https://www.alchemy.com/overviews/zkevm
https://ethereum.org/vi/layer-2/
https://viblo.asia/p/zero-knowledge-proof-va-privacy-tren-blockchain-part-1-Do754pq05M6