Vai al contenuto

Chain ID

Guida basata sulla verifica a chain ID EVM, domini anti-replay EIP-155 per transazioni legacy, transazioni tipizzate, CHAINID, controlli wallet e RPC, domini EIP-712 e identificatori non EVM.

Aggiornato

Solo a scopo educativo; non costituisce consulenza né raccomandazione d’investimento. Gli investimenti possono comportare perdite.

Risposta diretta

Nell’ecosistema EVM, il chain ID è un intero configurato usato come parametro del dominio anti-replay. EIP-155 lo vincola alle firme protette delle transazioni legacy; i formati tipizzati, come il tipo 2, lo codificano nel payload firmato; CHAINID lo espone durante l’esecuzione EVM; eth_chainId lo restituisce tramite JSON-RPC. Sono interfacce correlate, non un certificato universale d’identità.

Il valore non è garantito unico a livello globale né permanente. Reti private e fork controversi possono riutilizzarlo, un RPC può mentire e lo stesso indirizzo può contenere codice e stato differenti su chain diverse. EIP-712 prevede un campo chain ID opzionale nel dominio, mentre messaggi grezzi e sistemi non EVM hanno regole diverse. Servono quindi schema di firma, endpoint, genesis o checkpoint e dominio applicativo esatti.

Come funziona

  1. Identificare ecosistema e semantica: intero EIP-155 EVM, dominio EIP-712, riferimento con namespace CAIP-2, chain ID stringa Cosmos, genesis hash Solana o altro schema. Non confrontare numeri non qualificati tra ecosistemi.
  2. Fissare uno snapshot affidabile: URL RPC, chain ID previsto in decimale ed esadecimale, genesis o checkpoint finalizzato, head block, configurazione client, codeHash dei contratti chiave e data della fonte. Nome e icona della rete nel wallet non sono affidabili.
  3. Interrogare eth_chainId per firmare su EVM e analizzare la quantità esadecimale JSON-RPC senza perdita di precisione. Confrontare l’intero normalizzato con configurazione e stato del provider; non sostituire net_version; rifiutare differenze prima della firma.
  4. Ricostruire il dominio di firma esatto. Distinguere transazioni legacy non protette, legacy EIP-155 e envelope tipizzati; per EIP-712 verificare campi del dominio, verifyingContract, nonce e deadline; per intent inoltrati o smart account controllare l’hash interno del protocollo.
  5. Verificare sulla chain attiva destinatario, valore, calldata, indirizzo token, codice o implementazione proxy, nonce, commissioni e stato simulato. Il chain ID separa un dominio ma non autentica questi oggetti.
  6. Trattare chainChanged EIP-1193, cambi account e disconnessioni come limiti rigidi. Eliminare quote, allowance, nonce, simulazioni e richieste di firma in cache, rileggere chain e target e trasmettere solo la transazione grezza verificata all’endpoint fissato.
  7. Riconciliare sulla chain prevista bytes firmati e hash, accettazione RPC, stato receipt, numero e hash del blocco, consumo nonce, cambi di stato e finalità. Monitorare fork, cambi ID, confusione L1/L2 e deriva del provider; bloccare su differenze inspiegate.

Esempi svolti

  • Controllo RPC esadecimale e decimale. Base ha chain ID decimale 8453, restituito da eth_chainId come 0x2105: 2 * 4096 + 1 * 256 + 0 * 16 + 5 = 8453. Ethereum mainnet è 1 = 0x1, Arbitrum One 42161 = 0xa4b1. Se il wallet attende 8453 ma riceve 0x1, deve interrompere prima della firma.
  • v di transazione legacy protetta. Per EIP-155, v = 35 + 2 * chainId + yParity. Con ID 1: 37 o 38; con ID 61: 157 o 158. Inversamente, floor((37 - 35) / 2) = 1. La formula non vale per y-parity delle transazioni tipizzate né per firme legacy non protette con 27 o 28.
  • Transazione tipizzata e rifiuto sulla chain errata. Un payload tipo 2 vincola chain_id=8453. Con 21,000 gas, base fee 20 gwei, priority fee massimo 2 gwei e fee massimo 30 gwei, il prezzo effettivo è min(30, 20 + 2) = 22 gwei e la commissione 21,000 * 22 gwei = 0.000462 ETH. Una chain corretta con ID 1 lo rifiuta per dominio errato senza consumare gas on-chain; sull’ID 8453 può fallire per altri motivi.
  • Identificatori doppi e non EVM. Cosmos EVM può usare ID stringa Cosmos SDK local-1 e ID intero EVM indipendente 262144 = 0x40000. La firma Cosmos-native usa stringa, numero account e sequence; la firma EVM usa l’intero. Solana usa genesis hash e recent blockhash o durable nonce, non un intero EIP-155.

Rischi

  • RPC o chain attiva errati.
  • RPC malevolo su ID, stato o broadcast.
  • Confusione esadecimale/decimale.
  • Perdita di precisione numerica.
  • net_version scambiato per eth_chainId.
  • Evento chainChanged o race ignorati.
  • Riutilizzo di nonce, quote, approval o simulazioni.
  • Presunta unicità globale senza collisioni.
  • Firma su reti private o fork con stesso ID.
  • Comportamento del fork non definito.
  • Transazione legacy non protetta.
  • Formula legacy v applicata altrove.
  • Dominio presunto in messaggi grezzi o personal_sign.
  • Chain ID EIP-712 omesso o errato.
  • verifyingContract, nonce, deadline o scopo omessi.
  • Indirizzi uguali senza confronto di codice e stato.
  • Domini L1, L2, origine e destinazione confusi.
  • Dominio interno di intent, permit o smart account ignorato.
  • Metadati, explorer o icone usati come autenticazione.
  • Semantica EVM trasferita ad altri protocolli.

Errori comuni

  • Chain ID è un numero ufficiale globale, unico e permanente.
  • Chain ID corretto autentica RPC, rete e contratti.
  • Ogni firma Ethereum include automaticamente il chain ID.
  • ID diversi impediscono il replay di ogni messaggio.
  • Ogni blockchain usa un intero EIP-155.

Argomenti correlati

Fonti

Navigazione

Cerca nella wiki...