Trong bài viết trước, mình đã chia sẻ về cách hoạt động của blockchain và khái niệm về multichain cũng như crosschain. Vẫn là ví dụ về một công ty đa quốc gia và nhà kho với 100 người làm việc mỗi kho , lần này mình sẽ chia sẻ về scalability và giải pháp Sharding, một giải pháp được Vitalik cho là có thể giải quyết được bộ ba Blockchain Trilemma và đang được ứng dụng bởi Solana, Near, Polkadot,…
1. Câu chuyện về khả năng mở rộng (Scalability):
Khi có một giao dịch xảy ra (xuất kho/nhập kho), mỗi người đều ghi chép lại thông tin của giao dịch đó (mã hoá đơn, số dư tồn kho,…) vào sổ. Có hai vấn đề trong cách vận hành này:
- Có quá nhiều giao dịch: Giả sử một người có khả năng xử lý 100 giao dịch, thì 100 người không có nghĩa là sẽ xử lý được 100*100=10,000 giao dịch. Bởi vì khi một người xử lý một giao dịch xong thì 99 người còn lại phải cập nhật lại thông tin giao dịch và số hàng tồn kho vào sổ ghi chép của mỗi người, sau đó giao dịch tiếp theo mới được diễn ra. Nếu hàng hoá khác nhau thì có thể chia ra để xử lý nhưng rồi cũng phải update vào sổ theo thứ tự time hoàn thành hoá đơn (cách vận hành của blockchain) nên thành ra vẫn phải chờ. Chưa kể là trong 10,000 giao dịch thì đen gì chả có 1 mặt hàng xuất hiện 2 lần (thành ra vẫn phải chờ để update cho đúng time hoàn thành giao dịch và đúng số dư tồn kho của mặt hàng đó). Vậy nên nếu 1 người xử lý 100 giao dịch/1 giây thì 100 người sẽ xử lý được là X và X giao động trong khoảng: 100<= X <= 10000. Trong blockchain, mỗi người là một nodes. Đối với POW (Proof Of Work), mỗi node là một máy đào. Còn trong POS (Proof Of Stake), DPOS (Delegated Proof of Stake) và Masternode, mỗi nodes là một ví staking. Còn khả năng xử lý giao dịch của mỗi người sẽ tương đương với kích thước khối. Mỗi người có khả năng xử lý 100 giao dịch trong 1 phút thì khích thước khối đó sẽ là 100, còn tốc độ giao dịch sẽ là 100/60~1.6667 TPS (Transactions Per Second: số giao dịch/s ).
- Người ghi chép có vấn đề: Có thể là ông nội đó gian lận, hoặc đau ốm, già yếu, thất tình, bị cắm sừng, valentine không có ny nên chán không muốn làm việc,… Giảm đi một người làm việc thì hiệu quả của kho hàng sẽ giảm đi. Điều này sẽ không đáng kể vào ngày kho hàng có ít giao dịch vì 99 người còn lại ghi sổ cũng khá là ok rồi. Nhưng vào ngày đông nghẹt khách (lúc blockchain tắc nghẽn) thì lại là một vấn đề lớn.
Có nhiều cách mở rộng mạng lưới xử lý giao dịch khác nhau. Cách đơn giản nhất là thêm người vào nhà kho để tăng tốc độ xử lý. Đây là giải pháp đầu tiên mà Ethereum hướng đến – POS (Proof Of Stake) – theo cách này thì hệ thống mạng lưới các nodes sẽ dễ dàng mở rộng hơn so với POW bởi vì khuyến khích một người làm cái ví staking rõ ràng là đơn giản và ít tốn kém hơn là sắm một dàn máy đào mới.
Giải pháp mở rông thứ hai mà Ethereum cũng muốn nhưng chưa làm được là Sharding.
2. Sharding là gì?
Theo cách này, thay vì 100 người trong nhà kho cùng ghi chép lại thông tin sau mỗi giao dịch thì quản lý sẽ chia 100 người này thành 4 nhóm, mỗi nhóm là 25 người. Mỗi nhóm trong blockhchain sẽ gọi là Shard (tất cả có 4 shards), mỗi shard bao gồm 25 nodes (25 người). Một số dự án sẽ hiển thị số shards và số nodes trên trang web của họ, anh em research nhiều project platform sẽ quen thuộc với điều này.
Theo cách vận hành này, khi một người xử lý một giao dịch, nếu người này nằm trong shard nào thì 24 người còn lại sẽ ghi lại thông tin giao dịch đó. 75 người trong 3 shard còn lại không cần bận tâm.
Tuy nhiên, theo cách này, để gian lận thì việc thông đồng với 12 người trong số 25 người rõ ràng là dễ hơn so với 50 người trong số 100 người. Tất nhiên là giữa người với người thì 13 người đồng lòng và tin tưởng tuyệt đối cũng khá là khó, nhưng không phải là không thể. Hơn nữa trong blockchain, với khả năng tính toán của siêu máy tính thì việc này khá là dễ dàng. Chúng ta có thể thấy, để đạt được khả năng mở rộng (scalability) và sự phi tập trung (Decentralized, hệ thống có thể vận hành mà không lo ngại về sự gian lận của các nodes) thì bảo mật (security – đảm bảo không bị tấn công 51%) sẽ bị giảm đi đáng kể. Đây chính là vấn đề Blockchain Trilemma mà Vitalik đã đề cập.
Nhận thấy được vấn đề này, trong cách áp dụng Sharding vào Blockchain của Vitalik có thêm một vài yếu tố, đó là xáo trộn danh sách các người ghi chép (nodes) và chọn ngẫu nhiên một nhúm người trong số đó cùng xác minh một giao dịch. Điều này sẽ đảm bảo những người trong cùng một shard khó liên kết với nhau để gian lận, và các thông tin sẽ được lưu nhiều ở hơn 1 shard (vì đã xáo trộn). Theo Vitalik, với phương pháp này, muốn tấn công một blockchain thì cần sức mạnh tính toán có thể tấn công 30-40% mới có thể hack được hệ thống blockchain (51% là tối ưu, 25% là chấp nhận được).
KẾT LUẬN: Với một người cẩn thận và theo đuổi sự hoàn hảo như mình thì 30-40% vẫn còn nhỏ. Bởi vì mình có đọc một bài báo khá lâu thì để tấn công 51% vào hệ thống Bitcoin, với công nghệ hiện đại thì không thể, nhưng với công nghệ máy tính lượng tự thì hoàn toàn có thể. Với một blockchain càng lâu đời thì càng có nhiều khối, mà càng có nhiều khối thì tấn công 51% càng khó. Đó là với Bitcoin, còn với các blockchain mới thì số lượng khối sẽ nhỏ hơn, cộng với việc chỉ cần 30% thì mình vẫn chưa ưng ý lắm. Đây là một trong số những lý do mình Bullish Nillion, một dự án mới nhưng sau này chắc chắn sẽ đánh bại các blockchain hiện có, kể cả Ethereum và Bitcoin.
P/S: Phần sau mình sẽ giải thích về giải pháp mở rộng thứ 3: Layer2. Đây cũng là giải pháp mở rộng hot nhất và đang được thịnh hành nhất, bao gồm: State Channel, Optimistic Rollups và ZK Rollups. Nếu bài viết bổ ích, hãy thoải mái share nha ^^
[…] 3. Sharding (Zilliqa, QKC, Solana, Near,…): Các nodes hoạt động thành từng cụm gọi là một shard, mỗi cụm gồm nhiều nodes. Xem thêm về Sharding ở bài viết “Câu chuyện khả năng mở rộng (Scalability) và giải pháp Sharding cho Blockchain“. […]