Tuân thủ và an toàn
Module tuân thủ giữ ba loại dữ liệu: danh sách địa chỉ được phép cùng trạng thái và mã băm tham chiếu KYC, các vai trò, và tham số vận hành. Cần nhấn một điểm: trên chain chỉ có mã băm. Dữ liệu định danh cá nhân không bao giờ được ghi lên đó.
Năm lớp cưỡng chế
| Lớp | Cơ chế | Chặn được gì |
|---|---|---|
| 1 | Chặn ở khâu tiền xử lý giao dịch | Ai được ký và gửi giao dịch, cả Cosmos lẫn EVM |
| 2 | Hạn chế ở module ngân quỹ | Dòng tài sản; token nhiên liệu không chuyển nhượng |
| 3 | Móc vào máy ảo EVM | Quyền triển khai hợp đồng, và mẫu sinh hợp đồng con — đúng bằng phạm vi mà lớp này nhìn thấy |
| 4 | Middleware liên chuỗi | Tài sản từ ngoài đi vào: người nhận chưa duyệt thì báo lỗi ngược và hoàn tiền |
| 5 | Precompile | Cho chính hợp đồng tự hỏi "địa chỉ này có được phép không" |
Hình 21 — Mỗi lớp có nhánh từ chối riêng, và mọi lần từ chối đều để lại dấu vết.
Vì sao phải năm lớp thay vì một? Vì lớp một có một lỗ hổng đã biết, và tài liệu này nói ra thay vì giấu: khâu tiền xử lý không nhìn thấy lời gọi giữa hợp đồng với hợp đồng bên trong máy ảo. Một hợp đồng đã được phép có thể gọi tiếp hợp đồng khác mà lớp một không hay biết. Lớp năm tồn tại chính vì lỗ hổng đó. Nói "không thể lách" mà không nói câu này là quảng cáo sai.
Từ đó rút ra luật đọc cho cả bảng, và nó bền hơn bất kỳ bảng nào: mỗi lớp chỉ chặn được đúng thứ nó nhìn thấy. Chỗ nào một lớp không nhìn tới thì phải có lớp khác phủ; chỗ nào không lớp nào phủ thì phải được liệt kê ra, không được để trống trong im lặng. Vì thế phép đo đúng của một hệ cưỡng chế không phải đếm số lớp, mà là hỏi lớp nào nhìn thấy gì — và một hệ năm lớp cùng mù một chỗ thì vẫn chỉ mạnh bằng một lớp.
Tài sản từ ngoài đi vào
Hình 22 — Cổng kiểm ở biên: từ chối thì hoàn tiền, không bao giờ để tài sản mắc kẹt.
Tư cách của sơ đồ này cần nói đúng: nó mô tả một cổng đã dựng và đã đem ra thử, không phải một tuyến đang chở tài sản — kênh liên thông đầu tiên mở ra vẫn là một cổng chưa qua. Và cổng ở biên chỉ đáng tin bằng đúng mắt xích yếu nhất trong chuỗi đọc gói tin, nên luật của dự án là hướng từ chối: đọc không ra gói thì chặn, tuyệt đối không nhường xuống tầng dưới xử lý hộ. Một cổng chỉ chặn được thứ nó hiểu là một cổng mở cho thứ nó không hiểu.
Mọi thay đổi đều phát sự kiện, và bộ lập chỉ mục bên ngoài gom chúng thành báo cáo cho kiểm toán viên. Ở đây có một chi tiết đã trả giá và đáng giữ lại: khi middleware từ chối một gói, tầng dưới hoàn tác ngữ cảnh rồi phát lại sự kiện kèm một tiền tố khác. Bộ lập chỉ mục phải khớp cả dạng có tiền tố, nếu không nó sẽ đếm thiếu đúng những gói bị chặn — tức là mù đúng chỗ cần nhìn nhất.
Câu chốt: tuân thủ chỉ đáng tin khi nó không phụ thuộc vào thiện chí của người viết hợp đồng.
Trang này dành cho người viết hợp đồng trên một chuỗi sinh ra từ nền tảng. Nó không dạy cú pháp; nó nói thứ mà cú pháp không nói cho bạn: luật nào chặn giao dịch của bạn, ở tầng nào, và vì sao lớp bạn nhìn thấy không phải lớp duy nhất.
Khác biệt căn bản với một chain công khai thông thường: ở đây, phần lớn luật không nằm trong hợp đồng của bạn. Chúng nằm dưới nó, trong chính cơ chế đồng thuận — cơ chế đầy đủ ở Kiến trúc nền tảng, mục Tuân thủ ở tầng giao thức. Hệ quả cho người viết mã:
| Bạn làm gì | Lớp nào nhìn thấy | Điều cần lường |
|---|---|---|
| Gửi một giao dịch | Khâu tiền xử lý (lớp 1) | Ví chưa được duyệt thì bị từ chối trước khi máy ảo chạy — không có gì để bắt lỗi trong hợp đồng |
| Chuyển tài sản | Module ngân quỹ (lớp 2) | Token nhiên liệu không chuyển nhượng được; đừng thiết kế cơ chế dựa vào việc chuyển nó |
| Triển khai hợp đồng | Móc vào máy ảo (lớp 3) | Quyền triển khai là một vai, không phải mặc định. Cả mẫu sinh hợp đồng con cũng bị soi |
| Nhận tài sản từ mạng ngoài | Middleware liên chuỗi (lớp 4) | Người nhận chưa duyệt thì gói báo lỗi ngược và hoàn tiền — tiền không kẹt, nhưng luồng của bạn phải chịu được nhánh đó |
| Tự hỏi "địa chỉ này có được phép không" | Precompile (lớp 5) | Đây là lớp bạn gọi được từ trong hợp đồng, và là lớp bù cho điểm mù của lớp 1 |
Hình 23 — Điểm mù của lớp một, và cách hợp đồng tự bù cho nó.
Điểm mù bạn phải biết, vì tài liệu này không giấu nó: khâu tiền xử lý không nhìn thấy lời gọi giữa hợp đồng với hợp đồng bên trong máy ảo. Một hợp đồng đã được phép có thể gọi tiếp hợp đồng khác mà lớp 1 không hay. Lớp 5 tồn tại chính vì điểm mù đó — nên nếu hợp đồng của bạn chuyển tiếp giá trị cho một địa chỉ do người dùng đưa vào, hỏi precompile là việc của bạn, không phải của giao thức.
Luật đọc chung, bền hơn mọi bảng: mỗi lớp chỉ chặn được đúng thứ nó nhìn thấy. Đừng đếm số lớp rồi yên tâm; hãy hỏi lớp nào nhìn thấy gì.
Chuỗi khách và mạng chung là hai chỗ khác nhau. Hợp đồng của bạn chạy trên chuỗi khách; token nhiên liệu ở đó không có giá thị trường và không phải LOVE9. Ba lớp token, và chỗ dễ lẫn nhất, ở Kinh tế LOVE9.
Câu chốt: trên chuỗi này, hợp đồng viết cẩn thận không đủ để đúng luật, và hợp đồng viết cẩu thả cũng không đủ để lách luật — đó chính là điều mà "tuân thủ ở tầng giao thức" nghĩa là.
Trong phần này
| Trang | Trả lời câu gì |
|---|---|
| Bảo mật và chịu lỗi | Mạng chịu được mất gì trước khi dừng |
| Bảo mật và báo lỗi | Kênh chính thức, và cam kết với người báo lỗi |
→ Đọc tiếp: Bảo mật và chịu lỗi — Mạng chịu được mất gì trước khi dừng