Domains Module (hierachain/domains/*)
1. Tổng quan
Module domains kết nối hạ tầng chuỗi khối cốt lõi với logic nghiệp vụ doanh nghiệp. Module cung cấp các lớp cơ sở cho các Sub-Chain chuyên biệt, hàm tạo sự kiện chuẩn hóa, công cụ hỗ trợ vòng đời thực thể và tiện ích truy vết liên chuỗi.
2. Các thành phần cốt lõi
Các thành phần được tổ chức thành ba gói con dưới hierachain/domains/:
2.1 Chuỗi nghiệp vụ (chains/base_chain.py, chains/domain_chain.py)
BaseChain: Lớp cơ sở trừu tượng quản lý trạng thái chuỗi, sổ đăng ký thực thể và quy trình xử lý sự kiện.DomainChain: Triển khai cụ thể hỗ trợ thao tác nghiệp vụ, kiểm tra tính hợp lệ của thao tác và trình quản lý giao dịch.chains/metrics.py: Theo dõi tổng số thao tác và các tỷ lệ tổng hợp; không ghi nhận độ trễ thực thi.
2.2 Sự kiện doanh nghiệp (events/base_event.py, events/event_creators.py)
BaseEvent: Lớp cơ sở cho các sự kiện nghiệp vụ có cấu trúc kèm kiểm tra lược đồ.event_creators.py: Các hàm tiện ích tạo đối tượng sự kiện cho các thao tác:create_quality_check,create_approval,create_resource_allocationvàcreate_status_update.
2.3 Tiện ích toàn vẹn (utils/cross_chain_validator.py, utils/entity_tracer.py)
CrossChainValidator: Đánh giá tính nhất quán giữa các chuỗi con và kiểm tra thuật ngữ tiền mã hóa bị cấm.EntityTracer: Tái hiện đầy đủ lịch sử của thực thể xuyên suốt các chuỗi trong hệ thống.utils/compliance_checker.py: Kiểm tra tham số tuân thủ đối chiếu với quy định.
3. Quản lý nghiệp vụ và vòng đời thực thể
DomainChain cung cấp sẵn các bước chuyển vòng đời:
- Đăng ký: Gắn định danh
entity_idduy nhất với loại thực thể và thuộc tính metadata. - Cập nhật trạng thái: Theo dõi các trạng thái tuần tự (
in_progress,quality_approved,completed). - Phân bổ tài nguyên: Theo dõi tài nguyên đã phân công và đã giữ chỗ.
assignedthêm vàoallocated_resources(và bỏ giữ chỗ);reservedthêm vàoreserved_resources;releasedxóa khỏi một trong hai danh sách;transferredchuyển tài nguyên đã phân công sang thực thể đã đăng ký khác theodetails.target_entity_id. Chuyển trạng thái không hợp lệ bị từ chối trước khi gửi event. - Chỉ số vận hành:
OperationMetricsTrackercung cấp tổng số thao tác và các tỷ lệ tổng hợp, không có độ trễ hoặc phân nhóm theo loại thao tác.
Sự kiện nghiệp vụ yêu cầu thực thể đã đăng ký. register_entity lưu dữ liệu ban đầu được cung cấp trong event đăng ký của Sub-Chain để có thể dựng lại registry sau khi khởi động lại; dữ liệu này trở thành nội dung sổ cái nên không được chứa bí mật. Event đăng ký cũ không có initial_data chỉ khôi phục metadata đăng ký mà hệ thống hỗ trợ.
Dữ liệu ban đầu của thực thể dùng JSON chuẩn với số hữu hạn. Giá trị số nguyên Python, kể cả lớn hơn 64 bit, được khôi phục chính xác trong giới hạn chuyển đổi số nguyên đã cấu hình của Python. Định danh số cần đi qua client có khoảng số nguyên nhỏ hơn nên dùng chuỗi. Giá trị không được hỗ trợ khiến register_entity trả về False trước khi ghi event đăng ký.
Event bắt đầu và hoàn tất thao tác được thêm vào sổ cái, đồng thời cập nhật projection trong bộ nhớ dưới khóa của chain. Khi event bắt đầu được chấp nhận, current_operation được đặt nên thao tác bắt đầu khác của cùng thực thể bị từ chối cho đến khi hoàn tất. Event nghiệp vụ trả False đã bị từ chối trước khi thêm. Trả True có nghĩa ordering service đã chấp nhận event; điều đó không có nghĩa signed block đã finalize hoặc lưu bền vững. Nếu handler chạy sau khi thêm event bị lỗi, event vẫn được chấp nhận, lỗi được ghi log và domain_projection_healthy chuyển thành false. Sau đó các lần ghi domain bị từ chối cho tới khi rebuild_domain_state() thành công. Rebuild chỉ chạy lại projection built-in có tính xác định; nếu lịch sử có custom handler thì hệ thống báo không thể tự phục hồi handler đó, vì chạy lại có thể lặp side effect bên ngoài.
Bộ đếm thao tác hoàn tất được dựng lại từ các event thao tác đã chấp nhận. Các bộ đếm chi tiết của OperationMetricsTracker chỉ tồn tại trong tiến trình và trở về zero sau khi khởi động lại. Participant 2PC giữ snapshot sâu của payload đã xác thực khi prepare. pending_transactions trả snapshot tách rời; prepare lặp chỉ thành công khi payload và vai trò participant đều khớp. Kiểm tra proof đánh dấu event thiếu sub_chain_name, proof_hash hoặc timestamp là không nhất quán. Event có details sai cấu trúc được báo lỗi cấu trúc và bỏ qua trong lượt phân tích logic thay vì gây exception.
4. Điều phối Two-Phase Commit (2PC)
Các thao tác phối hợp giữa nhiều Sub-Chain thực thi qua giao thức Two-Phase Commit:
sequenceDiagram
participant Coordinator
participant Source as Source Sub-Chain
participant Target as Target Sub-Chain
Note over Coordinator, Target: Phase 1: Prepare
Coordinator->>Source: Prepare (ID, payload)
Source-->>Coordinator: Prepared OK or reject
Coordinator->>Target: Prepare (ID, payload)
Target-->>Coordinator: Prepared OK or reject
Note over Coordinator, Target: Phase 2: Commit or rollback
alt All chains prepared
Coordinator->>Coordinator: Persist durable COMMIT decision (phase=commit)
Coordinator->>Source: Commit
Source-->>Coordinator: ACK after durable event-pair read-back
Coordinator->>Target: Commit
Target-->>Coordinator: ACK after durable event-pair read-back
Coordinator->>Coordinator: Persist COMMITTED
Note over Source, Target: Block finalization may complete asynchronously
else Prepare failed before COMMIT decision
Coordinator->>Source: Rollback
Source-->>Coordinator: Rollback result
Coordinator->>Target: Rollback
Target-->>Coordinator: Rollback result
end
Sau khi ghi bền quyết định COMMIT, nếu thiếu ACK từ participant thì thao tác ở trạng thái IN_DOUBT để forward recovery tiếp tục. Coordinator không rollback quyết định commit đã được lưu bền vững.
5. Tuân thủ và truy vết liên chuỗi
Lọc thuật ngữ tiền mã hóa
CrossChainValidator quét dữ liệu sự kiện để đảm bảo quy định về thuật ngữ doanh nghiệp. Nếu phát hiện các từ như coin, token, mining hoặc wallet trong dữ liệu nghiệp vụ, validator sẽ đánh dấu sự kiện vi phạm quy định.
Truy vết thực thể liên chuỗi
EntityTracer tổng hợp các sự kiện của một thực thể trên toàn bộ Sub-Chain:
from hierachain.domains.utils.entity_tracer import EntityTracer
tracer = EntityTracer(hierarchy_manager)
trace_results = tracer.trace_entity("ORDER-789")
print(f"Total events found: {trace_results['total_events']}")
for chain_name, summary in trace_results.get("chain_details", {}).items():
print(f"Activity at {chain_name}: {summary['total_events']} events")
6. Các loại thao tác chuẩn hóa
| Loại thao tác | Vai trò nghiệp vụ | Các trường bắt buộc |
|---|---|---|
quality_check |
Kiểm tra chất lượng | check_type, check_result |
approval |
Phê duyệt quản lý | approval_type, approver_id |
resource_allocation |
Phân bổ tài nguyên | resource_type, resource_id |
compliance_check |
Kiểm tra tuân thủ | compliance_type |