Khi tôi điều chỉnh bộ lập chỉ mục Dusk, tôi đã dẫm vào một cái bẫy: dùng chung một hàm hash cho transaction ID và contract ID. Hash của khối và Merkle root dùng SHA3-256; bytecode hợp đồng và bộ lọc bloom sự kiện dùng BLAKE3; contract ID và transaction ID dùng BLAKE2b; tính toàn vẹn ví và việc dẫn xuất khóa dùng SHA2-256。
Nó giống như bốn con dấu trong một kho lưu trữ. Dấu nhập kho, dấu hợp đồng và dấu lấy mẫu đều có thể ép ra số thứ tự, nhưng hệ thống đăng ký chỉ nhận đúng một con dấu đó. Chọn sai thuật toán, đầu ra vẫn trông như một hash bình thường, nhưng các node lại không tìm thấy đúng đối tượng. Một cái bẫy khác là lấy chuỗi hiển thị hex rồi hash thêm một lần; giao diện API giao thức thường ăn vào bytes gốc; mã hóa vòng vo thêm một bước thì mọi thứ đều đổi.
Vì vậy khi tích hợp, tôi sẽ giữ nguyên byte gốc, dùng SDK chính thức hoặc Rusk để sinh ID, rồi dùng các test vector dựa trên các khối, giao dịch và hợp đồng đã biết. Tài liệu Dusk @Dusk Dusk cũng khuyến nghị hạn chế tự lặp lại việc hiện thực mã hóa theo giao thức. Dùng nhiều thuật toán để tách nhiệm vụ, đồng thời biến phiên bản, byte order (endianness) và định dạng đầu vào thành hạng mục cần thẩm định. Có thể tạo ra một chuỗi đúng độ dài ký tự chỉ chứng tỏ hàm đã chạy xong; còn danh tính trên chuỗi vẫn phải dò ngược để xác nhận #dusk $DUSK
Nó giống như bốn con dấu trong một kho lưu trữ. Dấu nhập kho, dấu hợp đồng và dấu lấy mẫu đều có thể ép ra số thứ tự, nhưng hệ thống đăng ký chỉ nhận đúng một con dấu đó. Chọn sai thuật toán, đầu ra vẫn trông như một hash bình thường, nhưng các node lại không tìm thấy đúng đối tượng. Một cái bẫy khác là lấy chuỗi hiển thị hex rồi hash thêm một lần; giao diện API giao thức thường ăn vào bytes gốc; mã hóa vòng vo thêm một bước thì mọi thứ đều đổi.
Vì vậy khi tích hợp, tôi sẽ giữ nguyên byte gốc, dùng SDK chính thức hoặc Rusk để sinh ID, rồi dùng các test vector dựa trên các khối, giao dịch và hợp đồng đã biết. Tài liệu Dusk @Dusk Dusk cũng khuyến nghị hạn chế tự lặp lại việc hiện thực mã hóa theo giao thức. Dùng nhiều thuật toán để tách nhiệm vụ, đồng thời biến phiên bản, byte order (endianness) và định dạng đầu vào thành hạng mục cần thẩm định. Có thể tạo ra một chuỗi đúng độ dài ký tự chỉ chứng tỏ hàm đã chạy xong; còn danh tính trên chuỗi vẫn phải dò ngược để xác nhận #dusk $DUSK