Blockchain Architecture
Cấu trúc của blockchain giống như tên gọi của nó: là một chuỗi các khối lưu một danh sách các giao dịch tương tự như một cuốn sổ cái.
Mỗi khối trong blockchain sẽ trỏ đến khối trước đó thông qua một tham chiếu, mà cụ thể là giá trị hash của khối. Khối được trỏ đến được gọi là khối cha (parent block). Ở một số hệ thống blockchain, chẳng hạn như Ethereum, giá trị hash của khối mà được sinh ra cùng lúc với parent block (hay còn được gọi là uncle block), cũng được lưu ở trong blockchain.
Khối đầu tiên của blockchain là genesis block, là một khối mà không có khối cha.
Block
Một khối sẽ bao gồm hai phần là header và body. Phần header bao gồm những thành phần cơ bản như sau:
- Phiên bản của khối: giúp cho biết những quy luật thẩm định (validation rules) nào mà khối cần phải tuân theo. Trường này phục vụ cho việc đào coin.
- Giá trị hash của parent block: là một giá trị 256-bit.
- Giá trị hash của đỉnh gốc trong cây Merkle (Merkle root hash): đại diện cho giá trị hash của toàn bộ các giao dịch có trong khối.
- Nhãn thời gian (timestamp): thời gian mà khối được tạo ra kể từ thời điểm 1970-01-01T00:00 UTC.
Ngoài ra còn có hai trường bits và nonce ở bên trong header của khối, đều được dùng để phục vụ cho việc đào coin.
- Bits: một giá trị 4-byte, là dạng biểu diễn ngắn gọn của target difficulty.
- Nonce: một giá trị 4-byte, có giá trị bắt đầu là 0 và sẽ được tăng dần qua mỗi lần thực hiện tính toán.
Phần body của khối bao gồm một bộ đếm số giao dịch (transaction counter) và một tập các giao dịch. Số lượng giao dịch tối đa của một khối phụ thuộc vào kích thước khối và kích thước của mỗi giao dịch.
Blockchain sử dụng một cơ chế mã hóa bất đối xứng, mà cụ thể là hệ chữ ký điện tử, để xác minh các giao dịch.
Digital Signature
Mỗi người dùng hệ thống chữ ký điện tử sở hữu một cặp khóa bao gồm khóa bí mật và khóa công khai. Khóa cá nhân được sử dụng để ký lên các giao dịch.
Các giao dịch đã được ký này sẽ được chuyển đi cho tất cả các node có tham gia vào cùng hệ thống mạng với người ký. Người ký các giao dịch cũng chính là người thực hiện các giao dịch.
Một hệ thống chữ ký điện tử luôn bao gồm hai giai đoạn: giai đoạn ký và giai đoạn xác minh.
Giả sử Alice muốn thực hiện giao dịch, cô ấy cần phải tính toán giá trị hash của giao dịch. Sau đó Alice sẽ mã hóa giá trị hash này với khóa bí mật của mình, đồng thời gửi đi cho tất cả các node trong hệ thống mạng kèm với bản gốc của giao dịch.
Giả sử Bob là một trong số những người nhận được thông điệp từ Alice, anh ta sẽ tiến hành giải mã giá trị hash sau khi được mã hóa bằng khóa công khai của Alice. Sau đó đối chiếu với bản gốc của giao dịch nhằm xác minh cho giao dịch.
Quá trình xác minh cho các giao dịch sẽ được diễn ra khi một khối mới được thêm vào blockchain.
Key Characteristics of Blockchain
Tính phân tán: Đây là đặc điểm vô cùng quan trọng khiến cho Blockchain thực sự là một công nghệ của sự minh bạch. Đúng như cái tên của nó, khi có một giao dịch xảy ra thì đa số người trong mạng lưới đồng thuận thì giao dịch đó mới được thực hiện. Blockchain là sức mạnh của sự đoàn kết mang lại.
Tính bất biến: dữ liệu trong Blockchain không thể sửa hoặc có thể sửa nhưng sẽ để lại dấu vết (do sự kết hợp của thuật toán băm và mã hóa bất đối xứng có trong blockchain) và sẽ được lưu trữ mãi mãi.
Tính ẩn danh: đối với công nghệ blockchain thì khi chúng ta thực hiện một giao dịch thì tất cả mọi người trong mạng lưới đều biết là chúng ta thực hiện giao dịch đó nhưng các thông tin chi tiết và riêng tư thì chỉ có một mình chúng ta biết.
Tính có thể kiểm toán (auditability): người dùng có thể truy ngược lại các block trước của blockchain bằng cách truy cập vào bất cứ node nào có trong mạng lưới. Thậm chí trong blockchain của Bitcoin, có thể truy ngược lại các giao dịch trước đó của một giao dịch bất kỳ.
Taxonomy of Blockchain Systems
Hệ thống Blockchain chia thành 3 loại chính:
Public
Bất kỳ ai cũng có quyền đọc và ghi dữ liệu trên blockchain. Quá trình xác thực giao dịch trên blockchain này đòi hỏi phải có nhiều node tham gia nên việc tấn công được vào hệ thống blockchain này cần chi phí rất lớn và thực sự không khả thi.
Ví dụ cho public blockchain: Bitcoin, Ethereum,…
Private
Người dùng chỉ được quyền đọc dữ liệu, không có quyền ghi vì điều này thuộc về bên tổ chức thứ ba tuyệt đối tin cậy. Vì có ít node tham gia xác thực, thời gian xác nhận giao dịch khá nhanh.
Ví dụ của private blockchain: Ripple là một dạng private blockchain, hệ thống này cho phép 20% các node là gian dối và chỉ cần 80% còn lại hoạt động ổn định là được.
Permissioned (consortium)
Là một dạng của private blockchain nhưng bổ sung thêm một số tính năng khác, đây là sự kết hợp giữa public blockchain và private blockchain.
Ví dụ của permissioned blockchain: các ngân hàng hay tổ chức tài chính liên doanh sẽ sử dụng blockchain của riêng mình.
Bảng so sánh các tính chất của ba loại blockchain:
Consensus Algorithms
Blockchain là một hệ thống phân tán, sẽ không có một node trung tâm nào đó đứng ra chịu trách nhiệm đảm bảo rằng tất cả các sổ cái ở các node là giống nhau. Do đó, cần phải có một cơ chế nhằm đảm bảo sự đồng thuận của các node về một blockchain thống nhất. Cơ chế này được gọi là cơ chế đồng thuận.
Khi một người dùng tạo ra một giao dịch ở trong mạng lưới của blockchain, hệ thống sẽ thực hiện những bước sau:
- Bước 1: ghi lại tất cả các thông tin về giao dịch, chẳng hạn như người gửi, người nhận, thời gian gửi, etc vào một khối và chờ xác thực.
- Bước 2: các node có trong mạng lưới sẽ tiến hành thống nhất xem là có nên chấp thuận thêm khối này vào blockchain hay không. Tùy thuộc vào loại network mà cơ chế đồng thuận sẽ khác nhau.
- Bước 3: sau khi đạt được sự đồng thuận thì khối sẽ được thêm vào tất cả các blockchain của tất cả các node có trong mạng lưới.
Trong blockchain, bài toán đạt được sự đồng thuận chính là một dạng của bài toán “các vị tướng quân Byzantine” (Byzantine Generals Problem).
Approaches to Consensus
Proof of Work
Cơ chế proof of work (PoW) là cơ chế đồng thuận được sử dụng cho Bitcoin. Cơ chế này yêu cầu một quá trình tính toán phức tạp để thực hiện việc xác thực.
Trong mạng lưới sử dụng PoW, mỗi node sẽ cố gắng tìm một giá trị được gọi là nonce để ghép vào header của khối. Sau đó, node sẽ tính toán giá trị hash của block header sao cho bé hơn một giá trị 256-bit được quy ước sẵn, được gọi là target difficulty (T).
Việc tính toán được thể hiện bằng bất phương trình bên dưới:
Hàm SHA256d là một hàm của Bitcoin, tương ứng với hai lần gọi hàm SHA256:
Minh họa:
Nếu có bất kỳ một node nào đó tìm được nonce thì sẽ phải gửi nonce này cho tất cả các node còn lại có trong mạng lưới. Khi đó, các node còn lại sẽ tiến hành tính toán lại giá trị hash để kiểm tra tính đúng đắn của nonce.
Nếu nonce là đúng đối với các node đó, các giao dịch bên trong khối sẽ được xác minh thông qua chữ ký điện tử như đã đề cập ở trên và sẽ được thêm vào blockchain.
Node tính toán giá trị hash thì được gọi là miner (thợ đào) và quá trình thực hiện PoW thì được gọi là mining (đào coin) bởi vì quá trình tính toán là một quá trình hao tốn tài nguyên nên cần phải có một phần thưởng tương ứng, mà cụ thể ở đây là Bitcoin.
Forking
Trong các hệ thống phân tán, các khối hợp lệ có thể được xác thực một cách đồng thời khi nhiều node cùng tìm được nonce thỏa mãn bất phương trình (1) tại các thời điểm gần như bằng nhau. Khi đó, blockchain sẽ hình thành nên các nhánh.
Trong PoW, nhánh nào có nhiều block nhất sẽ được xem là blockchain thực sự.
Giả sử trong hình bên dưới, hai block B11 và G11 đều được tạo ra cùng một lúc khiến cho blockchain tách thành hai nhánh.
Nếu sau đó có một khối B12 được thêm vào sau B11 thì các miner sẽ chuyển sang đào coin ở trên nhánh B9 - B12 vì nhánh này là nhánh dài nhất. Nếu có một khối G12 được thêm vào sau G11 thì nhánh G11 - G12 cũng sẽ không còn được xem là blockchain thực sự.
Disadvantages
Để thực hiện PoW, các thợ đào cần phải thực hiện nhiều tính toán phức tạp và việc này làm hao tốn tài nguyên. Để giảm thiểu sự lãng phí, một số đồng tiền chẳng hạn như Primecoin tận dụng việc đào coin để giải quyết một bài toán khó nào đó, mà cụ thể là tìm ra một chuỗi các số nguyên tố phục vụ cho việc nghiên cứu toán học.
Proof of Stake
Cơ chế đồng thuận proof of stake (PoS) là một cơ chế tiết kiệm tài nguyên hơn PoW bởi vì các thợ đào không cần phải thực hiện nhiều tính toán. PoS yêu cầu mọi người chứng minh sự sở hữu của họ đối với các đồng tiền điện tử mà họ có. Ai có nhiều tiền thì sẽ được ưu tiên hơn trong quá trình chọn lựa làm thợ đào. Bởi vì người nào càng có nhiều thì càng khó có khả năng tấn công vào hệ thống mạng mà họ đang tham gia.
Tuy nhiên, việc chọn lựa như vậy sẽ không công bằng bởi vì người giàu nhất sẽ có quyền thống trị mạng lưới. Cần phải dựa trên lượng tiền đặt cọc của các nodes nhằm giải quyết vấn đề này. Ví dụ, đồng tiền Blackcoin chọn node nào có giá trị hash (H) của tổng giữa một giá trị ngẫu nhiên (R) và lượng tiền đặt cọc (SizeOfStake) là thấp nhất làm thợ đào.
Có một biến thể của cơ chế PoS là DPoS (Delegate Proof of Stake): các node ủy thác một node thực hiện việc xác thực. Nhờ vậy mà số node cần để thực hiện việc xác thực giảm xuống, dẫn đến việc tạo mới một khối trở nên nhanh hơn.
Practical Byzantine Fault Tolerance
Ban đầu, một node sẽ được chọn là primary.
Cơ chế này gồm bốn giai đoạn:
- Primary node công bố một khối chưa được xác thực cho các node khác thông qua một đề xuất (proposal).
- Mỗi node xác thực proposal và gửi thông điệp pre-prepare cho tất cả các node còn lại.
- Nếu một node nhận được thông điệp pre-prepare từ ít nhất 2/3 node có trong mạng lưới thì nó sẽ broadcast thông điệp prepare cho tất cả các node.
- Các node khi nhận được thông điệp prepare từ ít nhất 2/3 node thì sẽ broadcast thông điệp commit. Sau đó, nếu node nào nhận được thông điệp commit từ ít nhất 2/3 node thì nó sẽ chấp nhận khối.
Trước khi chuyển đi một thông điệp, mỗi node đều cần phải thực hiện việc xác thực khối. Danh tính của tất cả các node cần phải được biết bởi hệ thống mạng.
Một cơ chế khác tương tự với PBFT là Tenderminht. Tuy nhiên, primary node sẽ được chọn lại ở mỗi vòng thay vì chỉ được chọn một lần duy nhất.
Comparison
So sánh giữa các cơ chế đồng thuận: