Kontraknya bisa benar dan panggilan DuskVM saya tetap bisa mati hanya karena dua karakter.
Input DuskVM tidak dikirim sebagai JSON yang dapat dibaca. Input itu berupa byte yang dienkode rkyv, dan Forge menggunakan penggerak data (data driver) di luar rantai untuk mengubah sesuatu yang manusiawi seperti 42 menjadi byte yang benar-benar diharapkan oleh kontrak.
Bagian yang canggung ada pada serah-terimanya. Forge memberi saya nilai terenkode itu sebagai heksadesimal dengan prefix 0x. Sebuah SDK mungkin menginginkan prefix itu tetap dipertahankan. Rusk Wallet dengan --fn-args mengharuskan saya menghapus prefix tersebut.
Jadi saya bisa menguji logika kontrak, memverifikasi WASM, mengenkode argumennya dengan benar, lalu menghancurkan panggilan langsung (live call) dengan meneruskan byte yang sama persis dalam bentuk transport yang salah.
Itulah bug integrasi yang akan paling keras saya jaga. Bukan karena dramatis, tapi karena semuanya di hulu terlihat sehat. Fungsinya ada. Skemanya benar. Nilainya benar. Kegagalannya berada di batas antara data driver dan pengirim.
Jika saya membangun aplikasi DuskVM, saya akan menormalkan argumen pemanggilan sekali lalu menguji batas itu terhadap setiap jalur pengiriman yang saya dukung.
Dua karakter tidak boleh menjadi alasan tindakan kontrak yang valid berubah menjadi transaksi pengguna yang gagal.
#dusk $DUSK @Dusk
Input DuskVM tidak dikirim sebagai JSON yang dapat dibaca. Input itu berupa byte yang dienkode rkyv, dan Forge menggunakan penggerak data (data driver) di luar rantai untuk mengubah sesuatu yang manusiawi seperti 42 menjadi byte yang benar-benar diharapkan oleh kontrak.
Bagian yang canggung ada pada serah-terimanya. Forge memberi saya nilai terenkode itu sebagai heksadesimal dengan prefix 0x. Sebuah SDK mungkin menginginkan prefix itu tetap dipertahankan. Rusk Wallet dengan --fn-args mengharuskan saya menghapus prefix tersebut.
Jadi saya bisa menguji logika kontrak, memverifikasi WASM, mengenkode argumennya dengan benar, lalu menghancurkan panggilan langsung (live call) dengan meneruskan byte yang sama persis dalam bentuk transport yang salah.
Itulah bug integrasi yang akan paling keras saya jaga. Bukan karena dramatis, tapi karena semuanya di hulu terlihat sehat. Fungsinya ada. Skemanya benar. Nilainya benar. Kegagalannya berada di batas antara data driver dan pengirim.
Jika saya membangun aplikasi DuskVM, saya akan menormalkan argumen pemanggilan sekali lalu menguji batas itu terhadap setiap jalur pengiriman yang saya dukung.
Dua karakter tidak boleh menjadi alasan tindakan kontrak yang valid berubah menjadi transaksi pengguna yang gagal.
#dusk $DUSK @Dusk