Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.
Jawaban langsung
Perlindungan replay pesan lintas chain memastikan satu pesan sumber terautentikasi menghasilkan paling banyak satu dampak ekonomi yang berhasil pada domain tujuan yang dimaksud. Relayer boleh mengirimkan bukti yang sama berulang kali dan percobaan yang gagal boleh dicoba ulang, tetapi pesan yang sudah selesai tidak boleh mencetak, membuka aset, atau memanggil penerima lagi.
Autentisitas, finalitas, dan perlindungan replay adalah pemeriksaan terpisah. Tanda tangan valid, atestasi validator, atau bukti penyimpanan dapat mengautentikasi data tanpa membuktikan bahwa peristiwa sumber sudah final, tujuan dan penerima yang dimaksud sudah terikat, atau tujuan belum pernah memprosesnya. Relayer berizin pun hanya jalur pengiriman; identitas relayer tidak boleh menggantikan autentikasi pesan.
Tidak ada messageId lintas chain yang universal. Spesifikasi protokol menentukan serialisasi dan identitas secara tepat. Envelope yang kuat biasanya mengikat protokol dan versi, domain sumber dan messenger atau emitter, pengirim sumber, nonce atau identitas transaksi/log sumber, domain tujuan dan penerima, nilai, payload, serta kedaluwarsa. Wormhole, CCTP, Optimism, dan ERC-5164 memakai field dan state machine berbeda, sehingga pengidentifikasinya tidak dapat dipertukarkan.
Cara kerjanya
Tindakan sumber memancarkan atau menyimpan pesan. Setelah kebijakan konfirmasi atau finalitas yang disyaratkan terpenuhi, validator, guardian, atau sistem bukti mengautentikasinya. Di tujuan, verifier memeriksa root atau kumpulan tanda tangan terkait, versi protokol, pengirim remote tepercaya, tujuan, penerima, payload, dan batas waktu. Penerima menurunkan identitas sesuai protokol dan membaca state processed permanen sebelum menciptakan dampak eksternal.
Pengiriman sering bersifat setidaknya sekali, sedangkan dampak bisnis yang diinginkan secara efektif hanya sekali. State machine yang berguna membedakan belum pernah dicoba, sedang diproses, gagal atau dapat dicoba ulang, serta berhasil atau sudah dikonsumsi. Panggilan tujuan yang gagal tidak otomatis merupakan serangan replay. ERC-5164, misalnya, mewajibkan pesan berhasil dieksekusi paling banyak sekali, tetapi membolehkan percobaan lain setelah kegagalan. Aturan retry, penanganan gas, dan pencatatan nilai khusus produk tetap berlaku.
Flag replay atau guard pemrosesan harus ditetapkan sebelum panggilan eksternal yang tidak tepercaya, dengan reentrancy dikendalikan. Jika seluruh transaksi revert, perubahan state itu biasanya ikut revert sehingga jalur retry tetap terdefinisi; jika protokol sengaja menangkap kegagalan downstream, protokol harus mencatat state gagal yang terpisah tanpa tanpa sengaja mempertahankan nilai atau dampak parsial. Penerima juga sebaiknya idempoten bila sistem downstream dapat dipanggil melalui jalur lain.
Lingkup nonce penting. Nonce berurutan menegakkan urutan, tetapi dapat menahan pesan berikutnya di belakang pesan yang hilang. Nonce tak berurutan atau bitmap membolehkan pengiriman independen, tetapi memerlukan perhitungan word dan bit yang tepat. Desain batch harus menyatakan apakah seluruh batch atomik atau setiap leaf mempunyai bukti dan state processed sendiri. Hanya menandai root batch sebagai dikonsumsi setelah eksekusi parsial dapat mengulangi leaf yang berhasil atau membuat leaf yang gagal terkatung.
Kebijakan reorganisasi sumber merupakan bagian dari keamanan replay. Observasi yang ditandatangani sebelum finalitas memadai dapat tetap valid secara kriptografis walau peristiwa sumber kemudian tidak lagi kanonis. Upgrade adalah batas lain: layout penyimpanan proxy, mapping processed, domain versi, entry point lama, rotasi peer, fork, atau penggunaan ulang chain ID harus mempertahankan atau sengaja membatalkan identitas lama tanpa membuka kembali pesan yang telah dikonsumsi.
Gunakan alur kerja berikut:
- Sematkan protokol, versi deployment, domain sumber dan tujuan, messenger atau emitter tepercaya, pengirim, penerima, nilai, payload, nonce atau identitas peristiwa, serta semantik kedaluwarsa.
- Reproduksi encoding kanonis dan vektor uji
messageIddari spesifikasi; tolak konkatenasi ambigu, field yang dihilangkan, dan asumsi pinjaman dari bridge lain. - Verifikasi inclusion sumber serta kebijakan finalitas atau konfirmasi yang disyaratkan, kemudian root bukti, kuorum tanda tangan, set validator atau guardian, dan versi yang benar.
- Verifikasi tujuan, penerima, pengirim lintas domain, nilai, payload, dan kedaluwarsa secara independen; perlakukan relayer pengirim sebagai transportasi, bukan otoritas.
- Baca state pesan permanen dan masuk ke state processing atau consumed sebelum panggilan eksternal tidak tepercaya, disertai proteksi reentrancy dan pengujian eksplisit atas perilaku revert transaksi.
- Definisikan transisi berhasil, gagal, dan dapat dicoba ulang; perilaku nonce berurutan atau bitmap; atomisitas batch; serta pencatatan nilai. Buktikan pengiriman berulang tidak mengulangi leaf yang berhasil.
- Uji upgrade, migrasi penyimpanan, penonaktifan entry point lama, rotasi peer, fork, dan pemulihan darurat, lalu rekonsiliasi receipt, peristiwa, state processed, serta saldo tujuan.
Contoh
- Pengikatan domain tujuan. Dua instruksi sama-sama membawa nonce
42dan nilai1,000, tetapi satu menargetkan chain10dan lainnya chain8453. Pengidentifikasi yang menghilangkan tujuan memperlakukan2 messagessebagai satu kandidat collision; encoding kanonis yang mengikat tujuan menghasilkan2 distinct IDs. Fungsi hash dan representasi domain aktual harus berasal dari protokol. - Bitmap tak berurutan. Untuk nonce
513,word = floor(513 / 256) = 2,bit = 513 mod 256 = 1, danmask = 1 << 1 = 2. Keberhasilan pertama mengubah word bitmap2dari0menjadi2. Duplikat menemukan2 & 2 = 2dan ditolak, sementara nonce512memakai bit0secara independen. - Retry bukan dampak kedua. Pesan terautentikasi yang sama dikirimkan
3kali. Panggilan tujuan yang memakai gas110,000dan125,000gagal dan revert; panggilan ketiga memakai140,000gas dan berhasil sekali. Total gas110,000 + 125,000 + 140,000 = 375,000; pada20 gwei, nilainya0.0075 ETH. Jumlah pengiriman3, tetapi dampak bisnis yang berhasil1. - Pencatatan batch parsial. Empat leaf yang dapat dieksekusi independen membawa
25 + 40 + 15 + 20 = 100unit. Leaf0,1, dan3berhasil sebesar25 + 40 + 20 = 85; leaf2gagal dan menyisakan15pending. Hanya mengonsumsi root batch akan membuat15terkatung; mengulangi seluruh batch tanpa state per leaf dapat mengulangi85. Gunakan rollback atomik atau state processed per leaf sesuai spesifikasi.
Risiko
- Pengidentifikasi menghilangkan chain atau domain tujuan.
- Pengidentifikasi menghilangkan messenger atau emitter sumber.
- Versi protokol atau pesan tidak ada dalam domain.
- Namespace nonce collision antar pengirim atau deployment.
- Packed encoding ambigu menciptakan collision antar field berbeda.
- Fork atau chain ID yang digunakan ulang membuat domain lama valid lagi.
- Peristiwa sumber diterima sebelum finalitas memadai lalu hilang karena reorganisasi.
- Root bukti, set validator, atau set guardian yang salah diterima.
- Domain tanda tangan lama tetap valid setelah upgrade.
- Kerusakan penyimpanan proxy mereset atau menumpangtindihkan state processed.
- Migrasi menghilangkan pesan consumed atau membiarkan entry point lama aktif.
- State baru ditandai setelah panggilan eksternal sehingga memungkinkan reentrancy.
- Panggilan gagal ditandai berhasil dan tidak pernah dapat dicoba ulang.
- Panggilan berhasil tidak disimpan dan mengulangi dampak ekonominya.
- Nonce berurutan yang hilang memblokir semua pesan berikutnya.
- Aritmetika word, bit, atau invalidasi bitmap salah.
- State root batch bertentangan dengan eksekusi parsial per leaf.
- Retry mengulangi leaf yang telah berhasil.
- Unit tenggat, kedaluwarsa, atau jam tujuan salah dibaca.
- Allowlist relayer disalahartikan sebagai otorisasi pesan.
Kesalahpahaman umum
- Nonce saja unik secara global. Pengirim, protokol, deployment, serta domain sumber dan tujuan menentukan namespace-nya.
- Hanya relayer berizin yang dapat mencegah replay. Relayer menyediakan pengiriman; verifikasi tujuan dan state consumed permanen menegakkan otoritas dan kendali replay.
- Setiap pengiriman berulang adalah serangan. Jaringan setidaknya-sekali dapat mencoba ulang pesan gagal; invariannya adalah paling banyak satu dampak berhasil.
- Bukti atau tanda tangan valid membuktikan finalitas dan maksud. Bukti dapat tidak mengikat target yang dimaksud, mengikat versi salah, atau mengatestasi state sumber yang kemudian direorganisasi.
- Transaksi bridge berhasil membuktikan penyelesaian tepat sekali. Verifikasi status receipt, penyimpanan processed, peristiwa penerima, dan saldo aktual, termasuk setiap leaf batch.
Topik terkait
Sumber
- ERC-5164: Cross-Chain Execution - Ethereum Improvement Proposals (diakses: 2026-08-13)
- EIP-712: Typed structured data hashing and signing - Ethereum Improvement Proposals (diakses: 2026-08-13)
- CCTP Technical Guide - Circle Developers (diakses: 2026-08-13)
- Interop message passing overview - Optimism Documentation (diakses: 2026-08-13)
- VAAs - Wormhole Docs (diakses: 2026-08-13)
- Security Considerations - Solidity Documentation (diakses: 2026-08-13)
- Proof-of-stake (PoS) - ethereum.org (diakses: 2026-08-13)
- Upgrading smart contracts - OpenZeppelin Docs (diakses: 2026-08-13)