Minggu lalu saya membantu klien berkoordinasi transfer lintas negara, karena koneksi jaringan sempat lag sampai dua kali perlu konfirmasi. Sistem langsung memutuskan “transaksi duplikat” dan menahannya. Macet setengah hari tidak ada yang memberi penjelasan. Kejadian ini di blockchain sebenarnya adalah masalah yang sama, hanya solusi yang benar-benar berbeda.
Model akun Dusk (Moonlight) (yaitu rangkaian akun transparannya) mengandalkan nonce untuk mencegah replay—setiap akun terikat ke sebuah penghitung (counter). Setiap transaksi harus memiliki nonce yang tepat satu lebih besar dari nilai saat ini; selisih satu digit saja, baik lebih atau kurang, akan ditolak langsung oleh jaringan. Bukan karena sistem melakukan “menebak apakah Anda menekan ulang” setelahnya, melainkan karena angka itu sendiri yang mengunci urutan; jadi siapa pun tidak bisa menyalahkan siapa, dan tidak perlu menunggu penilaian dari customer service.
Ini sama sekali bukan cara yang dipakai Phoenix dalam mencegah double-spend—Phoenix memakai nullifier: menandai sekali pakai bahwa sebuah UTXO tertentu sudah dibelanjakan; jika sudah dibelanjakan, maka menjadi tidak berlaku. Moonlight memakai nonce: menaikkan secara berurutan untuk mengunci replay. Dua model akun, dua logika pencegahan duplikasi yang berbeda. Di whitepaper dijelaskan cukup jelas; ini bukan satu set kode yang diganti namanya lalu dipakai ulang di kedua sisi.
Desain ini menyelesaikan “bagaimana jika jaringan menerima transaksi yang sama dua kali”, tetapi belum menyelesaikan “bagaimana jika pengguna sendiri tanpa sengaja salah mentransfer ke akun yang keliru”—nonce mengatur urutan dan keunikan, tidak memastikan apakah isi transaksi itu benar atau tidak. Bagian ini tetap perlu ditutup dengan konfirmasi interaksi di sisi wallet.
$DUSK
#dusk @Dusk