Hợp đồng DuskVM có thể chịu được tình trạng failover của node trong khi ứng dụng của tôi bỗng quên cách nói chuyện với nó.

Lý do nằm ở ngoài chuỗi. Forge tạo ra hai hiện vật WASM từ cùng một nguồn: hợp đồng chạy trong DuskVM và một data driver xử lý việc chuyển đổi JSON đọc được sang rkyv và ngược lại (encoding và decoding). Data driver đó không được triển khai như một phần của hợp đồng trên chuỗi.

Nếu tôi muốn các tuyến (routes) hợp đồng JSON của Rusk thực hiện việc dịch đó, thì chủ sở hữu hợp đồng phải đăng ký driver với node đó.

Vì vậy, tôi có thể triển khai một lần, kiểm thử trên Node A, thấy các lệnh gọi vẫn rõ ràng dễ đọc, rồi failover sang Node B và gặp một trạng thái kỳ lạ. Hợp đồng vẫn ở đó. Chuỗi vẫn khỏe. Nhưng driver_available có thể là false, nên ứng dụng bị mất “bề mặt” giải mã mà nó đã được xây dựng dựa trên.

Đó là cái bẫy trong môi trường production của tôi. Consensus không hề thất bại. Hợp đồng không hề thất bại. Failover của tôi đã thay đổi một phụ thuộc ngoài chuỗi mà tôi đã từng coi như nó đi kèm theo hợp đồng.

Tôi sẽ coi tính sẵn sàng của driver là một phần của mức “sẵn sàng” (readiness) của node, và kiểm tra nó ở mọi endpoint của Rusk trước khi lưu lượng truy cập (traffic) được chuyển tới.

Trên DuskVM, hợp đồng có thể chịu được failover, trong khi bộ dịch (translator) của nó thì không.

#dusk $DUSK @Dusk