Tôi có thể phát ra đúng sự kiện DuskVM và vẫn giao một backend không thể đọc nó.

Bước ẩn là đăng ký Forge. dusk_core::abi::emit(topic, value) đưa sự kiện vào quá trình thực thi, nhưng chỉ phát ra thôi thì không thêm nó vào lược đồ được sinh ra. Để bộ điều khiển dữ liệu giải mã được sự kiện đó, tôi vẫn phải định nghĩa kiểu sự kiện có thể tuần tự hóa, triển khai ContractEvent, đăng ký nó trong #[dusk_forge::contract(events = [...])], rồi phát ra kiểu đã đăng ký đó.

Lỡ thiếu một trong các mắt xích này và hợp đồng vẫn có thể chạy đúng, trong khi phần tích hợp mất đi bề mặt sự kiện mà nó phụ thuộc để đọc.

Hậu quả mà tôi quan tâm là một lần chuộc trong ứng dụng bị kẹt sau khi nó đã hoàn tất trên chuỗi. Trạng thái hợp đồng đã được cập nhật. Giao dịch của người dùng đã được chốt. Backend của tôi vẫn đang chờ vì các byte của sự kiện không có bộ giải mã được sinh ra mà nó biết cách dùng.

Tôi sẽ thử nghiệm sự kiện từ bên ngoài hợp đồng: dựng driver, kiểm tra lược đồ, giải mã các byte đã phát, rồi để giao diện UI của lần chuộc phụ thuộc vào đó.

Trên DuskVM, “sự kiện được phát ra” không phải là vạch đích. “Sự kiện được consumer giải mã” mới là.

#dusk $DUSK @Dusk