Mỗi transaction trong Hyperledger Fabric sẽ trải qua các giai đoạn sau:
- Proposal: client ký và gửi transaction proposal cho các endorsing peer. Transaction proposal là một tập các đối số dùng để invoke chaincode function.
- Endorsement:
- Các endorsing peer kiểm tra các tiêu chí sau1:
- Định dạng của transaction là đúng.
- Nó chưa được submit trong quá khứ.
- Chữ ký số của client là hợp lệ.
- Client có quyền propose transaction trong channel.
- Nếu các tiêu chí trên là thỏa mãn, nó sẽ thực thi chaincode dựa trên world state hiện tại của ledger để nhận lại kết quả bao gồm read-write set. Ta gọi kết quả thực thi này là transaction response. Chú ý rằng endorsing peer chỉ giả lập thực thi chứ không commit xuống ledger.
- Cuối cùng, endorsing peer gửi transaction response cho client kèm theo chữ ký số của nó (tạo thành endorsement).
- Client thu thập các kết quả chứng thực (endorsement) cho đến khi thỏa mãn chính sách. Khi đó, nó sẽ chuyển proposal thành transaction và gửi cho ordering service.
- Các endorsing peer kiểm tra các tiêu chí sau1:
- Ordering: ordering service sắp xếp các transaction vào một block theo thứ tự thời gian1.
- Delivery: ordering service broadcast các block đến các peer (bao gồm cả endorsing peer). Nếu có một peer nào bị crash hoặc vào channel sau, nó sẽ nhận được blockchain từ một peer khác thông qua gossiping2.
- Validation:
- Các peer khi nhận được một block từ ordering service sẽ tiến hành xác thực dựa trên endorsement policy (chính sách xác thực).
- Sau đó, trước khi thêm mới một block vào local ledger, các peer sẽ kiểm tra xem read set của ledger có bị thay đổi hay chưa. Điều này nhằm đảm bảo trạng thái của ledger là đồng nhất với thời điểm các endorsing peer giả lập thực thi transaction.
Minh họa từ 10.1109/IWBOSE.2019.8666486:
Related
Resources
Footnotes
-
tham khảo https://doi.org/10.1109/IWBOSE.2019.8666486. Trong bài báo này, phiên bản được đề cập là > 1.0, có thể có sự thay đổi so với phiên bản hiện tại là 2.x (2024). ↩ ↩2
-
tham khảo https://omnivore.app/me/the-ordering-service-hyperledger-fabric-docs-main-documentation-18d7cbb4f3f#61911e56-24ef-44c2-8eed-4f38a7044ee2 ↩