Memahami Transaksi Ethereum yang Tertunda: Nonce, Penggantian, dan Pembatalan
Pahami alasan transaksi Ethereum menunggu, cara nonce akun mengurutkannya, serta kemampuan dan batas fitur percepat atau batalkan di dompet.
Dalam panduan iniLabel pending menunjukkan transaksi yang belum masuk ke blok
Ringkasan singkat
Transaksi Ethereum dari akun eksternal biasa menggunakan nonce berurutan. Transaksi dengan nonce lebih tinggi tidak dapat dijalankan selama nonce yang lebih rendah dari akun yang sama belum digunakan. Fitur percepat atau batalkan di dompet biasanya membuat transaksi pesaing dengan nonce yang sama; tindakan itu tidak menjamin transaksi dimasukkan ke blok, dan transaksi yang sudah dikonfirmasi tidak dapat dibatalkan.
Label pending menunjukkan transaksi yang belum masuk ke blok
Setelah Anda menandatangani transaksi Ethereum, dompet dapat mengirimkannya ke klien eksekusi atau layanan transaksi. Node yang menerimanya dapat meneruskannya ke peer, lalu pengusul blok mungkin memasukkannya ke dalam sebuah blok. Sebelum transaksi masuk ke blok, transaksi tersebut belum mengubah keadaan rantai kanonis. Label “pending” di dompet atau penjelajah biasanya berarti layanan itu mengetahui transaksi tersebut tetapi belum melihatnya di dalam blok; label ini bukan satu antrean jaringan universal. Panduan transaksi Ethereum.org menjelaskan jalur dari penandatanganan dan penyiaran hingga transaksi masuk ke blok.
Transaksi dapat menunggu karena beberapa hal. Batas biayanya mungkin tidak memenuhi syarat untuk suatu blok, transaksi sebelumnya dari akun yang sama mungkin belum terselesaikan, sebuah node mungkin belum menerimanya, atau dompet mungkin menampilkan informasi yang kedaluwarsa atau khusus penyedia. Setiap penyebab memerlukan pemeriksaan yang berbeda. Menaikkan biaya tidak memperbaiki pilihan jaringan yang keliru, dan mengirim pembayaran lagi tanpa memeriksa transaksi pertama dapat membuat pembayaran kedua.
“Pending” juga berbeda dari “confirmed”, “finalized”, atau “failed”. Hash transaksi dapat terlihat sebelum ada receipt; receipt tersedia setelah transaksi dimasukkan ke blok. Setelah itu, blok Ethereum bergerak melalui tahapan konsensus. Dompet dan penjelajah mungkin menggunakan label tersebut secara berbeda, jadi periksa hash transaksi, blok, receipt, dan keadaan rantai terkini, bukan hanya satu label status singkat.
Nonce adalah nomor urut transaksi suatu akun
Akun Ethereum biasa yang dimiliki secara eksternal (externally owned account/EOA) memiliki nonce untuk mengurutkan transaksinya. Nonce adalah penghitung, bukan biaya, cap waktu, atau hash transaksi unik. Untuk setiap akun, rantai menerima transaksi hanya jika nonce-nya adalah nonce berikutnya yang diharapkan berdasarkan keadaan akun. Akun yang sama tidak dapat menjalankan dua transaksi dengan nonce yang sama di rantai kanonis. Dokumentasi akun Ethereum.org menjelaskan nonce sebagai penghitung transaksi akun sekaligus mekanisme perlindungan replay.
Misalkan nonce akun berikutnya yang belum digunakan adalah 41. Transaksi valid berikutnya memakai nonce 41; setelah transaksi itu dimasukkan dan diterapkan, transaksi berikutnya memakai nonce 42. Nonce terkait dengan akun pengirim, bukan alamat tujuan. Dua akun berbeda dapat memiliki transaksi bernomor 41 pada saat yang sama karena masing-masing memiliki urutan sendiri.
Transaksi dapat ditandatangani dengan nonce yang lebih tinggi daripada nonce akun saat ini di rantai, tetapi transaksi tersebut tidak dapat melompati urutan saat dijalankan. Nonce yang lebih awal dan belum terpakai harus digunakan terlebih dahulu. Transaksi dengan nonce yang sudah digunakan akun menjadi kedaluwarsa dan tidak dapat dijalankan sebagai transaksi baru. Pengurutan ini memungkinkan jaringan memproses transaksi tiap akun secara berurutan, meski transaksi disiarkan pada waktu berbeda atau tiba melalui node yang berbeda.
Aturan nonce ini berlaku untuk transaksi EOA biasa di lapisan eksekusi Ethereum. Aturan ini bukan penjelasan universal bagi setiap abstraksi dompet, sequencer rollup, atau rantai. Sistem akun pintar dapat menambahkan aturan operasi dan nonce sendiri; hal itu dibahas di bagian selanjutnya.
Pending dan queued adalah label lokal dari kumpulan transaksi
Ethereum tidak memiliki satu ruang tunggu tersinkron yang dilihat setiap dompet, node, penjelajah blok, dan pengusul dengan cara yang sama persis. Setiap klien eksekusi menyimpan kumpulan transaksi lokal yang berisi transaksi yang telah diterima dan dianggap memenuhi syarat berdasarkan batas serta kebijakannya. Sebuah transaksi dapat muncul di kumpulan satu node tetapi tidak ada di node lain. Dokumentasi RPC txpool Geth menampilkan kelompok lokal pending dan queued milik klien tersebut, serta menyebutkan bahwa beberapa transaksi dapat terkait dengan pengirim dan nonce yang sama.
Dalam istilah Geth, pending umumnya merujuk pada transaksi yang dapat diproses mengikuti urutan nonce dari keadaan akun saat ini; queued dapat mencakup transaksi dengan nonce mendatang yang menunggu celah urutan tertutup. Nama-nama itu menjelaskan antarmuka suatu klien, bukan keadaan konsensus yang harus ditampilkan semua perangkat lunak Ethereum. Dompet dapat menyebut seluruh daftar yang belum dikonfirmasi sebagai “pending”, sedangkan penjelajah mungkin hanya menampilkan transaksi yang teramati oleh penyedia datanya.
Contohnya, jika sebuah node mengetahui transaksi dengan nonce 41 dan transaksi lain dengan nonce 43, node itu tidak dapat menjalankan 43 sebelum 42. Node tersebut mungkin menyimpan 43 dalam antrean sampai 42 tiba atau akun maju dengan cara lain. Node lain yang tidak pernah menerima 43 tidak akan menampilkannya sama sekali. Karena itu, dua penjelajah dapat berbeda pendapat apakah sebuah transaksi berstatus pending atau tidak ditemukan, tanpa satu pun layar membuktikan apa yang dilihat semua validator.
Beberapa klien juga mengizinkan lebih dari satu kandidat transaksi belum terkonfirmasi untuk pengirim dan nonce yang sama. Kandidat-kandidat itu adalah alternatif yang bersaing untuk satu slot urutan, bukan transaksi yang keduanya dapat diterapkan secara berurutan. Kapasitas kumpulan, masa berlaku transaksi, dan aturan penggantian merupakan kebijakan implementasi yang dapat berubah antarversi perangkat lunak. Misalnya, opsi kumpulan transaksi Geth yang dapat dikonfigurasi mencakup ambang kenaikan harga khusus klien; pengaturan itu tidak boleh dianggap sebagai aturan biaya Ethereum yang universal. Lihat referensi baris perintah Geth untuk cakupan opsi tersebut.
Satu nonce yang belum terselesaikan dapat menahan transaksi setelahnya
Bayangkan nonce akun berikutnya di rantai adalah 41. Anda menyiarkan transaksi A dengan nonce 41, lalu transaksi B dengan nonce 42. Jika A belum terselesaikan, B tidak dapat diterapkan lebih dahulu. B mungkin berada di antrean lokal, hanya muncul sebagai pending di dompet, atau tidak terlihat di penjelajah yang belum menerimanya. Hubungan nonce-lah yang penting, bukan urutan saat dompet membuat atau menampilkan kedua transaksi.
Jika A akhirnya masuk ke blok, nonce akun maju ke 42 dan B dapat memenuhi syarat berikutnya, bergantung pada validitasnya sendiri, kondisi biaya, dan kebijakan kumpulan transaksi. Jika A diganti dengan transaksi valid lain yang memakai nonce 41, transaksi pengganti itu menempati posisi urutan yang sama jika itulah yang dimasukkan. Jika nonce 41 digunakan oleh transaksi lain dari akun tersebut, kandidat lama bernonce 41 sudah kedaluwarsa dan tidak dapat dijalankan setelahnya.
Inilah sebabnya mengirim transaksi baru dengan nonce lebih tinggi bukan cara umum untuk menghapus transaksi macet. Tindakan itu menambah transaksi lain di belakang celah tersebut. Membatalkan B juga tidak menyelesaikan A jika B adalah transaksi yang nonce-nya lebih tinggi. Mulailah dari nonce paling awal yang belum terselesaikan dan periksa statusnya sebelum mengubah apa pun.
Celah dapat bersifat sementara atau menetap. Transaksi sebelumnya mungkin belum sampai ke node yang Anda periksa, pengaturan biayanya mungkin kurang menarik atau tidak memadai untuk kondisi saat ini, atau transaksi itu mungkin sudah dihapus dari kumpulan salah satu node. Dompet juga dapat menampilkan transaksi queued yang dibuat di perangkat lain. Layar saja tidak menunjukkan mana yang terjadi; bandingkan nonce akun yang sudah terkonfirmasi, hash transaksi, dan lebih dari satu tampilan tepercaya.

Pengaturan biaya dapat memengaruhi pemasukan ke blok, tetapi tidak mengubah urutan nonce
Urutan nonce dan kelayakan biaya adalah dua batasan yang terpisah. Transaksi dengan nonce berikutnya yang tepat tetap dapat menunggu jika parameter biayanya tidak memenuhi syarat untuk suatu blok. Transaksi dengan nonce lebih tinggi tidak dapat mendahului hanya dengan menawarkan tip lebih besar. Menaikkan biaya transaksi nonce 42 tidak membuat nonce 41 menghilang.
Untuk transaksi EIP-1559 standar, biaya maksimum harus dapat menutup base fee pada blok yang memasukkannya, dan priority fee dapat memengaruhi pilihan pengusul blok. Base fee dan ruang blok yang tersedia dapat berubah saat transaksi menunggu. Biaya maksimum adalah batas atas; batas yang lebih besar tidak menjamin waktu konfirmasi tertentu. Panduan biaya gas Ethereum menjelaskan kolom-kolom tersebut dan cara menentukan biaya efektif.
Node atau dompet dapat menerapkan aturan relay atau penggantian tambahan. Kebijakan itu menentukan apa yang bersedia diterima atau diteruskan oleh layanan tertentu; semuanya bukan aturan konsensus. Misalnya, Geth menyediakan ambang kenaikan harga yang dapat dikonfigurasi untuk mengganti transaksi pending di kumpulannya sendiri. Klien, penyedia, dompet, atau versi perangkat lunak lain mungkin berperilaku berbeda. Jangan mengandalkan persentase yang Anda ingat atau waktu tunggu tetap sebagai jaminan seluruh jaringan.
Jika transaksi menunggu karena nonce yang lebih rendah belum terselesaikan, identifikasi dahulu transaksi yang memakai nonce tersebut. Jika transaksi menunggu karena batas biayanya tidak dapat menutup kondisi base fee saat ini, pahami kolom biaya sebelum mengubahnya. Panduan biaya Ethereum cocok untuk perhitungan biaya; artikel ini berfokus pada masalah pengurutan yang terpisah.
Fitur percepat mengirim kandidat pengganti dengan nonce yang sama
Fitur “percepat” di dompet biasanya menyusun transaksi baru dari akun yang sama dengan nonce yang sama dan parameter biaya yang disesuaikan. Kedua kandidat saling bertentangan karena akun hanya dapat menjalankan satu transaksi untuk nonce tersebut. Jika pengganti diterima di kumpulan transaksi yang relevan dan dimasukkan ke blok, pengganti dapat mengambil slot nonce itu; transaksi asli tidak dapat ikut dijalankan di rantai kanonis. Panduan transaksi pending MetaMask menjelaskan fitur percepatnya sebagai pengiriman ulang dengan nonce sama dan biaya lebih tinggi.
Transaksi pengganti mungkin mempertahankan tujuan dan tindakan awal sambil mengubah kolom biaya, tetapi periksa layar penandatanganan dan jangan berasumsi. Implementasi dompet dapat menampilkan kolom lain atau memberi label tindakan secara berbeda. Pastikan akun pengirim, nonce, tujuan, nilai, dan data kontrak sebelum menandatangani pengganti. Jika pengganti mengubah tindakan transaksi, itu bukan sekadar penyesuaian biaya yang tidak berbahaya.
Tidak ada jaminan bahwa pengganti akan diterima di semua tempat atau segera dimasukkan ke blok. Transaksi asli mungkin sudah masuk ke blok; sebuah node dapat menolak pengganti berdasarkan kebijakannya; pengganti mungkin tetap kurang menarik bagi pengusul; atau layanan mungkin tidak meneruskannya ke node yang Anda pantau. Jika transaksi asli sudah dikonfirmasi, transaksi lain dengan nonce yang sudah dipakai tidak dapat membatalkannya dan biasanya akan ditolak sebagai kedaluwarsa.
Istilah “pengganti” di sini berarti transaksi pesaing dari akun dan nonce yang sama. Jangan menerapkan prosedur RBF atau CPFP Bitcoin ke Ethereum. Bitcoin memiliki model transaksi yang berbeda, dan mekanisme peningkatan biayanya bukan petunjuk untuk akun Ethereum.
Pembatalan adalah upaya memenangkan slot nonce yang sama
Setelah transaksi Ethereum bertanda tangan disiarkan, tidak ada perintah pembatalan di tingkat protokol yang menariknya dari setiap node. Sebagian dompet menawarkan tindakan batalkan selagi transaksi belum dikonfirmasi. Tindakan ini biasanya mencoba menerbitkan transaksi lain dari akun yang sama dengan nonce yang sama; pola umum di sejumlah dompet adalah transaksi bernilai nol ke alamat pengirim sendiri. Jika kandidat pembatalan diterima dan dimasukkan sebelum transaksi asli, nonce tersebut terpakai sehingga kandidat asli tidak valid untuk dijalankan kemudian. Bentuk dan ketersediaannya bergantung pada dompet.
Transaksi asli dan kandidat pembatalan dapat berlomba. Jika transaksi asli masuk ke blok lebih dahulu, pembatalan yang dikirim setelahnya tidak dapat membatalkan dampaknya. Jika kedua kandidat tidak diterima atau tidak dimasukkan, nonce dapat tetap belum terselesaikan. Klik tombol atau pesan sukses dari dompet tidak membuktikan pembatalan menang. Periksa hash transaksi yang dihasilkan dan status di rantai kanonis. Petunjuk MetaMask secara tegas membatasi upaya pembatalannya pada transaksi yang masih pending dan menjelaskan bahwa transaksi terkonfirmasi tidak dapat dibatalkan.
Sebelum menandatangani transaksi pembatalan, pastikan transaksi itu menggunakan akun dan nonce yang sama dengan transaksi yang ingin Anda singkirkan, lalu periksa semua kolom yang ditampilkan dompet. Jika dimasukkan, transaksi ini mungkin memerlukan biaya jaringan lagi. Kandidat pembatalan itu sendiri dapat menunggu atau gagal menggantikan transaksi asli berdasarkan kebijakan kumpulan transaksi terkait. Kata “dibatalkan” di dompet bukan bukti adanya pembalikan di tingkat protokol; anggap hasilnya benar setelah Anda memastikan transaksi mana yang memakai nonce tersebut.
Jika transaksi sudah menjalankan persetujuan token, panggilan kontrak, atau transfer, membatalkan transaksi yang lebih baru tidak dapat membalikkan perubahan keadaan yang telah selesai. Beberapa tindakan kontrak memiliki metode tindak lanjut tersendiri, tetapi ketersediaan dan dampaknya bergantung pada kontrak. Jangan menandatangani transaksi yang tidak dikenal hanya karena antarmuka menyebutnya pembatalan.
Included, reverted, dropped, dan missing adalah pengamatan yang berbeda
Transaksi yang sudah masuk ke blok memiliki blok dan receipt. Jika berhasil, perubahan keadaan yang dimaksud mungkin telah diterapkan. Jika eksekusi EVM mengalami revert, perubahan keadaan dari eksekusi itu dibatalkan, tetapi transaksi tetap memakai nonce akun dan masih dapat dikenai gas. Gunakan receipt dan status eksekusi, jangan menyimpulkan keberhasilan dari notifikasi dompet. Lihat panduan transaksi Ethereum dan panduan biaya gas untuk memahami perbedaan antara masuk ke blok dan hasil eksekusinya.
Label “dropped” atau “not found” sering kali merupakan laporan dari satu dompet, penjelajah, penyedia RPC, atau kumpulan lokal. Label itu saja tidak membuktikan bahwa protokol membatalkan transaksi atau nonce-nya bebas. Node lain mungkin masih mengetahuinya; dompet dapat menyiarkan ulang transaksi bertanda tangan; atau blok berikutnya dapat menunjukkan bahwa nonce akun sudah maju. Sebaliknya, transaksi lama mungkin tidak ada di tampilan yang Anda periksa sementara nonce akun yang terkonfirmasi belum berubah.
Jika hash transaksi tidak ditemukan, pastikan Anda memilih rantai dan akun yang sama dengan yang membuat transaksi. Bandingkan nonce terbaru akun di rantai dengan nonce transaksi dan periksa transaksi terbaru dari pengirim itu. Respons nonce too low adalah petunjuk bahwa nonce mungkin sudah dipakai menurut sudut pandang endpoint tersebut, bukan alasan untuk terus mengulang permintaan yang sama. Pastikan transaksi mana yang memakainya dan apakah bloknya masih kanonis.
Transaksi yang masuk ke blok juga dapat terdampak reorganisasi rantai jangka pendek sebelum rantai stabil. Dompet dan penjelajah dapat memperbarui label saat tampilan mereka berubah. Untuk transfer penting, tunggu sesuai kebijakan konfirmasi layanan penerima dan, jika relevan, finalitas konsensus yang lebih kuat; “terlihat dalam satu blok” dan “tidak dapat dibatalkan dalam keadaan apa pun” bukanlah klaim yang sama.
Periksa nonce paling awal yang belum terselesaikan sebelum bertindak
Mulailah dengan memastikan rantai, akun pengirim, dan hash transaksi. Cari hash itu di penjelajah tepercaya untuk jaringan yang benar. Periksa apakah ada receipt, nonce yang digunakan, keberhasilan eksekusi, serta apakah akun telah membuat transaksi berikutnya. Jangan mengungkapkan atau memasukkan seed phrase untuk memeriksa transaksi; alamat publik dan hash transaksi cukup untuk pencarian di blockchain publik.
Jika hash tidak terlihat, bandingkan nonce akun terbaru yang terkonfirmasi dengan nonce yang ditampilkan dompet. Pengembang atau operator node dapat memanggil eth_getTransactionCount menggunakan tag blok latest dan pending. Referensi JSON-RPC Ethereum.org mendefinisikan tag tersebut: latest mengacu pada keadaan blok terbaru, sedangkan pending mengacu pada keadaan pending. Hasil pending tetap bergantung pada tampilan endpoint RPC itu; dua penyedia dapat memberi nilai berbeda. Kebanyakan pengguna dapat memperoleh petunjuk awal yang sama dari aktivitas akun di dompet dan penjelajah tepercaya tanpa menjalankan perintah.
Selanjutnya, mulai dari nonce terendah yang belum digunakan. Jika transaksi asli masih terlihat dan dompet mendukung penggantian, periksa semua kolom dan pengaturan biaya pengganti sebelum menandatangani. Jika tidak terlihat, tanyakan kepada dompet atau penyedia RPC bagaimana mereka menangani pengiriman ulang dan penggantian, alih-alih menganggap transaksi sudah lenyap dari jaringan. Jika nonce sudah digunakan, identifikasi transaksi yang masuk ke blok sebelum mencoba hal lain. Hindari berkali-kali mengirim transaksi baru dengan nonce yang lebih tinggi; hal itu dapat memperpanjang antrean tanpa menutup celah pertama.
Langkah-langkah ini mencakup transaksi standar akun eksternal Ethereum. Sistem abstraksi akun dapat mengirim UserOperation melalui bundler, dan akun pintar dapat memakai kunci nonce serta urutan yang lebih rumit daripada satu penghitung sederhana. EIP-4337 mendefinisikan struktur nonce untuk operasi tersebut, jadi dompet dengan abstraksi akun mungkin tidak berperilaku persis seperti contoh EOA dalam artikel ini. Untuk jaringan tujuan, alamat, dan status transfer, lanjutkan dengan daftar periksa transfer kripto.
Pertanyaan umum
Q1Bisakah saya membatalkan transaksi Ethereum setelah dikonfirmasi?
Tidak. Dompet dapat mencoba penggantian dengan nonce sama saat transaksi belum dikonfirmasi, tetapi tidak dapat membatalkan transaksi yang sudah masuk ke blok dan dijalankan. Periksa hash transaksi dan status rantai sebelum bertindak.
Q2Mengapa transaksi Ethereum saya berikutnya ikut menunggu?
Transaksi EOA biasa dijalankan sesuai urutan nonce. Jika nonce sebelumnya belum terselesaikan, nonce berikutnya tidak dapat dijalankan lebih dulu, meski terlihat di dompet atau menawarkan biaya lebih tinggi.
Q3Apakah “dropped” berarti transaksi saya dibatalkan?
Belum tentu. Artinya mungkin hanya satu dompet, penjelajah, atau node tidak lagi melihat transaksi itu. Periksa hash transaksi dan nonce terbaru akun di jaringan yang benar sebelum menganggap nonce tersebut bebas.
Sumber dan bacaan lanjutan
Laporkan masalah
Kami akan menyiapkan email berisi tautan artikel ini. Mark menerima laporan setelah Anda mengirimkannya
Cek cepat
Sudah membaca panduannya? Uji diri dengan 3 pertanyaan
Pertanyaan 01
Sebuah akun memiliki transaksi belum terselesaikan dengan nonce 41 dan transaksi lain dengan nonce 42. Apa yang dapat dilakukan transaksi kedua?
Pilih jawaban untuk melihat penjelasannya
Glosarium opsi
Kondisi ketika harga pelaksanaan opsi sangat dekat dengan harga pasar aset acuannya. Opsi mungkin belum memiliki nilai intrinsik yang berarti, tetapi masih dapat memiliki premi karena waktu dan ketidakpastian yang tersisa.
Baca panduan lengkapOpsi beliKontrak yang memberi pembeli hak untuk membeli aset acuan pada harga pelaksanaan sesuai persyaratannya. Penjual kontrak memikul kewajiban yang sepadan jika hak itu dilaksanakan dan ditetapkan kepadanya.
Baca panduan lengkap