Bỏ qua điều hướng
XChain Docs

4 · Mô hình liên chuỗi

Cập nhật lần cuối: 07/08/20266 phút đọc

Phần lớn thiết kế liên chuỗi thất bại vì coi mọi tương tác là một loại lưu lượng. XChain kẻ một lằn ranh cứng giữa READ (không đổi trạng thái) và WRITE (đổi trạng thái) — một phân biệt nguyên thủy duy nhất mà cả mô hình treo lên đó. Phần lớn nhu cầu liên chuỗi chỉ là xác minh "X đã xảy ra trên chain A" — một READ, qua Interchain Queries (ICQ) — rẻ và gần như vô hạn. Chỉ chuyển trạng thái atomic mới là WRITE, qua IBC v2/Eureka + Interchain Accounts (ICA), và bị giữ cho khan hiếm có chủ đích.

Vì sao một READ gần như miễn phí

Sự bất đối xứng này không đến từ biểu phí, nó đến từ việc mỗi thao tác thật sự phải làm gì. Một READ kiểm một proof inclusion đối chiếu với root mà chain đi hỏi vốn đã theo dõi sẵn — đúng cái root Layer Settlement duy trì qua PAI. Không có gì mới phải thống nhất, không mở vòng đồng thuận nào, không chạm vào trạng thái nào. Việc phải làm là một phép kiểm proof, và chi phí đó không tăng theo kích thước trạng thái được đọc: chứng minh một sự kiện nằm trong một log một tỷ mục tốn đúng bằng chứng minh nó nằm trong log một nghìn mục.

Hai luật cứng khiến điều này an toàn chứ không chỉ rẻ. Một READ KHÔNG ĐƯỢC đổi trạng thái, và một READ PHẢI idempotent — nên thử lại là vô hại, hỏi trùng không đổi gì, và một relayer phát lại truy vấn cũ không gây được thiệt hại nào. Đó chính là lý do ngân sách READ để gần như vô hạn được: một thao tác không thể thay đổi gì thì không thể bị lợi dụng để thay đổi thứ gì.

LoạiCơ chếChi phíNgân sách
READICQ — kiểm một proof với root có sẵnRẻ (một phép verify)Gần như vô hạn
WRITE trong một CellShared sequencer (atomic inclusion)ThấpPhần lớn lưu lượng có trạng thái
WRITE liên Zone/RegionXMP + ZK light client + pessimistic proofCao, async< 0,1%
Global atomic WRITEChỉ Layer Settlement (Tier T0); intent/solver bảo lãnhRất cao< 0,01%

Một WRITE thật sự tốn những gì

WRITE khan hiếm vì nó đắt thật, và cái giá đó mua về một bộ kiểm tra cụ thể. Vòng đời của nó cố định: SendPacket → message được ghi vào Cây Merkle Message Đi Ra → một relayer mang nó đi kèm proof → RecvPacket kiểm proof và nonce chống phát lại → message thực thi → Ack hoặc Timeout. Không chỗ nào tin relayer cả: nó chỉ chở byte, và nếu nó nói dối, làm hỏng hay đánh rơi message thì phép kiểm proof trượt hoặc nhánh timeout kích hoạt. Relayer có thể làm chậm một WRITE; nó không giả mạo được một WRITE.

Ba nghĩa vụ được quy định ở mức MUST — đây là thứ giữ mô hình không trôi khi thêm chain mới:

  • Nonce PHẢI tăng đơn điệu theo từng cặp (nguồn, đích) — đây là thứ khiến phát lại thành bất khả về mặt cấu trúc, chứ không chỉ là khó xảy ra.
  • Mọi WRITE có dịch chuyển tài sản PHẢI gọi **UAC.checkPlacement** — nên ranh giới 2 Miền được kiểm lại ở mỗi lần chuyển, không chỉ lúc phát hành.
  • WRITE liên vùng PHẢI mang hạch toán pessimistic-proof — cơ chế biến một sự cố ở xa thành một khoản thiệt hại có chặn trên.

Đường đi dữ liệu tham chiếu — ghi một "like" và chứng minh nó xuyên chain mà không chạy lại:

Hình 4 — Đường đi dữ liệu tham chiếu: append, neo, và chứng minh inclusion xuyên chain.

Cái gì hỏng, và cái gì vẫn đứng

Hệ liên chuỗi được đánh giá bằng các kiểu hỏng của nó, không phải bằng đường đi thuận lợi — nên đây là những kiểu hỏng đáng kể, kể cả điều XChain cố ý KHÔNG hứa:

Chuyện gì xảy raHệ quảCái gì vẫn đứng
Relayer offline hoặc kiểm duyệtWRITE bị trễ; cuối cùng Timeout kích hoạtKhông có áp dụng nửa vời: message hoặc thực thi với proof hợp lệ, hoặc hết hạn. Ai cũng chạy relayer được, nên kiểm duyệt là vấn đề liveness chứ không phải an toàn
Một message bị phát lạiRecvPacket từ chối ở bước nonceNonce tăng đơn điệu theo cặp khiến phát lại là bất khả, không phải "khó xảy ra"
Một chain bị chiếm và tìm cách rút nhiều hơn số đã nạpPessimistic proof từ chối phần vượtThiệt hại bị chặn trong đúng phần của chain đó — đây chính là thứ tiêu chí nghiệm thu MVC-3 đánh vào, với một chain hỏng mô phỏng (Chạy node)
Ai đó tìm cách đưa tài sản giá trị cao vào Miền dữ liệuUAC.checkPlacement từ chối WRITERanh giới Miền được cưỡng chế ở mỗi lần chuyển, không chỉ lúc phát hành
Một WRITE liên vùng hoàn tất nửa chừngKhông ngăn được. Tính atomic xuyên các vùng đồng thuận độc lập chưa có cách dựng không-cần-tin-cậy nàoContainment và bảo lãnh kinh tế chặn trên thiệt hại. Điều này được nói ra như một bài toán chưa giải, không tô vẽ — xem Bài toán mở

Dòng cuối là mép trung thực của thiết kế này. XChain không tuyên bố atomic toàn cục, vì chưa ai có cách dựng không-cần-tin-cậy cho nó; thứ nó tuyên bố là sự cố ở lại bên trong vùng nơi nó xảy ra, và độ lớn thiệt hại được biết trước chứ không phải phát hiện ra sau.

Câu chốt: một chain tách biệt chứng minh cái "like" đã xảy ra bằng một phép kiểm proof — không message có trạng thái, không chạy lại. WRITE atomic liên vùng không được hứa all-or-nothing ở tầng giao thức; chúng chỉ đạt containment qua pessimistic proof và bảo lãnh kinh tế. Nhưng một đường đọc gần-miễn-phí chỉ an toàn khi giá trị không bao giờ rò qua được ranh giới mà nó đọc xuyên — đó là câu hỏi bảo mật, trả lời ngay sau đây.