Đồng thuận BFT chạy PBFT 3 pha khi hoàn tất khối. Nó yêu cầu n >= 3f + 1 để chịu được f node lỗi hoặc gian lận. Cơ chế này thay thế bước finalize_block() trong luồng Gửi Sự kiện khi hệ thống chạy ở chế độ BFT.
Yêu cầu hệ thống: tối thiểu 4 node để chịu 1 lỗi Byzantine (n=4, f=1: 3x1+1=4).
Biểu đồ luồng: PBFT 3 pha
sequenceDiagram
autonumber
participant OS as ⚙️ OrderingService
participant L as 👑 Nút Trưởng nhóm (Leader Node)
participant ledger as 🖥️ Trình xác thực 1 (Validator 1)
participant business as 🖥️ Trình xác thực 2 (Validator 2)
participant Vf as 🖥️ Trình xác thực f (Validator f)
OS->>L: Gom cụm sự kiện sẵn sàng → kích hoạt đồng thuận
rect rgb(0, 0, 0, 0)
Note over L,Vf: PHA 1 — CHUẨN BỊ TRƯỚC (PRE-PREPARE)
L->>L: Gán số thứ tự, tạo thông điệp PRE-PREPARE
L->>ledger: PRE-PREPARE(view, seq, block_digest)
L->>business: PRE-PREPARE(view, seq, block_digest)
L->>Vf: PRE-PREPARE(view, seq, block_digest)
end
rect rgb(0, 0, 0, 0)
Note over L,Vf: PHA 2 — CHUẨN BỊ (PREPARE)
ledger->>ledger: Xác thực PRE-PREPARE, phát tin PREPARE
ledger->>L: PREPARE(view, seq, digest)
ledger->>business: PREPARE(view, seq, digest)
business->>L: PREPARE(view, seq, digest)
business->>ledger: PREPARE(view, seq, digest)
Note over L: Thu thập đủ 2f phiếu bầu PREPARE
end
rect rgb(0, 0, 0, 0)
Note over L,Vf: PHA 3 — CAM KẾT (COMMIT)
L->>ledger: COMMIT(view, seq, digest)
L->>business: COMMIT(view, seq, digest)
ledger->>L: COMMIT(view, seq, digest)
business->>L: COMMIT(view, seq, digest)
Note over L: Thu thập đủ 2f+1 phiếu bầu COMMIT → hoàn tất
L->>L: Hoàn tất & ký khối dữ liệu
L->>OS: Khối dữ liệu đã cam kết → đẩy vào commit_queue
end
Biểu đồ luồng: Thay đổi phiên (View Change)
sequenceDiagram
autonumber
participant ledger as 🖥️ Trình xác thực 1
participant VM as 🔄 BFTViewChangeManager
participant NEW as 👑 Trưởng nhóm Mới (New Leader)
Note over ledger: Phát hiện hết hạn kết nối với Leader (không nhận được PRE-PREPARE)
ledger->>VM: trigger_view_change(current_view, failed_leader)
VM->>VM: view += 1
VM->>VM: Phát tin VIEW-CHANGE đến tất cả các trình xác thực
VM->>VM: Thu thập đủ f+1 phiếu bầu VIEW-CHANGE
VM->>NEW: Bầu trưởng nhóm mới: Validators[new_view % n]
NEW->>NEW: Phát tin thông điệp NEW-VIEW
NEW->>NEW: Bắt đầu lại từ Pha 1 — PRE-PREPARE
Các bước chi tiết
Bước
Mô tả
PRE-PREPARE
Leader gán số thứ tự và phát thông điệp chứa digest của khối tới mọi validator.
PREPARE
Mỗi validator kiểm tra PRE-PREPARE, rồi phát phiếu PREPARE của mình. Leader thu đủ 2f phiếu hợp lệ.
COMMIT
Leader phát COMMIT. Mỗi node thu đủ 2f+1 phiếu COMMIT trước khi xác nhận khối tại chỗ.
View Change
Nếu leader không phản hồi trong timeout: validator tăng view lên 1, bầu Validators[view % n] làm leader mới.
So sánh thuật toán đồng thuận
Thuật toán
Cơ chế
Khả năng chịu lỗi
Trường hợp dùng
PoA
Dựa trên danh tính, node có thẩm quyền ký khối
Danh tiếng validator
Mạng riêng / nội bộ
PoF
Luân phiên leader, đồng thuận đa số height % n
Phân tán niềm tin
Mạng liên doanh / đa tổ chức
BFT
PBFT 3 pha
Chịu tới f node Byzantine trong 3f+1
Môi trường quan trọng / đối kháng
Xử lý lỗi
Tình huống
Hành vi
Leader không phản hồi
Kích hoạt View Change, bầu leader mới (Validators[new_view % n])
Validator gửi digest không hợp lệ
Phiếu bị loại, không tính vào quorum
Chia mạng < f node
Giao thức tiếp tục nếu vẫn đủ quorum 2f+1
Chia mạng >= f+1 node
Giao thức tạm dừng tới khi mạng nối lại (ưu tiên an toàn hơn sẵn sàng)