Memahami Transaksi Ethereum yang Tertangguh: Nonce, Penggantian dan Pembatalan
Fahami sebab transaksi Ethereum menunggu, cara nonce akaun menyusun transaksinya, serta perkara yang boleh dan tidak boleh dilakukan oleh fungsi percepat atau batal dalam dompet.
Dalam panduan iniLabel pending menunjukkan transaksi yang belum dimasukkan ke dalam blok
Ringkasan ringkas
Transaksi Ethereum daripada akaun milik luaran biasa menggunakan nonce berjujukan. Transaksi dengan nonce yang lebih tinggi tidak boleh dilaksanakan selagi nonce terdahulu daripada akaun yang sama belum digunakan. Fungsi percepat atau batal dalam dompet biasanya mencipta transaksi pesaing dengan nonce yang sama; tindakan itu tidak menjamin transaksi dimasukkan ke dalam blok, dan transaksi yang telah disahkan tidak boleh dibuat asal.
Label pending menunjukkan transaksi yang belum dimasukkan ke dalam blok
Selepas anda menandatangani transaksi Ethereum, dompet boleh menghantarnya kepada klien pelaksanaan atau perkhidmatan transaksi. Nod yang menerimanya boleh menyampaikannya kepada rakan setara, kemudian pencadang blok mungkin memasukkannya ke dalam blok. Sebelum dimasukkan, transaksi itu belum mengubah keadaan rantaian kanonik. Label “pending” pada dompet atau penjelajah biasanya bermaksud perkhidmatan itu mengetahui transaksi tersebut tetapi belum melihatnya dalam blok; label itu bukan satu baris gilir rangkaian universal. Panduan transaksi Ethereum.org menerangkan perjalanan daripada tandatangan dan siaran kepada kemasukan dalam blok.
Transaksi boleh menunggu atas beberapa sebab. Had yurannya mungkin tidak memenuhi syarat untuk sesuatu blok, transaksi terdahulu daripada akaun yang sama mungkin masih belum selesai, nod mungkin belum menerimanya, atau dompet mungkin memaparkan maklumat lapuk atau khusus kepada penyedia. Setiap punca memerlukan pemeriksaan yang berbeza. Menaikkan yuran tidak membetulkan pilihan rangkaian yang salah, dan menghantar bayaran lain tanpa memeriksa yang pertama boleh menyebabkan bayaran berganda.
“Pending” juga berbeza daripada “confirmed”, “finalized” atau “failed”. Hash transaksi boleh kelihatan sebelum sebarang resit wujud; resit tersedia selepas transaksi dimasukkan ke dalam blok. Selepas itu, blok Ethereum melalui keadaan konsensus. Dompet dan penjelajah mungkin menggunakan label ini dengan cara berbeza, jadi periksa hash transaksi, blok, resit dan keadaan rantaian semasa dan bukannya bergantung pada satu label status yang ringkas.
Nonce ialah nombor turutan transaksi bagi sesuatu akaun
Akaun Ethereum biasa yang dimiliki secara luaran (externally owned account, EOA) mempunyai nonce untuk menyusun transaksinya. Nonce ialah pembilang, bukannya yuran, cap masa atau hash transaksi unik. Bagi setiap akaun, rantaian menerima transaksi hanya apabila transaksi itu menggunakan nonce seterusnya yang dijangka berdasarkan keadaan akaun. Akaun yang sama tidak boleh melaksanakan dua transaksi dengan nonce yang sama pada rantaian kanonik. Dokumentasi akaun Ethereum.org menerangkan nonce sebagai pembilang transaksi akaun dan mekanisme perlindungan daripada serangan ulangan.
Katakan nonce seterusnya yang belum digunakan oleh akaun ialah 41. Transaksi sah seterusnya menggunakan nonce 41; selepas transaksi itu dimasukkan dan dilaksanakan, transaksi selepasnya menggunakan nonce 42. Nonce dikaitkan dengan akaun penghantar, bukannya alamat penerima. Dua akaun berbeza boleh mempunyai transaksi bernombor 41 pada masa yang sama kerana setiap akaun mempunyai turutan sendiri.
Transaksi boleh ditandatangani dengan nonce yang lebih tinggi daripada nonce akaun semasa dalam rantaian, tetapi transaksi itu tidak boleh melangkaui turutan apabila dilaksanakan. Nonce terdahulu yang belum digunakan mesti digunakan dahulu. Transaksi dengan nonce yang telah digunakan oleh akaun sudah lapuk dan tidak boleh dilaksanakan sebagai transaksi baharu. Susunan ini membolehkan rangkaian memproses transaksi setiap akaun mengikut turutan, walaupun transaksi disiarkan pada masa berbeza atau tiba melalui nod berlainan.
Peraturan nonce ini terpakai pada transaksi EOA biasa di lapisan pelaksanaan Ethereum. Ia bukan penerangan universal untuk setiap abstraksi dompet, sequencer rollup atau rantaian. Sistem akaun pintar boleh menambah peraturan operasi dan nonce tersendiri, seperti yang dibincangkan kemudian dalam panduan ini.
Pending dan queued ialah label set transaksi setempat
Ethereum tidak mempunyai satu ruang menunggu terselaras yang dilihat dengan cara yang sama oleh setiap dompet, nod, penjelajah blok dan pencadang. Setiap klien pelaksanaan menyimpan set transaksi setempat yang mengandungi transaksi yang diterimanya dan dianggap layak mengikut had serta polisinya. Sesuatu transaksi boleh muncul dalam set satu nod tetapi tiada dalam set nod lain. Dokumentasi RPC txpool Geth memaparkan kumpulan pending dan queued setempat milik klien itu dan menyatakan bahawa beberapa transaksi boleh dikaitkan dengan penghantar dan nonce yang sama.
Dalam istilah Geth, pending lazimnya merujuk kepada transaksi yang boleh diproses mengikut susunan nonce daripada keadaan semasa akaun; queued boleh merangkumi transaksi nonce masa hadapan yang menunggu jurang tertutup. Nama tersebut menerangkan antara muka klien, bukannya keadaan pada peringkat konsensus yang mesti dipaparkan oleh semua perisian Ethereum. Dompet mungkin melabelkan seluruh senarai belum disahkan sebagai “pending”, manakala penjelajah mungkin hanya memaparkan transaksi yang dilihat oleh penyedia datanya.
Contohnya, jika nod mengetahui transaksi dengan nonce 41 dan satu lagi dengan nonce 43, nod itu tidak boleh melaksanakan 43 sebelum 42. Nod tersebut mungkin menyimpan 43 dalam baris gilir sehingga 42 tiba atau akaun bergerak ke hadapan melalui cara lain. Nod lain yang tidak pernah menerima 43 langsung tidak akan memaparkannya. Oleh itu, dua penjelajah boleh berbeza pendapat sama ada sesuatu transaksi berstatus pending atau tidak ditemui tanpa mana-mana paparan itu membuktikan perkara yang dilihat oleh semua pengesah.
Sesetengah klien juga membenarkan lebih daripada satu calon transaksi belum disahkan bagi penghantar dan nonce yang sama. Calon tersebut ialah pilihan yang bersaing untuk slot turutan yang sama, bukannya dua transaksi yang boleh digunakan kedua-duanya mengikut turutan. Kapasiti set, tempoh hayat transaksi dan peraturan penggantian ialah dasar pelaksanaan yang boleh berubah antara versi perisian. Contohnya, pilihan set transaksi Geth yang boleh dikonfigurasi merangkumi tetapan kenaikan harga khusus klien; tetapan itu tidak boleh dianggap sebagai peraturan yuran Ethereum sejagat. Lihat rujukan baris arahan Geth untuk skop pilihan tersebut.
Satu nonce yang belum selesai boleh menahan transaksi selepasnya
Bayangkan nonce seterusnya akaun dalam rantaian ialah 41. Anda menyiarkan transaksi A dengan nonce 41, kemudian transaksi B dengan nonce 42. Jika A belum selesai, B tidak boleh digunakan dahulu. B mungkin berada dalam baris gilir setempat, hanya dipaparkan sebagai pending dalam dompet atau tidak kelihatan pada penjelajah yang belum menerimanya. Hubungan susunan nonce ialah perkara penting, bukannya turutan dompet mencipta atau memaparkan dua transaksi tersebut.
Jika A akhirnya dimasukkan, nonce akaun bergerak ke 42 dan B mungkin layak diproses seterusnya, tertakluk pada kesahihan sendiri, syarat yuran dan dasar set transaksi. Jika A digantikan dengan transaksi sah lain yang menggunakan nonce 41, transaksi pengganti itu mengisi kedudukan turutan yang sama jika itulah transaksi yang dimasukkan. Jika nonce 41 telah digunakan oleh transaksi lain daripada akaun tersebut, calon lama dengan nonce 41 sudah lapuk dan tidak boleh dilaksanakan selepas itu.
Sebab itulah menghantar transaksi baharu dengan nonce lebih tinggi bukan cara umum untuk melepaskan transaksi yang tersekat. Tindakan itu menambah satu lagi transaksi selepas jurang tersebut. Membatalkan B juga tidak menyelesaikan A jika B ialah transaksi yang lebih kemudian. Mulakan dengan nonce terawal akaun yang belum selesai dan sahkan statusnya sebelum membuat perubahan.
Jurang itu mungkin sementara atau berpanjangan. Transaksi terdahulu mungkin belum sampai kepada nod yang anda periksa, tetapan yurannya mungkin kurang menarik atau tidak mencukupi untuk keadaan semasa, atau transaksi itu mungkin telah dikeluarkan daripada set salah satu nod. Dompet juga boleh memaparkan transaksi queued yang dibuat pada peranti lain. Paparan itu sahaja tidak memberitahu apa yang berlaku; bandingkan nonce akaun yang telah disahkan, hash transaksi dan lebih daripada satu paparan yang boleh dipercayai.

Tetapan yuran boleh mempengaruhi kemasukan tetapi tidak mengubah susunan nonce
Susunan nonce dan kelayakan yuran ialah dua kekangan berasingan. Transaksi dengan nonce seterusnya yang betul masih boleh menunggu jika parameter yurannya tidak memenuhi syarat untuk sesuatu blok. Transaksi dengan nonce lebih tinggi tidak boleh memotong giliran hanya dengan menawarkan tip lebih besar. Menaikkan yuran bagi nonce 42 tidak menghilangkan nonce 41.
Bagi transaksi EIP-1559 standard, yuran maksimum mesti mencukupi untuk menampung base fee blok yang memasukkannya, dan priority fee boleh mempengaruhi pilihan pencadang blok. Base fee serta ruang blok yang tersedia boleh berubah semasa transaksi menunggu. Yuran maksimum ialah had atas; had yang lebih tinggi tidak menjamin masa pengesahan tertentu. Panduan yuran gas Ethereum menerangkan medan tersebut dan cara yuran berkesan ditentukan.
Nod atau dompet boleh mengenakan peraturan relay atau penggantian tambahan. Polisi itu menentukan perkara yang sanggup diterima atau disampaikan oleh perkhidmatan berkenaan; semuanya bukan peraturan konsensus. Contohnya, Geth menyediakan ambang kenaikan harga boleh konfigurasi untuk menggantikan transaksi pending dalam setnya sendiri. Klien, penyedia, dompet atau versi perisian lain mungkin berkelakuan berbeza. Jangan bergantung pada peratusan yang diingati atau tempoh menunggu tetap sebagai jaminan seluruh rangkaian.
Jika transaksi menunggu kerana nonce yang lebih rendah belum selesai, kenal pasti dahulu transaksi yang menggunakan nonce itu. Jika transaksi menunggu kerana had yurannya tidak dapat menampung keadaan base fee semasa, fahami medan yuran sebelum mengubahnya. Panduan yuran Ethereum sesuai untuk pengiraan yuran; artikel ini menumpukan pada isu susunan yang berasingan.
Percepat menghantar calon pengganti dengan nonce yang sama
Fungsi “percepat” pada dompet lazimnya membina transaksi baharu daripada akaun yang sama dengan nonce yang sama serta parameter yuran yang dilaraskan. Kedua-dua calon bercanggah kerana akaun hanya boleh melaksanakan satu transaksi bagi nonce tersebut. Jika pengganti diterima dalam set transaksi yang berkaitan dan dimasukkan, pengganti boleh mengambil slot nonce itu; transaksi asal tidak boleh turut dilaksanakan pada rantaian kanonik. Panduan transaksi pending MetaMask menerangkan fungsi percepatnya sebagai penghantaran semula dengan nonce yang sama dan yuran lebih tinggi.
Transaksi pengganti mungkin mengekalkan destinasi dan tindakan asal sambil mengubah medan yuran, tetapi periksa skrin tandatangan dan jangan membuat andaian. Pelaksanaan dompet mungkin memaparkan medan lain atau melabelkan tindakan itu secara berbeza. Sahkan akaun penghantar, nonce, destinasi, nilai dan data kontrak sebelum menandatangani pengganti. Jika pengganti mengubah tujuan transaksi, itu bukan sekadar pelarasan yuran yang tidak berbahaya.
Pengganti tidak dijamin diterima di semua tempat atau dimasukkan dengan cepat. Transaksi asal mungkin sudah dimasukkan; nod mungkin menolak pengganti berdasarkan polisinya; pengganti mungkin masih tidak menarik bagi pencadang; atau perkhidmatan mungkin tidak menyampaikannya kepada nod yang sedang anda pantau. Jika transaksi asal sudah disahkan, menghantar transaksi lain dengan nonce yang telah digunakan tidak boleh membatalkannya dan biasanya akan ditolak sebagai lapuk.
Istilah “pengganti” di sini bermaksud transaksi pesaing daripada akaun dan nonce yang sama. Jangan gunakan prosedur RBF atau CPFP Bitcoin pada Ethereum. Bitcoin menggunakan model transaksi yang berbeza dan mekanisme menaikkan yurannya bukan panduan untuk akaun Ethereum.
Pembatalan ialah percubaan untuk memenangi slot nonce yang sama
Selepas transaksi Ethereum bertandatangan disiarkan, tiada arahan undur pada peringkat protokol yang menariknya daripada setiap nod. Sesetengah dompet menawarkan fungsi batal ketika transaksi masih belum disahkan. Fungsi itu biasanya cuba menerbitkan transaksi lain daripada akaun yang sama dengan nonce yang sama; satu corak dompet yang biasa ialah transaksi bernilai sifar kepada alamat penghantar sendiri. Jika calon pembatalan diterima dan dimasukkan sebelum transaksi asal, calon itu menggunakan nonce tersebut lalu menyebabkan calon asal tidak lagi sah untuk dilaksanakan kemudian. Bentuk dan ketersediaan tepat bergantung pada dompet.
Transaksi asal dan calon pembatalan boleh berlumba. Jika transaksi asal dimasukkan dahulu, pembatalan yang dihantar selepasnya tidak boleh mengundurkan kesannya. Jika kedua-dua calon tidak diterima atau dimasukkan, nonce mungkin kekal belum selesai. Butang yang ditekan atau mesej berjaya daripada dompet tidak membuktikan pembatalan menang. Periksa hash transaksi yang terhasil dan status rantaian kanonik. Arahan MetaMask secara jelas mengehadkan percubaan pembatalannya kepada transaksi yang masih pending dan menerangkan bahawa transaksi yang telah disahkan tidak boleh dibatalkan.
Sebelum menandatangani transaksi pembatalan, pastikan ia menggunakan akaun dan nonce yang sama dengan transaksi yang ingin anda gantikan, kemudian periksa setiap medan yang dipaparkan oleh dompet. Jika dimasukkan, transaksi itu mungkin memerlukan satu lagi yuran rangkaian. Calon pembatalan itu sendiri juga boleh menunggu atau gagal menggantikan transaksi asal mengikut polisi set transaksi yang berkenaan. Perkataan “dibatalkan” dalam dompet bukan bukti pembalikan pada peringkat protokol; anggap hasilnya sah hanya selepas mengesahkan transaksi yang menggunakan nonce itu.
Jika transaksi itu telah melaksanakan kelulusan token, panggilan kontrak atau pindahan, membatalkan transaksi yang lebih kemudian tidak boleh mengundurkan perubahan keadaan yang sudah selesai. Sesetengah tindakan kontrak mempunyai kaedah susulan yang berasingan, tetapi ketersediaan dan kesannya bergantung pada kontrak. Jangan menandatangani transaksi yang tidak dikenali hanya kerana antara muka melabelkannya sebagai pembatalan.
Included, reverted, dropped dan missing ialah pemerhatian yang berbeza
Transaksi yang dimasukkan mempunyai blok dan resit. Jika berjaya, perubahan keadaan yang dimaksudkan mungkin telah digunakan. Jika pelaksanaan EVM mengalami revert, perubahan keadaan daripada pelaksanaan itu dibatalkan, tetapi transaksi masih menggunakan nonce akaun dan mungkin tetap dikenakan gas. Gunakan resit transaksi dan status pelaksanaan dan bukannya mengandaikan kejayaan berdasarkan pemberitahuan dompet. Lihat panduan transaksi Ethereum dan panduan yuran gas untuk perbezaan antara kemasukan dengan hasil pelaksanaan.
Label “dropped” atau “not found” selalunya ialah laporan daripada satu dompet, penjelajah, penyedia RPC atau set tempatan. Label itu sahaja tidak membuktikan bahawa protokol membatalkan transaksi atau nonce tersebut sudah bebas. Nod lain mungkin masih mengetahuinya; dompet mungkin menyiarkan semula transaksi bertandatangan; atau blok kemudian mungkin menunjukkan bahawa nonce akaun telah meningkat. Sebaliknya, transaksi lama boleh tiada daripada paparan yang anda semak sedangkan nonce akaun yang disahkan belum berubah.
Jika hash transaksi tidak ditemui, pastikan anda memilih rantaian dan akaun yang sama seperti ketika transaksi itu dibuat. Bandingkan nonce on-chain terkini akaun dengan nonce transaksi dan periksa transaksi terbaharu daripada penghantar itu. Respons nonce too low ialah petunjuk bahawa nonce mungkin telah digunakan daripada sudut pandangan endpoint tersebut, bukannya alasan untuk mengulangi permintaan yang sama. Sahkan transaksi yang menggunakan nonce itu dan sama ada bloknya masih kanonik.
Transaksi yang dimasukkan juga boleh terjejas oleh pengaturan semula rantaian jangka pendek sebelum rantaian stabil. Dompet dan penjelajah boleh mengemas kini label apabila paparan mereka berubah. Untuk pindahan penting, tunggu mengikut dasar pengesahan perkhidmatan penerima dan, jika berkaitan, pemuktamadan konsensus yang lebih kukuh; “dilihat dalam satu blok” dan “tidak boleh diubah dalam semua keadaan” bukan dakwaan yang sama.
Periksa nonce terawal yang belum selesai sebelum mengambil tindakan
Mulakan dengan mengesahkan rantaian, akaun penghantar dan hash transaksi. Cari hash itu pada penjelajah yang boleh dipercayai untuk rangkaian yang betul. Periksa sama ada resit wujud, nonce yang digunakan, sama ada pelaksanaan berjaya dan sama ada akaun membuat transaksi kemudian. Jangan dedahkan atau masukkan frasa benih anda untuk memeriksa transaksi; alamat awam dan hash transaksi sudah mencukupi untuk carian pada rantaian awam.
Jika hash tidak kelihatan, bandingkan nonce akaun terkini yang disahkan dengan nonce yang dipaparkan oleh dompet. Pembangun atau pengendali nod boleh membuat pertanyaan eth_getTransactionCount menggunakan tag blok latest dan pending. Rujukan JSON-RPC Ethereum.org mentakrifkan tag itu: latest merujuk kepada keadaan blok terkini, manakala pending merujuk kepada keadaan pending. Hasil pending masih bergantung pada paparan endpoint RPC itu; dua penyedia boleh memberikan nilai berbeza. Kebanyakan pengguna boleh mendapatkan petunjuk awal yang sama daripada aktiviti akaun dalam dompet dan penjelajah bereputasi tanpa menjalankan arahan.
Kemudian, mulakan daripada nonce terendah yang belum digunakan. Jika transaksi asal masih kelihatan dan dompet menyokong penggantian, semak medan tepat dan tetapan yuran pengganti sebelum menandatangani. Jika tidak kelihatan, tanya dompet atau penyedia RPC cara mereka mengendalikan penghantaran semula dan penggantian dan bukannya menganggap transaksi itu hilang daripada rangkaian. Jika nonce sudah digunakan, kenal pasti transaksi yang dimasukkan sebelum melakukan perkara lain. Elakkan menghantar transaksi baharu dengan nonce lebih tinggi berulang kali; tindakan itu boleh memanjangkan baris gilir tanpa menyelesaikan jurang pertama.
Langkah ini meliputi transaksi akaun milik luaran Ethereum standard. Sistem abstraksi akaun boleh menghantar UserOperation melalui bundler, dan akaun pintar mungkin menggunakan kunci nonce serta turutan yang lebih kompleks daripada satu pembilang mudah. EIP-4337 mentakrifkan struktur nonce bagi operasi tersebut, jadi dompet yang menggunakan abstraksi akaun mungkin tidak berkelakuan tepat seperti contoh EOA dalam artikel ini. Untuk rangkaian destinasi, alamat dan status pindahan, rujuk senarai semak pindahan kripto.
Soalan lazim
Q1Bolehkah saya membatalkan transaksi Ethereum selepas disahkan?
Tidak. Dompet boleh mencuba penggantian dengan nonce yang sama semasa transaksi belum disahkan, tetapi tidak boleh mengundurkan transaksi yang telah dimasukkan dan dilaksanakan. Sahkan hash transaksi dan status rantaian sebelum bertindak.
Q2Mengapa transaksi Ethereum saya yang seterusnya turut menunggu?
Transaksi EOA biasa dilaksanakan mengikut susunan nonce. Jika nonce terdahulu belum selesai, nonce kemudian tidak boleh dilaksanakan dahulu, walaupun transaksi itu kelihatan dalam dompet atau menawarkan yuran lebih tinggi.
Q3Adakah “dropped” bermaksud transaksi saya dibatalkan?
Tidak semestinya. Ini mungkin bermaksud satu dompet, penjelajah atau nod tidak lagi melihat transaksi itu. Periksa hash transaksi dan nonce terkini akaun pada rangkaian yang betul sebelum menganggap nonce itu bebas.
Sumber dan bacaan lanjut
Laporkan masalah
Kami akan menyediakan e-mel dengan pautan artikel ini. Mark menerima laporan hanya selepas anda menghantarnya
Semakan pantas
Sudah membaca panduan? Uji diri dengan 3 soalan
Soalan 01
Sebuah akaun mempunyai transaksi belum selesai dengan nonce 41 dan satu lagi transaksi dengan nonce 42. Apakah yang boleh dilakukan oleh transaksi kedua?
Pilih jawapan untuk melihat penjelasan
Glosari opsyen
A call or put whose strike is near the underlying price; it has little intrinsic value and often substantial sensitivity to time and volatility.
Baca panduan terperinciCall optionA contract that gives its holder the right, but not the obligation, to buy the underlying at the strike before or at expiration under the contract terms.
Baca panduan terperinci