Vào ngày cuối cùng của năm 2023, Vitalik chia sẻ lộ trình của Ethereum cho năm 2023 trên Twitter, tóm tắt tiến triển của Ethereum trong năm. Phần lộ trình "The Verge" mô tả cách công nghệ Ethereum có thể xác minh trạng thái blockchain một cách đơn giản và hiệu quả hơn. Một khái niệm cốt lõi được đề cập ở đó là Verkle Trees. Vậy, Verkle Trees là gì, tại sao Ethereum cần nó, và Verkle Trees giải quyết vấn đề như thế nào? Mục tiêu của bài viết này là trả lời những câu hỏi này cho độc giả mà không đi quá sâu vào mật mã học và toán học, giúp những người hiểu biết về Ethereum một cách nhanh chóng hiểu được khái niệm của Verkle Trees.
Công nghệ truy vấn có thể xác minh được nghiên cứu rộng rãi trong lĩnh vực cơ sở dữ liệu truyền thống, chủ yếu được sử dụng để giải quyết các vấn đề tin cậy với cơ sở dữ liệu bên ngoài. Trong nhiều tình huống, chủ sở hữu dữ liệu có thể chọn không lưu trữ dữ liệu bản thân mình mà thay vào đó giao nhu cầu cơ sở dữ liệu của họ cho một bên thứ ba để cung cấp dịch vụ cơ sở dữ liệu (như cơ sở dữ liệu đám mây). Tuy nhiên, do bên thứ ba không phải lúc nào cũng đáng tin cậy, tính uy tín của kết quả truy vấn mà họ trả về cho người dùng khó mà đảm bảo. Các giải pháp truy vấn có thể xác minh hiện tại cho cơ sở dữ liệu truyền thống chủ yếu thuộc hai loại: dựa trên ADS (Cấu trúc Dữ liệu Xác minh) và dựa trên tính toán có thể xác minh.
ADS là một kỹ thuật truy vấn có thể xác minh được sử dụng rộng rãi trong các cơ sở dữ liệu truyền thống, chủ yếu dựa trên cấu trúc như Cây Merkle hoặc các cấu trúc tích lũy tương tự. Với sự tiến hóa của các công cụ mật mã, nhiều nhà nghiên cứu dần dần bắt đầu khám phá việc sử dụng các kỹ thuật tính toán có thể xác minh để giải quyết các vấn đề với các truy vấn không đáng tin cậy. Một số kế hoạch tính toán có thể xác minh dựa trên các giao thức Chứng minh Zero-Knowledge, như SNARKs, có thể ủng hộ một cách gián tiếp các truy vấn có thể xác minh cho cơ sở dữ liệu bên ngoài. Các kế hoạch này hỗ trợ một loạt các loại truy vấn và tạo ra ít thông tin xác minh hơn, nhưng chúng có chi phí tính toán cao hơn.
Hiện tại, Ethereum sử dụng Cây Merkle để thực hiện các truy vấn có thể xác minh, và Công nghệ Cây Verkle cũng dựa trên Công nghệ Cây Merkle. Do đó, hãy trước tiên giới thiệu Cây Merkle để giúp độc giả hiểu vai trò của các truy vấn có thể xác minh bằng cách sử dụng chúng như một ví dụ.
Cây Merkle là một cấu trúc giống như cây thường được sử dụng trong mật mã, phù hợp để giải quyết các vấn đề về tính toàn vẹn dữ liệu. Dưới đây là một cấu trúc Cây Merkle điển hình: các nút lá biểu thị dữ liệu gốc hoặc các giá trị băm của chúng, và mỗi nút không phải lá (nội tại) chứa băm kết hợp của các nút con của nó.
Cây Merkle có hai đặc điểm quan trọng:
Trong một kịch bản truy vấn có thể xác minh thông thường, có một bên chứng minh và một bên xác minh. Bên chứng minh cần tạo ra một bằng chứng và gửi nó cho bên xác minh. Tương ứng với mạng Ethereum, một kịch bản ứng dụng điển hình là khi một nút nhẹ (một khách hàng chỉ lưu trữ tiêu đề khối) truy vấn dữ liệu giao dịch từ một nút đầy đủ hoặc một nút lưu trữ (khách hàng với tất cả dữ liệu) và nhận một bằng chứng Merkle để xác minh cục bộ xem kết quả truy vấn có đúng hay không.
Bằng chứng Merkle bao gồm ba phần sau đây:
Trong số đó, hash gốc của cây Merkle cần được gửi trước cho người xác minh thông qua một phương tiện đáng tin cậy, và người xác minh phải tin tưởng vào giá trị này. Trong Ethereum, tính đáng tin cậy của dữ liệu khối được đảm bảo bằng thuật toán đồng thuận, và hash gốc của cây Merkle được chứa trong tiêu đề khối.
Dưới đây là một ví dụ cụ thể: khi người chứng minh cần chứng minh cho người xác minh rằng "4" là một khối dữ liệu tồn tại trong tập dữ liệu, và người xác minh giữ giá trị hash gốc đáng tin cậy "1d25" của cây Merkle hoàn chỉnh của tập dữ liệu, sau đó người chứng minh chỉ cần cung cấp tất cả dữ liệu được đánh dấu màu xanh. Giả sử có n mảnh dữ liệu trong tập hợp, tối đa cần 𝘭𝘰𝘨₂(𝘯) lần tính toán hash để xác minh tính chính xác của bất kỳ khối dữ liệu nào.
Các nút nhẹ của Ethereum chỉ đồng bộ các tiêu đề khối, trong đó chứa các gốc của cây Merkle cho các tập dữ liệu khác nhau (cây trạng thái, cây giao dịch, cây biên nhận). Khi một nút nhẹ truy vấn một nút đầy đủ cho dữ liệu của một nút lá cụ thể trong cây, nút đầy đủ trả về dữ liệu ban đầu cùng với đường đi chứng minh Merkle tương ứng. Điều này cho phép nút nhẹ tin tưởng vào tính chính xác của kết quả truy vấn.
Xây dựng trên nền tảng của Cây Merkle, chúng có thể được kết hợp và sửa đổi với các cấu trúc dữ liệu khác để đạt được các đặc điểm mới dựa trên các mục tiêu khác nhau. Để phục vụ cho các kịch bản truy vấn có thể xác minh khác nhau, Cây Merkle có thể được mở rộng thành các cấu trúc dữ liệu được lập chỉ mục khác nhau, chẳng hạn như Cây Merkle-B (MBT). Để thực hiện hiệu quả các hoạt động như chèn, xóa và truy vấn, nhóm Ethereum đã đề xuất Cây Merkle Patricia (MPT).
Cây Merkle-B (MBT) được sử dụng chủ yếu để xử lý các truy vấn phạm vi có thể xác minh. Hãy để 𝑓 là số lượng nút con cho mỗi nút của MBT (số lượng nút con cho mỗi nút). Dựa trên cấu trúc cây B+, mỗi nút nội của MBT, ngoài việc lưu trữ 𝑓 — 1 chỉ số và con trỏ tới 𝑓 nút con, cũng duy trì các giá trị băm của tất cả các nút con của mình dưới dạng tóm tắt. Dưới đây là biểu diễn của cấu trúc các nút lá và nút nội trong một MBT.
Khi cần chứng minh rằng dữ liệu trả về từ truy vấn phạm vi cụ thể tuân thủ phạm vi đã chỉ định, máy chủ tính Toán Đối tượng Xác minh (VO) phải thực hiện trước hai hoạt động tìm kiếm từ trên xuống để tìm ra các ranh giới bên trái và bên phải. Nó cũng phải trả về tất cả dữ liệu trong phạm vi này cũng như các băm của tất cả các nhánh cần thiết để xây dựng đường dẫn đến băm gốc.
Một hạn chế của cấu trúc dữ liệu này là VO được trả về chỉ có thể chứng minh rằng kết quả truy vấn nằm trong phạm vi truy vấn yêu cầu, nhưng không thể chứng minh rằng kết quả trả về là hoàn toàn đầy đủ.
Nếu một cây Merkle ngây thơ được sử dụng để cung cấp các truy vấn có thể xác minh, quá trình tốn thời gian để tạo lại gốc cây Merkle sau mỗi lần chèn hoặc xóa dữ liệu có thể trở nên đáng kể. Ngoài ra, nó đòi hỏi việc duy trì các cây tìm kiếm dữ liệu bổ sung cho việc lưu trữ. Cây Merkle Patricia (MPT) kết hợp các đặc tính của một Cây Radix (cây tiền tố gọn gàng) và một Cây Merkle, cho phép nó thực hiện việc chèn, xóa và truy vấn trong thời gian O(log(N)). Để hiểu rõ về MPT, độc giả có thể tham khảo các bài viết kỹ thuật chi tiết về chủ đề. Bài viết này chỉ giới thiệu một số định nghĩa cơ bản và cung cấp ví dụ để giúp độc giả hiểu về MPT một cách nhanh chóng.
Cấu trúc cơ bản của Ethereum sử dụng cơ sở dữ liệu khóa-giá trị để lưu trữ, có nghĩa dữ liệu được lưu trữ dưới dạng cặp khóa-giá trị. MPT cũng được phân rã thành các cặp khóa-giá trị để lưu trữ. Chúng ta xác định cấu trúc logic của các nút MPT như sau:
Trong ngữ cảnh của Cây Merkle Patricia (MPT), “index” đề cập đến khóa của cặp khóa-giá trị, trong khi “path” kết hợp với “data” tạo thành giá trị của cặp khóa-giá trị. Chính xác, index lưu trữ băm của nút cây Merkle, và path tương ứng với chuỗi đường dẫn được sử dụng trong cây tiền tố để tìm nút mục tiêu. Ethereum sử dụng chuỗi thập lục phân dưới dạng chuỗi đường dẫn, và do đó chiều rộng của MPT là 16. Dữ liệu là dữ liệu mục tiêu tương ứng với đường dẫn.
Dưới đây là một ví dụ về MPT đã được tối ưu hóa với các tiền tố nén, lưu trữ dữ liệu cặp khóa-giá trị sau:
{
‘cab8’: ‘chó’,
'cabe': 'cat',
‘39’: ‘chicken’,
'395': 'vịt',
‘56f0’: ‘horse’
}
Để tìm dữ liệu “duck” bằng đường dẫn “395,” bạn sẽ bắt đầu tại root hash và tiến qua hashA, hashC, và hashD để cuối cùng đến được dữ liệu cần tìm. Dưới đây là hướng dẫn từng bước:
Tại mỗi bước trên con đường, MPT tận dụng các đặc tính của cả Cây Radix, để tìm đường đúng dựa trên khóa, và Cây Merkle, để đảm bảo tính toàn vẹn của dữ liệu thông qua liên kết băm. Các “đường dẫn” trong cây thường được đại diện bằng mã hóa thập lục phân, tương ứng với hệ số phân nhánh của cây là 16. Mỗi nút trong đường dẫn bao gồm đủ con trỏ băm (tới các nút con) và giá trị để xác minh tính toàn vẹn của dữ liệu và điều hướng qua cây.
Vui lòng lưu ý rằng trong một MPT thực tế, các đường dẫn và dữ liệu sẽ được mã hóa và lưu trữ theo một định dạng cụ thể, và các loại nút bổ sung (như các nút mở rộng và nút lá) giúp tối ưu hóa cấu trúc để hiệu quả trong các tình huống khác nhau.
Các kế hoạch cam kết[1] là các nguyên tắc mật mã đảm bảo sự riêng tư và tính toàn vẹn dữ liệu. Chúng được sử dụng rộng rãi trong các kịch bản như chứng minh không biết và tính toán đa bên an toàn. Một kế hoạch cam kết cơ bản được chia thành hai giai đoạn: giai đoạn cam kết và giai đoạn tiết lộ (hoặc mở).
Vector Commitment là một loại hình cam kết đặc biệt được đề xuất bởi Catalano et al. [2] cho phép người cam kết thực hiện cam kết đối với một tập hợp được sắp xếp các tin nhắn 𝑚 = ⟨𝑚1 , 𝑚2 , …, 𝑚𝑞 ⟩ và để tiết lộ (mở) tại bất kỳ vị trí cụ thể nào để chứng minh rằng tin nhắn 𝑚𝑖 là tin nhắn được cam kết thứ i. Trong cam kết vector, việc ràng buộc có nghĩa là không ai có thể mở cùng một vị trí để tiết lộ các tin nhắn khác nhau.
Một hệ thống cam kết vector thông thường bao gồm các thuật toán sau:
Định nghĩa: Cây Verkle = Cam kết Vector + Cây Merkle。
Lưu ý: Vitalik Buterin, người đồng sáng lập Ethereum, đã blogbài đăng đặc biệt dành riêng cho việc giới thiệu cây Verkle. Chương này bổ sung một số kiến thức nền và toán học dựa trên blog của anh ấy. Một số dữ liệu và minh họa trong văn bản tiếp theo được dẫn xuất từ blog của anh ấy.
Cây Verkle (VTs) được đặc trưng bởi việc cung cấp bằng chứng nhỏ hơn so với Merkle Trees. Đối với dữ liệu ở quy mô hàng tỷ bản ghi, một cây Merkle có thể tạo ra bằng chứng khoảng 1KB, trong khi bằng chứng cây Verkle có thể nhỏ hơn 150 byte. Kích thước bằng chứng gọn nhẹ này có lợi thế cho việc triển khaikhách hàng không trạng thái
Cấu trúc của một cây Verkle khá tương tự như cây Merkle Patricia Tree (MPT). Dưới đây là một ví dụ về cấu trúc của nó. Các nút của một cây Verkle có thể là: (i) Rỗng, (ii) Nút lá chứa một khóa và giá trị tương ứng của nó, hoặc (iii) Nút nội bộ với một số lượng cố định các nút con. Số lượng nút con này cũng được gọi là “độ rộng” của cây.
Sự khác biệt giữa VT (Cây Verkle) và MPT (Cây Merkle Patricia) chủ yếu nằm ở cách mà chiều rộng của cây (hoặc fan-out, đề cập đến số lượng nút con mà một nút trong cây có) ảnh hưởng đến hiệu suất của chúng. Trong trường hợp của MPT, nếu chiều rộng lớn hơn, nó có tend to be less efficient vì chiều rộng lớn hơn có nghĩa là có nhiều nút anh em hơn, điều này có thể dẫn đến thời gian cập nhật lâu hơn cho MPT và kích thước chứng minh lớn hơn. Ngược lại, với VT, một chiều rộng cây rộng hơn dẫn đến chứng minh nhỏ hơn. Hạn chế duy nhất là nếu chiều rộng quá cao, thời gian để tạo ra chứng minh có thể trở nên lâu hơn.
Trong Ethereum’s@vbuterin/verkle_tree_eip">Các đề xuất thiết kế cho VTs, đề xuất một độ rộng của 256, đây là một con số đáng kể lớn hơn so với 16 hiện tại của MPT. Một độ rộng lớn như vậy là khả thi trong VTs vì việc sử dụng các kỹ thuật mật mã tiên tiến, như cam kết vector, cho phép chứng minh gọn nhẹ bất kể độ rộng của cây. Kỹ thuật nén này cho phép cây Verkle mở rộng hiệu quả hơn về kích thước chứng minh. Văn bản tiếp theo sẽ giải thích chi tiết các tính năng được đề cập ở trên.
Hãy xem cách chứng minh được tạo ra trong một MPT: Chứng minh cần bao gồm các giá trị hash của tất cả các nút bên (hoặc các nút chị em) trên đường đi từ nút gốc đến nút lá mục tiêu. Lấy “4ce” làm ví dụ, các phần được đánh dấu màu đỏ trong sơ đồ dưới đây là các nút cần phải được bao gồm trong chứng minh được trả về.
Trong cây Verkle, bạn không cần cung cấp các nút anh em; thay vào đó, bạn chỉ cần cung cấp đường dẫn cùng với một số dữ liệu bổ sung như bằng chứng.
Vậy làm thế nào để tạo cam kết cho một VT? Hàm băm được sử dụng cho việc tính toán không phải là hàm băm thông thường mà sử dụng cam kết vector.
Sau khi thay thế hàm băm bằng một thuật toán tạo cam kết từ cam kết vector, hash gốc được gọi là cam kết gốc. Nếu dữ liệu của bất kỳ nút nào bị can thiệp, cuối cùng sẽ ảnh hưởng đến cam kết gốc.
Làm thế nào để tạo ra một bằng chứng? Như thể hiện trong sơ đồ dưới đây, bạn chỉ cần cung cấp ba bằng chứng phụ, mỗi bằng chứng có thể chứng minh rằng một nút trên đường đi tồn tại ở một vị trí cụ thể trong nút cha của nó. Càng rộng, càng ít lớp, và do đó, càng ít bằng chứng phụ được yêu cầu.
Trong thực tế, các cam kết đa thức được sử dụng (có thể được triển khai một cách đơn giản và hiệu quả cho các cam kết vector), cho phép cam kết đến một đa thức. Hai hệ thống cam kết đa thức thân thiện với người dùng nhất là “Cam kết KZG” và “cam kết đa thức theo kiểu bảo mật chắc chắn (cái trước có kích thước cam kết là 48 byte, trong khi cái sau là 32 byte).
Nếu bạn sử dụng cam kết và bằng chứng KZG, bằng chứng cho mỗi nút trung gian chỉ là 96 byte, đại diện cho việc tiết kiệm không gian gần ba lần so với cây Merkle cơ bản (giả sử chiều rộng là 256).
Độ phức tạp thời gian lý thuyết cho các hoạt động trên cây Merkle và cây Verkle như sau:
Hệ thống chứng minh Verkle được giới thiệu cho đến nay khá cơ bản; thực tế, còn có các chiến lược tối ưu tiên tiến khác sẵn có.
So với việc tạo ra một bằng chứng cho mỗi lớp cam kết trên một đường đi, đặc điểm của các cam kết đa thức có thể được sử dụng để đạt được “chứng minh mối quan hệ cha-con giữa tất cả các cam kết trên đường đi với một bằng chứng có kích thước cố định, có thể bao gồm một số lượng không giới hạn các yếu tố.” Để hiểu cụ thể cách thức này được thực hiện, cần phải giới thiệu một số kiến thức toán học để giải thích. Bài viết này sẽ liên quan đến một số công thức toán học nhưng không bao gồm phần mật mã học của bằng chứng theo nguyên lý. Đối với phương pháp cụ thể, vui lòng tham khảo chương trình thực thi đa bằng cách đánh giá ngẫu nhiên.
Đầu tiên, hãy giới thiệu một số khái niệm cơ bản về đa thức trong toán học: làm thế nào chúng ta thực hiện việc giảm đa thức, còn được biết đến là giảm bậc của một đa thức?
Giả sử chúng ta biết một đa thức 𝑃(𝑥) và giá trị 𝑦₁ tại 𝑥₁, tức là 𝑃(𝑥₁) = 𝑦₁.
Bây giờ, hãy xem xét một đa thức mới 𝑃(𝑥) - 𝑦₁, có giá trị bằng không tại (𝑥 = 𝑥₁), vì 𝑃(𝑥₁) - 𝑦₁ = 𝑦₁ - 𝑦₁ = 0.
Do đó, Đa thức 𝑃(𝑥) - 𝑦₁ có một nghiệm tại 𝑥 = 𝑥₁, điều đó có nghĩa là (𝑥 - 𝑥₁) là một thừa số của 𝑃(𝑥) - 𝑦₁.
Nói cách khác, chúng ta có thể diễn tả nó dưới dạng sau: [ 𝑃(𝑥) - 𝑦₁ = (𝑥 - 𝑥₁ )𝑄(𝑥)]
𝑄(𝑥) là một đa thức khác có bậc nhỏ hơn một đơn vị so với 𝑃(𝑥). Điều này là vì (𝑥 -𝑥₁ ) là một yếu tố bậc một, làm giảm tổng bậc của đa thức.
Làm thế nào để sử dụng KZG để chứng minh một giá trị duy nhất trong một vector?
Ví dụ về cam kết KZG10, đối với đa thức 𝑃(𝑥), giả sử cam kết đa thức của nó là [ 𝑃(𝑠) ]₁.
Như đã giải thích trước đó, đối với đa thức 𝑃(𝑥), nếu 𝑃(𝑧) = 𝑦, thì chúng ta có 𝑄(𝑥) = (𝑃(𝑥) - 𝑦)/(𝑥 - 𝑧)
Bây giờ, bên chứng minh có thể tạo ra một bằng chứng rằng đa thức 𝑃(𝑥) thỏa mãn 𝑃(𝑧) = 𝑦 : tính toán [ 𝑄(𝑠) ]₁ và gửi nó cho bên xác minh.
Người xác minh cần xác minh 𝑒( [ 𝑄(𝑠) ]₁, [ 𝑠 - 𝑧]₂ ) = 𝑒( [ 𝑃(𝑠) ]₁- [𝑦]₁, [1]₂) .
Làm thế nào để sử dụng KZG để chứng minh nhiều giá trị trong một vector?
Chúng tôi có thể xây dựng một bằng chứng để chứng minh nhiều giá trị trong một vector như sau:
Bằng cách sử dụng phương pháp này, bất kể số lượng điểm dữ liệu trong cùng một vector cần được xác minh, chỉ cần một bằng chứng có kích thước cố định.
Bây giờ hãy xem xét kế hoạch cây Verkle mà không tối ưu hóa từ quan điểm của thuật toán cam kết KZG.
Sử dụng phương pháp xây dựng từ phần “Cách sử dụng KZG để chứng minh một giá trị duy nhất trong một vector,” người xác thực có thể xây dựng cam kết cho các đa thức gốc và thương của mỗi đa thức 𝑓ᵢ(𝑥) , dẫn đến tổng cộng 𝟐﹡𝑚 cam kết KZG. Người xác thực gửi tất cả các cam kết này như là bằng chứng cho việc xác minh.
Tuy nhiên, như đã đề cập trước đó, phương pháp này yêu cầu tạo ra nhiều bằng chứng, và người xác minh cũng cần thực hiện nhiều tính toán xác minh. Chúng ta cần tìm cách nén nhiều bằng chứng cam kết.
Kết hợp các bằng chứng
Người chứng minh gửi bằng chứng [ 𝑞( 𝑠 )]₁ cho người xác minh để xác minh.
Bằng chứng được tạo ra bởi kế hoạch này bao gồm một cam kết, hai bằng chứng và một giá trị, với kích thước dữ liệu không đổi. Cuối cùng, sau quá trình tối ưu hóa hợp nhất chứng minh trong cây Verkle, đối tượng dữ liệu có thể xác minh được gửi đến bên xác minh bao gồm các phần sau:
Lưu ý rằng 𝑥ᵢ và 𝑦ᵢ không cần phải được cung cấp một cách rõ ràng; chúng có thể được tính toán tất cả.
Về kế hoạch gộp chứng minh cho cây Verkle, kích thước cụ thể của chứng minh được tạo ra như sau(Đơn vị của hàng là tỷ.):
Dữ liệu trên giả định việc sử dụng một cây có chiều rộng 256, sử dụng hệ thống cam kết KZG (với kích thước cam kết là 48 byte), và tối đa hóa việc sử dụng của cây. Trong thực tế, đối với phân phối thông tin hoàn toàn ngẫu nhiên, độ sâu của cây sẽ tăng khoảng 60%, và kích thước của mỗi phần tử sẽ tăng thêm 30 byte. Nếu sử dụng hệ thống bulletproof, thì kích thước cam kết sẽ là 32 byte.
Dưới đây là những từ nguyên bản trong blog của Vitalik, chúng tôi đã thêm một đoạn ở cuối như một bổ sung.
Cây Verkle là một bản nâng cấp mạnh mẽ cho chứng minh Merkle cho phép kích thước chứng minh nhỏ hơn nhiều. Thay vì cần cung cấp tất cả các “nút chị em” ở mỗi cấp độ, người chứng minh chỉ cần cung cấp một chứng minh duy nhất chứng minh tất cả các mối quan hệ cha con giữa tất cả các cam kết dọc theo các đường dẫn từ mỗi nút lá đến gốc. Điều này cho phép kích thước chứng minh giảm đi một cách đáng kể so với cây Merkle lý tưởng, và giảm đi một cách đáng kể hơn so với cây Patricia hexary mà Ethereum sử dụng ngày nay (!!).
Họ yêu cầu việc mật mã phức tạp hơn để triển khai, nhưng chúng cung cấp cơ hội cho sự tăng cường về khả năng mở rộng. Trong trung hạn, SNARKs có thể cải thiện thêm: chúng ta có thể sử dụng SNARK cho bộ chứng minh Verkle hiệu quả từ trước để giảm kích thước bằng chứng gần như về không, hoặc chuyển sang các chứng minh Merkle đã được SNARK nếu/khi SNARKs trở nên tốt hơn nhiều (ví dụ thông qua GKR, hoặc các hàm băm rất thân thiện với SNARK, hoặc ASIC). Xuống đường, sự phát triển của máy tính lượng tử sẽ buộc chúng ta phải chuyển sang chứng minh Merkle STARKed với các hàm băm khiến cho các đồng cơ tuyến tính mà cây Verkle phụ thuộc trở nên không an toàn. Nhưng hiện tại, chúng cung cấp cho chúng ta những lợi ích về khả năng mở rộng giống như chúng ta sẽ nhận được với các công nghệ tiên tiến hơn, và chúng ta đã có tất cả các công cụ mà chúng ta cần để triển khai chúng một cách hiệu quả.
Hiện nay, nhiều khách hàng Ethereum đã cung cấp việc triển khai cây Verkle và các mạng thử nghiệm liên quan. Cộng đồng vẫn đang thảo luận về thời điểm cây Verkle sẽ được triển khai trên mạng chính. Có khả năng sẽ được triển khai trong một bản nâng cấp hard fork vào năm 2024 hoặc 2025. Để biết thông tin chi tiết về cây Verkle trên Ethereum, vui lòng xem https://verkle.info/ .
[1]. BRASSARD G, CHAUM D, CRÉPEAU C. Chứng minh tối thiểu về kiến thức[J]. Tạp chí khoa học máy tính và hệ thống, 1988, 37(2): 156–189.
[2]. CATALANO D, FIORE D. Vector commitments and their applications[C]//Public-KeyCryptography–PKC 2013: 16th International Conference on Practice and Theory in Public- Key Cryptography, Nara, Japan, February 26–March 1, 2013. Proceedings 16. Springer, 2013: 55–72.
Vào ngày cuối cùng của năm 2023, Vitalik chia sẻ lộ trình của Ethereum cho năm 2023 trên Twitter, tóm tắt tiến triển của Ethereum trong năm. Phần lộ trình "The Verge" mô tả cách công nghệ Ethereum có thể xác minh trạng thái blockchain một cách đơn giản và hiệu quả hơn. Một khái niệm cốt lõi được đề cập ở đó là Verkle Trees. Vậy, Verkle Trees là gì, tại sao Ethereum cần nó, và Verkle Trees giải quyết vấn đề như thế nào? Mục tiêu của bài viết này là trả lời những câu hỏi này cho độc giả mà không đi quá sâu vào mật mã học và toán học, giúp những người hiểu biết về Ethereum một cách nhanh chóng hiểu được khái niệm của Verkle Trees.
Công nghệ truy vấn có thể xác minh được nghiên cứu rộng rãi trong lĩnh vực cơ sở dữ liệu truyền thống, chủ yếu được sử dụng để giải quyết các vấn đề tin cậy với cơ sở dữ liệu bên ngoài. Trong nhiều tình huống, chủ sở hữu dữ liệu có thể chọn không lưu trữ dữ liệu bản thân mình mà thay vào đó giao nhu cầu cơ sở dữ liệu của họ cho một bên thứ ba để cung cấp dịch vụ cơ sở dữ liệu (như cơ sở dữ liệu đám mây). Tuy nhiên, do bên thứ ba không phải lúc nào cũng đáng tin cậy, tính uy tín của kết quả truy vấn mà họ trả về cho người dùng khó mà đảm bảo. Các giải pháp truy vấn có thể xác minh hiện tại cho cơ sở dữ liệu truyền thống chủ yếu thuộc hai loại: dựa trên ADS (Cấu trúc Dữ liệu Xác minh) và dựa trên tính toán có thể xác minh.
ADS là một kỹ thuật truy vấn có thể xác minh được sử dụng rộng rãi trong các cơ sở dữ liệu truyền thống, chủ yếu dựa trên cấu trúc như Cây Merkle hoặc các cấu trúc tích lũy tương tự. Với sự tiến hóa của các công cụ mật mã, nhiều nhà nghiên cứu dần dần bắt đầu khám phá việc sử dụng các kỹ thuật tính toán có thể xác minh để giải quyết các vấn đề với các truy vấn không đáng tin cậy. Một số kế hoạch tính toán có thể xác minh dựa trên các giao thức Chứng minh Zero-Knowledge, như SNARKs, có thể ủng hộ một cách gián tiếp các truy vấn có thể xác minh cho cơ sở dữ liệu bên ngoài. Các kế hoạch này hỗ trợ một loạt các loại truy vấn và tạo ra ít thông tin xác minh hơn, nhưng chúng có chi phí tính toán cao hơn.
Hiện tại, Ethereum sử dụng Cây Merkle để thực hiện các truy vấn có thể xác minh, và Công nghệ Cây Verkle cũng dựa trên Công nghệ Cây Merkle. Do đó, hãy trước tiên giới thiệu Cây Merkle để giúp độc giả hiểu vai trò của các truy vấn có thể xác minh bằng cách sử dụng chúng như một ví dụ.
Cây Merkle là một cấu trúc giống như cây thường được sử dụng trong mật mã, phù hợp để giải quyết các vấn đề về tính toàn vẹn dữ liệu. Dưới đây là một cấu trúc Cây Merkle điển hình: các nút lá biểu thị dữ liệu gốc hoặc các giá trị băm của chúng, và mỗi nút không phải lá (nội tại) chứa băm kết hợp của các nút con của nó.
Cây Merkle có hai đặc điểm quan trọng:
Trong một kịch bản truy vấn có thể xác minh thông thường, có một bên chứng minh và một bên xác minh. Bên chứng minh cần tạo ra một bằng chứng và gửi nó cho bên xác minh. Tương ứng với mạng Ethereum, một kịch bản ứng dụng điển hình là khi một nút nhẹ (một khách hàng chỉ lưu trữ tiêu đề khối) truy vấn dữ liệu giao dịch từ một nút đầy đủ hoặc một nút lưu trữ (khách hàng với tất cả dữ liệu) và nhận một bằng chứng Merkle để xác minh cục bộ xem kết quả truy vấn có đúng hay không.
Bằng chứng Merkle bao gồm ba phần sau đây:
Trong số đó, hash gốc của cây Merkle cần được gửi trước cho người xác minh thông qua một phương tiện đáng tin cậy, và người xác minh phải tin tưởng vào giá trị này. Trong Ethereum, tính đáng tin cậy của dữ liệu khối được đảm bảo bằng thuật toán đồng thuận, và hash gốc của cây Merkle được chứa trong tiêu đề khối.
Dưới đây là một ví dụ cụ thể: khi người chứng minh cần chứng minh cho người xác minh rằng "4" là một khối dữ liệu tồn tại trong tập dữ liệu, và người xác minh giữ giá trị hash gốc đáng tin cậy "1d25" của cây Merkle hoàn chỉnh của tập dữ liệu, sau đó người chứng minh chỉ cần cung cấp tất cả dữ liệu được đánh dấu màu xanh. Giả sử có n mảnh dữ liệu trong tập hợp, tối đa cần 𝘭𝘰𝘨₂(𝘯) lần tính toán hash để xác minh tính chính xác của bất kỳ khối dữ liệu nào.
Các nút nhẹ của Ethereum chỉ đồng bộ các tiêu đề khối, trong đó chứa các gốc của cây Merkle cho các tập dữ liệu khác nhau (cây trạng thái, cây giao dịch, cây biên nhận). Khi một nút nhẹ truy vấn một nút đầy đủ cho dữ liệu của một nút lá cụ thể trong cây, nút đầy đủ trả về dữ liệu ban đầu cùng với đường đi chứng minh Merkle tương ứng. Điều này cho phép nút nhẹ tin tưởng vào tính chính xác của kết quả truy vấn.
Xây dựng trên nền tảng của Cây Merkle, chúng có thể được kết hợp và sửa đổi với các cấu trúc dữ liệu khác để đạt được các đặc điểm mới dựa trên các mục tiêu khác nhau. Để phục vụ cho các kịch bản truy vấn có thể xác minh khác nhau, Cây Merkle có thể được mở rộng thành các cấu trúc dữ liệu được lập chỉ mục khác nhau, chẳng hạn như Cây Merkle-B (MBT). Để thực hiện hiệu quả các hoạt động như chèn, xóa và truy vấn, nhóm Ethereum đã đề xuất Cây Merkle Patricia (MPT).
Cây Merkle-B (MBT) được sử dụng chủ yếu để xử lý các truy vấn phạm vi có thể xác minh. Hãy để 𝑓 là số lượng nút con cho mỗi nút của MBT (số lượng nút con cho mỗi nút). Dựa trên cấu trúc cây B+, mỗi nút nội của MBT, ngoài việc lưu trữ 𝑓 — 1 chỉ số và con trỏ tới 𝑓 nút con, cũng duy trì các giá trị băm của tất cả các nút con của mình dưới dạng tóm tắt. Dưới đây là biểu diễn của cấu trúc các nút lá và nút nội trong một MBT.
Khi cần chứng minh rằng dữ liệu trả về từ truy vấn phạm vi cụ thể tuân thủ phạm vi đã chỉ định, máy chủ tính Toán Đối tượng Xác minh (VO) phải thực hiện trước hai hoạt động tìm kiếm từ trên xuống để tìm ra các ranh giới bên trái và bên phải. Nó cũng phải trả về tất cả dữ liệu trong phạm vi này cũng như các băm của tất cả các nhánh cần thiết để xây dựng đường dẫn đến băm gốc.
Một hạn chế của cấu trúc dữ liệu này là VO được trả về chỉ có thể chứng minh rằng kết quả truy vấn nằm trong phạm vi truy vấn yêu cầu, nhưng không thể chứng minh rằng kết quả trả về là hoàn toàn đầy đủ.
Nếu một cây Merkle ngây thơ được sử dụng để cung cấp các truy vấn có thể xác minh, quá trình tốn thời gian để tạo lại gốc cây Merkle sau mỗi lần chèn hoặc xóa dữ liệu có thể trở nên đáng kể. Ngoài ra, nó đòi hỏi việc duy trì các cây tìm kiếm dữ liệu bổ sung cho việc lưu trữ. Cây Merkle Patricia (MPT) kết hợp các đặc tính của một Cây Radix (cây tiền tố gọn gàng) và một Cây Merkle, cho phép nó thực hiện việc chèn, xóa và truy vấn trong thời gian O(log(N)). Để hiểu rõ về MPT, độc giả có thể tham khảo các bài viết kỹ thuật chi tiết về chủ đề. Bài viết này chỉ giới thiệu một số định nghĩa cơ bản và cung cấp ví dụ để giúp độc giả hiểu về MPT một cách nhanh chóng.
Cấu trúc cơ bản của Ethereum sử dụng cơ sở dữ liệu khóa-giá trị để lưu trữ, có nghĩa dữ liệu được lưu trữ dưới dạng cặp khóa-giá trị. MPT cũng được phân rã thành các cặp khóa-giá trị để lưu trữ. Chúng ta xác định cấu trúc logic của các nút MPT như sau:
Trong ngữ cảnh của Cây Merkle Patricia (MPT), “index” đề cập đến khóa của cặp khóa-giá trị, trong khi “path” kết hợp với “data” tạo thành giá trị của cặp khóa-giá trị. Chính xác, index lưu trữ băm của nút cây Merkle, và path tương ứng với chuỗi đường dẫn được sử dụng trong cây tiền tố để tìm nút mục tiêu. Ethereum sử dụng chuỗi thập lục phân dưới dạng chuỗi đường dẫn, và do đó chiều rộng của MPT là 16. Dữ liệu là dữ liệu mục tiêu tương ứng với đường dẫn.
Dưới đây là một ví dụ về MPT đã được tối ưu hóa với các tiền tố nén, lưu trữ dữ liệu cặp khóa-giá trị sau:
{
‘cab8’: ‘chó’,
'cabe': 'cat',
‘39’: ‘chicken’,
'395': 'vịt',
‘56f0’: ‘horse’
}
Để tìm dữ liệu “duck” bằng đường dẫn “395,” bạn sẽ bắt đầu tại root hash và tiến qua hashA, hashC, và hashD để cuối cùng đến được dữ liệu cần tìm. Dưới đây là hướng dẫn từng bước:
Tại mỗi bước trên con đường, MPT tận dụng các đặc tính của cả Cây Radix, để tìm đường đúng dựa trên khóa, và Cây Merkle, để đảm bảo tính toàn vẹn của dữ liệu thông qua liên kết băm. Các “đường dẫn” trong cây thường được đại diện bằng mã hóa thập lục phân, tương ứng với hệ số phân nhánh của cây là 16. Mỗi nút trong đường dẫn bao gồm đủ con trỏ băm (tới các nút con) và giá trị để xác minh tính toàn vẹn của dữ liệu và điều hướng qua cây.
Vui lòng lưu ý rằng trong một MPT thực tế, các đường dẫn và dữ liệu sẽ được mã hóa và lưu trữ theo một định dạng cụ thể, và các loại nút bổ sung (như các nút mở rộng và nút lá) giúp tối ưu hóa cấu trúc để hiệu quả trong các tình huống khác nhau.
Các kế hoạch cam kết[1] là các nguyên tắc mật mã đảm bảo sự riêng tư và tính toàn vẹn dữ liệu. Chúng được sử dụng rộng rãi trong các kịch bản như chứng minh không biết và tính toán đa bên an toàn. Một kế hoạch cam kết cơ bản được chia thành hai giai đoạn: giai đoạn cam kết và giai đoạn tiết lộ (hoặc mở).
Vector Commitment là một loại hình cam kết đặc biệt được đề xuất bởi Catalano et al. [2] cho phép người cam kết thực hiện cam kết đối với một tập hợp được sắp xếp các tin nhắn 𝑚 = ⟨𝑚1 , 𝑚2 , …, 𝑚𝑞 ⟩ và để tiết lộ (mở) tại bất kỳ vị trí cụ thể nào để chứng minh rằng tin nhắn 𝑚𝑖 là tin nhắn được cam kết thứ i. Trong cam kết vector, việc ràng buộc có nghĩa là không ai có thể mở cùng một vị trí để tiết lộ các tin nhắn khác nhau.
Một hệ thống cam kết vector thông thường bao gồm các thuật toán sau:
Định nghĩa: Cây Verkle = Cam kết Vector + Cây Merkle。
Lưu ý: Vitalik Buterin, người đồng sáng lập Ethereum, đã blogbài đăng đặc biệt dành riêng cho việc giới thiệu cây Verkle. Chương này bổ sung một số kiến thức nền và toán học dựa trên blog của anh ấy. Một số dữ liệu và minh họa trong văn bản tiếp theo được dẫn xuất từ blog của anh ấy.
Cây Verkle (VTs) được đặc trưng bởi việc cung cấp bằng chứng nhỏ hơn so với Merkle Trees. Đối với dữ liệu ở quy mô hàng tỷ bản ghi, một cây Merkle có thể tạo ra bằng chứng khoảng 1KB, trong khi bằng chứng cây Verkle có thể nhỏ hơn 150 byte. Kích thước bằng chứng gọn nhẹ này có lợi thế cho việc triển khaikhách hàng không trạng thái
Cấu trúc của một cây Verkle khá tương tự như cây Merkle Patricia Tree (MPT). Dưới đây là một ví dụ về cấu trúc của nó. Các nút của một cây Verkle có thể là: (i) Rỗng, (ii) Nút lá chứa một khóa và giá trị tương ứng của nó, hoặc (iii) Nút nội bộ với một số lượng cố định các nút con. Số lượng nút con này cũng được gọi là “độ rộng” của cây.
Sự khác biệt giữa VT (Cây Verkle) và MPT (Cây Merkle Patricia) chủ yếu nằm ở cách mà chiều rộng của cây (hoặc fan-out, đề cập đến số lượng nút con mà một nút trong cây có) ảnh hưởng đến hiệu suất của chúng. Trong trường hợp của MPT, nếu chiều rộng lớn hơn, nó có tend to be less efficient vì chiều rộng lớn hơn có nghĩa là có nhiều nút anh em hơn, điều này có thể dẫn đến thời gian cập nhật lâu hơn cho MPT và kích thước chứng minh lớn hơn. Ngược lại, với VT, một chiều rộng cây rộng hơn dẫn đến chứng minh nhỏ hơn. Hạn chế duy nhất là nếu chiều rộng quá cao, thời gian để tạo ra chứng minh có thể trở nên lâu hơn.
Trong Ethereum’s@vbuterin/verkle_tree_eip">Các đề xuất thiết kế cho VTs, đề xuất một độ rộng của 256, đây là một con số đáng kể lớn hơn so với 16 hiện tại của MPT. Một độ rộng lớn như vậy là khả thi trong VTs vì việc sử dụng các kỹ thuật mật mã tiên tiến, như cam kết vector, cho phép chứng minh gọn nhẹ bất kể độ rộng của cây. Kỹ thuật nén này cho phép cây Verkle mở rộng hiệu quả hơn về kích thước chứng minh. Văn bản tiếp theo sẽ giải thích chi tiết các tính năng được đề cập ở trên.
Hãy xem cách chứng minh được tạo ra trong một MPT: Chứng minh cần bao gồm các giá trị hash của tất cả các nút bên (hoặc các nút chị em) trên đường đi từ nút gốc đến nút lá mục tiêu. Lấy “4ce” làm ví dụ, các phần được đánh dấu màu đỏ trong sơ đồ dưới đây là các nút cần phải được bao gồm trong chứng minh được trả về.
Trong cây Verkle, bạn không cần cung cấp các nút anh em; thay vào đó, bạn chỉ cần cung cấp đường dẫn cùng với một số dữ liệu bổ sung như bằng chứng.
Vậy làm thế nào để tạo cam kết cho một VT? Hàm băm được sử dụng cho việc tính toán không phải là hàm băm thông thường mà sử dụng cam kết vector.
Sau khi thay thế hàm băm bằng một thuật toán tạo cam kết từ cam kết vector, hash gốc được gọi là cam kết gốc. Nếu dữ liệu của bất kỳ nút nào bị can thiệp, cuối cùng sẽ ảnh hưởng đến cam kết gốc.
Làm thế nào để tạo ra một bằng chứng? Như thể hiện trong sơ đồ dưới đây, bạn chỉ cần cung cấp ba bằng chứng phụ, mỗi bằng chứng có thể chứng minh rằng một nút trên đường đi tồn tại ở một vị trí cụ thể trong nút cha của nó. Càng rộng, càng ít lớp, và do đó, càng ít bằng chứng phụ được yêu cầu.
Trong thực tế, các cam kết đa thức được sử dụng (có thể được triển khai một cách đơn giản và hiệu quả cho các cam kết vector), cho phép cam kết đến một đa thức. Hai hệ thống cam kết đa thức thân thiện với người dùng nhất là “Cam kết KZG” và “cam kết đa thức theo kiểu bảo mật chắc chắn (cái trước có kích thước cam kết là 48 byte, trong khi cái sau là 32 byte).
Nếu bạn sử dụng cam kết và bằng chứng KZG, bằng chứng cho mỗi nút trung gian chỉ là 96 byte, đại diện cho việc tiết kiệm không gian gần ba lần so với cây Merkle cơ bản (giả sử chiều rộng là 256).
Độ phức tạp thời gian lý thuyết cho các hoạt động trên cây Merkle và cây Verkle như sau:
Hệ thống chứng minh Verkle được giới thiệu cho đến nay khá cơ bản; thực tế, còn có các chiến lược tối ưu tiên tiến khác sẵn có.
So với việc tạo ra một bằng chứng cho mỗi lớp cam kết trên một đường đi, đặc điểm của các cam kết đa thức có thể được sử dụng để đạt được “chứng minh mối quan hệ cha-con giữa tất cả các cam kết trên đường đi với một bằng chứng có kích thước cố định, có thể bao gồm một số lượng không giới hạn các yếu tố.” Để hiểu cụ thể cách thức này được thực hiện, cần phải giới thiệu một số kiến thức toán học để giải thích. Bài viết này sẽ liên quan đến một số công thức toán học nhưng không bao gồm phần mật mã học của bằng chứng theo nguyên lý. Đối với phương pháp cụ thể, vui lòng tham khảo chương trình thực thi đa bằng cách đánh giá ngẫu nhiên.
Đầu tiên, hãy giới thiệu một số khái niệm cơ bản về đa thức trong toán học: làm thế nào chúng ta thực hiện việc giảm đa thức, còn được biết đến là giảm bậc của một đa thức?
Giả sử chúng ta biết một đa thức 𝑃(𝑥) và giá trị 𝑦₁ tại 𝑥₁, tức là 𝑃(𝑥₁) = 𝑦₁.
Bây giờ, hãy xem xét một đa thức mới 𝑃(𝑥) - 𝑦₁, có giá trị bằng không tại (𝑥 = 𝑥₁), vì 𝑃(𝑥₁) - 𝑦₁ = 𝑦₁ - 𝑦₁ = 0.
Do đó, Đa thức 𝑃(𝑥) - 𝑦₁ có một nghiệm tại 𝑥 = 𝑥₁, điều đó có nghĩa là (𝑥 - 𝑥₁) là một thừa số của 𝑃(𝑥) - 𝑦₁.
Nói cách khác, chúng ta có thể diễn tả nó dưới dạng sau: [ 𝑃(𝑥) - 𝑦₁ = (𝑥 - 𝑥₁ )𝑄(𝑥)]
𝑄(𝑥) là một đa thức khác có bậc nhỏ hơn một đơn vị so với 𝑃(𝑥). Điều này là vì (𝑥 -𝑥₁ ) là một yếu tố bậc một, làm giảm tổng bậc của đa thức.
Làm thế nào để sử dụng KZG để chứng minh một giá trị duy nhất trong một vector?
Ví dụ về cam kết KZG10, đối với đa thức 𝑃(𝑥), giả sử cam kết đa thức của nó là [ 𝑃(𝑠) ]₁.
Như đã giải thích trước đó, đối với đa thức 𝑃(𝑥), nếu 𝑃(𝑧) = 𝑦, thì chúng ta có 𝑄(𝑥) = (𝑃(𝑥) - 𝑦)/(𝑥 - 𝑧)
Bây giờ, bên chứng minh có thể tạo ra một bằng chứng rằng đa thức 𝑃(𝑥) thỏa mãn 𝑃(𝑧) = 𝑦 : tính toán [ 𝑄(𝑠) ]₁ và gửi nó cho bên xác minh.
Người xác minh cần xác minh 𝑒( [ 𝑄(𝑠) ]₁, [ 𝑠 - 𝑧]₂ ) = 𝑒( [ 𝑃(𝑠) ]₁- [𝑦]₁, [1]₂) .
Làm thế nào để sử dụng KZG để chứng minh nhiều giá trị trong một vector?
Chúng tôi có thể xây dựng một bằng chứng để chứng minh nhiều giá trị trong một vector như sau:
Bằng cách sử dụng phương pháp này, bất kể số lượng điểm dữ liệu trong cùng một vector cần được xác minh, chỉ cần một bằng chứng có kích thước cố định.
Bây giờ hãy xem xét kế hoạch cây Verkle mà không tối ưu hóa từ quan điểm của thuật toán cam kết KZG.
Sử dụng phương pháp xây dựng từ phần “Cách sử dụng KZG để chứng minh một giá trị duy nhất trong một vector,” người xác thực có thể xây dựng cam kết cho các đa thức gốc và thương của mỗi đa thức 𝑓ᵢ(𝑥) , dẫn đến tổng cộng 𝟐﹡𝑚 cam kết KZG. Người xác thực gửi tất cả các cam kết này như là bằng chứng cho việc xác minh.
Tuy nhiên, như đã đề cập trước đó, phương pháp này yêu cầu tạo ra nhiều bằng chứng, và người xác minh cũng cần thực hiện nhiều tính toán xác minh. Chúng ta cần tìm cách nén nhiều bằng chứng cam kết.
Kết hợp các bằng chứng
Người chứng minh gửi bằng chứng [ 𝑞( 𝑠 )]₁ cho người xác minh để xác minh.
Bằng chứng được tạo ra bởi kế hoạch này bao gồm một cam kết, hai bằng chứng và một giá trị, với kích thước dữ liệu không đổi. Cuối cùng, sau quá trình tối ưu hóa hợp nhất chứng minh trong cây Verkle, đối tượng dữ liệu có thể xác minh được gửi đến bên xác minh bao gồm các phần sau:
Lưu ý rằng 𝑥ᵢ và 𝑦ᵢ không cần phải được cung cấp một cách rõ ràng; chúng có thể được tính toán tất cả.
Về kế hoạch gộp chứng minh cho cây Verkle, kích thước cụ thể của chứng minh được tạo ra như sau(Đơn vị của hàng là tỷ.):
Dữ liệu trên giả định việc sử dụng một cây có chiều rộng 256, sử dụng hệ thống cam kết KZG (với kích thước cam kết là 48 byte), và tối đa hóa việc sử dụng của cây. Trong thực tế, đối với phân phối thông tin hoàn toàn ngẫu nhiên, độ sâu của cây sẽ tăng khoảng 60%, và kích thước của mỗi phần tử sẽ tăng thêm 30 byte. Nếu sử dụng hệ thống bulletproof, thì kích thước cam kết sẽ là 32 byte.
Dưới đây là những từ nguyên bản trong blog của Vitalik, chúng tôi đã thêm một đoạn ở cuối như một bổ sung.
Cây Verkle là một bản nâng cấp mạnh mẽ cho chứng minh Merkle cho phép kích thước chứng minh nhỏ hơn nhiều. Thay vì cần cung cấp tất cả các “nút chị em” ở mỗi cấp độ, người chứng minh chỉ cần cung cấp một chứng minh duy nhất chứng minh tất cả các mối quan hệ cha con giữa tất cả các cam kết dọc theo các đường dẫn từ mỗi nút lá đến gốc. Điều này cho phép kích thước chứng minh giảm đi một cách đáng kể so với cây Merkle lý tưởng, và giảm đi một cách đáng kể hơn so với cây Patricia hexary mà Ethereum sử dụng ngày nay (!!).
Họ yêu cầu việc mật mã phức tạp hơn để triển khai, nhưng chúng cung cấp cơ hội cho sự tăng cường về khả năng mở rộng. Trong trung hạn, SNARKs có thể cải thiện thêm: chúng ta có thể sử dụng SNARK cho bộ chứng minh Verkle hiệu quả từ trước để giảm kích thước bằng chứng gần như về không, hoặc chuyển sang các chứng minh Merkle đã được SNARK nếu/khi SNARKs trở nên tốt hơn nhiều (ví dụ thông qua GKR, hoặc các hàm băm rất thân thiện với SNARK, hoặc ASIC). Xuống đường, sự phát triển của máy tính lượng tử sẽ buộc chúng ta phải chuyển sang chứng minh Merkle STARKed với các hàm băm khiến cho các đồng cơ tuyến tính mà cây Verkle phụ thuộc trở nên không an toàn. Nhưng hiện tại, chúng cung cấp cho chúng ta những lợi ích về khả năng mở rộng giống như chúng ta sẽ nhận được với các công nghệ tiên tiến hơn, và chúng ta đã có tất cả các công cụ mà chúng ta cần để triển khai chúng một cách hiệu quả.
Hiện nay, nhiều khách hàng Ethereum đã cung cấp việc triển khai cây Verkle và các mạng thử nghiệm liên quan. Cộng đồng vẫn đang thảo luận về thời điểm cây Verkle sẽ được triển khai trên mạng chính. Có khả năng sẽ được triển khai trong một bản nâng cấp hard fork vào năm 2024 hoặc 2025. Để biết thông tin chi tiết về cây Verkle trên Ethereum, vui lòng xem https://verkle.info/ .
[1]. BRASSARD G, CHAUM D, CRÉPEAU C. Chứng minh tối thiểu về kiến thức[J]. Tạp chí khoa học máy tính và hệ thống, 1988, 37(2): 156–189.
[2]. CATALANO D, FIORE D. Vector commitments and their applications[C]//Public-KeyCryptography–PKC 2013: 16th International Conference on Practice and Theory in Public- Key Cryptography, Nara, Japan, February 26–March 1, 2013. Proceedings 16. Springer, 2013: 55–72.