Nonce: mengapa transaksi Ethereum harus mengantre

·4 mnt baca·Oleh SSP Editorial Team
Sampul SSP Academy: penjelasan nonce Ethereum

Nonce: mengapa transaksi Ethereum harus mengantre

Di Bitcoin, dua pembayaran yang tidak saling berkaitan dari dompet yang sama bisa dikonfirmasi dalam urutan apa pun. Di Ethereum tidak bisa: setiap transaksi dari sebuah alamat memiliki nomor, dan jaringan memprosesnya secara ketat berurutan. Nomor itu adalah nonce, dan nonce menjelaskan beberapa momen paling membingungkan dalam dompet Ethereum: satu transaksi yang tak kunjung terkonfirmasi, lalu semua transaksi berikutnya ikut tertahan di belakangnya.

Apa itu nonce

Untuk akun Ethereum biasa, nonce adalah penghitung: jumlah transaksi yang sudah dikirim oleh alamat tersebut. Transaksi pertama memakai nonce 0, berikutnya memakai 1, dan seterusnya. Setiap transaksi yang Anda tanda tangani menyertakan nonce-nya, dan jaringan hanya akan menerima nonce n setelah nonce n − 1 dimasukkan ke dalam blok.

Nonce punya dua tugas:

  • Perlindungan dari pemutaran ulang. Transaksi yang sudah ditandatangani tidak dapat dikirim dua kali, karena begitu nonce 5 dipakai, transaksi lain dengan nonce 5 dari alamat itu menjadi tidak valid.
  • Urutan. Transaksi dari satu akun dieksekusi persis sesuai urutan yang Anda maksudkan, yang penting ketika satu transaksi bergantung pada transaksi lain: setujui dulu, baru tukar.

Mengapa satu transaksi macet memblokir sisanya

Aturan urutan punya efek samping. Jika nonce 5 tertahan di mempool dengan biaya terlalu rendah untuk diambil, nonce 6, 7, dan 8 juga tidak bisa dimasukkan, berapa pun biaya yang mereka bayar. Mereka menunggu dalam antrean di belakangnya.

Itulah sebabnya satu transaksi dengan biaya terlalu rendah bisa membuat dompet tampak membeku. Tidak ada yang hilang; antreannya hanya tertahan di satu posisi.

Membuka antrean

Karena setiap nonce hanya bisa dipakai sekali, Anda memperbaiki transaksi yang macet dengan menggantinya:

  • Mempercepat: tanda tangani transaksi baru dengan nonce yang sama dan biaya lebih tinggi. Node akan mengganti versi lama, dan mana pun yang lebih dulu masuk blok, itulah yang berlaku.
  • Membatalkan: tanda tangani transaksi dengan nonce yang sama yang tidak mengirim apa pun ke diri Anda sendiri, dengan biaya lebih tinggi. Setelah transaksi ini terkonfirmasi, transaksi aslinya tidak akan pernah bisa terkonfirmasi.

Transaksi pengganti umumnya memerlukan biaya yang jauh lebih tinggi daripada transaksi asli agar diterima. Transaksi macet dan replace-by-fee membahas alat yang setara di Bitcoin.

Masalah nonce yang umum

  • "Nonce too low" (nonce terlalu rendah). Transaksi dengan nonce tersebut sudah pernah dipakai, sering kali karena dompet atau perangkat lain mengirim dari alamat yang sama.
  • Celah. Transaksi dengan nonce 9 saat akun baru berada di 7 akan menunggu sampai 7 dan 8 ada. Biasanya ini tanda ada sesuatu yang terbuang atau ditandatangani di tempat lain.
  • Dua perangkat, satu akun. Jika dua aplikasi mengirim dari alamat yang sama secara bersamaan, keduanya bisa memilih nonce yang sama; salah satu transaksi akan gagal.

Cara jaringan lain menanganinya

  • Bitcoin dan jaringan UTXO lainnya tidak memiliki nonce akun. Setiap transaksi membelanjakan koin tertentu, dan sebuah koin hanya bisa dibelanjakan sekali; itulah yang mencegah pemutaran ulang dan pembelanjaan ganda.
  • Solana memakai blockhash terbaru sebagai gantinya: transaksi hanya berlaku dalam rentang waktu singkat. Untuk penandatanganan yang memakan waktu lebih lama, seperti mengumpulkan persetujuan di dua perangkat, Solana menyediakan nonce tahan lama yang disimpan di akun khusus.

Akun pintar juga punya nonce

Akun kontrak pintar yang dibangun di atas ERC-4337 tidak mengirim transaksi biasa. Akun ini menandatangani operasi pengguna, yang dikirim oleh bundler melalui kontrak EntryPoint bersama. Setiap akun tetap memiliki nonce, yang dilacak oleh EntryPoint, dengan perlindungan pemutaran ulang yang sama. Standar ini juga mengizinkan beberapa urutan nonce independen per akun, sehingga operasi yang tidak saling berkaitan tidak perlu saling menunggu. Abstraksi akun dari prinsip dasar menjelaskan gambaran besarnya.

Nonce di SSP

Di Ethereum dan jaringan EVM lain yang didukung SSP, akun SSP Anda adalah akun pintar ERC-4337 yang dikendalikan oleh multisig 2-dari-2 Anda. Setiap operasi menyertakan nonce-nya, dan SSP Wallet maupun SSP Key sama-sama menandatanganinya, sehingga operasi yang sudah disetujui tidak dapat diputar ulang dan tidak dapat dipakai lagi di posisi lain dalam riwayat Anda.

Satu konsekuensi praktis: kontrak akun Anda di-deploy oleh operasi pertama yang Anda kirim darinya. Pengiriman pertama itu mencakup proses deploy, sehingga memakai gas yang jauh lebih banyak daripada pengiriman berikutnya. Ini memang wajar, dan hanya terjadi sekali per akun di setiap jaringan.

Ringkasan yang jujur

Nonce adalah penghitung yang membuat setiap akun Ethereum memproses transaksinya tepat sekali dan berurutan. Ini melindungi Anda dari pemutaran ulang dan menjaga transaksi yang saling bergantung tetap berurutan, dengan konsekuensi bahwa satu transaksi berbiaya terlalu rendah bisa menahan semua yang ada di belakangnya.

Jika itu terjadi, jangan mengirim transaksi lain di atasnya. Ganti transaksi yang macet dengan nonce yang sama dan biaya lebih tinggi, atau batalkan, maka antrean akan kembali lancar.

Bagikan artikel ini

Artikel terkait