Sau khi khối hoàn tất trên Sub-Chain, Sub-Chain gửi bằng chứng mã hóa (hash và proof ZK tùy chọn) lên Main Chain. Main Chain chỉ lưu bằng chứng này, không lưu dữ liệu sự kiện thô. Lệnh gửi chỉ thành công sau khi block MainChain chứa proof được ký, hoàn tất, lưu qua SQL bền vững và đọc lại để kiểm tra hash, Merkle root và chữ ký. SQLite dùng WAL với synchronous=FULL cho các lần commit này. Storage thiếu hoặc không hỗ trợ sẽ làm lệnh thất bại.
Luồng tự động chạy sau khi block Sub-Chain hoàn tất, khi đã hết khoảng thời gian cấu hình và có block mới chưa được gửi. Endpoint REST có xác thực cũng có thể kích hoạt gửi proof.
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: Check: 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: Compute proof (Mock SHA-256; production backend unavailable)
ZKP-->>SC: ProofResult { proof: bytes, success: bool }
SC->>SC: Retry up to 3× with exponential backoff on failure
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: Verify ZK proof (if enabled)
MC-->>SC: Proof queued
SC->>MC: Finalize signed proof block, save and read back from storage
MC-->>SC: Durable proof confirmed
SC->>SC: Record proof_submitted event
SC->>SC: Update last_proof_submission timestamp
Các bước chi tiết
Bước
Mô tả
1. Kiểm tra kích hoạt
auto_submit_proof_if_needed() kiểm tra thời gian đã trôi qua và có block mới đã hoàn tất.
2. Tạo proof ZK
Nếu HRC_ENABLE_ZK_PROOFS=true: ZKProver tính trên (old_state_root, new_state_root, events). Thử lại tối đa 3 lần nếu lỗi.
3. Metadata proof
_generate_default_proof_metadata() tạo metadata tóm tắt; MainChain từ chối trường chi tiết bị cấm trong dict hoặc list lồng nhau và lọc đệ quy các container được chấp nhận trước khi ghi.
4. Ghi lên Main Chain
MainChain.add_proof() xác thực rồi đưa proof vào hàng chờ; đường submit hoàn tất và đọc lại block đã ký từ storage bền vững.
5. Ghi nhận
Chỉ sau khi đọc lại thành công, Sub-Chain ghi event proof_submitted và cập nhật last_proof_submission.
Chế độ proof ZK
Chế độ
Cơ chế
Trường hợp dùng
mock
Mô phỏng băm SHA-256
Phát triển / kiểm thử
production
Backend tạo/xác minh chưa triển khai
Chưa khả dụng
Cấu hình
Cài đặt
Mặc định
Mô tả
HRC_ENABLE_ZK_PROOFS
false
Bật/tắt xác thực ZK
HRC_ZK_MODE
mock
mock hoặc production
HRC_ZK_REQUIRED_MAINCHAIN
false
Chặn gửi proof lên Main Chain nếu ZK lỗi
Xử lý lỗi
Tình huống
Hành vi
Lỗi tạo proof ZK
Thử lại tối đa 3 lần với chờ tăng dần; nếu HRC_ZK_REQUIRED_MAINCHAIN=true thì hủy
Ghi lên Main Chain lỗi
Ghi log exception, không cập nhật last_proof_submission; thử lại ở khối tiếp theo
Thiếu storage bền vững, backend chưa hỗ trợ hoặc đọc lại lỗi
Lệnh trả False; retry có thể lưu proof đã chờ hoặc đã hoàn tất mà không ghi bản trùng.
Thiếu proof ZK bắt buộc hoặc xác thực thất bại
MainChain.add_proof() trả False; proof không được ghi