Nghiên cứu mới nhất của V God: những hạn chế của khả năng mở rộng chuỗi khối, bác bỏ phương pháp mở rộng Dogecoin của Musk
Bài viết này là từ:Con đường của DeFiBài viết này là từ:
Con đường của DeFi
Con đường của DeFi
, tác giả: Vitalik Buterin, người sáng lập Ethereum, đã chuyển tiếp với sự ủy quyền.
Blockchain có thể mở rộng như thế nào? Thực sự có thể làm được như mong muốn của Elon Musk (CEO Tesla) "bằng cách giảm thời gian xử lý khối xuống 10 lần, tăng kích thước khối lên 10 lần và do đó giảm phí xử lý xuống 100 lần", mà không gây ra sự tập trung hóa cực đoan và làm hỏng khối. tính chất của chuỗi chất? Nếu không, khả năng mở rộng chuỗi khối có thể đạt được ở mức độ nào? Nếu bạn chọn mở rộng quy mô bằng cách thay đổi thuật toán đồng thuận thì sao? Quan trọng hơn, điều gì sẽ xảy ra nếu bạn thay đổi công nghệ để giới thiệu các tính năng như ZK-SNARK hoặc sharding? Về lý thuyết, một chuỗi khối phân mảnh có thể tiếp tục thêm nhiều phân đoạn hơn.Điều này có dẫn đến nhiều thứ được thêm vào không?
Nó chỉ ra rằng có một số yếu tố kỹ thuật quan trọng và khá tế nhị làm hạn chế khả năng mở rộng của các chuỗi khối, ngay cả với các chuỗi khối phân đoạn. Trong nhiều trường hợp, chúng ta sẽ có các giải pháp về khả năng mở rộng tương ứng, tuy nhiên các giải pháp này cũng có những hạn chế. Bài đăng này khám phá nhiều vấn đề với các sơ đồ khả năng mở rộng này.
Tất cả các vấn đề có thể được giải quyết bằng cách tăng các tham số. Nhưng với chi phí nào?
1 Người dùng thông thường cũng có thể chạy các nút, điều này rất quan trọng đối với việc phân cấp chuỗi khối
Vào lúc 2:35 sáng, bạn nhận được một cuộc gọi khẩn cấp từ một người bạn ở bên kia thế giới đang giúp bạn quản lý nhóm khai thác của mình (hoặc có thể là nhóm đặt cược). Đối tác của bạn đã nói với bạn rằng từ khoảng 14 phút trước, nhóm của bạn và một số nhóm khác đột nhiên tách khỏi chuỗi và chuỗi ban đầu vẫn mang 79% sức mạnh tính toán của mạng. Theo nút của bạn, các khối được tạo bởi chuỗi đa số này (chuỗi gốc) không hợp lệ. Điều này dẫn đến lỗi số dư: khối khóa dường như đã phân bổ nhầm 4,5 triệu xu bổ sung cho một địa chỉ không xác định.
Một giờ sau, bạn bắt đầu liên lạc trong một nhóm điện tín với hai nhóm khai thác khác cũng bối rối như bạn, và một số nhà khám phá và trao đổi khối. Cuối cùng, bạn thấy ai đó tweet một liên kết. “Quỹ phát triển giao thức bền vững trên chuỗi mới đã chính thức ra mắt,” dòng tweet viết.
Đến sáng, twitter, các diễn đàn cộng đồng tràn ngập những tranh luận không kiểm duyệt, các cuộc thảo luận ở khắp mọi nơi. Nhưng tại thời điểm này, một phần lớn trong số 4,5 triệu mã thông báo mới được phát hành trước đó đã được chuyển đổi thành các tài sản khác trên chuỗi và hàng tỷ đô la giao dịch DeFi đã được thực hiện. 79% các nút đồng thuận và tất cả các trình duyệt quan trọng và ví nhẹ đang tuân theo chuỗi mới này. Có thể quỹ nhà phát triển mới này sẽ tài trợ cho một số hoạt động phát triển hoặc có thể tất cả số tiền đó sẽ bị ngấu nghiến bởi các nhóm khai thác, sàn giao dịch hàng đầu, v.v. Nhưng bất kể kết quả như thế nào, quỹ này, đối với tất cả ý định và mục đích, là một việc đã rồi và những người dùng thông thường đều bất lực trong việc chống trả.
Một chương trình hay đang đến. Có thể được tài trợ bởi MolochDAO hoặc một cái gì đó.
Điều này có thể xảy ra trên blockchain của bạn không? Những người ưu tú trong cộng đồng blockchain của bạn, bao gồm nhóm khai thác, trình khám phá khối và nút giám sát, có thể được phối hợp tốt. Có khả năng tất cả họ đều thuộc cùng một nhóm Telegram và nhóm WeChat. Nếu họ thực sự muốn thực hiện những thay đổi đột ngột đối với các quy tắc giao thức để phục vụ lợi ích của chính họ, thì có lẽ họ sẽ làm. Chuỗi khối Ethereum sau khi giải quyết hoàn toàn lỗi đồng thuận trong mười giờ; nếu chuỗi khối của bạn chỉ có một triển khai ứng dụng khách và bạn chỉ cần triển khai các thay đổi mã cho vài chục nút, thì việc phối hợp thay đổi mã ứng dụng khách Tốc độ có thể nhanh hơn. Cách chắc chắn duy nhất để làm cho một cuộc tấn công xã hội phối hợp như vậy không hiệu quả là thông qua sự bảo vệ tích cực của một cộng đồng phi tập trung, hay còn gọi là người dùng.
Hãy làm rõ: khả năng chống lại các thay đổi giao thức độc hại của bạn xuất phát từ văn hóa người dùng xác thực chuỗi khối. Thay vì PoW hoặc PoS - Hasu
Điều này có thể được nhìn thấy từ những gì Hasu nói
Nếu cộng đồng của bạn bao gồm 37 người chạy nút và 80.000 người nghe thụ động kiểm tra chữ ký và chặn tiêu đề, thì kẻ tấn công sẽ thắng. Nếu mọi người trong cộng đồng của bạn đang chạy một nút, kẻ tấn công sẽ thất bại. Chúng tôi không biết ngưỡng chính xác của "miễn dịch bầy đàn" trước các cuộc tấn công phối hợp là bao nhiêu, nhưng có một điều hoàn toàn rõ ràng: nhiều nút hơn thì tốt hơn, ít nút hơn thì tệ hơn và chúng tôi chắc chắn cần nhiều hơn vài chục hoặc vài trăm .
tiêu đề cấp đầu tiên
2 Vậy, chúng ta cần bao nhiêu công việc mà các nút đầy đủ phải làm?
Để tối đa hóa số lượng người dùng có thể chạy một nút, chúng tôi sẽ tập trung vào phần cứng cấp độ người tiêu dùng thông thường. Có thể thêm một số dung lượng mạng bằng cách yêu cầu một số phần cứng chuyên dụng có sẵn (ví dụ: từ Amazon), nhưng trên thực tế, điều này không bổ sung nhiều vào khả năng mở rộng.
Có ba hạn chế chính đối với khả năng xử lý số lượng lớn giao dịch của các nút đầy đủ:
Sức mạnh tính toán: Cần bao nhiêu phần trăm năng lượng CPU để chạy một nút một cách an toàn?
Băng thông: Với thực tế của các kết nối internet hiện tại, một khối có thể chứa bao nhiêu byte?
Lưu trữ: Chúng tôi có thể yêu cầu người dùng lưu trữ bao nhiêu GB đĩa? Ngoài ra, tốc độ đọc yêu cầu nhanh như thế nào? (Có thể dùng ổ cứng cơ HDD được không? Hay bạn cần ổ cứng thể rắn?)
Phần lớn quan niệm sai lầm về việc blockchain có thể mở rộng bao xa bằng cách sử dụng công nghệ "đơn giản" bắt nguồn từ việc quá lạc quan về từng con số này. Chúng ta có thể lần lượt giới thiệu ba yếu tố này:
Tính khả năng
Lỗi: Có thể sử dụng 100% sức mạnh CPU để xác thực khối
Đúng: khoảng 5-10% sức mạnh của CPU có thể được sử dụng để xác thực khối
Có bốn lý do chính cho tỷ lệ phần trăm thấp:
Chúng ta cần một biên độ an toàn trước khả năng bị tấn công DoS (các giao dịch do kẻ tấn công thực hiện để khai thác điểm yếu của mã mất nhiều thời gian xử lý hơn các giao dịch thông thường)
Các nút cần có khả năng đồng bộ hóa chuỗi sau khi chúng ngoại tuyến. Nếu tôi ngắt kết nối mạng trong một phút, tôi sẽ có thể đồng bộ hóa lại với mạng sau vài giây
Chạy một nút không được làm hao pin quá nhanh cũng như không làm chậm tất cả các ứng dụng khác
Các nút cũng cần thực hiện các nhiệm vụ sản xuất phi khối khác, chủ yếu xoay quanh việc xác thực và phản hồi các giao dịch và yêu cầu đến trên mạng p2p.
Lưu ý rằng cho đến gần đây, hầu hết các giải thích cho "Tại sao chỉ có 5-10%?" tập trung vào một vấn đề khác: Vì các khối PoW xuất hiện ngẫu nhiên, nên thời gian xác thực một khối càng lâu thì nguy cơ tạo nhiều khối càng tăng. Có nhiều giải pháp cho vấn đề này (ví dụ: Bitcoin NG hoặc sử dụng PoS). Nhưng những bản sửa lỗi đó không khắc phục được bốn lỗi còn lại, vì vậy chúng không mang lại lợi ích mở rộng quy mô lớn như nhiều người ban đầu nghĩ rằng chúng sẽ mang lại.
Song song không phải là tất cả. Nói chung, ngay cả các ứng dụng khách chuỗi khối dường như đơn luồng cũng đã được song song hóa: chữ ký có thể được xác minh bởi một luồng trong khi việc thực thi được thực hiện bởi các luồng khác và có một logic nhóm giao dịch xử lý luồng riêng biệt trong nền. Ngoài ra, càng gần mức sử dụng 100% của tất cả các luồng thì càng tiêu tốn nhiều năng lượng để chạy nút và biên độ an toàn chống lại DoS càng thấp.
băng thông
Sai lầm: Nếu chúng tôi đang tạo các khối 10 MB cứ sau 2-3 giây, thì hầu hết người dùng có tốc độ mạng >10 MB/giây, vì vậy họ chắc chắn có thể xử lý các khối như vậy
Chính xác: có lẽ chúng tôi có thể xử lý các khối 1-5 MB cứ sau 12 giây. Nó đã khó rồi.
Ngày nay, chúng ta thường nghe quảng cáo thống kê về lượng băng thông mà một kết nối internet có thể cung cấp: người ta thường nghe thấy con số 100 Mbps hoặc thậm chí 1 Gbps. Tuy nhiên, có sự khác biệt lớn giữa băng thông được quảng cáo và băng thông dự kiến thực tế vì một số lý do:
"Mbps" có nghĩa là "hàng triệu bit mỗi giây"; một bit bằng 1/8 byte, vì vậy bạn cần chia số bit được quảng cáo cho 8 để có được số byte trong quảng cáo.
Mạng p2p chắc chắn mang lại chi phí riêng: các nút cuối cùng thường tải xuống và tải lên lại cùng một khối nhiều lần (chưa kể các giao dịch được phát qua mempool trước khi được đưa vào khối).
kho
kho
chữ
Lỗi: 10 TB
chữ
Chính xác: 512 GB
Như bạn có thể đoán, lập luận chính ở đây: sự khác biệt giữa lý thuyết và thực hành.
Một nhóm các nhà nghiên cứu giao thức chuỗi khối đã tiến hành một cuộc khảo sát về dung lượng đĩa mà mọi người có. Tôi biết kích thước mẫu là nhỏ, nhưng nó vẫn nói lên điều gì đó.
Ngoài ra, kích thước lưu trữ xác định thời gian cần thiết để các nút mới có thể trực tuyến và bắt đầu tham gia vào mạng. Mọi dữ liệu mà các nút hiện có phải lưu trữ là dữ liệu mà các nút mới phải tải xuống. Thời gian đồng bộ hóa ban đầu (và băng thông) cũng là một trở ngại lớn đối với người dùng đang chạy một nút. Tôi mất khoảng 15 giờ để đồng bộ hóa một nút geth mới tại thời điểm viết bài đăng trên blog này.
Nếu mức sử dụng Ethereum tăng gấp 10 lần, thì sẽ mất ít nhất một tuần để đồng bộ hóa nút geth mới, điều này rất có thể sẽ khiến kết nối mạng của bạn bị điều chỉnh. Điều này đặc biệt quan trọng trong một cuộc tấn công khi phản ứng thành công đối với cuộc tấn công liên quan đến những người dùng mới chưa bao giờ chạy một nút trước đó.
tiêu đề cấp đầu tiên
Hơn nữa, có một sự tương tác giữa ba chi phí này. Vì cơ sở dữ liệu bên trong sử dụng cấu trúc cây để lưu trữ và truy xuất dữ liệu, nên chi phí tìm nạp dữ liệu từ cơ sở dữ liệu tăng logarit theo kích thước của cơ sở dữ liệu. Trên thực tế, vì lớp trên cùng (hoặc một số lớp trên cùng) có thể được lưu vào bộ nhớ cache trong RAM nên chi phí truy cập đĩa tỷ lệ thuận với kích thước của cơ sở dữ liệu, bội số của kích thước dữ liệu được lưu trong bộ nhớ cache trong RAM.
Đừng lấy biểu đồ này theo nghĩa đen. Các cơ sở dữ liệu khác nhau hoạt động khác nhau và phần trong bộ nhớ thường chỉ là một cấp độ duy nhất (nhưng lớn) (xem cây LSM được sử dụng trong leveldb). Nhưng nguyên tắc cơ bản là như nhau.
Ví dụ: nếu bộ đệm là 4 GB và chúng tôi giả định rằng mỗi lớp của cơ sở dữ liệu lớn hơn 4 lần so với lớp trước đó, thì trạng thái hiện tại của Ethereum là ~64 GB sẽ yêu cầu ~2 lần truy cập. Tuy nhiên, nếu kích thước trạng thái tăng gấp 4 lần lên ~256 GB, thì kích thước này sẽ tăng lên ~3 lần truy cập. Vì vậy, giới hạn gas tăng gấp 4 lần thực sự có thể chuyển thành thời gian xác thực khối tăng ~6 lần. Hiệu ứng có thể mạnh hơn: đọc và ghi thường mất nhiều thời gian hơn khi ổ đĩa đầy so với khi ổ đĩa gần đầy.
4 Vậy điều này có ý nghĩa gì đối với Ethereum?
Ngày nay, trong chuỗi khối Ethereum, việc chạy một nút đã trở thành một thách thức đối với nhiều người dùng, mặc dù vẫn có thể thực hiện được trên phần cứng thông thường (tôi vừa đồng bộ hóa một nút trên máy tính xách tay của mình khi viết bài này!). Vì vậy, chúng tôi đang tiếp cận nút cổ chai. Mối quan tâm lớn nhất của các nhà phát triển cốt lõi là kích thước lưu trữ. Vì vậy, hiện tại, những nỗ lực to lớn để giải quyết tắc nghẽn dữ liệu và tính toán, hoặc thậm chí thay đổi thuật toán đồng thuận, không có khả năng dẫn đến sự gia tăng lớn trong giới hạn gas được chấp nhận. Ngay cả việc giải quyết lỗ hổng DoS nổi bật nhất của Ethereum cũng sẽ chỉ tăng giới hạn gas lên 20%.
Giải pháp duy nhất cho vấn đề kích thước bộ nhớ là trạng thái không trạng thái và trạng thái hết hạn. Tính không trạng thái cho phép một lớp các nút xác thực chuỗi khối mà không cần duy trì bộ nhớ vĩnh viễn. Trạng thái hết hạn giải phóng các trạng thái không được truy cập gần đây, yêu cầu người dùng cung cấp thủ công bằng chứng về việc tiếp tục duy trì các trạng thái này. Cả hai con đường đã được sử dụng trong một thời gian dài và việc triển khai bằng chứng khái niệm về tình trạng không trạng thái cũng đã bắt đầu. Kết hợp lại, hai cải tiến này sẽ làm giảm đáng kể những lo ngại này và mở ra cơ hội cho giới hạn khí đốt cao hơn đáng kể. Tuy nhiên, ngay cả sau khi trạng thái không trạng thái và hết hạn trạng thái được triển khai, giới hạn gas chỉ có thể được tăng lên một cách an toàn theo hệ số khoảng 3 trước khi các giới hạn khác bắt đầu chiếm ưu thế trở lại.
tiêu đề cấp đầu tiên
5 Điều gì xảy ra sau khi sharding?
Do đó, các chuỗi khối phân đoạn có thể có thông lượng giao dịch rất cao một cách an toàn mà các chuỗi khối không phân đoạn không thể có được. Thực sự sẽ cần rất nhiều sự khéo léo về mật mã để tạo ra một sự thay thế hợp lệ được xác minh đầy đủ để loại bỏ thành công các khối không hợp lệ, nhưng có thể thực hiện được: lý thuyết được thiết lập và bằng chứng về khái niệm dựa trên thông số dự thảo đang được thực hiện trên .
Ethereum đang có kế hoạch sử dụng phân đoạn bậc hai và khả năng mở rộng tổng thể của nó bị hạn chế bởi thực tế là các nút phải có khả năng xử lý các phân đoạn riêng lẻ và chuỗi đèn hiệu phải thực hiện một số công việc quản trị cho từng phân đoạn. Nếu các phân đoạn quá lớn, nút không thể xử lý một phân đoạn duy nhất nữa; nếu có quá nhiều phân đoạn, nút không thể xử lý chuỗi đèn hiệu được nữa. Tích của hai ràng buộc này tạo thành một loại cận trên.
Có thể hình dung rằng chúng ta có thể tiến xa hơn bằng cách phân mảnh ba lần hoặc thậm chí theo cấp số nhân. Lấy mẫu tính khả dụng của dữ liệu chắc chắn sẽ phức tạp hơn trong thiết kế này, nhưng có thể thực hiện được. Nhưng Ethereum sẽ không chấp nhận phân đoạn cao hơn phân đoạn thứ cấp. Lý do là việc phân tách các phân đoạn từ các phân đoạn giao dịch trên thực tế không thể đạt được mức tăng khả năng mở rộng bổ sung trừ khi các rủi ro khác bắt đầu trở nên cao không thể chấp nhận được.
tiêu đề cấp đầu tiên
6 Vậy những rủi ro này là gì?
Số lượng người dùng tối thiểu
Có thể hình dung rằng một chuỗi khối không phân đoạn có thể hoạt động ngay cả khi chỉ có một người dùng sẵn sàng tham gia. Đây không phải là trường hợp với các chuỗi khối phân mảnh: không nút đơn lẻ nào có thể xử lý toàn bộ chuỗi, vì vậy bạn cần có đủ nút để ít nhất chúng có thể xử lý chuỗi khối cùng nhau. Nếu mỗi nút có thể xử lý 50 TPS và toàn bộ chuỗi có thể xử lý 10000 TPS, thì chuỗi cần ít nhất 200 nút để tồn tại. Nếu tại một thời điểm nào đó, chuỗi có ít hơn 200 nút, thì các nút không thể theo kịp chuỗi nữa hoặc các nút ngừng phát hiện các khối không hợp lệ hoặc những điều tồi tệ khác có thể xảy ra, tùy thuộc vào cách phần mềm nút được thiết lập.
Trong thực tế, do nhu cầu dự phòng (bao gồm cả lấy mẫu tính khả dụng của dữ liệu), số lượng nút tối thiểu an toàn cao hơn nhiều lần so với chỉ đơn giản là "TPS chuỗi chia cho TPS nút"; ví dụ ở trên, giả sử 1000 nút.
Nếu dung lượng của một chuỗi khối được phân mảnh tăng lên gấp 10 lần, thì số lượng người dùng tối thiểu cũng sẽ tăng lên gấp 10 lần. Bây giờ, bạn có thể hỏi: tại sao chúng ta không bắt đầu với dung lượng nhỏ, tăng dung lượng khi thấy nhiều người dùng và giảm dung lượng khi số lượng người dùng giảm?
Thực sự có một số vấn đề ở đây:
Điều gì sẽ xảy ra nếu nhiều người dùng bỏ cuộc đột ngột và bất ngờ?
Tăng số lượng người dùng tối thiểu cần thiết để bắt đầu phân nhánh, khiến việc tiếp quản độc hại trở nên khó khăn hơn.
Số lượng người dùng tối thiểu là 1.000, gần như chắc chắn là được. Mặt khác, số lượng người dùng tối thiểu được đặt ở mức 1 triệu, điều này chắc chắn là không thể chấp nhận được. Ngay cả việc đặt số lượng người dùng tối thiểu là 10.000 cũng có một chút rủi ro. Do đó, có vẻ như khó có thể biện minh cho việc có một chuỗi khối phân đoạn với hơn vài trăm phân đoạn.
tiêu đề cấp đầu tiên
7 Khả năng truy xuất lịch sử
Một thuộc tính quan trọng của chuỗi khối mà người dùng thực sự đánh giá cao là tính lâu dài. Khi một công ty phá sản hoặc không còn quan tâm đến việc duy trì hệ sinh thái, tài sản kỹ thuật số được lưu trữ trên máy chủ sẽ không còn tồn tại trong vòng 10 năm. Mặt khác, NFT trên Ethereum là vĩnh viễn.
Định lượng rủi ro này là dễ dàng. Lấy dung lượng dữ liệu của chuỗi khối (MB/giây), nhân với ~30 để có lượng dữ liệu được lưu trữ tính bằng TB mỗi năm. Gói sharding hiện tại có dung lượng dữ liệu khoảng 1,3 MB/giây, tức là khoảng 40 TB/năm. Nếu bạn tăng con số đó lên 10 lần, nó sẽ trở thành 400 TB/năm. Nếu chúng tôi muốn dữ liệu không chỉ có thể truy cập được mà còn có thể truy cập dễ dàng, thì chúng tôi cũng cần siêu dữ liệu (ví dụ: giải nén các giao dịch tổng hợp), do đó, đó là 4 PB mỗi năm hoặc 40 PB trong mười năm. Internet Archive chỉ sử dụng 50 PB. Do đó, đây là giới hạn trên hợp lý cho tính bảo mật của chuỗi khối được phân mảnh.
tóm tắt
Vì vậy, có vẻ như thiết kế bảo vệ Ethereum thực sự đã nhắm đến các giá trị bảo mật tối đa khá hợp lý ở cả hai chiều. Hằng số có thể được tăng lên một chút, nhưng không quá nhiều.
tiêu đề cấp đầu tiên
tóm tắt
Có hai cách tiếp cận để cố gắng mở rộng quy mô chuỗi khối: cải tiến kỹ thuật cơ bản và chỉ đơn giản là tăng các tham số. Đầu tiên, việc tăng các tham số nghe có vẻ hấp dẫn: nếu bạn đang làm toán trên khăn ăn, bạn sẽ dễ dàng thuyết phục bản thân rằng máy tính xách tay ở nhà của bạn có thể xử lý hàng nghìn giao dịch mỗi giây, không cần ZK-SNARK, cuộn lên hoặc phân đoạn . Thật không may, có nhiều lý do tế nhị giải thích tại sao cách tiếp cận này về cơ bản là thiếu sót.
Các máy tính chạy các nút chuỗi khối không thể sử dụng 100% sức mạnh CPU của chúng để xác thực chuỗi khối; chúng cần một biên độ an toàn lớn trước các cuộc tấn công DoS bất ngờ và chúng cần dung lượng dự phòng để thực hiện những việc như xử lý giao dịch trong các tác vụ mempool và bạn không muốn để chạy nút trên máy sao cho máy không thể được sử dụng cho bất kỳ ứng dụng nào khác cùng một lúc. Băng thông cũng bị đe dọa: kết nối 10 MB/giây không có nghĩa là bạn có thể có khối 10 MB mỗi giây! Có thể 1-5 MB khối cứ sau 12 giây. Điều này cũng giống như lưu trữ. Việc tăng các yêu cầu phần cứng để chạy một nút và hạn chế hoạt động của nút đối với các tác nhân chuyên dụng không phải là một giải pháp. Đối với một chuỗi khối phi tập trung, điều quan trọng đối với người dùng bình thường là có thể chạy một nút và phát triển văn hóa rằng việc chạy một nút là một hoạt động bình thường.


