Sau khi một khối được hoàn tất trên Chuỗi con (Sub-Chain), Chuỗi con sẽ gửi một bằng chứng mã hóa (hash + bằng chứng ZK tùy chọn) lên Chuỗi chính (Main Chain). Chuỗi chính chỉ lưu trữ bằng chứng này — không bao giờ lưu dữ liệu sự kiện thô. Cơ chế này giúp đảm bảo tính bất biến toàn cục mà không cần lưu trữ dữ liệu miền nhạy cảm trên chuỗi gốc.
Đây là một cơ chế kích hoạt sau khối (post-block trigger), không phải là một lệnh do người dùng yêu cầu. Lệnh này tự động kích hoạt khi chain_length % proof_interval == 0.
Biểu đồ luồng
sequenceDiagram
autonumber
participant SC as 📦 SubChain
participant ZKP as 🔐 ZKProver
participant MC as 🔗 MainChain
SC->>SC: auto_submit_proof_if_needed()
SC->>SC: Kiểm tra: chain length > 1 AND block finalized
alt ZK Proofs Enabled (HRC_ENABLE_ZK_PROOFS=true)
SC->>ZKP: generate_proof(old_state_root, new_state_root, block_index, events)
ZKP->>ZKP: Tính toán bằng chứng (Simulate SHA-256 hoặc mạch ZoKrates)
ZKP-->>SC: ProofResult { proof: bytes, success: bool }
SC->>SC: Thử lại tối đa 3 lần với khoảng chờ tăng dần nếu thất bại
else ZK Proofs Disabled
SC->>SC: zk_proof = None
end
SC->>SC: _generate_default_proof_metadata()
SC->>MC: add_proof(sub_chain_name, proof_hash, metadata, zk_proof)
MC->>MC: Xác thực bằng chứng ZK (nếu bật)
MC->>MC: Lưu khối bằng chứng trên Main Chain
MC-->>SC: True (thành công)
SC->>SC: Ghi nhận sự kiện nội bộ proof_submitted
SC->>SC: Cập nhật timestamp last_proof_submission
Các bước thực hiện chi tiết
Bước
Mô tả
1. Kiểm tra kích hoạt
Lệnh auto_submit_proof_if_needed() kiểm tra điều kiện len(chain) > 1 và khối đã được hoàn tất.
2. Tạo bằng chứng ZK
Nếu HRC_ENABLE_ZK_PROOFS=true: ZKProver tính toán trên (old_state_root, new_state_root, events). Thử lại tối đa 3 lần nếu lỗi.