Tổng quan
Trong nhiều năm, câu hỏi về khả năng mở rộng chuỗi khối đã được tranh luận trong cộng đồng nhà phát triển. Các mạng chuỗi khối công khai, như Ethereum đạt được tính phi tập trung và bảo mật cao nhưng bị hạn chế khả năng mở rộng. Ví dụ, Ethereum có thể xử lý khoảng 10-13 giao dịch mỗi giây. Điều này khá mờ nhạt so với các hệ thống tập trung như VISA, có khả năng xử lý tới 24.000 TPS.
Nếu các blockchain và các ứng dụng phi tập trung muốn được áp dụng hàng loạt, thì khả năng mở rộng ở cấp độ xã hội như VISA là cần thiết.
Ngoài các chuỗi khối lớp 2, sharding là một giải pháp được đề xuất để mở rộng quy mô Ethereum nhằm hỗ trợ nhiều người dùng hơn. Ý tưởng của sharding là chia chuỗi khối chính thành các phân đoạn riêng biệt, vì vậy các node chỉ cần xác minh một tập hợp con các giao dịch.
Với các node xác thực giao dịch song song, thông lượng mạng có thể tăng lên và dApps có thể mở rộng quy mô để đáp ứng nhu cầu của số lượng người dùng ngày càng tăng.
Trước khi đi vào phân tích Ethereum sharding, chúng ta cùng tìm hiểu qua các thuật ngữ cơ bản.
Database Sharding là gì?
Một kỹ thuật phổ biến trong quản lý cơ sở dữ liệu tập trung, phân mảnh cơ sở dữ liệu, là quá trình phân chia cơ sở dữ liệu lớn thành các phần nhỏ hơn (“shard”) để cải thiện hiệu quả và khả năng mở rộng ứng dụng bằng cách phân phối song song cơ sở dữ liệu trên nhiều máy.
Khi số lượng người dùng hoặc hoạt động được thực hiện trên một phần mềm tăng lên, thì dữ liệu được lưu trữ trong cơ sở dữ liệu của phần mềm cũng tăng theo. Cơ sở dữ liệu quá tải sẽ ảnh hưởng đến hiệu suất ứng dụng và gây hại cho trải nghiệm người dùng. Do đó, sharding là cần thiết để giải phóng cơ sở dữ liệu và cải thiện thời gian tải.
Shard
Một “Shard” có nghĩa là một “phần nhỏ của toàn bộ.” Trong quản lý cơ sở dữ liệu, shard là một tập hợp con của cơ sở dữ liệu lớn được lưu trữ trên một máy chủ riêng biệt. Trong đó mỗi Shard chứa các khối dữ liệu, nhưng tất cả chúng đều tạo thành một tập dữ liệu logic.
Sử dụng ví dụ phía trên, chúng ta có thể có trên phân đoạn, “Shard 1” dành cho cư dân thành phố có họ bắt đầu bằng ‘A’, “Shard 2” dành cho những người có họ bắt đầu bằng ‘B’, v.v.
Nếu bạn kết hợp các mảnh hợp lý này, bạn sẽ nhận được một tập dữ liệu duy nhất gồm các bản ghi cho tất cả cư dân thành phố.
Ví dụ Database Sharding
Dưới đây là một minh họa để giải thích Database Sharding:
Hãy tưởng tượng có một cơ sở dữ liệu chứa hồ sơ cá nhân của 100.000 cư dân trong một thành phố. Việc tìm kiếm thông tin cho một cá nhân sẽ yêu cầu tính toán khoảng 100.000 giao dịch – một công việc tốn kém và tốn nhiều thời gian. Nhưng điều gì sẽ xảy ra nếu chúng ta phân vùng cơ sở dữ liệu lớn này thành các cơ sở dữ liệu nhỏ hơn?
Ví dụ: bằng cách nhóm tất cả cư dân thành phố có họ bắt đầu bằng các chữ cái cụ thể trên một máy chủ duy nhất, việc tìm kiếm thông tin cần ít tài nguyên tính toán hơn, các tác vụ cần ít thời gian hơn để hoàn thành và cơ sở dữ liệu trở nên dễ quản lý hơn.
Sharding trong mạng Blockchain
Sharding trong mạng chuỗi khối tuân theo quy trình tương tự như với cơ sở dữ liệu tập trung, trong đó mạng chuỗi khối có thể được “sharded” hoặc chia thành các phân đoạn riêng biệt, nơi mỗi shard lưu trữ một phần dữ liệu của chuỗi khối và xử lý một bộ giao dịch duy nhất. Với sharding, mạng blockchain có thể cải thiện độ trễ và khả năng mở rộng của mạng.
Vai trò của Sharding
Bởi vì tất cả các node phải đạt được sự đồng thuận (tức là đồng ý) về tính hợp lệ của giao dịch, nên các mạng chuỗi khối chỉ có thể xử lý một số lượng nhỏ giao dịch cùng một lúc. Thông thường, mọi node lưu trữ toàn bộ lịch sử của blockchain và xử lý mọi giao dịch. Đây là điều làm cho các mạng blockchain như Ethereum và Bitcoin trở nên “phi tập trung”.
Với mỗi node đầy đủ sở hữu một bản sao toàn bộ lịch sử của mạng, các tác nhân độc hại sẽ khó chiếm đoạt mạng hơn và khó có khả năng đảo ngược hoặc viết lại các giao dịch. Tuy nhiên, việc đảm bảo phân cấp và bảo mật chuỗi khối phải trả giá bằng khả năng mở rộng.
Các chuỗi khối được phân đoạn (sharded) cho phép các node từ bỏ việc tải xuống toàn bộ lịch sử của chuỗi khối hoặc xác thực mọi giao dịch đi qua mạng, điều này làm tăng hiệu quả của mạng và cho phép các chuỗi khối mở rộng quy mô hỗ trợ cho nhu cầu lớn hơn của người dùng.
Shard chain là gì?
Trong ngữ cảnh của các mạng chuỗi khối, một chuỗi phân đoạn (shard chain) sẽ chứa một phần dữ liệu và xử lý một phần trách nhiệm xử lý giao dịch.
Shard chain giống như một tập hợp các blockchain nhỏ hoạt động độc lập và để bảo vệ tính bảo mật, mỗi chuỗi phân đoạn gửi một bản ghi giao dịch đến chuỗi chính (Chuỗi Beacon chain) theo định kỳ thông qua Hợp đồng Trình quản lý validator (VMC – Validator Manager Contract).
Bởi vì mỗi shard chain sẽ có một lịch sử giao dịch duy nhất và một tập hợp các node để xác thực các giao dịch mới, nhiều chuỗi shard chain có thể chạy đồng thời để cải thiện độ trễ và thông lượng mạng thông qua quá trình xử lý song song.
Sharding trong Ethereum
Ethereum đang có kế hoạch áp dụng sharding như một giải pháp mở rộng quy mô sau khi nâng cấp Ethereum PoS của họ, đây là một loạt các nâng cấp được thiết kế để cải thiện chức năng của Ethereum 1.0.
Tại sao sharding lại cần thiết?
Có hai vấn đề chính đòi hỏi phải có sharding trên Ethereum: khả năng hỗ trợ sự gia tăng theo cấp số nhân của người dùng và nhu cầu duy trì tính phi tập trung trên quy mô lớn.
- (1) Hỗ trợ số lượng người dùng ngày càng tăng
Cấu trúc hiện tại của Ethereum khiến nó không thể xử lý việc sử dụng tăng theo cấp số nhân. Hiện tại, tất cả các node của Ethereum lưu trữ trạng thái hoàn chỉnh của Máy ảo Ethereum (EVM), bao gồm mã hợp đồng thông minh và số dư tài khoản.
Hơn nữa, các giao dịch được thực hiện tuyến tính và yêu cầu xác nhận bởi toàn bộ mạng. Giao dịch tuyến tính và yêu cầu các nút quản lý các tập dữ liệu lớn sẽ làm chậm mạng.
- (2) Duy trì phân quyền trên diện rộng
Việc yêu cầu các node giữ một bản sao đầy đủ của chuỗi khối cũng tạo ra các vấn đề về tập trung hóa. Hiện tại, sổ cái Ethereum chiếm hơn 10 terabyte dung lượng lưu trữ, gấp 10 lần dung lượng mà một máy tính trung bình có thể chứa.
Khi chuỗi khối Ethereum tiếp tục phát triển, việc chạy một node Ethereum có thể trở nên khó khăn, chỉ còn lại một số ít node chịu trách nhiệm bảo mật mạng. Điều này lại chỉ ra các vấn đề tập trung và vấn đề mà Ethereum cần được giải quyết.
Sharding có thể giải quyết cả hai vấn đề nêu trên, Sharding thúc đẩy khả năng mở rộng tốt hơn vì các node có thể xác thực đồng thời các giao dịch khác nhau và việc chia dữ liệu giao dịch thành các phần nhỏ hơn giúp chạy một node đầy đủ dễ dàng hơn, giúp giảm rủi ro tập trung.
Cơ chế hoạt động của Ethereum sharding
Trước khi chúng tôi giải thích cách hoạt động của sharding, chúng ta cùng điểm lại một số định nghĩa quan trọng:
State (trạng thái): Trạng thái đề cập đến thông tin về một hệ thống tại bất kỳ thời điểm nào. Trong Ethereum, trạng thái là mô tả của mạng tại một thời điểm cụ thể như mã code hợp đồng, tài khoản, số dư địa chỉ, v.v. Mỗi giao dịch mới đều thay đổi trạng thái của Ethereum.
Cây Merkle: Cây hoặc gốc Merkle là một cơ chế mật mã lưu trữ một lượng lớn thông tin thông qua hàm băm (hàm hash). Cây/gốc Merkle rất cần thiết cho bảo mật của Ethereum, vì chúng cho phép các node nhanh chóng xác minh xem một phần dữ liệu có phải là một phần của cấu trúc lớn hơn hay không.
Collation (Đối chiếu): Collation là một nhóm các giao dịch được thực hiện trên chuỗi shard chain, tương tự như một block trong PoW. Các collation được gửi đến chuỗi chính và được liên kết với nhau để tạo thành chuỗi khối.
Collation Header (Tiêu đề đối chiếu): Collation Header tương tự như block header trong sự đồng thuận PoW. Collation header chứa siêu dữ liệu về thông tin bên trong collation, chẳng hạn như:
- Shard duy nhất mà collation thuộc về
- Hàm băm gốc của collation gốc
- Gốc Merkle của tất cả các giao dịch trong một collation
- Gốc trước trạng thái và gốc sau trạng thái
- Chữ ký của notaries (công chứng viên)
Notaries (công chứng viên)
Công chứng viên là người xác thực được chỉ định ngẫu nhiên vào chuỗi phân đoạn (shard chain) để bỏ phiếu cho các đối chiếu (collation) được đề xuất. Những phiếu bầu này được gọi là “attestations – chứng thực” và chứng minh tính hợp lệ của đối chiếu. Mỗi lần đối chiếu cần ít nhất ⅔ số người đối chiếu đồng ý trước khi được thêm vào chuỗi đồng thuận.
Proposers (người đề xuất)
Người đề xuất là người đối chiếu – collator (hoặc người xác minh – validator) được chọn để tạo đối chiếu và đề xuất nó để xác thực. Người đề xuất có nhiệm vụ giống như một người miner trong chuỗi khối PoW.
Committees (Ủy ban)
Một ủy ban là tập hợp những người xác nhận hoặc công chứng viên chứng thực tính hợp lệ của các khối phân đoạn. Các ủy ban này được xáo trộn ngẫu nhiên trong các khoảng thời gian, vì vậy những người xác thực không thể dự đoán họ sẽ tham gia (những) ủy ban nào.
Ethereum sharding hoạt động như thế nào?
Việc nâng cấp Ethereum sharding sẽ chia chuỗi khối Ethereum thành 64 chuỗi phân đoạn (shard chains). Mỗi chuỗi phân đoạn sẽ có một trạng thái độc lập, nghĩa là các node sẽ lưu trữ một tập hợp con số dư tài khoản, mã code hợp đồng thông minh và xử lý một phần trong tổng số giao dịch.
Ethereum PoS sharding có thể hoạt động như thế nào trong thực tế?
Hãy tưởng tượng Ethereum có 10.000 trình xác thực và 100 chuỗi phân đoạn.
Thông qua một giao thức giả ngẫu nhiên, những người xác minh (validator) đủ điều kiện, những người đã gửi ETH vào Hợp đồng quản lý validator (VMC-Validator Manager Contract) và được chỉ định cho các shard 1-100.
Trong Shard 1, người xác thực (người đề xuất – proposer) được chọn để nhóm các giao dịch mới thành một collation.
Những người xác thực khác (công chứng viên – notary) tải xuống collation và xác minh tính hợp lệ của các giao dịch.
Nếu 2/3 số công chứng viên (notary) chứng thực đối chiếu (collation), thì nó sẽ được gửi tới chuỗi chính thông qua VMC.
Điều quan trọng cần lưu ý là toàn bộ đối chiếu (collation) không được thêm vào Beacon Chain—sẽ rất khó khăn và lãng phí thời gian để xác minh các đối chiếu từ mọi shard.
Thay vào đó, các node trình xác thực trên chuỗi chính chỉ cần kiểm tra các chứng thực (chữ ký) cho mỗi đối chiếu để xác định tính hợp lệ của nó.
Nhờ các tiêu đề đối chiếu (collation headers), bất kỳ ai cũng có thể xác minh hoạt động trên từng shard.
Tiêu đề đối chiếu (collation headers) hoạt động như “liên kết chéo” và mô tả trạng thái cũng như giao dịch trên các shard khác nhau. Do đó, giao tiếp giữa các shard giúp có thể có chế độ xem cấp cao nhất về mạng Ethereum mà không phải là một phần của mọi shard.
Hạn chế tiềm ẩn của Sharding
Mặc dù sharding ETH2 hứa hẹn nhiều lợi ích, nhưng nó lại đưa ra một loạt vấn đề mới:
- Ít node hơn chạy từng shard, hoạt động độc hại, chẳng hạn như tấn công 51% trở nên dễ dàng hơn.
- Mã code phức tạp hơn, nguy cơ lỗ hổng bảo mật hợp đồng thông minh tăng lên.
- Các thành viên của ủy ban có thể thông đồng để gửi các giao dịch độc hại đến chuỗi chính.
Các biện pháp bảo mật giao thức Sharding ETH2
Rất may, lộ trình sharding Ethereum có một số cơ chế để cải thiện tính bảo mật của các giao thức sharding.
Giao thức bảo mật đầu tiên liên quan đến việc sử dụng bằng chứng gian lận (fraud proofs) để xác minh giao dịch trên chuỗi shard. Như Vitalik Buterin giải thích, bằng chứng gian lận có thể được sử dụng để chứng minh tính hợp lệ của giao dịch và trừng phạt hoạt động không trung thực.
Cơ chế thứ hai sử dụng lấy mẫu ngẫu nhiên để ngăn chặn sự thông đồng. Nếu những người xác thực không biết họ sẽ kết thúc shard nào, thì việc điều phối một cuộc tấn công vào hệ thống sẽ trở nên khó khăn hơn. Trong trường hợp này, một cuộc tấn công 51% vào chuỗi shard sẽ không thể thực hiện được.
Ethereum Sharding: Timeline và triển khai theo giai đoạn
Các cuộc thảo luận xung quanh sharding đã diễn ra trong cộng đồng Ethereum ít nhất là từ năm 2013, nhưng các nhà phát triển đã hoãn triển khai nó vì lý do chính đáng. Sharding rất phức tạp và gây ra những rủi ro mới, vì vậy cần phải thử nghiệm nghiêm ngặt để khởi chạy thành công. Theo Ethereum.org, sharding sẽ được triển khai trên Ethereum sau “The Merge” thành công. Dưới đây là tổng quan ngắn gọn về các giai đoạn sharding Ethereum:
Sharding Phase 1
Giai đoạn này có thể sẽ bắt đầu vào năm 2023, lộ trình nâng cấp theo kế hoạch của Ethereum. Tuy nhiên, vẫn chưa có ngày cụ thể nào được vạch ra cho lộ trình sharding. Dưới đây là tổng quan về giai đoạn đầu tiên của Ethereum sharding:
- Hợp đồng Trình quản lý validator (VMC) được lưu trữ trên Chuỗi Beacon chịu trách nhiệm điều phối quá trình sharding
- Người xác thực ETH2 tiềm năng được yêu cầu khóa 32 ETH vào hợp đồng thông minh trước khi được thêm vào nhóm người xác thực đủ điều kiện
- VMC chỉ định các trình xác thực cho các shard theo các khoảng thời gian để xác thực và xử lý các đối chiếu giao dịch cho chuỗi đồng thuận
- Các shard chỉ đóng vai trò là “kho dữ liệu” để tăng khả năng xử lý dữ liệu của mạng Ethereum.
Sharding Phase 2
Giai đoạn thứ hai của quá trình nâng cấp sharding ETH PoS ít được xác định hơn do các nhà phát triển đang tranh luận về một số khía cạnh. Tuy nhiên, chúng ta có thể mong đợi Ethereum sharding giai đoạn 2 sẽ giống như thế này trong thực tế:
- Các shard chuyển từ các lớp dữ liệu sang các lớp thực thi – mỗi shard có một “trạng thái” độc lập (nghĩa là một bộ hợp đồng thông minh, số dư tài khoản và địa chỉ duy nhất.)
- Mỗi shard hoạt động giống như Ethereum Mainnet với đầy đủ hợp đồng thông minh và hỗ trợ dApp
- Giao tiếp giữa các shard cho phép người dùng trên các chuỗi shard khác nhau trao đổi giá trị.
- dApps chạy trên các chuỗi shard khác nhau có thể “giao tiếp và tương tác với nhau bằng cách sử dụng giao tiếp chéo giữa các shard, cải thiện chức năng mở rộng của Ethereum.
Kết luận
Với Ethereum shading, nhiều chuỗi shard sẽ chạy đồng thời, các node có thể tăng khả năng xử lý giao dịch và có thể xử lý lượng dữ liệu lớn hơn trên chuỗi. Tiếp theo ví dụ trước đó, với 100 chuỗi shard thì Ethereum 2.0 sẽ có thể đạt được 10.000 TPS.
Thông tin duy nhất từ các shard được xuất bản trên chuỗi lớp cơ sở là các tiêu đề đối chiếu (collation header) – bằng chứng mật mã về tính hợp lệ – do đó, sẽ dễ dàng hơn cho các node xác minh xác nhận giao dịch và cam kết với lớp đồng thuận. Kết quả là giao dịch cuối cùng nhanh hơn và độ trễ mạng cao hơn.
Mặc dù các ước tính khác nhau, nhưng việc giới thiệu sharding dự kiến sẽ mở rộng quy mô Ethereum để xử lý hàng trăm nghìn giao dịch mỗi giây. Với tỷ lệ TPS cao hơn, Ethereum có thể cung cấp khả năng mở rộng mà dApps cần để xử lý mức tăng đột biến trong sử dụng và tiếp cận hàng tỷ người dùng, tháo bỏ đi những rào cản hiện tại. Nhưng đồng thời, đây cũng là một công việc khó khăn cần sự nỗ lực và đồng lòng của cộng đồng phát triển Ethereum. Hãy cùng GFI theo dõi Ethereum và các bước tiến về sharding trong những bài viết sau nhé.