Proof of Authority (hierachain/consensus/proof_of_authority.py)
Tổng quan
Proof of Authority (PoA) là giao thức đồng thuận dựa trên danh tính, được tối ưu hóa cho các mạng blockchain riêng tư hoặc mạng nội bộ doanh nghiệp. Thay vì giải quyết các bài toán mật mã phức tạp (như mining), PoA dựa vào một nhóm các nút được cấp quyền (Authorities) để xác thực và đóng khối, giúp đạt được tốc độ giao dịch cực nhanh với độ trễ tối thiểu.
Nguyên lý hoạt động
Giao thức hoạt động dựa trên sự tin tưởng vào danh tính của các nút tham gia:
1. Định danh nút: Mỗi Authority được gán một authority_id và một cặp khóa ký số duy nhất.
2. Lịch trình luân phiên (Round-Robin): Hệ thống sử dụng thuật toán tuần tự để xác định nút nào có quyền tạo khối tiếp theo dựa trên chỉ số khối (BlockIndex % TotalAuthorities).
3. Xác thực chữ ký: Mỗi khối mới phải được ký bởi Authority được chỉ định. Các nút khác sẽ xác thực chữ ký này trước khi chấp nhận khối vào sổ cái.
Các tính năng chính
-
Hiệu năng Đột phá
Khối được tạo ngay lập tức theo chu kỳ cấu hình (
block_interval), phù hợp cho các ứng dụng yêu cầu phản hồi thời gian thực. -
Quản trị Danh tính
Hỗ trợ thêm/xóa Authority linh hoạt thông qua API, cho phép thay đổi cấu hình mạng mà không cần dừng hệ thống.
-
Tính Toàn vẹn Tuyệt đối
Mọi khối đều mang chữ ký số của một tổ chức được xác thực, loại bỏ hoàn toàn rủi ro từ các nút vô danh hoặc giả mạo.
Tham số cấu hình quan trọng
| Tham số | Ý nghĩa | Mặc định |
|---|---|---|
block_interval |
Khoảng thời gian tối thiểu giữa hai khối. | 10.0 giây |
max_authorities |
Số lượng nút Authority tối đa trong mạng. | 100 |
require_signature |
Bắt buộc phải có chữ ký hợp lệ để chấp nhận khối. | True |
Ví dụ triển khai
from hierachain.consensus import ProofOfAuthority
# Khởi tạo giao thức PoA
poa = ProofOfAuthority()
# Cấp quyền cho các nút tham gia đồng thuận
poa.add_authority("node_hq", metadata={"org": "Headquarters", "pubkey": "..."})
poa.add_authority("node_branch_1", metadata={"org": "Branch 01", "pubkey": "..."})
# Kiểm tra quyền tạo khối của nút hiện tại
if poa.can_create_block("node_hq"):
# Tiến hành đóng khối...
pass
Ưu điểm và Hạn chế
- Ưu điểm: Tiết kiệm tài nguyên (không cần CPU mạnh để đào), thông lượng cao, quản trị minh bạch.
- Hạn chế: Tính phi tập trung thấp hơn so với BFT, chỉ phù hợp cho mạng có sự tin tưởng nhất định giữa các thành viên.