Lompat ke konten

Chain ID

Panduan yang mengutamakan verifikasi tentang chain ID EVM, domain anti-replay transaksi legacy EIP-155, transaksi bertipe, CHAINID, pemeriksaan dompet dan RPC, domain EIP-712, serta pengenal jaringan non-EVM.

Diperbarui

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

Jawaban langsung

Dalam ekosistem EVM, chain ID adalah bilangan bulat yang dikonfigurasi sebagai parameter domain anti-replay. EIP-155 mengikatnya ke tanda tangan transaksi legacy yang terlindungi; format transaksi bertipe seperti tipe 2 menyertakannya dalam payload bertanda tangan sendiri; CHAINID mengeksposnya selama eksekusi EVM; dan eth_chainId melaporkannya melalui JSON-RPC. Semua ini adalah antarmuka yang saling berkaitan, bukan sertifikat identitas universal.

Nilainya tidak dijamin unik secara global maupun permanen. Jaringan privat dan fork yang dipersengketakan dapat menggunakannya kembali, RPC dapat berbohong, dan alamat yang sama dapat memiliki kode serta state berbeda pada chain berbeda. EIP-712 memiliki field chain ID opsional dalam domain, sedangkan pesan mentah dan sistem non-EVM memiliki aturan replay dan identitas jaringan yang berbeda. Penggunaan yang benar karena itu memerlukan skema penandatanganan, endpoint, genesis atau checkpoint, dan domain aplikasi yang tepat.

Cara kerja

  1. Identifikasi dahulu ekosistem dan makna pengenalnya: bilangan bulat EIP-155 untuk EVM, domain EIP-712, referensi dengan namespace CAIP-2, chain ID string Cosmos, genesis hash Solana, atau skema lain. Jangan pernah membandingkan angka tanpa kualifikasi lintas ekosistem.
  2. Tetapkan snapshot jaringan tepercaya: URL RPC, chain ID yang diharapkan dalam desimal dan heksadesimal, genesis atau checkpoint final, blok head, konfigurasi client, codeHash kontrak utama, serta waktu sumber. Nama dan ikon jaringan pada dompet merupakan metadata yang tidak tepercaya.
  3. Minta eth_chainId untuk penandatanganan EVM dan parse kuantitas heksadesimal JSON-RPC tanpa kehilangan presisi. Bandingkan bilangan bulat yang telah dinormalisasi dengan konfigurasi yang diharapkan dan state provider dompet; jangan menggantinya dengan net_version, dan tolak ketidakcocokan sebelum membuat tanda tangan.
  4. Rekonstruksi domain penandatanganan secara tepat. Bedakan transaksi legacy tanpa perlindungan, encoding legacy terlindungi EIP-155, dan envelope bertipe; untuk EIP-712, verifikasi field domain, verifyingContract, nonce, dan tenggat; untuk intent yang direlay atau smart account, periksa hash protokol internal.
  5. Verifikasi target eksekusi pada chain aktif: penerima, nilai, calldata, alamat token, kode kontrak atau implementasi proxy, nonce akun, biaya, dan state simulasi. Chain ID memisahkan domain, tetapi tidak membuktikan bahwa objek-objek tersebut asli.
  6. Perlakukan EIP-1193 chainChanged, perubahan akun, dan diskoneksi sebagai batas state yang tegas. Buang quote, allowance, nonce, simulasi, dan permintaan tanda tangan yang tersimpan; baca ulang chain dan target; lalu broadcast hanya transaksi mentah yang telah ditinjau ke endpoint yang ditetapkan.
  7. Rekonsiliasi transaksi pada chain yang dimaksud: byte mentah bertanda tangan dan hash, penerimaan RPC, status receipt, nomor dan hash blok, penggunaan nonce, perubahan state, serta finalitas yang diperlukan. Pantau pemisahan chain, perubahan ID, kekeliruan domain L1/L2, dan pergeseran provider; hentikan jika ada perbedaan yang tidak dapat dijelaskan.

Contoh perhitungan

  • Gerbang RPC heksadesimal dan desimal. Base memiliki chain ID desimal 8453, yang dilaporkan eth_chainId sebagai 0x2105: 2 * 4096 + 1 * 256 + 0 * 16 + 5 = 8453. Ethereum mainnet adalah 1 = 0x1, dan Arbitrum One adalah 42161 = 0xa4b1. Jika dompet mengharapkan 8453 tetapi menerima 0x1, dompet harus membatalkan sebelum menandatangani, bukan memercayai nama jaringan yang ditampilkan.
  • Nilai v transaksi legacy terlindungi. Untuk transaksi legacy EIP-155, v = 35 + 2 * chainId + yParity. Dengan chain ID 1, nilainya 37 atau 38; dengan chain ID 61, nilainya 157 atau 158. Sebaliknya, floor((37 - 35) / 2) = 1. Aritmetika ini tidak berlaku untuk field y-parity transaksi bertipe atau tanda tangan legacy tanpa perlindungan yang memakai 27 atau 28.
  • Transaksi bertipe dan penolakan oleh chain yang salah. Payload tipe 2 mengikat chain_id=8453. Dengan 21,000 gas, base fee 20 gwei, maximum priority fee 2 gwei, dan maximum fee 30 gwei, harga gas efektif adalah min(30, 20 + 2) = 22 gwei dan biayanya 21,000 * 22 gwei = 0.000462 ETH. Chain yang menerapkan aturan dengan benar dan dikonfigurasi sebagai ID 1 menolak payload bertanda tangan tersebut karena domain tidak cocok, sehingga penolakan itu sendiri tidak memakai gas on-chain di sana; transaksi masih dapat gagal karena alasan lain pada ID 8453.
  • Non-EVM dan dua pengenal. Deployment Cosmos EVM dapat memakai ID string Cosmos SDK local-1 dan ID integer EVM independen 262144 = 0x40000. Penandatanganan native Cosmos memakai string tersebut bersama nomor akun dan sequence, sedangkan penandatanganan transaksi EVM memakai domain bilangan bulat. Solana sebaliknya mengekspos genesis hash dan memakai recent blockhash atau durable nonce dalam pesan transaksi, bukan bilangan bulat EIP-155.

Risiko

  • Terhubung ke endpoint RPC yang salah atau chain dompet aktif yang tidak dimaksud.
  • Memercayai RPC berbahaya yang berbohong tentang chain ID, state, atau hasil broadcast.
  • Tertukar antara representasi chain ID heksadesimal dan desimal.
  • Kehilangan presisi saat mem-parse chain ID besar dengan tipe angka yang tidak aman.
  • Memakai net_version seolah selalu sama dengan eth_chainId.
  • Melewatkan event EIP-1193 chainChanged atau race saat pergantian jaringan.
  • Menggunakan ulang nonce, quote, approval, atau simulasi tersimpan setelah pergantian.
  • Menganggap chain ID terdaftar global dan bebas benturan.
  • Menandatangani lintas jaringan privat atau fork yang memakai ulang satu chain ID.
  • Tidak menentukan tindakan ketika fork mengubah atau mempertahankan ID.
  • Menerima transaksi legacy tanpa perlindungan dan tanpa domain EIP-155.
  • Menerapkan rumus legacy v pada transaksi bertipe atau tanda tangan lain.
  • Menganggap pesan mentah atau permintaan personal_sign menyertakan domain chain.
  • Menghilangkan atau salah meng-encode chain ID dalam domain EIP-712.
  • Menghilangkan verifyingContract, nonce aplikasi, tenggat, atau tujuan.
  • Memercayai alamat kontrak identik tanpa membandingkan kode dan state.
  • Tertukar antara domain penandatanganan L1, L2, asal bridge, dan tujuan.
  • Mengabaikan domain internal intent yang direlay, permit, atau operasi smart account.
  • Menganggap metadata penambahan jaringan, label explorer, atau ikon sebagai autentikasi jaringan.
  • Menerapkan semantik EVM pada Cosmos, Solana, Bitcoin, atau protokol lain.

Kesalahpahaman umum

  • Chain ID adalah nomor registrasi resmi yang unik secara global dan permanen.
  • Chain ID yang benar membuktikan keaslian endpoint RPC, jaringan, dan kontrak.
  • Setiap tanda tangan Ethereum otomatis mengikat chain ID.
  • Chain ID berbeda mencegah replay setiap pesan bertanda tangan dan intent aplikasi.
  • Setiap blockchain memakai chain ID bilangan bulat bergaya EIP-155.

Topik terkait

Sumber

Navigasi

Cari di wiki...