Hướng dẫn dành cho người mới bắt đầu mà tôi đã thích cách đây vài tháng trước khi đào sâu vào nội dung này
Những gì bạn cần:
- nền khoa học máy tính
- những điều cơ bản về Ethereum
- những điều cơ bản của phép tính (tối ưu hóa ràng buộc)
Những gì bạn sẽ nhận được:
- những điều cơ bản về SNARK không có kiến thức
- những điều cơ bản về cây Merkle
- cách Ethereum có thể mở rộng quy mô lên hàng nghìn giao dịch mỗi giây nhờ SNARK
SNARK cho phép Người chứng minh với Người xác minh rằng cô ấy / anh ấy có giải pháp W cho vấn đề F với đầu vào được chia sẻ / đã biết X mà không tiết lộ W.
Tìm giải pháp cho vấn đề có thể đòi hỏi một lượng lớn sức mạnh tính toán và bộ nhớ.
Vì vậy, Người xác minh về cơ bản có thể chắc chắn 100% rằng Prover đã hoạt động bình thường (và đã tìm ra giải pháp), mà không phải tự mình làm lại công việc để kiểm tra giải pháp cũng như không biết giải pháp nào cả. Thật là kỳ diệu!
Quy trình có 3 bước:
- THIẾT LẬP - Bài toán F (cần được biểu diễn dưới dạng chương trình số học bậc hai, xem bên dưới) được chuẩn bị cho SNARK. Quá trình này tốn rất nhiều bộ nhớ và tính toán chuyên sâu tùy thuộc vào độ phức tạp của vấn đề (→ Số lượng đầu vào và các ràng buộc → Thứ nguyên của ma trận của vấn đề thỏa mãn các ràng buộc). Người chơi thực hiện Thiết lập (có thể là chính Người xác minh) phải được tất cả các bên tin cậy, vì đầu ra của Thiết lập được sử dụng trong các giai đoạn tiếp theo. Việc thiết lập thường được thực hiện bằng cách sử dụng libsnark, thư viện C ++ là cách triển khai phổ biến nhất cho zkSNARK.
- minh - Prover, người có giải pháp W cho vấn đề F với đầu vào được chia sẻ X (có thể cô ấy / anh ấy đã tốn rất nhiều CPU và bộ nhớ để tìm ra nó!), Sử dụng libsnark và đầu ra của Thành lập pha để tạo một bằng chứng 𝚷. Quá trình này chắc chắn là bộ nhớ cao và tính toán chuyên sâu (tùy thuộc vào độ phức tạp của vấn đề, như ở trên). Thay vào đó, kích thước của đầu ra (tức là bằng chứng 𝚷) ngắn gọn và không đổi độc lập với độ phức tạp của vấn đề. Prover cần tin tưởng ai đã thực hiện giai đoạn Thiết lập, vì cô ấy / anh ấy sử dụng đầu ra của nó…
- KIỂM ĐỊNH - Người xác minh - cung cấp đầu vào như đầu ra của giai đoạn Thiết lập, đầu vào được chia sẻ X và bằng chứng 𝚷 - kiểm tra bằng chứng. Nếu xác minh thành công, Prover đã cố gắng chứng minh với Người xác minh rằng cô ấy / anh ấy đã tìm ra giải pháp W cho vấn đề F… mà không tiết lộ W! Phần hay là không chỉ Bằng chứng ngắn gọn và luôn có cùng độ dài .., quá trình xác minh diễn ra nhanh chóng và không tốn nhiều bộ nhớ / máy tính. Không giống như hai giai đoạn trước… việc xác minh có thể dễ dàng thực hiện bằng điện thoại thông minh chỉ trong mili giây!
Một bản tóm tắt tốt (nguồn):
Làm thế nào điều này có thể xảy ra? Chà, đó là phép thuật Merlin! Nếu bạn muốn tính toán đằng sau điều này, bắt đầu từ đây.
Làm cách nào để tôi có thể chuyển đổi phần mềm của mình sang chương trình số học bậc hai?
Như đã đề cập ở trên, bài toán F của giai đoạn thiết lập cần là một chương trình số học bậc hai. Quy tắc của trò chơi là khó khăn:
- Đầu vào phần mềm của bạn phải là số. Chuyển đổi nội dung của bạn (mảng, chuỗi, v.v.) thành số. Điều đó thật tầm thường.
- Một "hệ phương trình bị ràng buộc bậc hai" có nghĩa là:
trong đó x là vectơ n chiều của đầu vào của bạn, m là số ràng buộc (tức là số phương trình của hệ thống của bạn), C là ma trận hệ số n-x và q là vectơ hệ số n chiều. Nếu bạn không thích ma trận và vectơ, đây là trường hợp n = 3 và m = 2 (3 đầu vào, 2 ràng buộc):
- Việc thực hiện là một mạch số học, có nghĩa là kết quả là Vấn đề được giải quyết (hệ thống đã được giải quyết, tức là tất cả các đa thức đều bằng 0) hoặc Vấn đề không được giải quyết (tất cả các trường hợp khác). Nói cách khác: “những đầu vào này không phải là một trong những giải pháp cho Vấn đề này”.
- Các hệ số C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 là các ràng buộc của hệ thống. Về cơ bản, đây là những gì xác định phần mềm của bạn. Thay đổi chúng… và bạn sẽ nhận được một phần mềm khác! Quay lại cách SNARK hoạt động: C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 là đầu vào của giai đoạn Thiết lập. Do đó, đầu ra của giai đoạn Thiết lập (mà bạn cần Chứng minh và Xác minh) liên quan chặt chẽ đến các C₁, C₂,…, C𝚖, q₁, q₂,…, q𝚖 và chỉ hoạt động cho Vấn đề đó. Nếu bạn thay đổi chúng, bạn đang xác định một phần mềm / sự cố khác và bạn cần chạy lại giai đoạn Thiết lập! x₁, x₂,…, x𝗇 là các biến (nghĩa là bạn phải đoán những gì để có được lời giải của hệ thống). Vì vậy, khi chúng tôi nói "Kính gửi Prover, bạn có thể vui lòng tìm một giải pháp bí mật W cho vấn đề F với đầu vào chia sẻ / công khai X", chúng tôi muốn nói rằng "Kính gửi Prover, bạn có thể tìm thấy các giá trị x₁, x₂, ..., x𝗇 để giải quyết hệ thống không với ví dụ: x₇ = 2393, x₅₂₆ = 5647? ” Bạn có thể làm những gì bạn muốn với tất cả x𝗇, ngoại trừ x₇ và x₅₂₆, được giới hạn ở các đầu vào chia sẻ / công khai.
Đó là một cuộc sống khó khăn nhưng bạn có thể tồn tại… Nếu bạn cần các vòng lặp, bạn có thể mở chúng lặp lại cùng một hoạt động nhiều lần. Hoặc nếu bạn cần ví dụ x₁⁴ x₂⁵, bạn xác định đầu vào mới x₃ = x₁⁴ x₁⁴ và sử dụng x₃ trong các ràng buộc của bạn. Tất cả là về việc thêm các biến và ràng buộc… Ngay cả đối với những phần mềm khá đơn giản cũng dễ dàng đạt tới hàng trăm triệu hoặc hàng tỷ đầu vào và các ràng buộc!
Bạn muốn biết thêm? Đọc tại đây. Và cũng kiểm tra cơ bản này code_to_r1cs.py từ ethereum / nghiên cứu.
Cây Merkle là gì?
Hàm băm là một quy tắc ánh xạ một đầu vào có kích thước tùy ý với một đầu ra có kích thước cố định. Chúng tôi có thể phát minh ra một hàm băm khá vô dụng “Nối hai chữ cái đầu với hai chữ cái cuối cùng” biến “Woody Allen” thành “Woen” và “Paul McCartney” thành “Paey”.
Cây Merkle là một cấu trúc dữ liệu trong đó mọi cha mẹ là băm của hai con trai của nó. Ở trên cùng, bạn tìm thấy Gốc, là mã băm của hai con trai cấp 1. Ở dưới cùng, mỗi lá là mã băm của đầu vào bên ngoài.
Sử dụng hàm băm “Woody Allen” → “Woen” hư cấu của chúng tôi:
Khi một chiếc lá thay đổi, sự thay đổi sẽ được truyền đến tận Gốc. Nếu ANTHONY thay đổi, thì ANNY (lá), CENY và CECO (Root) cũng thay đổi. Dù lá nào thay đổi thì Gốc cũng thay đổi theo.
Bạn không cần toàn bộ cây để tính toán lại Gốc. Trong ví dụ của chúng tôi, nếu ANTHONY thay đổi và bạn biết cả JACO và CECILY, bạn có thể dễ dàng tính toán lại Gốc ngay cả khi bạn hoàn toàn bỏ qua JAMES, MARCO, JAES và MACO. Đối với những cây lớn, điều này tiết kiệm rất nhiều thời gian!
Vì vậy, những gì?
Merkle tree rất tốt để kiểm tra tính toàn vẹn của dữ liệu. Thông thường: bạn biết đâu là Gốc hợp lệ và bạn kiểm tra xem dữ liệu nhận được có khớp với Gốc đó không. Ví dụ: một bên đáng tin cậy không thể cung cấp cho bạn toàn bộ tập dữ liệu về tên của những người trên Trái đất (không có thời gian, không có băng thông hoặc có thể họ không có dữ liệu) chỉ cung cấp cho bạn Gốc (ví dụ: “CECO”). Mật ngữ: bạn nhận được hàng triệu tên đầu tiên, liên quan đến lá số, bởi hàng nghìn bên không đáng tin cậy. Chà, vì bạn có Root chính xác, bạn có thể kiểm tra xem bạn có thể dựa vào ai, ai đang cung cấp cho bạn dữ liệu giả mạo…
Merkle cây cũng là một phần cuộc sống của bạn! Khi bạn tải xuống tệp Torrent 3GB, tệp của bạn được chia thành hàng triệu phần nhỏ. Hàm băm của mỗi đoạn được lưu trữ trong một lá. Vì bạn biết đâu là Gốc hợp lệ của cây, nên mỗi khi bạn nhận được một đoạn của tệp bởi ai đó, bạn có thể kiểm tra xem nó có đúng không. Nếu không, bạn có thể hỏi người khác cùng một đoạn.
Bạn có thể làm điều đó ngay cả khi bạn chưa tải xuống toàn bộ cây / tất cả các lá: nếu bạn biết rằng Gốc là CECO và bạn tin tưởng JACO… khi bạn nhận được đoạn ANTHONY, bạn có thể xác minh nó ngay cả khi bạn chưa tải xuống nhưng các khối MARCO và JAMES.
Tại sao Merkle tree lại hữu ích trong công nghệ sổ cái phân tán rất đơn giản: bạn sử dụng các giao thức đồng thuận (chậm, tốn kém) chỉ để đạt được sự đồng thuận trên Root. Sau đó, các nút không đáng tin cậy của mạng có thể chia sẻ dữ liệu một cách hiệu quả và trực tiếp… và có thể ngủ an toàn và ổn định nhờ kiểm tra tính toàn vẹn với Root.
Khi Chúa yêu cầu Ethereum chọn 2 siêu cường giữa Bảo mật, Khả năng mở rộng và Phân cấp… Ethereum đã hy sinh Khả năng mở rộng. Trên thực tế, không có giới hạn mạnh mẽ về “giao dịch mỗi giây”: giới hạn liên quan đến lượng gas của mỗi khối - nghĩa là, đơn giản hóa, số lượng hoạt động mà tôi có thể thực hiện trong mỗi khối. Giới hạn này là 8 triệu gas. Điều đó có thể có nghĩa là nhiều giao dịch "nhỏ" (không có dữ liệu được đính kèm với các giao dịch, không có hoạt động nào được thực hiện trên dữ liệu đó) hoặc một vài giao dịch lớn. Nó phụ thuộc vào các nút của Ethereum, nơi gửi các giao dịch và cho các thợ đào của Ethereum, những người đưa vào khối các giao dịch trả nhiều tiền hơn.
Một khối được khai thác mỗi ~ 15 giây. Điều đó có nghĩa là ~ 32 triệu gas mỗi phút, chắc chắn là không đủ nếu chúng ta muốn dapp của Ethereum trở thành xu hướng chủ đạo.
Nhân tiện: dừng lại với những so sánh tẻ nhạt giữa Ethereum và Visa. Một hệ thống tập trung sẽ luôn luôn nhanh hơn Ethereum… theo thiết kế! Họ làm những thứ khác nhau và bạn cần chúng trong những tình huống khác nhau. Nếu bạn không cần sự phân quyền và một môi trường thiếu sự tin cậy… tất nhiên bạn nên chọn Visa. Nói ngắn gọn: việc máy xay của bạn quay nhanh hơn máy giặt không có nghĩa là bạn sẽ giặt sạch quần trong máy xay!
Hãy cùng nhau đặt câu đố! Hãy tưởng tượng bạn có thể “nén” nhiều giao dịch nhỏ trong một giao dịch lớn nhờ SNARK. Nếu lượng gas chi tiêu cho giao dịch lớn này ít hơn tổng lượng gas chi tiêu cho các giao dịch nhỏ, điều đó có nghĩa là bạn đang tiết kiệm gas.
Và tiết kiệm xăng có nghĩa là:
- Người dùng chi tiêu ít hơn cho các giao dịch nói chung → Đây sẽ là động lực cho toàn bộ hệ sinh thái
- Có thể đặt nhiều thứ hơn vào một khối → Ethereum quay nhanh hơn máy xay sinh tố của bạn!
Học như thế nào?
Có những người dùng, một người chuyển tiếp (hoặc nhiều người chuyển tiếp) tổng hợp các giao dịch và một hợp đồng thông minh.
- Người dùng sẵn sàng chơi trò chơi này gửi Ether (hoặc mã thông báo) của họ đến một hợp đồng thông minh được kiểm toán công khai. Đối với mỗi người chơi mới, một lá mới trong cây Merkle sẽ được tạo ra. Lá bao gồm thông tin về chủ sở hữu Ether (địa chỉ của cô ấy / anh ấy, cũng là khóa công khai), số lượng Ether và nonce (bộ đếm giao dịch của tài khoản đó, bằng 0 khi lá được thêm vào)
- Khi A muốn gửi Ether cho B (cả hai đều cần có lá / tài khoản trong hợp đồng thông minh), A đóng gói một giao dịch, bao gồm địa chỉ của từtài khoản, đến tài khoản, khâm mạng của tài khoản từ, số lượng Ether sẽ được chuyển và chữ ký của giao dịch (rõ ràng là được ký bằng khóa riêng của tài khoản “from”). Sau đó, cô ấy / anh ấy sẽ gửi giao dịch đã đóng gói cho người chuyển tiếp.
- Trình chuyển tiếp tổng hợp tất cả các giao dịch nhận được trong một khoảng thời gian nhất định (ví dụ: một giờ), cập nhật cây Merkle với số dư mới và tạo bằng chứng SNARK chứng minh rằng tất cả các chữ ký và gốc của cây Merkle mới là hợp lệ. Người chuyển tiếp cuối cùng cũng gửi trạng thái mới và bằng chứng cho hợp đồng thông minh.
- Hợp đồng thông minh xác thực Proof on-chain. Nếu nó hợp lệ, nó sẽ lưu gốc cây Merkle của trạng thái Mới trong bộ nhớ trong của hợp đồng.
Về cơ bản, gốc cây Merkle mô tả toàn bộ trạng thái của tất cả các tài khoản. Và bạn không thể thay đổi nó (= ăn cắp tiền) trừ khi bạn có thể chứng minh tính hợp lệ của các chữ ký có giao dịch dẫn đến Trạng thái mới được tóm tắt bởi gốc mới mà bạn đang gửi.
Tóm lại: người dùng có các giao dịch siêu nhanh và gần như miễn phí, như trên Coinbase, mà không cần tin tưởng người chuyển tiếp, người không thể làm bất cứ điều gì, không giống như trên Coinbase, nếu không có chữ ký của bạn.
Đó là một chuỗi bên không giám sát có trạng thái được tóm tắt bởi một gốc cây Merkle.
Hãy kết nối những gì chúng ta đã học ở trên về SNARK với những gì chúng ta vừa thảo luận về việc mở rộng quy mô. Có nhiều cách khác nhau để làm điều đó. Tôi sẽ so sánh 2 công thức: Vitalik's phiên bản và barryWhiteHat's phiên bản.
CÀI ĐẶT được thực hiện bởi…
Người bắt đầu dự án, người cũng tạo ra hợp đồng thông minh. Nó càng dễ nghe càng tốt. Bạn nên tin tưởng cô ấy / anh ấy… đó là một thiết lập đáng tin cậy!
Hợp đồng thông minh tiết kiệm…
2 Merkle root (byte32 giá trị): cây đầu tiên chứa địa chỉ của tài khoản (chữ ký công khai), số dư và số không của tài khoản thứ hai
CUNG CẤP được thực hiện bởi…
Người chuyển tiếp
Trình chuyển tiếp gửi đến hợp đồng thông minh…
- 2 gốc Merkle của trạng thái Mới (địa chỉ cây và số dư + cây nonces)
- danh sách các giao dịch, không có chữ ký. “Mỗi giao dịch tốn 68 gas mỗi byte. Do đó, đối với chuyển khoản thông thường, chúng ta có thể mong đợi chi phí biên là 68 * 3 (từ) + 68 * 3 (đến) + 68 * 1 (phí) + 68 * 4 + 4 * 2 (số tiền) + 68 * 2 (nonce), hoặc 892 gas ”
Các đầu vào đã biết của quy trình PROVING là…
- 2 gốc Merkle trạng thái cũ
- 2 gốc Merkle trạng thái mới
- danh sách giao dịch
Quy trình CUNG CẤP chứng minh rằng…
Được
- 2 gốc Merkle trạng thái cũ (đã được lưu trữ trong hợp đồng)
- 2 gốc Merkle trạng thái mới (được gửi trong giao dịch tổng hợp)
- danh sách giao dịch (được gửi trong giao dịch tổng hợp)
… Trình chuyển tiếp có các chữ ký hợp lệ để chuyển từ trạng thái có 2 gốc Cũ sang trạng thái có 2 gốc mới với các giao dịch đó.
XÁC NHẬN được thực hiện bởi…
Hợp đồng thông minh (được mã hóa bằng solidity, vyper, tùy thích!)
Các đầu vào đã biết của quy trình XÁC MINH là…
Đầu vào đã biết của quá trình PROVING giống nhau, rõ ràng…!
Giới hạn khả năng mở rộng
Mỗi giao dịch tổng hợp sử dụng 650k gas để xác minh SNARK (chi phí cố định) cộng với ~ 900 khí của chi phí cận biên mỗi giao dịch (Phải trả phí để gửi dữ liệu!). Vì vậy, sử dụng toàn bộ khối, bộ chuyển tiếp có thể tổng hợp nhiều nhất:
nghĩa là ~ 544 tx mỗi giây
barryWhiteHat's phiên bản
CÀI ĐẶT được thực hiện bởi…
Người bắt đầu dự án.
Hợp đồng thông minh tiết kiệm…
1 Merkle root với State hiện tại. Mỗi lá là trạng thái băm của một tài khoản.
Muốn tạo một tài khoản?
state = AccountState (pubkey, số dư, nonce)
state.index = self._tree.append (state.hash ())
CUNG CẤP được thực hiện bởi…
Người chuyển tiếp
Trình chuyển tiếp gửi đến hợp đồng thông minh…
- bằng chứng 𝚷
- gốc Merkle trạng thái mới
- bằng chứng 𝚷
Các đầu vào đã biết của quy trình PROVING là…
- gốc Merkle trạng thái cũ
- gốc Merkle trạng thái mới
Quy trình CUNG CẤP chứng minh rằng…
Được
- gốc Merkle cũ (đã được lưu trữ trong hợp đồng)
- gốc Merkle mới (senti trong giao dịch tổng hợp)
… Trình chuyển tiếp có một danh sách các giao dịch có chữ ký hợp lệ để chuyển từ trạng thái có gốc Cũ sang trạng thái có gốc mới
XÁC NHẬN được thực hiện bởi…
Hợp đồng thông minh (được mã hóa bằng solidity, vyper, tùy thích!)
Các đầu vào đã biết của quy trình XÁC MINH là…
Đầu vào đã biết của quá trình PROVING giống nhau, rõ ràng…!
Giới hạn khả năng mở rộng
Trình chuyển tiếp không gửi dữ liệu của giao dịch tới hợp đồng thông minh (điều này gây tốn kém), vì vậy giới hạn thực sự là lượng khí để xác minh bằng chứng SNARK.
Đề cập đến Howard Wu's công việc về việc chạy giai đoạn CUNG CẤP của SNARK trên các hệ thống phân tán, barryWhiteHat lạc quan cho biết có thể xác nhận 16666 giao dịch trong SNARK khổng lồ (1 tỷ ràng buộc!).
barryWhiteHat cũng Nghĩ có thể xác minh bằng chứng 𝚷 trên dây chuyền với 500k khí, có nghĩa là bạn có thể đặt 16 SNARK (8 triệu / 500k) cho mỗi khối, ~ 1.07 SNARK mỗi giây… có nghĩa là ~ 17,832 tx mỗi giây (16,666 * 1.07).
Đến vô cùng và xa hơn
- Tất cả những gì lấp lánh không phải là vàng / 1. Lượng sức mạnh tính toán và bộ nhớ mà bạn cần trong giai đoạn Chứng minh có thể gây sốc theo đúng nghĩa đen. Đặc biệt là trong phiên bản của barryWhiteHat, nơi một phần của sự phức tạp được chuyển ra khỏi chuỗi. barry viết "Trên một máy tính xách tay có 7 GB ram và 20 GB không gian hoán đổi, nó phải vật lộn để tổng hợp 20 giao dịch mỗi giây". Chà, nếu mục tiêu là 17,832 tx mỗi giây… LOL. Điều này đưa ra những thách thức tính toán song song không tầm thường. Nhưng nếu chi phí đô la trung bình cho mỗi giao dịch rẻ hơn nhiều so với tùy chọn không có SNARK thông thường… thì trò chơi đáng giá.
- Tất cả những gì lấp lánh không phải là vàng / 2. Có một vấn đề liên quan đến tính khả dụng của dữ liệu! Vì chỉ có gốc của cây được lưu trong hợp đồng, bạn phải đảm bảo rằng toàn bộ phiên bản của cây (hoặc, toàn bộ lịch sử giao dịch) luôn có sẵn. Nếu dữ liệu không có sẵn, người chuyển tiếp, ngay cả với các giao dịch đã ký hợp lệ, không thể làm gì cả vì họ không thể chứng minh Trạng thái cũ → Giao dịch → Trạng thái mới.
- Để người chuyển tiếp không đáng tin cậy và các Ethers trong hợp đồng có cùng giá trị với Ethers bên ngoài (vấn đề thanh khoản)… người dùng có thể rút tiền từ hợp đồng thông minh khi họ muốn mà không cần phụ thuộc vào người chuyển tiếp (cụ thể). Làm sao? Điều này không thuộc phạm vi của bài đăng 101 này, nhưng bạn có thể đọc về điều này trong các liên kết kèm theo.
- Bạn muốn hiểu thêm về cách Trạng thái hiện tại (địa chỉ, số dư và số không) có thể được xử lý với cây Merkle? Thêm một lá, cập nhật một lá, v.v.? Thủ tục thanh toán thư viện này (tệp thử nghiệm tại đây) sử dụng cơ bản này mô-đun. Cảm ơn HarryR!
- Bạn muốn thiết lập môi trường Ethereum-SNARKs cá nhân của mình? Hãy bắt đầu off-chain với C ++ (Thiết lập, Chứng minh, Xác minh) tại đây. Sau đó, bạn có thể chuyển sang Ethereum (đừng quên, chỉ Xác minh được thực hiện trên chuỗi!) Với Zokrates (repo, Các tài liệu để bắt đầu).
- Làm thế nào về việc sử dụng bộ tích lũy RSA thay vì cây Merkle? Google “Rsa tích lũy ethereum” để bắt đầu…
Chúc các bạn luôn vui vẻ!
Twitter @marco_derossi
- 7
- Tài khoản
- Tất cả
- trong số
- sẵn có
- Khái niệm cơ bản
- Tỷ
- trường hợp
- thay đổi
- Séc
- coinbase
- máy tính
- Sự đồng thuận
- hợp đồng
- Chi phí
- Current
- Tình trạng hiện tại
- DApps
- dữ liệu
- tập dữ liệu
- Phân cấp
- kích thước
- Sổ cái phân phối
- công nghệ sổ kế toán phân phối
- Môi trường
- Ether
- ethereum
- EU
- EV
- giả mạo
- Cuối cùng
- Tên
- Miễn phí
- chức năng
- trò chơi
- GAS
- GitHub
- Cho
- Gói Vàng
- tốt
- tuyệt vời
- hướng dẫn
- băm
- tại đây
- Cao
- lịch sử
- Độ đáng tin của
- hr
- HTTPS
- lớn
- Hàng trăm
- ia
- chỉ số
- thông tin
- IP
- IT
- Việc làm
- Key
- máy tính xách tay
- lớn
- dẫn
- Ledger
- Cấp
- LG
- Thư viện
- Thanh khoản
- Danh sách
- Mainstream
- Maps
- trung bình
- triệu
- Thợ mỏ
- tiền
- tháng
- Phổ biến nhất
- di chuyển
- tên
- mạng
- các nút
- số
- Hoạt động
- gọi món
- Nền tảng khác
- chủ sở hữu
- Trả
- người
- máy nghe nhạc
- Phổ biến
- quyền lực
- riêng
- Key Private
- chương trình
- dự án
- bằng chứng
- chứng minh
- công khai
- chính công
- tóm tắt
- rsa
- quy tắc
- chạy
- an toàn
- tiết kiệm
- khả năng mở rộng
- Quy mô
- mở rộng quy mô
- Khoa học
- an ninh
- định
- Chia sẻ
- chia sẻ
- ngắn
- Đơn giản
- Kích thước máy
- ngủ
- thông minh
- hợp đồng thông minh
- điện thoại thông minh
- So
- Phần mềm
- sự vững chắc
- Giải pháp
- động SOLVE
- Không gian
- Chi
- Bắt đầu
- bắt đầu
- Tiểu bang
- Bang
- thành công
- hệ thống
- hệ thống
- Công nghệ
- thử nghiệm
- thời gian
- Tokens
- hàng đầu
- torrent
- giao dịch
- Giao dịch
- NIỀM TIN
- Cập nhật
- Người sử dụng
- giá trị
- Xác minh
- thị thực
- W
- CHÚNG TÔI LÀ
- từ
- Công việc
- công trinh
- giá trị
- X