Blockchain bao hàm một cấu trúc dữ liệu, một hình thức cơ sở dữ liệu phân tán, một thuật toán bảo vệ dữ liệu với cơ chế phân quyền & đồng thuận và quan trọng hơn chính là ứng dụng của dữ liệu đó trong đời sống.
Mục lục
Blockchain và Bitcoin
Trước hết tôi cũng nói luôn là Blockchain không phải Bitcoin. Bitcoin là một ứng dụng nổi bật nằm trong top-of-mind về Blockchain, giống như xe máy và thương hiệu Honda.
Bitcoin (và các loại coin tương tự) được promote mạnh mẽ như một loại “vàng kỹ thuật số”, có tác dụng như một “tài sản trú ẩn”, và các coin thủ lợi dụng từ khóa Blockchain để khơi nên niềm tin về một thứ “nắm giữ tương lai”, từ đó thu hút đầu tư và đẩy cao giá trị đồng tiền này.
Còn tôi là một lập trình viên nghiệp dư, luôn muốn nhìn nhận Blockchain ở bản chất công nghệ của nó.
Cấu trúc dữ liệu của Blockchain
Đầu tiên là cái tên. Blockchain có thể hiểu là chain-of-blocks, nghĩa là một “chuỗi” các “khối”.
“Block” ở đây đơn giản là một khối dữ liệu có cấu trúc. Dữ liệu này có thể được đặt những cái tên mỹ miều kiểu như Bitcoin, Smart Contracts, NFT v.v… tùy theo ứng dụng của nó.
Một Block có mối liên kết cực kỳ chặt chẽ với Block trước đó (Parent Block). Cụ thể thông tin liên kết đó là mã Hash của Parent Block. Ta có thể hình dung mã hash này như là con trỏ trong danh sách liên kết.
Mã Hash này được tạo ra bằng một thuật toán hashing nào đó. Ví dụ nếu dùng thuật toán SHA-256, mã hash sẽ có chiều dài 32 byte.
Dữ liệu được ‘hash’ gồm mã Hash của khối trước đó cùng những thông tin quan trọng khác trong Block như thông tin giao dịch (transaction), timestamp và các yếu tố khác (như giá trị Nonce dùng trong giao thức Proof of Work của các đồng coin).
Với giới hạn năng lực tính toán hiện tại, mã hash được cho là an toàn (từ mã hash rất khó giải ngược ra dữ liệu), có thể coi là duy nhất (rất khó tạo ra hash trùng lặp) nên được xem như “địa chỉ” của Block trong blockchain.
Block đầu tiên có tên gọi là Block 0 hoặc là Genesis Block và đương nhiên nó không có Parent Block.
Dù được gọi là “chain”, cấu trúc của Blockchain thực ra lại có cấu trúc dữ liệu dạng cây. Còn cái gọi là Blockchain được quy ước chính là nhánh dài nhất trong cây tính từ Block 0.
Blockchain bảo toàn dữ liệu
Do sự phụ thuộc mang tính “huyết thống” như nói ở trên, bạn không thể dễ dàng thay đổi data trong block. Chỉ 1-bit thông tin bị khác đi cũng làm thay đổi mã Hash của một Block, từ đó phá vỡ mối liên kết với tất cả những block tiếp sau nó.
Vì thế hệ thống Blockchain quy ước: Một Block khi sinh ra thì tốt nhất không được phép thay đổi hoặc bị xóa. Đây gọi là quy tắc bất biến (immutable).
Thay vì “chỉnh sửa” dữ liệu của Block, ta buộc phải thêm một block mới cùng giá trị mới. Thế là bất kỳ sự chỉnh sửa nào cũng sẽ để lại dấu vết.
Việc tạo ra một Block như trên có vẻ quá đơn giản. Đối với một hệ thống blockchain nội bộ (private) có sự kiểm soát thì OK nhưng với một blockchain công cộng (public) thì nguy cơ thành tự do quá trớn – gây hỗn loạn dữ liệu và cạn kiệt tài nguyên hệ thống.
Bởi vậy người ta phải tìm cách hạn chế việc tự do tạo Block bằng một bộ tiêu chí – Một block phải thế nào mới được thêm vào blockchain. Từ đó cơ chế đồng thuận (Consensus) đã ra đời.
Xét về khía cạnh tâm lý thì cái gì hiếm nó mới quý. Đây là lý do chúng ta có “tiền ảo” như Bitcoin bởi cơ chế consensus của nó đòi hỏi rất nhiều năng lực tính toán.
Như bạn thấy Bitcoin là càng đào càng kiệt (tổng cộng chỉ có 21 triệu coin), càng đào càng tốn tài nguyên (độ khó tăng dần nên càng về sau càng cần nhiều sức mạnh phần cứng, cụ thể là GPU – gián tiếp tạo nên cơn khủng hoảng card màn hình vừa qua) nên độ quý hiếm của nó như vàng vậy.
Tính phân tán và phi tập trung của Blockchain
Blockchain an toàn hơn khi kết hợp khả năng Phân tán (Distributed). Dữ liệu của blockchain không chỉ tồn tại trên một thiết bị (ví dụ PC của tôi hoặc một server nào đó) mà “bản copy” của nó cũng xuất hiện trên (rất) nhiều thiết bị (Node) khác của những người tham gia trong mạng lưới.
Khi một Block được thêm vào Blockchain thì bằng cách nào đó thông tin này sẽ được Broadcast đến các Node lưu trữ khác để các chúng cập nhật Block mới vào Blockchain của mình.
Thoạt nghe thì có vẻ dữ liệu đang bị lưu trữ dư thừa và tốn kém vì mỗi Node gần như phải lưu trữ toàn bộ Blockchain. Nhưng những người xây dựng hệ thống Blockchain có niềm tin rằng công nghệ sẽ phát triển còn nhanh hơn sự tăng trưởng của Blockchain nên mọi hạn chế về tài nguyên (như CPU, GPU, RAM, dung lượng lưu trữ) rồi cũng đáp ứng được cả thôi.
Một số blockchain như Bitcoin và Etherium đề xuất cơ chế tiết kiệm dung lượng lưu trữ.
Thay vì lưu trữ toàn bộ thông tin transaction của Block, Blockchain chỉ lưu Merkle Root Hash có độ dài chỉ 32 byte nhưng đủ để xác minh tính toàn vẹn (integrity) & hợp lệ của giao dịch.
Điều này có được nhờ ứng dụng Cấu trúc dữ liệu Cây Merkle (Merkle Tree – Binary Hash Tree) để mã hóa thông tin transaction.
Như vậy với Bitcoin, một Block lưu trữ trên Node sẽ chiếm khoảng 80 byte bao gồm:
• Version (4 byte).
• Hash của Block trước đó (32 byte)
• Merkle Root Hash (32 byte).
• nBits (4 byte).
• Time (4 byte).
• Nonce (4 byte).
Sự phân tán này còn góp phần vào việc xây dựng cơ chế Phi tập trung (Decentralized). Ở đó, việc xác nhận một Block được tạo là hợp lệ phải được sự đồng thuận (consensus) từ phần lớn Node khác trong mạng.
Về lý thuyết nếu muốn chỉnh sửa blockchain theo ý muốn thì bạn phải thao túng được hơn 50% số lượng Node trên mạng lưới. Đây còn được gọi là 51% attack.
Nếu số lượng node ‘khách quan’ trong mạng lưới càng lớn thì sự thao túng này càng trở nên khó khả thi vì sẽ phải đầu tư vô cùng tốn kém.
Vì thế số lượng Node “khách quan” trong mạng lưới chính ra cơ sở để bảo an cho hệ thống blockchain cả về toàn vẹn dữ liệu (Integrity) lẫn bảo mật (Security).
Ngoài ra, các Giao thức đồng thuận (Consensus Protocols) cũng là một tấm khiên bảo vệ cho Blockchain trước các cuộc tấn công vào cơ chế Phi tập trung thông qua rào cản về tính minh bạch và chi phí đầu tư tài nguyên cực lớn.
Định dạng lưu trữ của Blockchain
Việc lưu trữ dữ liệu gì trên Blockchain phụ thuộc vào ứng dụng (use case) của nó.
Vì Node nào cũng chứa một “bản copy” của Blockchain nên việc hạn chế lưu trữ tại các Node thực sự là một vấn đề, chưa kể câu chuyện bảo mật thông tin nếu sử dụng một public blockchain (kiểu như Etherium).
Sẽ là đen cho bạn nếu upload nhầm thứ gì đó quan trọng lên Blockchain vì bạn sẽ không thể xóa nó đi.
Nếu sử dụng nền tảng Blockchain bên thứ ba thì ngoài chi phí trên mỗi transaction, nhà cung cấp Blockchain có thể tính phí trên dung lượng data được lưu trữ, thậm chí còn thu phí trên thời gian thực hiện transaction – rõ ràng data càng lớn càng thực hiện lâu.
Làm sao để lưu trữ những dữ liệu lớn?
Ý tưởng ở đây là thay vì chúng ta lưu trữ toàn bộ data trên Blockchain thì chúng ta lưu trữ …mã Hash của data đó.
Mã hash thì có kích thước rất nhỏ. Nếu dùng thuật toán HASH-256 thì kích thước mã Hash luôn là 32 byte, trình bày dưới dạng hexa thì là một chuỗi 64 ký tự. Về lý thuyết có thể đại diện 1:1 cho data.
Data của chúng ta sẽ thay vì lưu trữ trên Blockchain thì lưu trữ tại chỗ nào đó khác …theo kiểu truyền thống ví dụ như trên server nào đó. Ta có thể dùng mã hash để “query” data trên server đó, cũng như làm checksum để xác nhận sự đúng đắn của data.
Người ta gọi dữ liệu kiểu này là off-chain (ý là không lưu trữ trên blockchain). Ngược lại với nó là on-chain data là thông tin lưu trên Blockchain ~ chính là cái mã hash kia.
Blockchain sử dụng hệ cơ sở dữ liệu nào?
Thông thường thiết kế của Blockchain sử dụng Hệ cơ sở dữ liệu NoSQL (CSDL không quan hệ) để lưu trữ on-chain data do tính mềm dẻo của nó (không có cấu trúc bảng hay định dạng dữ liệu cụ thể) và tính khả mở (lưu trữ phân tán trên nhiều thiết bị nên tăng tốc độ & khả năng lưu trữ, giảm thiểu lỗi khi đọc ghi dữ liệu lớn).
Cơ chế đồng thuận (Consensus Mechanism)
Blockchain sử dụng cơ chế đồng thuận để xác thực một Block dữ liệu là “hợp lệ” trước khi được thêm / chỉnh sửa nhằm đảm bảo độ tinh cậy và minh bạch của mạng lưới.
Có nhiều loại cơ chế đồng thuận khác nhau. Mỗi cơ chế là một tập hợp các quy tắc để một nhóm Node (lý tưởng nhất là tất cả các Node) trong mạng lưới đánh giá tính đúng đắn của Block chuẩn bị được thêm vào Blockchain.
Một số cơ chế đồng thuận phổ biến được biết đến như Proof of Work (PoW), Proof of Stake (PoS) hay Proof of Authority (PoA).
Blockchain có thể ứng dụng rộng rãi?
Từ lúc Blockchain ra đời và trở nên phổ biến thì từ khóa này bỗng trở thành một Hot trend. Bỗng dưng người người nhà nhà nhắc đến blockchain, cái gì cũng gắn công nghệ này vào cho nổi bật. Nhiều lập trình viên còn có ý định từ bỏ những thiết kế truyền thống để chuyển sang Blockchain.
Vậy thực sự Blockchain nhiệm màu như vậy sao?
Tôi thấy Blockchain là một phát minh ấn tượng nhưng những use case “có tính khả thi” để ứng dụng sức mạnh của nó triệt để lại không nhiều.
Rào cản của Blockchain bao gồm:
- Sự phức tạp trong thiết kế và phát triển phần mềm.
- Cơ sở hạ tầng tốn kém.
- Hiệu năng (Sức mạnh tính toán, dung lượng lưu trữ của thiết bị & tốc độ đường truyền mạng).
- Chi phí khổng lồ để chuyển đổi từ hệ thống không Blockchain sang hệ thống mới.
- Chi phí để lôi kéo và giữ chân người dùng tham gia mạng lưới.
- Quản trị rủi ro.
Các ứng dụng của Blockchain thường giải quyết các vấn đề đòi hỏi khả năng chống giả mạo chứng cứ (Tamper-Evidence). Đây là lý do Blockchain hay dính dáng đến Công nghệ tài chính (Fintech).
Để hoàn thiện điều đó, Blockchain cần sự minh bạch đến mức công khai trước đại chúng (Transparency). Mọi thay đổi cần nhờ đến sự xác thực của một cộng đồng khách quan vì không nên đặt lòng tin vào bên liên quan nào (Decentralization).
Vì thế thậm chí trong Core Banking của các Hệ thống Ngân hàng đến giờ cũng chưa bên nào ứng dụng Blockchain vì quá nhiều rủi ro.
Tuy nhiên không thể phủ nhận sức ảnh hưởng của công nghệ này trong hiện tại và tương lai, với tầm nhìn về Web 3.0 và Metaverse.