Lompat ke konten

Ruang nama nonce dalam kripto

Panduan praktis tentang nonce akun Ethereum, nonce pencegah replay pada tingkat aplikasi, jalur kunci dan urutan ERC-4337, serta nonce pencarian pada header blok proof-of-work.

Diperbarui

Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

Jawaban langsung

Nonce adalah nilai yang maknanya ditentukan oleh ruang nama protokol tertentu. Nonce tidak selalu berarti angka acak atau nilai universal yang “dipakai sekali”. Di Ethereum, nonce dalam state akun milik eksternal mengurutkan dan memvalidasi transaksi pengirim tersebut. Kontrak dapat menyimpan nonce aplikasi yang terpisah untuk permit atau instruksi bertanda tangan. Akun pintar ERC-4337 dapat memakai nonce UserOperation terstruktur dengan jalur kunci dan urutan yang paralel. Dalam proof-of-work Bitcoin, nonce header blok adalah bidang pencarian terbatas untuk mencoba hash kandidat.

Nilai-nilai ini tidak dapat dipertukarkan. Nonce akun Ethereum tidak melindungi sembarang tanda tangan data terstruktur kecuali aplikasi memverifikasi domain dan bidang pencegah replay-nya sendiri. Nonce header PoW tidak mengurutkan transaksi akun. Angka nonce yang sama pada pengirim, kontrak, chain, atau jalur berbeda menggambarkan state yang berbeda.

Cara kerjanya

  1. Kenali ruang nama sebelum membaca angkanya: transaksi EOA, state akun kontrak, penyimpanan aplikasi, UserOperation ERC-4337, atau header blok PoW tertentu. Tetapkan chain ID, fork dan versi protokol, akun atau pemilik, kontrak pemverifikasi dan domain, EntryPoint, atau format header sesuai konteks.
  2. Baca state otoritatif pada tag blok yang eksplisit. Bedakan nonce akun EOA kanonis dari hitungan pending milik penyedia, nilai nonces(owner) di penyimpanan aplikasi, kunci dan urutan ERC-4337, serta penghitung pencarian header lokal milik penambang. Kesepakatan beberapa RPC independen tidak menggantikan verifikasi receipt dan state kanonis.
  3. Susun garis riwayat tanda tangan. Catat pengirim atau pemilik, chain dan domain, nonce, payload, tenggat, kontrak pemverifikasi, hash transaksi atau pesan, serta setiap penggantian. Untuk transaksi Ethereum, aturan domain chain seperti EIP-155 melengkapi nonce akun; nonce saja bukan perlindungan replay lintas-chain yang lengkap.
  4. Alokasikan di jalur yang benar. Koordinasikan penanda tangan EOA yang berjalan bersamaan agar setiap urutan kanonis dialokasikan satu kali; pertahankan celah dan riwayat penggantian dengan nonce yang sama. Untuk aplikasi atau akun pintar, ikuti aturan pemeriksaan-dan-penambahan atomik serta jalur kontraknya, bukan mengasumsikan satu penghitung global.
  5. Kirim menurut aturan penerimaan yang tepat. Kebijakan pending dan penggantian pada execution client bersifat lokal; bundler ERC-4337 memvalidasi objek UserOperation menurut aturan EntryPoint dan akun; tanda tangan EIP-712 atau permit dapat diteruskan di dalam transaksi pihak lain. Tidak satu pun jalur penerimaan lokal ini membuktikan inklusi kanonis.
  6. Lacak hasil secara lengkap. Bedakan ditolak, pending, antre, digantikan, berhasil diinklusikan, diinklusikan dengan status = 0, dihapus oleh reorganisasi, dan difinalisasi. Transaksi Ethereum yang diinklusikan menaikkan nonce akun pengirim meskipun eksekusi EVM revert; pembaruan nonce aplikasi di penyimpanan dalam panggilan yang revert akan dibatalkan.
  7. Rekonsiliasi sebelum mencoba ulang. Verifikasi receipt kanonis, hash blok, nonce pengirim, penyimpanan aplikasi, event atau receipt ERC-4337, dan finalitas. Untuk PoW, verifikasi keseluruhan header dan target, bukan nonce saja; jika bidang nonce terbatas habis, penambang mengubah data lain yang memengaruhi header untuk membuat ruang pencarian baru.

Contoh terhitung

  • Revert yang terinklusi mengonsumsi nonce EOA. Nonce kanonis pengirim adalah 12. Transaksi bernonce 12 diinklusikan dengan status = 0, memakai 50,000 gas pada 30 gwei, dan berbiaya 50,000 * 30 gwei = 0.0015 ETH. Perubahan kontraknya dibatalkan, tetapi nonce kanonis pengirim menjadi 13. Jika reorganisasi menghapus blok itu, nonce dapat kembali ke 12; dompet harus memeriksa ulang seluruh riwayat transaksi.
  • Nonce aplikasi dan relayer terpisah. Pemilik memiliki nonce akun EOA 18; token ERC-2612 melaporkan nonces(owner) = 7; nonce EOA relayer adalah 42. Permit yang berhasil mengonsumsi nonce aplikasi 7 sehingga menjadi 8, sedangkan inklusi membuat nonce relayer menjadi 43 dan membiarkan nonce EOA pemilik tetap 18. Jika seluruh panggilan revert, nonce relayer tetap menjadi 43, tetapi pembaruan penyimpanan token kembali ke 7.
  • Jalur ERC-4337. Dalam ekspresi pengemasan untuk pembelajaran nonce = (key << 64) | sequence, kunci 5 dan urutan 9 menghasilkan 5 * 2^64 + 9 = 92,233,720,368,547,758,089; urutan 10 menghasilkan 92,233,720,368,547,758,090. Kunci independen 6 dan urutan 0 menghasilkan 110,680,464,442,257,309,696. Penggunaan paralel tetap bergantung pada logika validasi akun pintar dan terpisah dari nonce transaksi EOA bundler.
  • Nonce pencarian PoW. Nonce header Bitcoin berukuran 32 bits, sehingga memiliki 2^32 = 4,294,967,296 kandidat numerik. Pada laju hipotetis 100 TH/s, pemindaian ruang itu memerlukan 4,294,967,296 / 100,000,000,000,000 = 0.00004294967296 seconds = 42.94967296 microseconds. Penambang mengubah extraNonce coinbase, waktu, atau kumpulan transaksi untuk mengubah Merkle root dan memperoleh header baru; bidang ini bukan state pencegah replay akun.

Risiko

  • Mencampur ruang nama nonce EOA, kontrak, aplikasi, ERC-4337, dan PoW.
  • Membaca nonce dari chain, fork, kontrak, atau EntryPoint yang salah.
  • Menggunakan respons RPC yang usang, tidak konsisten, atau berbahaya.
  • Penanda tangan paralel mengalokasikan nonce transaksi EOA yang sama.
  • Celah nonce menghambat kandidat transaksi lokal berikutnya.
  • Menganggap nonce pending dari penyedia sebagai state kanonis.
  • Melupakan bahwa revert terinklusi mengonsumsi nonce EOA dan gas.
  • Gagal memulihkan nonce dan riwayat kandidat setelah reorganisasi.
  • Penggantian dengan nonce sama tidak memenuhi kebijakan biaya node tujuan.
  • Menganggap penggantian menghapus transaksi lama bertanda tangan secara global.
  • Menghubungkan nonce numerik yang sama dari pengirim atau domain berbeda.
  • Mengabaikan chain ID atau pemisah domain tanda tangan lain yang diwajibkan.
  • Gagal memeriksa dan menaikkan nonce aplikasi secara atomik.
  • Pemilik, tenggat, pemisah domain, atau kontrak token ERC-2612 yang salah.
  • Memutar ulang tanda tangan aplikasi lintas chain, kontrak, atau versi.
  • Salah membaca nonce state akun kontrak sebagai penghitung panggilan umum.
  • Salah mengemas kunci nonce atau lebar urutan ERC-4337.
  • Mencampur nonce EOA bundler dengan nonce UserOperation akun pintar.
  • Upgrade proxy atau tabrakan penyimpanan mengubah perilaku nonce aplikasi.
  • Menganggap nonce pencarian PoW terbatas sebagai otorisasi, state replay, atau bukti mandiri.

Kesalahpahaman umum

  • Setiap bidang bernama nonce bermakna sama dan dipakai sekali secara global.
  • Nonce yang lebih besar membuat transaksi lebih aman, cepat, atau final.
  • Transaksi Ethereum yang revert tidak mengonsumsi nonce pengirimnya.
  • Nonce saja mencegah semua replay lintas chain, lintas kontrak, dan pesan terstruktur.
  • Setiap akun pintar ERC-4337 memiliki satu penghitung linear yang identik dengan nonce transaksi EOA.

Topik terkait

Sumber

Navigasi

Cari di wiki...