Bạn có thể tăng khả năng mở rộng của một blockchain đi bao xa? Bạn thực sự có thể như Elon Musk mong muốn, "tăng tốc block time lên 10X, tăng kích thước khối lên 10X và giảm phí 100X" mà không dẫn đến tập trung cực độ và làm ảnh hưởng đến các thuộc tính cơ bản tạo nên một chuỗi khối không? Nếu không, bạn có thể đi bao xa? Điều gì sẽ xảy ra nếu bạn thay đổi thuật toán đồng thuận? 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-SNARKs hoặc sharding? Về mặt lý thuyết, một blockchain phân đoạn có thể tiếp tục thêm nhiều phân đoạn hơn; nhưng quá nhiều phân đoạn có thật sự tốt?
Ideally, Doge speeds up block time 10X, increases block size 10X & drops fee 100X. Then it wins hands down.
— Elon Musk (@elonmusk) May 16, 2021
Hóa ra, có những yếu tố kỹ thuật quan trọng hạn chế việc mở rộng quy mô blockchain, cả với việc dùng sharding và không dùng sharding. Trong nhiều trường hợp đã có giải pháp, nhưng ngay cả với các giải pháp cũng có giới hạn. Bài viết này sẽ đi qua nhiều vấn đề trong số những giải pháp này là gì.
Điều quan trọng là phân cấp blockchain để người dùng thông thường có thể chạy được một "node"
Vào lúc 2:35 sáng, bạn nhận được một cuộc gọi khẩn cấp từ đối tác của bạn ở bên kia bán cầu, người mà giúp vận hành mỏ đào của bạn (hoặc đó có thể là staking pool). Đối tác của bạn cho bạn biết, pool của bạn và một số pool khác tách ra khỏi chuỗi. Theo node của bạn, phần lớn các khối của chuỗi không hợp lệ. Đã xảy ra lỗi số dư: khối chính dường như chi sai 4.5 triệu coin cho một địa chỉ ví không xác định.
Một giờ sau, bạn đang trò chuyện qua Telegram với hai pool nhỏ khác, những người đã gặp lỗi giống như bạn. Cuối cùng bạn cũng thấy ai đó chia sẻ một link đến một tweet với nội dung: "Công bố quỹ phát triển giao thức bền vững on-chain mới".
Các cuộc tranh luận trên Twitter và trên một diễn đàn không kiểm duyệt nội dung, các cuộc thảo luận ở khắp mọi nơi. Nhưng sau đó, một phần lớn trong số 4.5 triệu coin đã được chuyển đổi trực tiếp thành các tài sản khác và hàng tỷ đô la giao dịch defi đã diễn ra. 79% các nút đồng thuận và tất cả các trình khám phá khối chính đã đi theo block bị hack này. Có lẽ quỹ dành cho nhà phát triển mới sẽ tài trợ cho một số sự phát triển, hoặc có lẽ tất cả sẽ bị biển thủ bởi các nhóm và sàn giao dịch hàng đầu và những người bạn của họ. Nhưng bất kể nó diễn ra như thế nào, quỹ dành cho tất cả các ý định và mục đích đều là kẻ phạm tội và những người dùng thông thường không có cách nào để chống lại.

Điều này có thể xảy ra trên blockchain của bạn không? Các thành phần ưu tú của cộng đồng blockchain của bạn, bao gồm các pool, trình khám phá khối và các node được lưu trữ, có thể được phối hợp khá tốt; rất có thể tất cả chúng đều ở cùng các kênh Telegram và nhóm Wechat. Nếu họ thực sự muốn tổ chức một sự thay đổi đột ngột đối với các quy tắc giao thức để nâng cao lợi ích của họ, thì họ có thể làm được. Ethereum đã giải quyết hoàn toàn các lỗi đồng thuận trong mười giờ; nếu blockchain của bạn chỉ có một Dapp và bạn chỉ cần triển khai thay đổi code cho một vài chục node, việc điều phối thay đổi đối với code của Dapp có thể được thực hiện nhanh hơn nhiều. Cách đáng tin cậy duy nhất để làm cho loại hack phối hợp này không hiệu quả là thông qua việc bảo vệ mạng lưới từ một nhóm thật sự phi tập trung đó là 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 node xác minh chuỗi (cho dù trực tiếp hay thông qua các kỹ thuật gián tiếp nâng cao hơn) và tự động từ chối các khối vi phạm quy tắc giao thức ngay cả khi hơn 90% người khai thác hoặc người lập trình ủng hộ các khối vi phạm đó. Nếu mọi người dùng chạy một node xác minh, thì cuộc tấn công sẽ nhanh chóng thất bại: một số pool khai thác và sàn giao dịch sẽ bị tách ra và trông khá ngu ngốc trong quá trình này.
Nhưng ngay cả khi một số người dùng chạy các node xác minh, cuộc tấn công sẽ không dẫn đến chiến thắng rõ ràng cho kẻ tấn công; đúng hơn, nó sẽ dẫn đến hỗn loạn, với những người dùng khác nhau nhìn thấy các quan điểm khác nhau về chuỗi. Ít nhất, sự hoảng loạn của thị trường sau đó và có khả năng bị chia cắt chuỗi dai dẳng sẽ làm giảm đáng kể lợi nhuận của những kẻ tấn công. Ý nghĩ về việc điều hướng một cuộc xung đột kéo dài như vậy tự nó sẽ ngăn chặn hầu hết các cuộc tấn công.
Let‘s make one thing clear:
— Hasu (@hasufl) March 30, 2021
You defend against malicious protocol changes by having a culture of users validating the blockchain
Not by having PoW or PoS
Nếu bạn có một cộng đồng gồm 37 người chạy node và 80000 người kiểm tra chữ ký và tiêu đề khối, kẻ tấn công sẽ thắng. Nếu bạn có một cộng đồng nơi mọi người điều hành một node, kẻ tấn công sẽ thua. Chúng tôi không biết ngưỡng chính xác mà khả năng chiến thắng trước các cuộc tấn công phối hợp bắt đầu là bao nhiêu, nhưng có một điều hoàn toàn rõ ràng: nhiều node thì tốt hơn, ít node dễ bị tấn công 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 node.
Vì vậy, đâu là giới hạn đối với lượng công việc mà chúng ta có thể yêu cầu full nodes thực hiện?
1. Những giới hạn
Để tối đa hóa số lượng người dùng có thể chạy một node, chúng tôi sẽ tập trung vào phần cứng của người dùng bình thường. Có một số cách gia tăng dung lượng có thể đạt được bằng việc yêu cầu một số người dùng mua phần cứng chuyên dụng (ví dụ mua từ Amazon), nhưng chúng thực sự không làm tăng khả năng mở rộng nhiều như vậy.
Có ba hạn chế chính đối với khả năng của một full node để xử lý một số lượng lớn giao dịch:
- Sức mạnh máy tính: chúng ta có thể yêu cầu bao nhiêu% CPU để chạy một node 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 ta có thể yêu cầu người dùng lưu trữ bao nhiêu GB trên đĩa? Ngoài ra, nó phải được đọc nhanh đến mức nào? (tức là ô cứng loại HDD có ổn không hay chúng ta cần SSD)
Nhiều sai lầm về việc một blockchain có thể mở rộng quy mô bao xa bằng cách sử dụng các kỹ thuật "đơn giản" bắt nguồn từ các ước tính quá lạc quan cho mỗi con số này. Chúng ta có thể lần lượt điểm qua ba yếu tố sau:
1.1 Khả năng 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 minh khối
- Câu trả lời đúng: ~ 5-10% sức mạnh CPU có thể được sử dụng để xác minh khối
Có bốn lý do chính giải thích tại sao giới hạn lại quá thấp:
- Chúng tôi cần một biên độ an toàn để bao gồm khả năng bị tấn công DoS (các giao dịch do kẻ tấn công tạo ra nhằm lợi dụng các điểm yếu trong code để xử lý mất nhiều thời gian 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 offline. Nếu tôi mất mạng trong một phút, tôi sẽ có thể bắt kịp sau vài giây
- Chạy một node sẽ không làm tiêu hao pin của bạn quá nhanh và làm cho tất cả các ứng dụng khác của bạn rất chậm
- Có những tác vụ khác mà các node cũng cần phải thực hiện, chủ yếu xoay quanh việc xác minh 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 việc "tại sao chỉ có 5-10%?" tập trung vào một vấn đề khác: đó là vì các khối PoW đến vào các thời điểm ngẫu nhiên, nên việc xác minh các khối mất nhiều thời gian làm tăng nguy cơ nhiều khối được tạo cùng một lúc. Có nhiều bản sửa lỗi 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 này KHÔNG giải quyết được bốn vấn đề còn lại, và vì vậy chúng không cho phép tăng khả năng mở rộng lớn như nhiều người đã nghĩ ban đầu.
Parallelism cũng không phải là một viên đạn ma thuật. Thông thường, ngay cả các ứng dụng của các 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 luồng riêng xử lý logic nhóm giao dịch trong nền. Và bạn càng tiến gần đến mức sử dụng 100% trên tất cả các luồng, việc chạy một nút càng tiêu tốn nhiều năng lượng hơn và biên độ an toàn của bạn so với DoS càng thấp.
1.2 Băng thông
- Câu trả lời sai: nếu chúng tôi có 10 MB block cứ sau 2-3 giây, thì hầu hết người dùng có mạng > 10 MB/s, vì vậy tất nhiên họ có thể xử lý nó
- Câu trả lời đúng: có thể chúng ta có thể xử lý khối 1-5 MB cứ sau 12 giây.
Ngày nay, chúng ta thường nghe thấy các số liệu thống kê được quảng cáo rất cao về băng thông kết nối Internet có thể cung cấp: con số 100 Mbps và thậm chí 1 Gbps là phổ biến. 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 thực tế dự kiến của một kết nối vì một số lý do:
- "Mbps" là "hàng triệu bit mỗi giây"; một bit là 1/8 byte, vì vậy bạn cần chia số bit được quảng cáo cho 8 để lấy số byte được quảng cáo.
- Các nhà cung cấp Internet, cũng giống như tất cả các công ty, 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 một node không thể chứa toàn bộ băng thông.
- Mạng p2p chắc chắn phải đưa ra chi phí riêng của chúng: các nút thường kết thúc tải xuống và tải lên lại cùng một khối nhiều lần (chưa kể đến các giao dịch được phát qua mempool trước khi được đưa vào một khối).
Khi Starkware thực hiện một thử nghiệm vào năm 2019, nơi họ công bố các khối 500 kB sau khi chi phí gas dữ liệu giao dịch giảm lần đầu tiên khiến điều đó trở nên khả thi lần đầu tiên, một số node thực sự không thể xử lý các khối có kích thước đó. Khả năng xử lý các khối lớn đã được cải thiện và sẽ tiếp tục được cải thiện. Nhưng cho dù chúng ta làm gì đi nữa, chúng ta vẫn còn rất xa mới có thể chiếm được băng thông trung bình tính bằng MB/s.
1.3 Lưu trữ
- Câu trả lời sai: 10 TB
- Câu trả lời đúng: 512 GB
Lập luận chính ở đây, như bạn có thể đoán, 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, có nhiều loại ổ cứng thể rắn 8 TB mà bạn có thể mua trên Amazon (bạn cần SSD hoặc NVME; HDD quá chậm để lưu trữ blockchain). Trên thực tế, laptop được sử dụng để viết bài này có 512 GB và nếu bạn bắt mọi người đi mua phần cứng mới, nhiều người trong số họ sẽ lười biếng (hoặc họ không đủ $800 để mua một ổ SSD 8 TB) và sử dụng một nhà cung cấp tập trung. Và ngay cả khi bạn có thể ghi một chuỗi khối vào một số bộ nhớ, mức độ hoạt động cao có thể dễ dàng hết dữ liệu ổ cứng và buộc bạn phải tiếp tục mua thêm ổ cứng mới.

Ngoài ra, kích thước bộ nhớ xác định thời gian cần thiết để một node mới có thể online và bắt đầu tham gia vào mạng. Bất kỳ dữ liệu nào mà các node hiện có phải lưu trữ là dữ liệu mà một node mới phải download. Thời gian đồng bộ ban đầu (và băng thông) cũng là một rào cản lớn để người dùng có thể chạy các node.
Trong khi viết bài này, tôi đã mất ~ 15 giờ để đồng bộ hóa một node mới. Nếu Ethereum có lượng sử dụng nhiều hơn gấp 10 lần, việc đồng bộ hóa một node mới sẽ mất ít nhất một tuần và có nhiều khả năng chỉ dẫn đến kết nối internet của bạn bị tắc nghẽn. Điều này thậm chí còn quan trọng hơn trong một cuộc tấn công, khi một phản ứng thành công đối với cuộc tấn công có thể sẽ liên quan đến nhiều người dùng chạy lại các node mới khi họ không chạy các nút trước đó.
1.4 Hiệu ứng tương tác
Thêm nữa, có những tác động tương tác giữa ba loại chi phí này. Bởi vì cơ sở dữ liệu sử dụng cấu trúc cây bên trong để lưu trữ và truy xuất dữ liệu, chi phí tìm nạp dữ liệu từ cơ sở dữ liệu tăng lên theo logarithm của kích thước cơ sở dữ liệu.
Trên thực tế, vì cấp cao nhất (hoặc một vài cấp cao nhất) có thể được lưu trong bộ nhớ cache trong RAM, chi phí truy cập ổ cứng tỷ lệ thuận với kích thước của cơ sở dữ liệu như bội số của kích thước dữ liệu được lưu trong RAM.

Ví dụ: nếu bộ nhớ cache 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 ~ 64 GB hiện tại của Ethereum sẽ yêu cầu ~ 2 accesses. Nhưng nếu kích thước trạng thái tăng gấp 4 lần đến ~ 256 GB, thì điều này sẽ tăng lên ~ 3 accesses (vì vậy, nhiều hơn 1,5 accesses trên mỗi lần đọc). Do đó, làm tăng gấp 4 lần gas limit, điều này sẽ làm tăng cả kích thước trạng thái và số lần đọc, thực sự có thể chuyển thành thời gian xác minh khối tăng ~ 6 lần. Hiệu ứng có thể còn mạnh hơn: ổ cứng thường mất nhiều thời gian hơn để đọc và ghi khi chúng đầy hơn là khi chúng còn trống.
1.5 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 đã là một thách thức đối với nhiều người dùng, mặc dù ít nhất nó 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 laptop của mình trong khi viết bài này!). Do đó, chúng ta gần chạm tới các nút thắt cổ chai. Vấn đề mà các nhà phát triển cốt lõi quan tâm nhất là dung lượng lưu trữ. Do đó, hiện tại, những nỗ lực dũng cảm trong việc giải quyết các nút thắt trong tính toán và dữ liệu, và thậm chí cả những thay đổi đối với thuật toán đồng thuận, không có khả năng dẫn đến việc tăng giới hạn gas lớn được chấp nhận. Ngay cả việc giải quyết lỗ hổng DoS tồn đọng lớn nhất của Ethereum cũng chỉ dẫn đến mức tăng giới hạn gas lên 20%.
Giải pháp duy nhất cho các vấn đề về kích thước lưu trữ là không có trạng thái và hết hạn trạng thái. Tính không trạng thái cho phép một lớp các node xác minh chuỗi mà không cần duy trì lưu trữ vĩnh viễn. Việc hết hạn trạng thái đẩy ra trạng thái chưa được truy cập gần đây, buộc người dùng phải cung cấp bằng chứng theo cách thủ công để gia hạn nó. Cả hai con đường này đã được thực hiện 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 đã bắt đầu. Hai cải tiến này kết hợp với nhau có thể làm giảm đáng kể những lo ngại này và mở ra cơ hội cho việc gia tăng giới hạn gas đáng kể. Nhưng ngay cả sau khi tình trạng không quốc tịch (statelessness) và hết hạn trạng thái (state expiry) được thực hiện, giới hạn gas chỉ có thể tăng một cách an toàn, có lẽ ~ 3 lần cho đến khi các giới hạn khác bắt đầu chiếm ưu thế.
Một giải pháp trung hạn khả thi khác là sử dụng ZK-SNARK để xác minh các giao dịch. ZK-SNARK sẽ đảm bảo rằng người dùng thông thường không phải tự mình lưu trữ trạng thái hoặc xác minh các khối, mặc dù họ vẫn cần tải xuống tất cả dữ liệu trong các khối để bảo vệ khỏi các cuộc tấn công dữ liệu không khả dụng.
Ngoài ra, ngay cả khi những kẻ tấn công không thể buộc các khối không hợp lệ vượt qua, nếu dung lượng được tăng lên đến mức quá khó để chạy một nút đồng thuận, thì vẫn có nguy cơ xảy ra các cuộc tấn công kiểm duyệt phối hợp. Do đó, ZK-SNARK không thể tăng công suất vô hạn, nhưng chúng vẫn có thể tăng công suất với biên độ đáng kể (có thể là 1-2 bậc). Một số chuỗi đang khám phá cách tiếp cận này ở layer 1; Ethereum đang nhận được những lợi ích của cách tiếp cận này thông qua các giao thức layer 2 (được gọi là "ZK rollups" ) như zksync, Loopring và Starknet.
2. Điều gì xảy ra sau khi sharding?
Sharding về cơ bản giải quyết được những hạn chế ở trên, bởi vì nó tách dữ liệu chứa trên blockchain khỏi dữ liệu mà một nút duy nhất cần xử lý và lưu trữ. Thay vì các node xác minh các khối bằng cách trực tiếp tải xuống và thực thi chúng, chúng sử dụng các kỹ thuật toán học và mật mã nâng cao để xác minh các khối một cách gián tiếp.
Do đó, các blockchain được phân đoạn có thể có mức thông lượng giao dịch rất cao một cách an toàn mà các blockchain không phân đoạn không thể làm được. Điều này đòi hỏi rất nhiều sự tinh tế về mật mã trong việc tạo ra các thay thế hiệu quả cho việc xác thực đầy đủ khi từ chối thành công các khối không hợp lệ, nhưng nó có thể được thực hiện: lý thuyết đã được thiết lập tốt và bằng chứng về khái niệm dựa trên các đặc tả nháp đã được nghiên cứu.

Ethereum đang có kế hoạch sử dụng sharding bậc hai, trong đó tổng khả năng mở rộng bị giới hạn bởi thực tế là một node phải có thể xử lý cả một phân đoạn duy nhất và chuỗi báo hiệu phải thực hiện một số công việc quản lý cố định cho mỗi phân đoạn. Nếu các phân đoạn quá lớn, các node không còn có thể xử lý các phân đoạn riêng lẻ và nếu có quá nhiều phân đoạn, các node không thể xử lý beacon chain nữa. Tích (x) của hai ràng buộc này tạo thành giới hạn trên.
Có thể hình dung, người ta có thể tiến xa hơn bằng cách thực hiện sharding khối hoặc thậm chí là sharding theo cấp số nhân. 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 trong một thiết kế như vậy, nhưng nó có thể được thực hiện. Nhưng Ethereum không tiến xa hơn bậc hai. Nguyên nhân là do khả năng mở rộng tăng thêm mà bạn nhận được khi chuyển từ shards-of-transactions sang shards-of-shards-of-transactions thực sự không thể thành hiện thực nếu không có những rủi ro lớn khác.
Vậy những rủi ro này là gì?
2.1 Số lượng người dùng tối thiểu
Một blockchain không phân đoạn có thể chạy được miễn là có một người dùng quan tâm dùng nó. Các blockchain sharded không giống như thế này: không có node đơn lẻ nào có thể xử lý toàn bộ chuỗi và vì vậy bạn cần có đủ các node để ít nhất chúng có thể xử lý chuỗi cùng nhau. Nếu mỗi node có thể xử lý 50 TPS và chuỗi có thể xử lý 10000 TPS, thì chuỗi cần ít nhất 200 node để tồn tại. Nếu chuỗi tại bất kỳ điểm nào có ít hơn 200 node, thì một trong hai node không thể theo kịp chuỗi hoặc các node không thể phát hiện các khối không hợp lệ hoặc một số đ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.
Trên thực tế, số lượng tối thiểu an toàn cao hơn vài lần so với phương pháp phỏng đoán "TPS chuỗi / TPS node" 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); đối với ví dụ trên của chúng tôi, hãy gọi nó là 1000 node.
Nếu dung lượng của một chuỗi khối phân mảnh tăng lên 10 lần, thì số lượng người dùng tối thiểu cũng tăng lên 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 một chút dung lượng và chỉ tăng nó khi chúng ta thấy nhiều người dùng, và sẽ giảm nó nếu số lượng người dùng giảm xuống?
Có một số vấn đề với điều này:
- Bản thân một blockchain không thể phát hiện một cách đáng tin cậy có bao nhiêu người dùng duy nhất trên đó và do đó, đ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. Quản trị vượt quá giới hạn năng lực có thể dễ dàng trở thành tâm điểm của sự chia rẽ và xung đột.
- Điều gì sẽ xảy ra nếu nhiều người dùng đột ngột và bất ngờ thoát ra cùng một lúc?
- Việc tăng số lượng người dùng tối thiểu cần thiết để bắt đầu một đợt fork khiến việc bảo vệ chống lại các vụ chiếm đoạt của thù địch trở nên khó khăn hơn.
Số lượng người dùng tối thiểu dưới 1,000 gần như chắc chắn là tốt. Mặt khác, số lượng người dùng tối thiểu là 1 triệu, chắc chắn là không. Thậm chí số lượng người dùng tối thiểu là 10,000 được cho là bắt đầu gặp rủi ro. Do đó, có vẻ như rất khó để biện minh cho một chuỗi khối phân mảnh có hơn vài trăm phân đoạn (shard).
2.2 Khả năng truy xuất lịch sử
Một thuộc tính quan trọng của blockchain mà người dùng thực sự coi trọng là sự bền lâu. Một tài sản kỹ thuật số được lưu trữ trên một máy chủ sẽ ngừng tồn tại trong 10 năm khi công ty phá sản hoặc công ty không còn quan tâm đến việc duy trì hệ sinh thái đó. Mặt khác, NFT trên Ethereum là mãi mãi.

Nhưng một khi dung lượng của blockchain trở nên quá cao, thì việc lưu trữ tất cả dữ liệu đó sẽ trở nên khó khăn hơn, cho đến một lúc nào đó có nguy cơ lớn là một số phần của dữ liệu cũ sẽ không có ai lưu trữ.
Việc định lượng rủi ro này rất dễ dàng. Lấy dung lượng dữ liệu của blockchain tính bằng MB/s và nhân với ~ 30 để có lượng dữ liệu được lưu trữ bằng TB mỗi năm. Gói sharding hiện tại có dung lượng dữ liệu ~ 1,3 MB/s, như vậy khoảng 40 TB/năm. Nếu tăng 10 lần, con số này sẽ trở thành 400 TB/năm. Nếu chúng ta muốn dữ liệu không chỉ có thể truy cập mà còn có thể truy cập thuận tiện, chúng ta cũng cần siêu dữ liệu (ví dụ: giải nén các giao dịch rollup), vì vậy hãy tạo ra 4 PB mỗi năm hoặc 40 PB sau một thập kỷ. Kho lưu trữ Internet sử dụng 50 PB. Vì vậy, đó là giới hạn trên hợp lý cho mức độ lớn mà một chuỗi khối phân mảnh có thể có được một cách an toàn.
Do đó, có vẻ như trên cả hai khía cạnh này, thiết kế sharding của Ethereum thực sự đã được nhắm mục tiêu khá gần với các giá trị an toàn tối đa hợp lý. Các hằng số có thể được tăng lên một chút, nhưng không quá nhiều.
3. Tổng kết
Có hai cách để cố gắng mở rộng quy mô blockchain: cải tiến kỹ thuật cơ bản và đơn giản là tăng các thông số. Ban đầu, việc tăng các thông số nghe có vẻ rất hấp dẫn: nếu bạn làm phép toán trên giấy ăn, bạn sẽ dễ dàng thuyết phục bản thân rằng một chiếc laptop bình thường có thể xử lý hàng nghìn giao dịch mỗi giây, không cần ZK-SNARK hoặc rollup hoặc sharding. Thật không may, có nhiều lý do tinh tế khiến cách tiếp cận này về cơ bản là thiếu sót.
Máy tính chạy các nút blockchain không thể dành 100% sức mạnh của CPU để xác thực chuỗi; họ cần một biên độ an toàn lớn để chống lại các cuộc tấn công DoS bất ngờ, họ cần dung lượng dự phòng cho các tác vụ như xử lý giao dịch trong mempool và bạn không muốn chạy một nút trên máy tính để khiến máy tính đó không thể sử dụng được cho bất kỳ ứng dụng nào khác cùng một lúc. Tương tự như vậy, băng thông cũng có chi phí: kết nối 10 MB/s KHÔNG có nghĩa là bạn có thể có khối 10 megabyte mỗi giây! Có thể có khối 1-5 MB cứ sau 12 giây. Và nó cũng vậy với việc lưu trữ.
Việc tăng yêu cầu phần cứng để chạy một node và hạn chế việc chạy nút cho các tác nhân chuyên biệt không phải là một giải pháp.
Để một blockchain được phi tập trung, điều tối quan trọng đối với người dùng thông thường là có thể chạy một node và có một nền văn hóa nơi chạy các node là một hoạt động phổ biến.
Mặt khác, các cải tiến kỹ thuật cơ bản có thể hoạt động. Hiện tại, điểm nghẽn chính trong Ethereum là kích thước lưu trữ, và tình trạng không trạng thái và hết hạn trạng thái có thể khắc phục điều này và cho phép tăng có thể lên đến ~ 3 lần - nhưng không thể nhiều hơn, vì chúng tôi muốn chạy một node trở nên dễ dàng hơn hiện nay. Các chuỗi khối phân đoạn có thể mở rộng quy mô hơn nữa, bởi vì không có nút nào trong một chuỗi khối phân đoạn cần xử lý mọi giao dịch. Nhưng ngay cả ở đó, vẫn có những giới hạn về dung lượng: khi dung lượng tăng lên, số lượng người dùng an toàn tối thiểu tăng lên và chi phí lưu trữ chuỗi (và rủi ro dữ liệu bị mất nếu không có ai bận tâm đến việc lưu trữ chuỗi) sẽ tăng lên.
Nhưng chúng ta không phải lo lắng quá nhiều: những giới hạn đó đủ cao để chúng ta có thể xử lý hơn một triệu giao dịch mỗi giây với sự bảo mật đầy đủ của một chuỗi khối. Nhưng sẽ phải mất nhiều công sức để làm được điều này mà không phải hy sinh sự phân quyền, điều mà khiến các blockchain trở nên có giá trị như ngày hôm nay.
Đây là dự án cá nhân của người viết với mục đích tổng hợp lại suy nghĩ về công nghệ từ nhiều lập trình viên xuất sắc và biên soạn lại thành những bài viết của riêng mình về công nghệ blockchain. Mỗi một bài viết sẽ là một bài luận riêng về các chủ đề khác nhau trong công nghệ blockchain. Đây là cách học tốt nhất mà mình biết trong việc củng cố khả năng ghi nhớ cũng như độ hiểu biết về bất kì một chủ đề nào đó.
Tất cả credit của bài viết này xin gửi tới Vitalik Buterin - nhà sáng lập Ethereum.