Quan điểm rất chủ quan của chúng tôi về lịch sử của Bằng chứng không có kiến thức

Người mới bắt đầuFeb 27, 2024
Bài viết này mô tả những tiến bộ của SNARK kể từ khi được giới thiệu vào giữa những năm 1980.
Quan điểm rất chủ quan của chúng tôi về lịch sử của Bằng chứng không có kiến thức

Các đối số kiến thức không có kiến thức, ngắn gọn, không tương tác (zk-SNARK) là các nguyên tắc mã hóa mạnh mẽ cho phép một bên, người chứng minh, thuyết phục một bên khác, người xác minh, rằng một tuyên bố nhất định là đúng mà không tiết lộ bất cứ điều gì khác ngoài hiệu lực của tuyên bố. Chúng đã thu hút được sự chú ý rộng rãi nhờ các ứng dụng của chúng trong tính toán riêng tư có thể kiểm chứng, cung cấp bằng chứng về tính chính xác của việc thực thi các chương trình máy tính và giúp mở rộng quy mô chuỗi khối. Chúng tôi nghĩ SNARK sẽ có tác động đáng kể trong việc định hình thế giới của chúng ta, như chúng tôi mô tả trong bài đăng của mình. SNARK hoạt động như một chiếc ô cho các loại hệ thống chứng minh khác nhau, sử dụng các sơ đồ cam kết đa thức (PCS), sơ đồ số học khác nhau, bằng chứng tiên tri tương tác (IOP) hoặc bằng chứng có thể kiểm tra xác suất (PCP). Tuy nhiên, những ý tưởng và khái niệm cơ bản đã có từ giữa những năm 1980. Sự phát triển đã tăng tốc đáng kể sau khi Bitcoin và Ethereum ra đời, đây được chứng minh là một trường hợp sử dụng thú vị và mạnh mẽ vì bạn có thể mở rộng quy mô chúng bằng cách sử dụng Bằng chứng không có kiến thức (thường được gọi là Bằng chứng xác thực cho trường hợp sử dụng cụ thể này). SNARK là một công cụ thiết yếu cho khả năng mở rộng blockchain. Như Ben-Sasson mô tả, những năm vừa qua đã chứng kiến sự bùng nổ của các bằng chứng mật mã trong kỷ Cambri. Mỗi hệ thống chứng minh đều có những ưu điểm và nhược điểm và được thiết kế với những cân nhắc nhất định. Những tiến bộ về phần cứng, thuật toán tốt hơn, các đối số mới và các tiện ích dẫn đến hiệu suất được nâng cao và sự ra đời của các hệ thống mới. Nhiều trong số chúng được sử dụng trong sản xuất và chúng tôi tiếp tục vượt qua các giới hạn. Chúng ta sẽ có một hệ thống chứng minh chung cho tất cả các ứng dụng hay một số hệ thống phù hợp với các nhu cầu khác nhau? Chúng tôi nghĩ rằng khó có khả năng một hệ thống bằng chứng nào sẽ thống trị tất cả vì:

  1. Sự đa dạng của ứng dụng.
  2. Các loại ràng buộc mà chúng tôi có (liên quan đến bộ nhớ, thời gian xác minh, thời gian chứng minh).
  3. Nhu cầu về sự chắc chắn (nếu một hệ thống chứng minh bị hỏng, chúng ta vẫn còn những hệ thống khác).

Ngay cả khi hệ thống chứng minh thay đổi nhiều, chúng đều có một đặc tính quan trọng: chứng minh có thể được xác minh nhanh chóng. Việc có một lớp xác minh bằng chứng và có thể dễ dàng điều chỉnh để xử lý các hệ thống bằng chứng mới sẽ giải quyết những khó khăn liên quan đến việc thay đổi lớp cơ sở, chẳng hạn như Ethereum. Để cung cấp cái nhìn tổng quan về các đặc điểm khác nhau của SNARK:

  • Giả định về mật mã: hàm băm chống va chạm, bài toán log rời rạc trên đường cong elip, kiến thức về số mũ.
  • Thiết lập minh bạch và đáng tin cậy.
  • Thời gian chứng minh: tuyến tính và siêu tuyến tính.
  • Thời gian xác minh: thời gian không đổi, logarit, cận tuyến tính, tuyến tính.
  • Kích thước bằng chứng.
  • Dễ dàng đệ quy.
  • Sơ đồ số học.
  • Đa thức đơn biến và đa biến.

Bài đăng này sẽ xem xét nguồn gốc của SNARK, một số khối xây dựng cơ bản và sự phát triển (và sụp đổ) của các hệ thống chứng minh khác nhau. Bài viết không nhằm mục đích phân tích toàn diện các hệ thống chứng minh. Thay vào đó, chúng tôi tập trung vào những điều có ảnh hưởng đến chúng tôi. Tất nhiên, những phát triển này chỉ có thể thực hiện được nhờ công sức và ý tưởng tuyệt vời của những người tiên phong trong lĩnh vực này.

Nguyên tắc cơ bản

Như chúng tôi đã đề cập, bằng chứng không có kiến thức không phải là mới. Các định nghĩa, cơ sở, định lý quan trọng và thậm chí cả các giao thức quan trọng đã được thiết lập từ giữa những năm 1980. Một số ý tưởng và giao thức chính mà chúng tôi sử dụng để xây dựng SNARK hiện đại đã được đề xuất vào những năm 1990 (giao thức sumcheck) hoặc thậm chí trước khi Bitcoin ra đời (GKR năm 2007). Các vấn đề chính khi áp dụng nó liên quan đến việc thiếu ứng dụng mạnh mẽ (Internet chưa được phát triển vào những năm 1990) và lượng sức mạnh tính toán cần thiết.

Bằng chứng không có kiến thức: nguồn gốc (1985/1989)

Lĩnh vực chứng minh không có kiến thức xuất hiện trong tài liệu học thuật với bài báo của Goldwasser, Micali và Rackoff. Để thảo luận về nguồn gốc, bạn có thể xem video sau. Bài viết đưa ra các khái niệm về tính đầy đủ, tính đúng đắn và kiến thức bằng 0, cung cấp các cách xây dựng cho tính dư thừa bậc hai và tính không dư thừa bậc hai.

Giao thức Sumcheck (1992)

Giao thức sumcheck được đề xuất bởi Lund, Fortnow, Karloff và Nisan vào năm 1992. Nó là một trong những khối xây dựng quan trọng nhất cho các bằng chứng tương tác ngắn gọn. Nó giúp chúng tôi giảm yêu cầu đối với tổng các đánh giá của đa thức nhiều biến thành một đánh giá duy nhất tại một điểm được chọn ngẫu nhiên.

Goldwasser-Kalai-Rothblum (GKR) (2007)

Giao thức GKR là một giao thức tương tác có bộ chuẩn chạy tuyến tính theo số cổng của mạch, trong khi bộ xác minh chạy tuyến tính theo kích thước của mạch. Trong giao thức, người chứng minh và người xác minh đồng ý về mạch số học của quạt trong hai trên một trường hữu hạn có độ sâu d, với lớp d tương ứng với lớp đầu vào và lớp 0 là lớp đầu ra. Giao thức bắt đầu bằng một yêu cầu liên quan đến đầu ra của mạch, được giảm xuống thành một yêu cầu đối với các giá trị của lớp trước đó. Bằng cách sử dụng đệ quy, chúng ta có thể biến điều này thành một yêu cầu đối với các đầu vào của mạch, có thể kiểm tra dễ dàng. Những mức giảm này đạt được thông qua giao thức sumcheck.

Sơ đồ cam kết đa thức KZG (2010)

Kate, Zaverucha và Goldberg đã giới thiệu vào năm 2010 một sơ đồ cam kết cho các đa thức sử dụng nhóm ghép đôi song tuyến. Cam kết bao gồm một phần tử nhóm duy nhất và người cam kết có thể mở cam kết một cách hiệu quả đối với bất kỳ đánh giá chính xác nào về đa thức. Hơn nữa, do kỹ thuật phân khối, việc mở đầu có thể được thực hiện theo nhiều đánh giá. Các cam kết của KZG đã cung cấp một trong những nền tảng cơ bản cho một số SNARK hiệu quả, chẳng hạn như Pinocchio, Groth16 và Plonk. Nó cũng là trung tâm của EIP-4844. Để có trực giác về kỹ thuật tạo khối, bạn có thể xem bài đăng của chúng tôi trên cầu Mina-Ethereum.

SNARK thực tế sử dụng đường cong elip

Cấu trúc thực tế đầu tiên của SNARK xuất hiện vào năm 2013. Những điều này yêu cầu một bước tiền xử lý để tạo ra các khóa chứng minh và xác minh và dành riêng cho chương trình/mạch. Các khóa này có thể khá lớn và phụ thuộc vào các tham số bí mật mà các bên không được biết; nếu không, họ có thể giả mạo bằng chứng. Việc chuyển đổi mã thành thứ có thể được chứng minh đòi hỏi phải biên dịch mã thành một hệ thống các ràng buộc đa thức. Lúc đầu, việc này phải được thực hiện thủ công, tốn thời gian và dễ xảy ra sai sót. Những tiến bộ trong lĩnh vực này đã cố gắng loại bỏ một số vấn đề chính:

  1. Có người chứng minh hiệu quả hơn.
  2. Giảm số lượng tiền xử lý.
  3. Có các thiết lập phổ quát hơn là mạch cụ thể.
  4. Tránh có các thiết lập đáng tin cậy.
  5. Phát triển các cách mô tả mạch bằng ngôn ngữ cấp cao, thay vì viết thủ công các ràng buộc đa thức.

Pinocchio (2013)

Pinocchio là zk-SNARK thực tế và có thể sử dụng đầu tiên. SNARK dựa trên các chương trình số học bậc hai (QAP). Kích thước bằng chứng ban đầu là 288 byte. Chuỗi công cụ của Pinocchio đã cung cấp một trình biên dịch từ mã C đến các mạch số học, sau đó được chuyển đổi thành QAP. Giao thức yêu cầu người xác minh tạo ra các khóa dành riêng cho từng mạch. Nó sử dụng các cặp đường cong elip để kiểm tra các phương trình. Các tiệm cận để tạo bằng chứng và thiết lập khóa là tuyến tính theo kích thước tính toán và thời gian xác minh là tuyến tính theo kích thước của đầu vào và đầu ra công khai.

Groth 16 (2016)

Groth đã đưa ra một lập luận kiến thức mới với hiệu suất cao hơn cho các vấn đề được mô tả bởi R1CS. Nó có kích thước chứng minh nhỏ nhất (chỉ có ba phần tử nhóm) và xác minh nhanh chóng liên quan đến ba cặp đôi. Nó cũng bao gồm bước tiền xử lý để thu được chuỗi tham chiếu có cấu trúc. Hạn chế chính là nó yêu cầu thiết lập đáng tin cậy khác nhau cho mỗi chương trình mà chúng tôi muốn chứng minh, điều này gây bất tiện. Groth16 đã được sử dụng trong ZCash.

Chống Đạn & IPA (2016)

Một trong những điểm yếu của KZG PCS là nó yêu cầu thiết lập đáng tin cậy. Bootle và cộng sự. đã giới thiệu một hệ thống lập luận không có kiến thức hiệu quả về việc mở ra các cam kết của Pedersen nhằm đáp ứng mối quan hệ sản phẩm bên trong. Đối số sản phẩm bên trong có bộ chứng minh tuyến tính, với giao tiếp và tương tác logarit, nhưng có xác minh thời gian tuyến tính. Họ cũng đã phát triển một sơ đồ cam kết đa thức không yêu cầu thiết lập đáng tin cậy. PCS sử dụng những ý tưởng này đã được Halo 2 và Kimchi sử dụng.

Sonic, Marlin và Plonk (2019)

Sonic, PlonkMarlin giải quyết vấn đề thiết lập đáng tin cậy cho mỗi chương trình mà chúng tôi có trong Groth16, bằng cách giới thiệu các chuỗi tham chiếu có cấu trúc phổ quát và có thể cập nhật. Marlin cung cấp hệ thống bằng chứng dựa trên R1CS và là cốt lõi của Aleo.

Plonk đã giới thiệu một sơ đồ số học mới (sau này gọi là Plonkish) và việc sử dụng phép kiểm tra sản phẩm lớn cho các ràng buộc sao chép. Plonkish cũng cho phép giới thiệu các cổng chuyên dụng cho một số hoạt động nhất định, cái gọi là cổng tùy chỉnh. Một số dự án có phiên bản tùy chỉnh của Plonk, bao gồm Aztec, zkSync, Polygon ZKEVM, Mina's Kimchi, Plonky2, Halo 2 và Scroll, cùng nhiều dự án khác.

Tra cứu (2018/2020)

Gabizon và Williamson đã giới thiệu plookup vào năm 2020, sử dụng phép kiểm tra tổng sản phẩm để chứng minh rằng một giá trị được bao gồm trong bảng giá trị được tính toán trước. Mặc dù các đối số tra cứu trước đây đã được trình bày trong Arya, nhưng việc xây dựng đòi hỏi phải xác định bội số cho việc tra cứu, điều này làm cho việc xây dựng kém hiệu quả hơn. Bài viết PlonkUp đã chỉ ra cách đưa đối số plookup vào Plonk. Vấn đề với những đối số tra cứu này là chúng buộc người chứng minh phải trả giá cho cả bảng, không phụ thuộc vào số lần tra cứu của anh ta. Điều này hàm ý một chi phí đáng kể cho các bảng lớn, và rất nhiều nỗ lực đã được dành để giảm chi phí của người chứng minh chỉ bằng số lần tra cứu mà anh ta sử dụng.
Haböck đã giới thiệu LogUp, sử dụng đạo hàm logarit để biến việc kiểm tra tích lớn thành tổng của các nghịch đảo. LogUp rất quan trọng đối với hiệu suất trong Polygon ZKEVM, nơi họ cần chia toàn bộ bảng thành nhiều mô-đun STARK. Các mô-đun này phải được liên kết chính xác và việc tra cứu bảng chéo sẽ thực thi điều này. Việc giới thiệu LogUp-GKR sử dụng giao thức GKR để tăng hiệu suất của LogUp. Caulk là sơ đồ đầu tiên có tuyến tính phụ thời gian chuẩn trong kích thước bảng bằng cách sử dụng thời gian tiền xử lý O(NlogN) và lưu trữ O(N), trong đó N là kích thước bảng. Tiếp theo là một số kế hoạch khác, chẳng hạn như Baloo, Flolookup, cqcaulk+. Lasso trình bày một số cải tiến, tránh việc phải cam kết với bảng nếu nó có cấu trúc nhất định. Ngoài ra, Prover của Lasso chỉ trả tiền cho các mục trong bảng được truy cập bởi các thao tác tra cứu. Jolt tận dụng Lasso để chứng minh khả năng thực thi của máy ảo thông qua tra cứu.

Spartan (2019)

Spartan cung cấp IOP cho các mạch được mô tả bằng R1CS, tận dụng các thuộc tính của đa thức nhiều biến và giao thức kiểm tra tổng. Sử dụng sơ đồ cam kết đa thức phù hợp sẽ tạo ra SNARK trong suốt với bộ chứng minh thời gian tuyến tính.

HyperPlonk (2022)

HyperPlonk xây dựng dựa trên ý tưởng của Plonk bằng cách sử dụng đa thức đa biến. Thay vì thương số để kiểm tra việc thực thi các ràng buộc, nó dựa vào giao thức sumcheck. Nó cũng hỗ trợ các ràng buộc ở mức độ cao mà không làm tổn hại đến thời gian chạy của bộ chứng minh. Vì nó dựa trên đa thức nhiều biến nên không cần thực hiện FFT và thời gian chạy của bộ chuẩn là tuyến tính theo kích thước mạch. HyperPlonk giới thiệu IOP hoán vị mới phù hợp với các trường nhỏ hơn và giao thức mở hàng loạt dựa trên kiểm tra tổng, giúp giảm công việc của người chứng minh, kích thước bằng chứng và thời gian của người xác minh.

Sơ đồ gấp (2008/2021)

Nova giới thiệu ý tưởng về sơ đồ gấp, đây là một cách tiếp cận mới để đạt được tính toán có thể kiểm chứng tăng dần (IVC). Khái niệm IVC bắt nguồn từ Valiant , người đã chỉ ra cách hợp nhất hai bằng chứng về độ dài k thành một bằng chứng duy nhất về độ dài k. Ý tưởng là chúng ta có thể chứng minh bất kỳ tính toán dài hạn nào bằng cách chứng minh đệ quy rằng việc thực hiện từ bước i đến bước I+1+1 là đúng và xác minh bằng chứng cho thấy rằng việc chuyển đổi từ bước i

−1−1đến bước tôi đã đúng. Nova xử lý tốt các phép tính thống nhất; sau đó nó được mở rộng để xử lý các loại mạch khác nhau với sự ra đời của Supernova. Nova sử dụng phiên bản R1CS thoải mái và hoạt động trên các đường cong elip thân thiện. Làm việc với các chu kỳ đường cong thân thiện (ví dụ: đường cong Pasta) để đạt được IVC cũng được sử dụng trong Pickles, khối xây dựng chính của Mina để đạt được trạng thái cô đọng. Tuy nhiên, ý tưởng gấp khác với xác minh SNARK đệ quy. Ý tưởng về bộ tích lũy có mối liên hệ sâu sắc hơn với khái niệm bằng chứng theo đợt. Halo đã đưa ra khái niệm tích lũy như một giải pháp thay thế cho thành phần chứng minh đệ quy. Protostar cung cấp sơ đồ IVC không đồng nhất cho Plonk hỗ trợ tra cứu vectơ và cổng cấp độ cao.

Sử dụng hàm băm chống va chạm

Cùng khoảng thời gian Pinocchio được phát triển, đã có một số ý tưởng tạo ra các mạch/sơ đồ số học có thể chứng minh tính đúng đắn của việc thực thi một máy ảo. Mặc dù việc phát triển phép số học của máy ảo có thể phức tạp hơn hoặc kém hiệu quả hơn so với việc viết các mạch chuyên dụng cho một số chương trình, nhưng nó mang lại lợi thế là bất kỳ chương trình nào, dù phức tạp đến đâu, đều có thể được chứng minh bằng cách chứng minh rằng nó được thực thi chính xác trong máy ảo. máy móc. Các ý tưởng trong TinyRAM sau đó đã được cải tiến với thiết kế của Cairo vm và các máy ảo tiếp theo (chẳng hạn như zk-evms hoặc zkvms cho mục đích chung). Việc sử dụng các hàm băm chống va chạm đã loại bỏ nhu cầu thiết lập đáng tin cậy hoặc sử dụng các phép toán đường cong elip, gây tổn hại cho các bằng chứng dài hơn.

TinyRAM (2013)

Trong SNARKs for C, họ đã phát triển SNARK dựa trên PCP để chứng minh tính đúng đắn của việc thực thi chương trình C, được biên dịch thành TinyRAM, một máy tính có tập lệnh rút gọn. Máy tính sử dụng kiến trúc Harvard với bộ nhớ truy cập ngẫu nhiên có thể định địa chỉ ở cấp độ byte. Tận dụng tính chất không xác định, kích thước của mạch gần như tuyến tính trong kích thước tính toán, xử lý hiệu quả các vòng lặp tùy ý và phụ thuộc vào dữ liệu, luồng điều khiển và truy cập bộ nhớ.

STARK (2018)

STARK được giới thiệu bởi Ben Sasson et al. vào năm 2018. Họ đạt được O(log2n)(log2⁡)

kích thước bằng chứng, với trình chứng minh và trình xác minh nhanh, không yêu cầu thiết lập đáng tin cậy và được phỏng đoán là an toàn sau lượng tử. Chúng lần đầu tiên được sử dụng bởi Starkware/Starknet, cùng với Cairo vm. Trong số những giới thiệu chính của nó là biểu diễn trung gian đại số (AIR) và giao thức FRI (Bằng chứng gần gũi tương tác nhanh của Reed-Solomon Oracle). Nó cũng được sử dụng bởi các dự án khác (Polygon Miden, Risc0, Winterfell, Neptune) hoặc đã thấy sự điều chỉnh của một số thành phần (ZkSync's Boojum, Plonky2, Starky).

Ligero (2017)

Ligero giới thiệu một hệ thống chứng minh có thể đạt được các chứng minh có kích thước

O(√n), trong đó n là kích thước của mạch. Nó sắp xếp các hệ số đa thức ở dạng ma trận và sử dụng mã tuyến tính.
Brakedown xây dựng trên Ligero và giới thiệu ý tưởng về các sơ đồ cam kết đa thức bất khả tri trường.

Một số diễn biến mới

Việc sử dụng các hệ thống chứng minh khác nhau trong sản xuất đã cho thấy giá trị của từng phương pháp và dẫn đến những phát triển mới. Ví dụ: phép tính số học plonkish cung cấp một cách đơn giản để bao gồm các cổng tùy chỉnh và đối số tra cứu; FRI đã thể hiện hiệu suất tuyệt vời với tư cách là PCS, dẫn đến Plonky. Tương tự, việc sử dụng kiểm tra sản phẩm lớn trong AIR (dẫn đến AIR ngẫu nhiên với tiền xử lý) đã cải thiện hiệu suất của nó và đơn giản hóa các đối số truy cập bộ nhớ. Các cam kết dựa trên hàm băm đã trở nên phổ biến, dựa trên tốc độ của hàm băm trong phần cứng hoặc sự ra đời của các hàm băm mới thân thiện với SNARK.

Các chương trình cam kết đa thức mới (2023)

Với sự ra đời của SNARK hiệu quả dựa trên đa thức đa biến, chẳng hạn như Spartan hoặc HyperPlonk, mối quan tâm ngày càng tăng đối với các sơ đồ cam kết mới phù hợp với loại đa thức này. Binius, ZeromorphBasefold đều đề xuất các dạng mới để cam kết đa thức đa tuyến. Binius mang lại lợi thế là không cần chi phí để biểu diễn các loại dữ liệu (trong khi nhiều hệ thống chứng minh sử dụng ít nhất các phần tử trường 32 bit để biểu diễn các bit đơn) và hoạt động trên các trường nhị phân. Cam kết điều chỉnh việc giảm tốc độ, được thiết kế theo hướng bất khả tri trong lĩnh vực này. Basefold khái quát hóa FRI thành các mã khác ngoài Reed-Solomon, dẫn đến PCS không xác định được trường.

Hệ thống ràng buộc có thể tùy chỉnh (2023)

CCS khái quát hóa R1CS trong khi thu thập số học R1CS, Plonkish và AIR mà không cần chi phí chung. Việc sử dụng CCS với Spartan IOP mang lại SuperSpartan, hỗ trợ các ràng buộc cấp độ cao mà không cần phải có bộ chứng minh để chịu chi phí mật mã thay đổi theo mức độ ràng buộc. Đặc biệt, SuperSpartan mang lại SNARK cho AIR với bộ chuẩn thời gian tuyến tính.

Phần kết luận

Bài đăng này mô tả những tiến bộ của SNARK kể từ khi chúng được giới thiệu vào giữa những năm 1980. Những tiến bộ trong khoa học máy tính, toán học và phần cứng, cùng với sự ra đời của blockchain, đã dẫn đến SNARK mới và hiệu quả hơn, mở ra cánh cửa cho nhiều ứng dụng có thể thay đổi xã hội của chúng ta. Các nhà nghiên cứu và kỹ sư đã đề xuất các cải tiến và điều chỉnh cho SNARK theo nhu cầu của họ, tập trung vào kích thước bằng chứng, sử dụng bộ nhớ, thiết lập minh bạch, bảo mật sau lượng tử, thời gian chứng minh và thời gian xác minh. Mặc dù ban đầu có hai dòng chính (SNARK và STARK), ranh giới giữa cả hai đã bắt đầu mờ nhạt, cố gắng kết hợp các ưu điểm của các hệ thống chứng minh khác nhau. Ví dụ: kết hợp các sơ đồ số học khác nhau với các sơ đồ cam kết đa thức mới. Chúng ta có thể kỳ vọng rằng các hệ thống thử nghiệm mới sẽ tiếp tục phát triển với hiệu suất tăng lên và sẽ khó có một số hệ thống cần thời gian thích ứng để theo kịp những phát triển này trừ khi chúng ta có thể dễ dàng sử dụng những công cụ này mà không cần phải thay đổi một số cơ sở hạ tầng cốt lõi. .

Tuyên bố từ chối trách nhiệm:

  1. Bài viết này được in lại từ [lambdaclass], Mọi bản quyền thuộc về tác giả gốc [LambdaClass]. Nếu có ý kiến phản đối việc tái bản này, vui lòng liên hệ với nhóm Gate Learn , họ sẽ xử lý kịp thời.
  2. Tuyên bố miễn trừ trách nhiệm pháp lý: Các quan điểm và ý kiến trình bày trong bài viết này chỉ là của tác giả và không cấu thành bất kỳ lời khuyên đầu tư nào.
  3. Việc dịch bài viết sang các ngôn ngữ khác được thực hiện bởi nhóm Gate Learn. Trừ khi được đề cập, việc sao chép, phân phối hoặc đạo văn các bài viết đã dịch đều bị cấm.

Quan điểm rất chủ quan của chúng tôi về lịch sử của Bằng chứng không có kiến thức

Người mới bắt đầuFeb 27, 2024
Bài viết này mô tả những tiến bộ của SNARK kể từ khi được giới thiệu vào giữa những năm 1980.
Quan điểm rất chủ quan của chúng tôi về lịch sử của Bằng chứng không có kiến thức

Các đối số kiến thức không có kiến thức, ngắn gọn, không tương tác (zk-SNARK) là các nguyên tắc mã hóa mạnh mẽ cho phép một bên, người chứng minh, thuyết phục một bên khác, người xác minh, rằng một tuyên bố nhất định là đúng mà không tiết lộ bất cứ điều gì khác ngoài hiệu lực của tuyên bố. Chúng đã thu hút được sự chú ý rộng rãi nhờ các ứng dụng của chúng trong tính toán riêng tư có thể kiểm chứng, cung cấp bằng chứng về tính chính xác của việc thực thi các chương trình máy tính và giúp mở rộng quy mô chuỗi khối. Chúng tôi nghĩ SNARK sẽ có tác động đáng kể trong việc định hình thế giới của chúng ta, như chúng tôi mô tả trong bài đăng của mình. SNARK hoạt động như một chiếc ô cho các loại hệ thống chứng minh khác nhau, sử dụng các sơ đồ cam kết đa thức (PCS), sơ đồ số học khác nhau, bằng chứng tiên tri tương tác (IOP) hoặc bằng chứng có thể kiểm tra xác suất (PCP). Tuy nhiên, những ý tưởng và khái niệm cơ bản đã có từ giữa những năm 1980. Sự phát triển đã tăng tốc đáng kể sau khi Bitcoin và Ethereum ra đời, đây được chứng minh là một trường hợp sử dụng thú vị và mạnh mẽ vì bạn có thể mở rộng quy mô chúng bằng cách sử dụng Bằng chứng không có kiến thức (thường được gọi là Bằng chứng xác thực cho trường hợp sử dụng cụ thể này). SNARK là một công cụ thiết yếu cho khả năng mở rộng blockchain. Như Ben-Sasson mô tả, những năm vừa qua đã chứng kiến sự bùng nổ của các bằng chứng mật mã trong kỷ Cambri. Mỗi hệ thống chứng minh đều có những ưu điểm và nhược điểm và được thiết kế với những cân nhắc nhất định. Những tiến bộ về phần cứng, thuật toán tốt hơn, các đối số mới và các tiện ích dẫn đến hiệu suất được nâng cao và sự ra đời của các hệ thống mới. Nhiều trong số chúng được sử dụng trong sản xuất và chúng tôi tiếp tục vượt qua các giới hạn. Chúng ta sẽ có một hệ thống chứng minh chung cho tất cả các ứng dụng hay một số hệ thống phù hợp với các nhu cầu khác nhau? Chúng tôi nghĩ rằng khó có khả năng một hệ thống bằng chứng nào sẽ thống trị tất cả vì:

  1. Sự đa dạng của ứng dụng.
  2. Các loại ràng buộc mà chúng tôi có (liên quan đến bộ nhớ, thời gian xác minh, thời gian chứng minh).
  3. Nhu cầu về sự chắc chắn (nếu một hệ thống chứng minh bị hỏng, chúng ta vẫn còn những hệ thống khác).

Ngay cả khi hệ thống chứng minh thay đổi nhiều, chúng đều có một đặc tính quan trọng: chứng minh có thể được xác minh nhanh chóng. Việc có một lớp xác minh bằng chứng và có thể dễ dàng điều chỉnh để xử lý các hệ thống bằng chứng mới sẽ giải quyết những khó khăn liên quan đến việc thay đổi lớp cơ sở, chẳng hạn như Ethereum. Để cung cấp cái nhìn tổng quan về các đặc điểm khác nhau của SNARK:

  • Giả định về mật mã: hàm băm chống va chạm, bài toán log rời rạc trên đường cong elip, kiến thức về số mũ.
  • Thiết lập minh bạch và đáng tin cậy.
  • Thời gian chứng minh: tuyến tính và siêu tuyến tính.
  • Thời gian xác minh: thời gian không đổi, logarit, cận tuyến tính, tuyến tính.
  • Kích thước bằng chứng.
  • Dễ dàng đệ quy.
  • Sơ đồ số học.
  • Đa thức đơn biến và đa biến.

Bài đăng này sẽ xem xét nguồn gốc của SNARK, một số khối xây dựng cơ bản và sự phát triển (và sụp đổ) của các hệ thống chứng minh khác nhau. Bài viết không nhằm mục đích phân tích toàn diện các hệ thống chứng minh. Thay vào đó, chúng tôi tập trung vào những điều có ảnh hưởng đến chúng tôi. Tất nhiên, những phát triển này chỉ có thể thực hiện được nhờ công sức và ý tưởng tuyệt vời của những người tiên phong trong lĩnh vực này.

Nguyên tắc cơ bản

Như chúng tôi đã đề cập, bằng chứng không có kiến thức không phải là mới. Các định nghĩa, cơ sở, định lý quan trọng và thậm chí cả các giao thức quan trọng đã được thiết lập từ giữa những năm 1980. Một số ý tưởng và giao thức chính mà chúng tôi sử dụng để xây dựng SNARK hiện đại đã được đề xuất vào những năm 1990 (giao thức sumcheck) hoặc thậm chí trước khi Bitcoin ra đời (GKR năm 2007). Các vấn đề chính khi áp dụng nó liên quan đến việc thiếu ứng dụng mạnh mẽ (Internet chưa được phát triển vào những năm 1990) và lượng sức mạnh tính toán cần thiết.

Bằng chứng không có kiến thức: nguồn gốc (1985/1989)

Lĩnh vực chứng minh không có kiến thức xuất hiện trong tài liệu học thuật với bài báo của Goldwasser, Micali và Rackoff. Để thảo luận về nguồn gốc, bạn có thể xem video sau. Bài viết đưa ra các khái niệm về tính đầy đủ, tính đúng đắn và kiến thức bằng 0, cung cấp các cách xây dựng cho tính dư thừa bậc hai và tính không dư thừa bậc hai.

Giao thức Sumcheck (1992)

Giao thức sumcheck được đề xuất bởi Lund, Fortnow, Karloff và Nisan vào năm 1992. Nó là một trong những khối xây dựng quan trọng nhất cho các bằng chứng tương tác ngắn gọn. Nó giúp chúng tôi giảm yêu cầu đối với tổng các đánh giá của đa thức nhiều biến thành một đánh giá duy nhất tại một điểm được chọn ngẫu nhiên.

Goldwasser-Kalai-Rothblum (GKR) (2007)

Giao thức GKR là một giao thức tương tác có bộ chuẩn chạy tuyến tính theo số cổng của mạch, trong khi bộ xác minh chạy tuyến tính theo kích thước của mạch. Trong giao thức, người chứng minh và người xác minh đồng ý về mạch số học của quạt trong hai trên một trường hữu hạn có độ sâu d, với lớp d tương ứng với lớp đầu vào và lớp 0 là lớp đầu ra. Giao thức bắt đầu bằng một yêu cầu liên quan đến đầu ra của mạch, được giảm xuống thành một yêu cầu đối với các giá trị của lớp trước đó. Bằng cách sử dụng đệ quy, chúng ta có thể biến điều này thành một yêu cầu đối với các đầu vào của mạch, có thể kiểm tra dễ dàng. Những mức giảm này đạt được thông qua giao thức sumcheck.

Sơ đồ cam kết đa thức KZG (2010)

Kate, Zaverucha và Goldberg đã giới thiệu vào năm 2010 một sơ đồ cam kết cho các đa thức sử dụng nhóm ghép đôi song tuyến. Cam kết bao gồm một phần tử nhóm duy nhất và người cam kết có thể mở cam kết một cách hiệu quả đối với bất kỳ đánh giá chính xác nào về đa thức. Hơn nữa, do kỹ thuật phân khối, việc mở đầu có thể được thực hiện theo nhiều đánh giá. Các cam kết của KZG đã cung cấp một trong những nền tảng cơ bản cho một số SNARK hiệu quả, chẳng hạn như Pinocchio, Groth16 và Plonk. Nó cũng là trung tâm của EIP-4844. Để có trực giác về kỹ thuật tạo khối, bạn có thể xem bài đăng của chúng tôi trên cầu Mina-Ethereum.

SNARK thực tế sử dụng đường cong elip

Cấu trúc thực tế đầu tiên của SNARK xuất hiện vào năm 2013. Những điều này yêu cầu một bước tiền xử lý để tạo ra các khóa chứng minh và xác minh và dành riêng cho chương trình/mạch. Các khóa này có thể khá lớn và phụ thuộc vào các tham số bí mật mà các bên không được biết; nếu không, họ có thể giả mạo bằng chứng. Việc chuyển đổi mã thành thứ có thể được chứng minh đòi hỏi phải biên dịch mã thành một hệ thống các ràng buộc đa thức. Lúc đầu, việc này phải được thực hiện thủ công, tốn thời gian và dễ xảy ra sai sót. Những tiến bộ trong lĩnh vực này đã cố gắng loại bỏ một số vấn đề chính:

  1. Có người chứng minh hiệu quả hơn.
  2. Giảm số lượng tiền xử lý.
  3. Có các thiết lập phổ quát hơn là mạch cụ thể.
  4. Tránh có các thiết lập đáng tin cậy.
  5. Phát triển các cách mô tả mạch bằng ngôn ngữ cấp cao, thay vì viết thủ công các ràng buộc đa thức.

Pinocchio (2013)

Pinocchio là zk-SNARK thực tế và có thể sử dụng đầu tiên. SNARK dựa trên các chương trình số học bậc hai (QAP). Kích thước bằng chứng ban đầu là 288 byte. Chuỗi công cụ của Pinocchio đã cung cấp một trình biên dịch từ mã C đến các mạch số học, sau đó được chuyển đổi thành QAP. Giao thức yêu cầu người xác minh tạo ra các khóa dành riêng cho từng mạch. Nó sử dụng các cặp đường cong elip để kiểm tra các phương trình. Các tiệm cận để tạo bằng chứng và thiết lập khóa là tuyến tính theo kích thước tính toán và thời gian xác minh là tuyến tính theo kích thước của đầu vào và đầu ra công khai.

Groth 16 (2016)

Groth đã đưa ra một lập luận kiến thức mới với hiệu suất cao hơn cho các vấn đề được mô tả bởi R1CS. Nó có kích thước chứng minh nhỏ nhất (chỉ có ba phần tử nhóm) và xác minh nhanh chóng liên quan đến ba cặp đôi. Nó cũng bao gồm bước tiền xử lý để thu được chuỗi tham chiếu có cấu trúc. Hạn chế chính là nó yêu cầu thiết lập đáng tin cậy khác nhau cho mỗi chương trình mà chúng tôi muốn chứng minh, điều này gây bất tiện. Groth16 đã được sử dụng trong ZCash.

Chống Đạn & IPA (2016)

Một trong những điểm yếu của KZG PCS là nó yêu cầu thiết lập đáng tin cậy. Bootle và cộng sự. đã giới thiệu một hệ thống lập luận không có kiến thức hiệu quả về việc mở ra các cam kết của Pedersen nhằm đáp ứng mối quan hệ sản phẩm bên trong. Đối số sản phẩm bên trong có bộ chứng minh tuyến tính, với giao tiếp và tương tác logarit, nhưng có xác minh thời gian tuyến tính. Họ cũng đã phát triển một sơ đồ cam kết đa thức không yêu cầu thiết lập đáng tin cậy. PCS sử dụng những ý tưởng này đã được Halo 2 và Kimchi sử dụng.

Sonic, Marlin và Plonk (2019)

Sonic, PlonkMarlin giải quyết vấn đề thiết lập đáng tin cậy cho mỗi chương trình mà chúng tôi có trong Groth16, bằng cách giới thiệu các chuỗi tham chiếu có cấu trúc phổ quát và có thể cập nhật. Marlin cung cấp hệ thống bằng chứng dựa trên R1CS và là cốt lõi của Aleo.

Plonk đã giới thiệu một sơ đồ số học mới (sau này gọi là Plonkish) và việc sử dụng phép kiểm tra sản phẩm lớn cho các ràng buộc sao chép. Plonkish cũng cho phép giới thiệu các cổng chuyên dụng cho một số hoạt động nhất định, cái gọi là cổng tùy chỉnh. Một số dự án có phiên bản tùy chỉnh của Plonk, bao gồm Aztec, zkSync, Polygon ZKEVM, Mina's Kimchi, Plonky2, Halo 2 và Scroll, cùng nhiều dự án khác.

Tra cứu (2018/2020)

Gabizon và Williamson đã giới thiệu plookup vào năm 2020, sử dụng phép kiểm tra tổng sản phẩm để chứng minh rằng một giá trị được bao gồm trong bảng giá trị được tính toán trước. Mặc dù các đối số tra cứu trước đây đã được trình bày trong Arya, nhưng việc xây dựng đòi hỏi phải xác định bội số cho việc tra cứu, điều này làm cho việc xây dựng kém hiệu quả hơn. Bài viết PlonkUp đã chỉ ra cách đưa đối số plookup vào Plonk. Vấn đề với những đối số tra cứu này là chúng buộc người chứng minh phải trả giá cho cả bảng, không phụ thuộc vào số lần tra cứu của anh ta. Điều này hàm ý một chi phí đáng kể cho các bảng lớn, và rất nhiều nỗ lực đã được dành để giảm chi phí của người chứng minh chỉ bằng số lần tra cứu mà anh ta sử dụng.
Haböck đã giới thiệu LogUp, sử dụng đạo hàm logarit để biến việc kiểm tra tích lớn thành tổng của các nghịch đảo. LogUp rất quan trọng đối với hiệu suất trong Polygon ZKEVM, nơi họ cần chia toàn bộ bảng thành nhiều mô-đun STARK. Các mô-đun này phải được liên kết chính xác và việc tra cứu bảng chéo sẽ thực thi điều này. Việc giới thiệu LogUp-GKR sử dụng giao thức GKR để tăng hiệu suất của LogUp. Caulk là sơ đồ đầu tiên có tuyến tính phụ thời gian chuẩn trong kích thước bảng bằng cách sử dụng thời gian tiền xử lý O(NlogN) và lưu trữ O(N), trong đó N là kích thước bảng. Tiếp theo là một số kế hoạch khác, chẳng hạn như Baloo, Flolookup, cqcaulk+. Lasso trình bày một số cải tiến, tránh việc phải cam kết với bảng nếu nó có cấu trúc nhất định. Ngoài ra, Prover của Lasso chỉ trả tiền cho các mục trong bảng được truy cập bởi các thao tác tra cứu. Jolt tận dụng Lasso để chứng minh khả năng thực thi của máy ảo thông qua tra cứu.

Spartan (2019)

Spartan cung cấp IOP cho các mạch được mô tả bằng R1CS, tận dụng các thuộc tính của đa thức nhiều biến và giao thức kiểm tra tổng. Sử dụng sơ đồ cam kết đa thức phù hợp sẽ tạo ra SNARK trong suốt với bộ chứng minh thời gian tuyến tính.

HyperPlonk (2022)

HyperPlonk xây dựng dựa trên ý tưởng của Plonk bằng cách sử dụng đa thức đa biến. Thay vì thương số để kiểm tra việc thực thi các ràng buộc, nó dựa vào giao thức sumcheck. Nó cũng hỗ trợ các ràng buộc ở mức độ cao mà không làm tổn hại đến thời gian chạy của bộ chứng minh. Vì nó dựa trên đa thức nhiều biến nên không cần thực hiện FFT và thời gian chạy của bộ chuẩn là tuyến tính theo kích thước mạch. HyperPlonk giới thiệu IOP hoán vị mới phù hợp với các trường nhỏ hơn và giao thức mở hàng loạt dựa trên kiểm tra tổng, giúp giảm công việc của người chứng minh, kích thước bằng chứng và thời gian của người xác minh.

Sơ đồ gấp (2008/2021)

Nova giới thiệu ý tưởng về sơ đồ gấp, đây là một cách tiếp cận mới để đạt được tính toán có thể kiểm chứng tăng dần (IVC). Khái niệm IVC bắt nguồn từ Valiant , người đã chỉ ra cách hợp nhất hai bằng chứng về độ dài k thành một bằng chứng duy nhất về độ dài k. Ý tưởng là chúng ta có thể chứng minh bất kỳ tính toán dài hạn nào bằng cách chứng minh đệ quy rằng việc thực hiện từ bước i đến bước I+1+1 là đúng và xác minh bằng chứng cho thấy rằng việc chuyển đổi từ bước i

−1−1đến bước tôi đã đúng. Nova xử lý tốt các phép tính thống nhất; sau đó nó được mở rộng để xử lý các loại mạch khác nhau với sự ra đời của Supernova. Nova sử dụng phiên bản R1CS thoải mái và hoạt động trên các đường cong elip thân thiện. Làm việc với các chu kỳ đường cong thân thiện (ví dụ: đường cong Pasta) để đạt được IVC cũng được sử dụng trong Pickles, khối xây dựng chính của Mina để đạt được trạng thái cô đọng. Tuy nhiên, ý tưởng gấp khác với xác minh SNARK đệ quy. Ý tưởng về bộ tích lũy có mối liên hệ sâu sắc hơn với khái niệm bằng chứng theo đợt. Halo đã đưa ra khái niệm tích lũy như một giải pháp thay thế cho thành phần chứng minh đệ quy. Protostar cung cấp sơ đồ IVC không đồng nhất cho Plonk hỗ trợ tra cứu vectơ và cổng cấp độ cao.

Sử dụng hàm băm chống va chạm

Cùng khoảng thời gian Pinocchio được phát triển, đã có một số ý tưởng tạo ra các mạch/sơ đồ số học có thể chứng minh tính đúng đắn của việc thực thi một máy ảo. Mặc dù việc phát triển phép số học của máy ảo có thể phức tạp hơn hoặc kém hiệu quả hơn so với việc viết các mạch chuyên dụng cho một số chương trình, nhưng nó mang lại lợi thế là bất kỳ chương trình nào, dù phức tạp đến đâu, đều có thể được chứng minh bằng cách chứng minh rằng nó được thực thi chính xác trong máy ảo. máy móc. Các ý tưởng trong TinyRAM sau đó đã được cải tiến với thiết kế của Cairo vm và các máy ảo tiếp theo (chẳng hạn như zk-evms hoặc zkvms cho mục đích chung). Việc sử dụng các hàm băm chống va chạm đã loại bỏ nhu cầu thiết lập đáng tin cậy hoặc sử dụng các phép toán đường cong elip, gây tổn hại cho các bằng chứng dài hơn.

TinyRAM (2013)

Trong SNARKs for C, họ đã phát triển SNARK dựa trên PCP để chứng minh tính đúng đắn của việc thực thi chương trình C, được biên dịch thành TinyRAM, một máy tính có tập lệnh rút gọn. Máy tính sử dụng kiến trúc Harvard với bộ nhớ truy cập ngẫu nhiên có thể định địa chỉ ở cấp độ byte. Tận dụng tính chất không xác định, kích thước của mạch gần như tuyến tính trong kích thước tính toán, xử lý hiệu quả các vòng lặp tùy ý và phụ thuộc vào dữ liệu, luồng điều khiển và truy cập bộ nhớ.

STARK (2018)

STARK được giới thiệu bởi Ben Sasson et al. vào năm 2018. Họ đạt được O(log2n)(log2⁡)

kích thước bằng chứng, với trình chứng minh và trình xác minh nhanh, không yêu cầu thiết lập đáng tin cậy và được phỏng đoán là an toàn sau lượng tử. Chúng lần đầu tiên được sử dụng bởi Starkware/Starknet, cùng với Cairo vm. Trong số những giới thiệu chính của nó là biểu diễn trung gian đại số (AIR) và giao thức FRI (Bằng chứng gần gũi tương tác nhanh của Reed-Solomon Oracle). Nó cũng được sử dụng bởi các dự án khác (Polygon Miden, Risc0, Winterfell, Neptune) hoặc đã thấy sự điều chỉnh của một số thành phần (ZkSync's Boojum, Plonky2, Starky).

Ligero (2017)

Ligero giới thiệu một hệ thống chứng minh có thể đạt được các chứng minh có kích thước

O(√n), trong đó n là kích thước của mạch. Nó sắp xếp các hệ số đa thức ở dạng ma trận và sử dụng mã tuyến tính.
Brakedown xây dựng trên Ligero và giới thiệu ý tưởng về các sơ đồ cam kết đa thức bất khả tri trường.

Một số diễn biến mới

Việc sử dụng các hệ thống chứng minh khác nhau trong sản xuất đã cho thấy giá trị của từng phương pháp và dẫn đến những phát triển mới. Ví dụ: phép tính số học plonkish cung cấp một cách đơn giản để bao gồm các cổng tùy chỉnh và đối số tra cứu; FRI đã thể hiện hiệu suất tuyệt vời với tư cách là PCS, dẫn đến Plonky. Tương tự, việc sử dụng kiểm tra sản phẩm lớn trong AIR (dẫn đến AIR ngẫu nhiên với tiền xử lý) đã cải thiện hiệu suất của nó và đơn giản hóa các đối số truy cập bộ nhớ. Các cam kết dựa trên hàm băm đã trở nên phổ biến, dựa trên tốc độ của hàm băm trong phần cứng hoặc sự ra đời của các hàm băm mới thân thiện với SNARK.

Các chương trình cam kết đa thức mới (2023)

Với sự ra đời của SNARK hiệu quả dựa trên đa thức đa biến, chẳng hạn như Spartan hoặc HyperPlonk, mối quan tâm ngày càng tăng đối với các sơ đồ cam kết mới phù hợp với loại đa thức này. Binius, ZeromorphBasefold đều đề xuất các dạng mới để cam kết đa thức đa tuyến. Binius mang lại lợi thế là không cần chi phí để biểu diễn các loại dữ liệu (trong khi nhiều hệ thống chứng minh sử dụng ít nhất các phần tử trường 32 bit để biểu diễn các bit đơn) và hoạt động trên các trường nhị phân. Cam kết điều chỉnh việc giảm tốc độ, được thiết kế theo hướng bất khả tri trong lĩnh vực này. Basefold khái quát hóa FRI thành các mã khác ngoài Reed-Solomon, dẫn đến PCS không xác định được trường.

Hệ thống ràng buộc có thể tùy chỉnh (2023)

CCS khái quát hóa R1CS trong khi thu thập số học R1CS, Plonkish và AIR mà không cần chi phí chung. Việc sử dụng CCS với Spartan IOP mang lại SuperSpartan, hỗ trợ các ràng buộc cấp độ cao mà không cần phải có bộ chứng minh để chịu chi phí mật mã thay đổi theo mức độ ràng buộc. Đặc biệt, SuperSpartan mang lại SNARK cho AIR với bộ chuẩn thời gian tuyến tính.

Phần kết luận

Bài đăng này mô tả những tiến bộ của SNARK kể từ khi chúng được giới thiệu vào giữa những năm 1980. Những tiến bộ trong khoa học máy tính, toán học và phần cứng, cùng với sự ra đời của blockchain, đã dẫn đến SNARK mới và hiệu quả hơn, mở ra cánh cửa cho nhiều ứng dụng có thể thay đổi xã hội của chúng ta. Các nhà nghiên cứu và kỹ sư đã đề xuất các cải tiến và điều chỉnh cho SNARK theo nhu cầu của họ, tập trung vào kích thước bằng chứng, sử dụng bộ nhớ, thiết lập minh bạch, bảo mật sau lượng tử, thời gian chứng minh và thời gian xác minh. Mặc dù ban đầu có hai dòng chính (SNARK và STARK), ranh giới giữa cả hai đã bắt đầu mờ nhạt, cố gắng kết hợp các ưu điểm của các hệ thống chứng minh khác nhau. Ví dụ: kết hợp các sơ đồ số học khác nhau với các sơ đồ cam kết đa thức mới. Chúng ta có thể kỳ vọng rằng các hệ thống thử nghiệm mới sẽ tiếp tục phát triển với hiệu suất tăng lên và sẽ khó có một số hệ thống cần thời gian thích ứng để theo kịp những phát triển này trừ khi chúng ta có thể dễ dàng sử dụng những công cụ này mà không cần phải thay đổi một số cơ sở hạ tầng cốt lõi. .

Tuyên bố từ chối trách nhiệm:

  1. Bài viết này được in lại từ [lambdaclass], Mọi bản quyền thuộc về tác giả gốc [LambdaClass]. Nếu có ý kiến phản đối việc tái bản này, vui lòng liên hệ với nhóm Gate Learn , họ sẽ xử lý kịp thời.
  2. Tuyên bố miễn trừ trách nhiệm pháp lý: Các quan điểm và ý kiến trình bày trong bài viết này chỉ là của tác giả và không cấu thành bất kỳ lời khuyên đầu tư nào.
  3. Việc dịch bài viết sang các ngôn ngữ khác được thực hiện bởi nhóm Gate Learn. Trừ khi được đề cập, việc sao chép, phân phối hoặc đạo văn các bài viết đã dịch đều bị cấm.
Розпочати зараз
Зареєструйтеся та отримайте ваучер на
$100
!
Створити обліковий запис