Tài liệu tham khảo Cơ chế Đồng thuận
Các luồng công việc liên quan: Gửi Sự kiện · Đồng thuận BFT
HieraChain hỗ trợ ba cơ chế đồng thuận có thể cắm (pluggable), được cấu hình thông qua biến môi trường HRC_CONSENSUS_TYPE. Luồng gửi sự kiện (Gửi Sự kiện) là hoàn toàn giống nhau bất kể cơ chế nào được chọn — chỉ khác biệt ở bước finalize_block().
So sánh các Cơ chế
| Khía cạnh | PoA | PoF | BFT |
|---|---|---|---|
| Giá trị cấu hình | proof_of_authority |
proof_of_federation |
byzantine_fault_tolerant |
| Thành phần hoàn thiện | Bất kỳ nút ủy quyền nào được đăng ký | Chỉ Trưởng nhóm xoay vòng: Validators[index % n] |
2f+1 trên tổng số n trình xác thực qua PBFT |
| Loại chữ ký | Ed25519 (bất đối xứng) | Chữ ký liên minh SHA-256 | Phiếu bầu PBFT tổng hợp |
| Xoay vòng Trưởng nhóm | Tùy chọn vòng tròn (round-robin) | Bắt buộc — xác định bởi chỉ số khối | Dựa trên View (Khung nhìn), thay đổi khi gặp lỗi |
| Kiểm tra Bằng chứng ZK | Tùy chọn | Bắt buộc trong validate_block() |
Không áp dụng |
| Trình xác thực tối thiểu | Chỉ cần 1 nút ủy quyền | ≥ 3 (cấu hình min_validators) |
n ≥ 3f + 1 |
| Mô hình lỗi | Tin cậy danh tính nút ủy quyền | Tin cậy phân tán, dung thứ cho việc thiếu trình xác thực | Dung thứ tối đa f nút lỗi Byzantine |
| Trường hợp sử dụng | Mạng nội bộ / riêng tư | Liên minh / đa tổ chức | Môi trường quan trọng / có tính đối kháng |
Đồng thuận Ủy quyền (Proof of Authority - PoA)
Kích hoạt khi
HRC_CONSENSUS_TYPE=proof_of_authority(mặc định). Một nút ủy quyền duy nhất được đăng ký trước sẽ ký khối bằng khóa riêng tư Ed25519 của nó.
sequenceDiagram
autonumber
participant OS as ⚙️ OrderingService
participant POA as 🔏 ProofOfAuthority
OS->>POA: finalize_block(block, authority_id)
POA->>POA: is_authority(authority_id)
Note right of POA: Từ chối nếu không có trong danh sách ủy quyền
POA->>POA: _check_block_timing(block, previous_block)
Note right of POA: block.timestamp - prev.timestamp >= block_interval / 2
POA->>POA: _validate_block_events()
Note right of POA: Quét tất cả các sự kiện để tìm cụm từ bị cấm
POA->>POA: _create_authority_signature(block, authority_id, private_key)
Note right of POA: Chữ ký Ed25519 (hash + authority_id + timestamp)<br/>Chuyển về KeyPair ngẫu nhiên trong chế độ thử nghiệm
POA->>POA: Thêm sự kiện consensus_finalization<br/>{ authority_id, authority_signature, finalized_at }
POA-->>OS: Khối đã Hoàn thiện ✅
Các Lớp Quan trọng — PoA
| Bước | Lớp / Phương thức | Tệp |
|---|---|---|
| Kiểm tra quyền | ProofOfAuthority.is_authority() |
consensus/proof_of_authority.py |
| Kiểm tra thời gian | _check_block_timing() |
consensus/proof_of_authority.py |
| Ký khối | _create_authority_signature() |
consensus/proof_of_authority.py |
| Hoàn thiện khối | ProofOfAuthority.finalize_block() |
consensus/proof_of_authority.py |
Đồng thuận Liên minh (Proof of Federation - PoF)
Kích hoạt khi
HRC_CONSENSUS_TYPE=proof_of_federation. Trưởng nhóm (Leader) được bầu chọn một cách xác định bằng chỉ số khối. Bắt buộc kiểm tra bằng chứng ZK.
sequenceDiagram
autonumber
participant OS as ⚙️ OrderingService
participant POF as 🤝 ProofOfFederation
OS->>POF: finalize_block(block, authority_id)
POF->>POF: can_create_block(authority_id)
Note right of POF: Yêu cầu >= min_validators (mặc định 3)
POF->>POF: get_current_leader(block.index)<br/>= Validators[ block.index % n ]
POF->>POF: validate_block_proposer(block.index, authority_id)
Note right of POF: Từ chối nếu authority_id != trưởng nhóm dự kiến
POF->>POF: _validate_block_events()
Note right of POF: Quét tất cả các sự kiện để tìm cụm từ bị cấm
POF->>POF: _verify_block_zk_proof(block, previous_block)
Note right of POF: Bắt buộc — làm hỏng khối nếu ZK không hợp lệ
POF->>POF: _create_federation_signature(block, leader_id)<br/>SHA-256(hash:leader_id:block.index:time)
POF->>POF: Thêm sự kiện consensus_finalization<br/>{ leader_id, validators_count, round, signature }
POF-->>OS: Khối đã Hoàn thiện ✅
Các Lớp Quan trọng — PoF
| Bước | Lớp / Phương thức | Tệp |
|---|---|---|
| Bầu chọn trưởng nhóm | ProofOfFederation.get_current_leader() |
consensus/proof_of_federation.py |
| Kiểm tra người đề xuất | validate_block_proposer() |
consensus/proof_of_federation.py |
| Xác thực ZK | _verify_block_zk_proof() |
consensus/proof_of_federation.py |
| Chữ ký liên minh | _create_federation_signature() |
consensus/proof_of_federation.py |
| Hoàn thiện khối | ProofOfFederation.finalize_block() |
consensus/proof_of_federation.py |
Chống lỗi Byzantine (BFT / PBFT)
Kích hoạt khi
HRC_CONSENSUS_TYPE=byzantine_fault_tolerant. Đầy đủ quy trình PBFT 3 giai đoạn. Xem Đồng thuận BFT để biết luồng chi tiết.
Yêu cầu: Cần n ≥ 3f + 1 nút để dung thứ tối đa f nút bị lỗi hoặc hoạt động sai (lỗi Byzantine).
Thay đổi View (View Change): Nếu trưởng nhóm thất bại trong khoảng thời gian chờ (timeout), view += 1, trưởng nhóm mới = Validators[view % n], giao thức sẽ khởi động lại từ Giai đoạn 1.
Tài liệu Cấu hình
| Biến | Giá trị | Mô tả |
|---|---|---|
HRC_CONSENSUS_TYPE |
proof_of_authority (mặc định), proof_of_federation, byzantine_fault_tolerant |
Cơ chế đồng thuận đang hoạt động |
HRC_ENABLE_ZK_PROOFS |
true / false |
Bật/tắt xác thực ZK (bắt buộc đối với PoF trong môi trường chạy thực tế) |
HRC_ZK_MODE |
mock, production |
Cách thức triển khai ZK: giả lập SHA-256 hoặc dùng các mạch ZoKrates thực tế |