Saya pikir kita biasanya mengajukan pertanyaan yang salah ketika transaksi Dusk “gagal”.
“202 Accepted” hanya berarti node menerima permintaan untuk perutean (routing). Itu tidak berarti transaksi sudah ada di mempool atau sudah masuk ke sebuah blok. Salah satu contoh yang saya temukan menarik adalah nonce masa depan. Jika transaksi Moonlight datang dengan nonce yang lebih besar (masa depan) sementara nonce yang lebih awal masih hilang, Dusk dapat menahannya di luar mempool nyata (real mempool) dan menunggu celah nonce tersebut tertutup, alih-alih menolaknya segera. Selama proses itu, transaksi tersebut berada dalam status tertunda (deferred).
Itu hanya satu bagian dari ceritanya. Setelah sebuah transaksi lolos admission, transaksi tersebut masuk ke mempool lokal node itu. Node-node lain tetap memiliki mempool mereka sendiri dan menjalankan pemeriksaan admission mereka sendiri juga. Belakangan, sebuah transaksi bisa dipilih untuk sebuah blok, dieksekusi, dan akhirnya diselesaikan (finalized). Transaksi itu juga bisa keluar dari mempool lokal tanpa itu otomatis berarti transaksi gagal. Kedaluwarsa (expiry), penggantian (replacement), batas kapasitas, dan konflik semuanya dapat menyebabkan penghapusan.
Di sinilah menurut saya perbedaannya penting untuk wallet dan exchange. Panduan integrasi Dusk sendiri menyarankan untuk menyimpan transaksi bertanda tangan yang persis (exact signed transaction), memperlakukan “202 Accepted” hanya sebagai routing yang sukses, dan mengirim ulang (rebroadcast) byte transaksi bertanda tangan yang sama setelah timeout transport, bukan membuat transaksi baru secara membabi buta. Penarikan (withdrawal) seharusnya hanya ditandai selesai setelah eksekusi diperiksa dan blok sudah difinalisasi.
Semakin saya memeriksanya, semakin “transaction submitted” terdengar tidak terlalu seperti status yang berguna jika berdiri sendiri. Sebuah transaksi bisa saja sedang menunggu nonce, berada di mempool salah satu node, dieksekusi dengan error, atau berada di sebuah blok yang belum final. Itu semua adalah situasi yang sangat berbeda, meskipun dari luar semuanya bisa terlihat seperti “masih pending”.
Bagi saya, itu adalah pelajaran yang bermanfaat dari alur transaksi Dusk: “submitted” hanya permulaan. Yang penting adalah status yang benar-benar bisa Anda buktikan bahwa transaksi tersebut telah mencapai.
$DUSK @Dusk #dusk
“202 Accepted” hanya berarti node menerima permintaan untuk perutean (routing). Itu tidak berarti transaksi sudah ada di mempool atau sudah masuk ke sebuah blok. Salah satu contoh yang saya temukan menarik adalah nonce masa depan. Jika transaksi Moonlight datang dengan nonce yang lebih besar (masa depan) sementara nonce yang lebih awal masih hilang, Dusk dapat menahannya di luar mempool nyata (real mempool) dan menunggu celah nonce tersebut tertutup, alih-alih menolaknya segera. Selama proses itu, transaksi tersebut berada dalam status tertunda (deferred).
Itu hanya satu bagian dari ceritanya. Setelah sebuah transaksi lolos admission, transaksi tersebut masuk ke mempool lokal node itu. Node-node lain tetap memiliki mempool mereka sendiri dan menjalankan pemeriksaan admission mereka sendiri juga. Belakangan, sebuah transaksi bisa dipilih untuk sebuah blok, dieksekusi, dan akhirnya diselesaikan (finalized). Transaksi itu juga bisa keluar dari mempool lokal tanpa itu otomatis berarti transaksi gagal. Kedaluwarsa (expiry), penggantian (replacement), batas kapasitas, dan konflik semuanya dapat menyebabkan penghapusan.
Di sinilah menurut saya perbedaannya penting untuk wallet dan exchange. Panduan integrasi Dusk sendiri menyarankan untuk menyimpan transaksi bertanda tangan yang persis (exact signed transaction), memperlakukan “202 Accepted” hanya sebagai routing yang sukses, dan mengirim ulang (rebroadcast) byte transaksi bertanda tangan yang sama setelah timeout transport, bukan membuat transaksi baru secara membabi buta. Penarikan (withdrawal) seharusnya hanya ditandai selesai setelah eksekusi diperiksa dan blok sudah difinalisasi.
Semakin saya memeriksanya, semakin “transaction submitted” terdengar tidak terlalu seperti status yang berguna jika berdiri sendiri. Sebuah transaksi bisa saja sedang menunggu nonce, berada di mempool salah satu node, dieksekusi dengan error, atau berada di sebuah blok yang belum final. Itu semua adalah situasi yang sangat berbeda, meskipun dari luar semuanya bisa terlihat seperti “masih pending”.
Bagi saya, itu adalah pelajaran yang bermanfaat dari alur transaksi Dusk: “submitted” hanya permulaan. Yang penting adalah status yang benar-benar bisa Anda buktikan bahwa transaksi tersebut telah mencapai.
$DUSK @Dusk #dusk
