Bài viết này đến từ: Chain Catcher, Tác giả: Vitalik Buterin, Trình biên dịch: Alyson, được chuyển tiếp với sự cho phép
Bạn có thể đẩy khả năng mở rộng chuỗi khối đến mức nào? Như Musk hy vọng, liệu bạn có thể thực sự đạt được "giảm thời gian xác nhận khối xuống 10 lần, tăng kích thước khối lên 10 lần và giảm phí giao dịch xuống 100 lần" mà không gây ra sự tập trung cực đoan và gây hại cho người dùng? Nếu không, bạn có thể đi bao xa? Nếu bạn 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?
tiêu đề cấp đầu tiên
01 Các nút cần được phân tán đầy đủ
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 đối tác ở bên kia thế giới, người đang giúp bạn quản lý nhóm khai thác (hoặc có thể là nhóm đặt cược). Bắt đầu từ khoảng 14 phút trước, đối tác của bạn đã nói với bạn rằng nhóm khai thác của bạn và một số nhóm khác đã tách ra khỏi chuỗi khối vẫn lưu trữ 79% mạng. Theo nút của bạn, các khối của chuỗi đa số không hợp lệ. Đây là 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 đang trò chuyện trên Telegram với hai nhóm khai thác nhỏ khác. Cuối cùng, bạn sẽ thấy ai đó dán một liên kết vào một tweet có thông báo đã đăng. Dòng tweet bắt đầu bằng “Thông báo về quỹ phát triển giao thức bền vững trên chuỗi mới.”
Đến sáng, các cuộc tranh luận ở khắp mọi nơi trên Twitter và các diễn đàn cộng đồng. Nhưng sau đó, một phần đáng kể trong số 4,5 triệu mã thông báo đó đã được chuyển đổi trên chuỗi thành các tài sản khác và hàng tỷ đô la trong các giao dịch DeFi đã diễn ra. 79% các nút đồng thuận, cũng như tất cả các trình khám phá chuỗi khối lớn và các nút ví nhẹ tuân theo chuỗi mới này. Có thể một quỹ nhà phát triển mới sẽ tài trợ cho một số phát triển hoặc có thể tất cả chúng đều bị nuốt chửng bởi các sàn giao dịch hàng đầu. 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ả.
Đ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 có thể được phối hợp tốt, bao gồm các nhóm khai thác, trình khám phá khối và các nút giám sát. Họ có khả năng là tất cả trên cùng một kênh 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. Cách chắc chắn duy nhất để vô hiệu hóa cuộc tấn công xã hội phối hợp này là thông qua phòng thủ thụ động và nhóm đó được phân tán một cách hiệu quả: người dùng.
Hãy tưởng tượng câu chuyện sẽ diễn ra như thế nào nếu người dùng đang chạy các nút xác thực chuỗi khối và sau đó tự động từ chối các khối vi phạm quy tắc giao thức (ngay cả khi hơn 90% thợ mỏ hoặc các bên liên quan ủng hộ điều đó). Nếu mọi người dùng chạy một nút xác thực, thì cuộc tấn công sẽ thất bại nhanh chóng: một số nhóm khai thác và sàn giao dịch sẽ rẽ nhánh trong quá trình này, điều này có vẻ khá ngu ngốc.
Mô tả hình ảnh
Tweet của đối tác nghiên cứu mô hình Hasu
tiêu đề cấp đầu tiên
02 Đâu là những hạn chế của công việc nút?
Để tối đa hóa số lượng người dùng có thể chạy một nút, chúng tôi đang tập trung vào phần cứng tiêu dùng thông thường. Có ba hạn chế chính đối với khả năng xử lý một số lượng lớn giao dịch của một nút đầy đủ:
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?
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, nó phải được đọc nhanh như thế nào? (tức là có thể sử dụng ổ cứng hay chúng ta cần ổ SSD?)
tiêu đề phụ
1) Sức mạnh tính toán
Câu trả lời sai: 100% sức mạnh của CPU có thể được sử dụng để xác thực khối.
Câu trả lời đúng: Khoảng 5-10% sức mạnh CPU có sẵn để xác thực khối.
Có bốn lý do chính khiến tỷ lệ giới hạn quá thấp:
Chúng tôi cần một giới hạn an toàn để che đậy khả năng xảy ra 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 khố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ể bắt kịp sau vài giây;
Việc chạy một nút không nên làm hao pin rất nhanh, 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 về "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ì rủi ro 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 chỉ sử dụng Proof of Stake). Nhưng những bản sửa lỗi đó không khắc phục được bốn bản còn lại, vì vậy chúng không mang lại lợi ích lớn về khả năng mở rộng mà nhiều người ban đầu nghĩ rằng chúng sẽ mang lại.
tiêu đề phụ
2) Băng thông
TRẢ LỜI SAI: Nếu chúng tôi có 10 MB khối 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 tất nhiên họ có thể xử lý được.
Câu trả lời đúng: Có lẽ chúng tôi có thể xử lý khối 1-5 MB cứ sau 12 giây, mặc dù khó.
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 số liệu băng thông được quảng cáo và băng thông 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 được quảng cáo;
Giống như tất cả các công ty, các nhà cung cấp internet thường nói dối;
Luôn có nhiều ứng dụng sử dụng cùng một kết nối internet, vì vậy các nút không thể sử dụng toàn bộ băng thông;
Mạng p2p chắc chắn mang lại chi phí riêng: các nút sẽ thường tải xuống và tải 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).
Khi Starkware thử nghiệm vào năm 2019, họ đã phát hành các khối 500 kb lần đầu tiên, vì việc giảm chi phí khí giao dịch lần đầu tiên giúp điều này trở nên khả thi, một số nút thực sự không thể xử lý các khối có kích thước đó.
tiêu đề phụ
3) Lưu trữ
Câu trả lời sai: 10TB.
Câu trả lời đúng: 512G.
Như bạn có thể đoán, lập luận chính ở đây cũng giống như ở những nơi khác: sự khác biệt giữa lý thuyết và thực hành. Về lý thuyết, bạn có thể mua ổ SSD 8 TB trên Amazon. Máy tính xách tay được sử dụng để viết bài đăng trên blog này thực sự có 512 GB và nếu bạn bắt mọi người mua phần cứng của riêng họ, nhiều người trong số họ sẽ lười biếng (hoặc họ không đủ khả năng mua một ổ SSD 8TB trị giá 800 đô la), thay vào đó, hãy sử dụng một nhà cung cấp tập trung.
Ngoài ra, ngay cả khi bạn có thể thiết lập và chạy các nút khối trên một số đĩa lưu trữ, mức độ hoạt động cao có thể dễ dàng đốt cháy các đĩa này một cách nhanh chóng, buộc bạn phải tiếp tục mua các đĩa mới.
tiêu đề cấp đầu tiên
03 Rủi ro của chuỗi khối phân mảnh
Ngày nay, việc chạy một nút trên chuỗi khối Ethereum đã trở thành một thách thức đối với nhiều người dùng. Vì vậy, chúng tôi gặp phải một 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 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ó có thể dẫn đến tăng giới hạn gas đáng kể. 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. Hết hạn trạng thái sẽ xóa trạng thái không được truy cập gần đây, buộc người dùng phải cung cấp bằng chứng gia hạn theo cách thủ công.
Cả hai đường dẫn đã được sử dụng trong một thời gian dài và việc triển khai chứng minh khái niệm về tình trạng không quốc tịch đã bắt đầu. Kết hợp lại, hai cải tiến này có thể làm giảm đáng kể những lo ngại này và mở ra khả năng tăng đáng kể giới hạn gas. Tuy nhiên, ngay cả sau khi thực hiện trạng thái không trạng thái và hết hạn trạng thái, giới hạn gas chỉ có thể tăng một cách an toàn theo hệ số khoảng 3 cho đến khi các giới hạn khác bắt đầu chiếm ưu thế.
Sharding về cơ bản bỏ qua những hạn chế đã nói ở trên, vì nó tách dữ liệu chứa trên chuỗi khối khỏi những nút riêng lẻ cần xử lý và lưu trữ. Họ sử dụng các kỹ thuật toán học và mật mã tiên tiến để xác minh các khối một cách gián tiếp, thay vì các nút xác minh các khối bằng cách tự tải xuống và thực thi chúng.
Do đó, các chuỗi khối được chia nhỏ có thể có một mức thông lượng giao dịch một cách an toàn mà các chuỗi khối không được chia nhỏ không thể có được. Cần rất nhiều sự khéo léo về mật mã để tạo ra xác minh đầy đủ hiệu quả và đơn giản để từ chối 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 tốt và bằng chứng về khái niệm dựa trên thông số kỹ thuật dự thảo đã được tiến hành.
Ethereum đang có kế hoạch sử dụng phân đoạn bậc hai, do đó, khả năng mở rộng tổng thể bị hạn chế vì 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ố lượng công việc quản trị nhất định cho mỗi phân đoạn). Nếu các phân đoạn quá lớn, các nút không thể xử lý một phân đoạn duy nhất nữa và nếu có quá nhiều phân đoạn, các 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 cận trên.
Có thể tiến xa hơn bằng cách thực hiện phân mảnh khối hoặc thậm chí phân mảnh theo cấp số nhân. Trong một thiết kế như vậy, việc lấy mẫu tính khả dụng của dữ liệu chắc chắn sẽ trở nên phức tạp hơn nhiều, nhưng vẫn có thể thực hiện được. Tuy nhiên, Ethereum sẽ không đi xa hơn đường cong bậc hai. Lý do là việc bảo vệ giao dịch không thể thực sự đạt được lợi ích bổ sung về khả năng mở rộng trừ khi các cổ phần khác trở nên rất cao.
Vậy những rủi ro này là gì?
1) 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 mảnh có thể hoạt động miễn là 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 một nút đơn lẻ nào có thể xử lý toàn bộ chuỗi khối một mình, vì vậy cần có đủ các nút để xử lý nó cùng nhau. Nếu mỗi nút có thể xử lý 50 TPS và chuỗi khối cần xử lý 10.000 TPS, thì cần ít nhất 200 nút trên chuỗi để chạy.
Nếu chuỗi khối có ít hơn 200 nút tại bất kỳ thời điểm nào, thì các nút đó không thể theo kịp chuỗi khối, các nút không thể phát hiện các khối không hợp lệ hoặc bất kỳ điều tồi tệ nào khác có thể xảy ra, tùy thuộc vào cách nút mà phần mềm được cài đặ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 nút tối thiểu cũng sẽ tăng lên gấp 10 lần. Vì vậy, bạn có thể hỏi: tại sao chúng ta không bắt đầu với dung lượng ít, tăng dung lượng khi thấy lượng người dùng lớn và giảm dung lượng nếu lượng người dùng giảm? Vì vậy, chúng ta có thể nắm giữ những phần thực sự cần nó.
Dưới đây là một số câu hỏi:
Bản thân chuỗi khối không thể phát hiện chính xác có bao nhiêu nút duy nhất, vì vậy điều này sẽ yêu cầu một số loại quản trị để phát hiện và đặt số lượng phân đoạn. Vượt quá giới hạn dung lượng có thể dễ dàng trở thành nguồn gốc của sự phân mảnh và xung đột.
Điều gì sẽ xảy ra nếu nhiều người dùng đăng xuất đột ngột và bất ngờ?
Việc tăng số lượng nút tối thiểu cần thiết để khởi chạy một nhánh rẽ sẽ khiến việc chống lại các cuộc tiếp quản thù địch trở nên khó khăn hơn.
Số lượng nút tối thiểu gần như chắc chắn không quá 1000. Do đó, có vẻ khó để biện minh cho một chuỗi khối có hơn vài trăm phân đoạn.
2) 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 công ty phá sản hoặc mất khả năng duy trì hệ sinh thái, tài sản kỹ thuật số được lưu trữ trên máy chủ sẽ bị xóa sau 10 năm. Mặt khác, NFT trên Ethereum là vĩnh viễn.
Có, mọi người sẽ vẫn tải xuống và truy xuất CryptoKitties của bạn vào năm 2371.
Nhưng một khi dung lượng chuỗi khối quá cao, việc lưu trữ tất cả dữ liệu này sẽ trở nên khó khăn hơn. Nếu một lúc nào đó gặp rủi ro lớn, có những phần lịch sử không ai cất giữ.
Đị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/s) làm đơn vị, nhân với 30 để có đượ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 dễ dàng ở đó, chúng tôi cũng cần siêu dữ liệu (ví dụ: giải nén những thứ tổng hợp), do đó, 4 PB mỗi năm hoặc 40 PB sau 10 năm. Đây là giới hạn trên hợp lý mà hầu hết các chuỗi khối phân đoạn có thể đạt được một cách an toàn.
tiêu đề cấp đầu tiên
04 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ỉ cần thêm 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 làm phép tính 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 mà không cần ZK-SNARK, cuộn lên hoặc phân đoạn. Thật không may, cách tiếp cận này về cơ bản là thiếu sót, vì nhiều lý do tế nhị.
Các máy tính chạy các nút chuỗi khối không thể sử dụng 100% công suất 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 tình cờ và chúng cần dung lượng dự phòng để thực hiện các giao dịch như xử lý trong mempool. Và người dùng không muốn chạy nút trên máy tính để máy tính 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 có chi phí hoạt động: kết nối 10 MB/giây không có nghĩa là bạn có thể có 10 MB khối mỗi giây, bạn có thể có tối đa 1-5 MB khối mỗi 12 giây, tương tự với dung lượng lưu trữ. Tăng cấu hình phần cứng để chạy các nút và hạn chế hoạt động của các nút đối với các tác nhân cụ thể 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 là người dùng bình thường có thể chạy các nút và có một nền văn hóa hoạt động chung để chạy các nút.
Những cải tiến kỹ thuật cơ bản chắc chắn đang hoạt động. Hiện tại, nút cổ chai chính của Ethereum là dung lượng lưu trữ, tình trạng không trạng thái và hết hạn trạng thái có thể giải quyết vấn đề này và cho phép tăng nó lên khoảng 3 lần (nhưng không quá 300 lần), vì chúng tôi muốn chạy một nút hơn hiện tại dễ dàng hơn. Chuỗi khối phân mảnh có thể mở rộng quy mô hơn nữa vì không có giao dịch nào trong chuỗi khối phân mảnh mà một nút duy nhất cần xử lý.
Nhưng ngay cả khi đó, vẫn có giới hạn về dung lượng: khi dung lượng tăng lên, số lượng nút tối thiểu cũng tăng theo và chi phí của chuỗi lưu trữ cũng vậy (và nguy cơ mất dữ liệu tăng lên nếu không có ai quản lý chuỗi lưu trữ) .
Nhưng chúng tôi không phải lo lắng quá nhiều: những giới hạn này đủ cao để chúng tôi có thể xử lý hơn một triệu giao dịch mỗi giây với chuỗi khối hoàn toàn an toàn. Nhưng sẽ mất nhiều công sức để làm điều này mà không phải hy sinh tính phi tập trung của chuỗi khối.
