﻿---
title: "Protezione dal replay dei messaggi cross-chain"
description: "La protezione dal replay vincola un messaggio sorgente autenticato a una versione del protocollo Ã¨ a un dominio di destinazione, consentendo nuovi tentativi senza piÃ¹ di un effetto economico riuscito."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Protezione dal replay dei messaggi cross-chain

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

<a id="answer"></a>

## Risposta diretta

La protezione dal replay dei messaggi cross-chain assicura che un messaggio sorgente autenticato produca al massimo un effetto economico riuscito nel dominio di destinazione previsto. Un relayer puÃ² consegnare piÃ¹ volte la stessa prova Ã¨ un tentativo fallito puÃ² essere ripetibile, ma un messaggio completato non deve coniare, sbloccare o chiamare nuovamente il destinatario.

Autenticita, finalitÃ  Ã¨ protezione dal replay sono verifiche separate. Una firma, attestazione dei validatori o storage proof valida puÃ² autenticare i dati senza dimostrare che l'evento sorgente sia finalizzato, che destinazione Ã¨ destinatario siano vincolati o che la destinazione non l'abbia giÃ  elaborato. Un relayer autorizzato Ã¨ solo il canale di consegna; la sua identitÃ  non sostituisce l'autenticazione del messaggio.

Non esiste un `messageId` cross-chain universale. La specifica del protocollo determina serializzazione Ã¨ identitÃ . Un envelope robusto vincola di norma protocollo Ã¨ versione, dominio Ã¨ messenger o emitter sorgente, mittente originale, nonce o identitÃ  di transazione/log sorgente, dominio Ã¨ destinatario di arrivo, valore, payload ed eventuale scadenza. Wormhole, CCTP, Optimism ed ERC-5164 usano campi Ã¨ macchine a stati diversi; gli identificatori non sono intercambiabili.

<a id="mechanism"></a>

## Come funziona

Un'azione sorgente emette o memorizza un messaggio. Dopo la policy richiesta di conferma o finalitÃ , validatori, guardian o un proof system lo autenticano. A destinazione, il verificatore controlla root o insieme di firme, versione, controparte fidata, destinazione, destinatario, payload Ã¨ limiti temporali. Il destinatario deriva l'identitÃ  definita dal protocollo Ã¨ consulta lo stato processed persistente prima di produrre un effetto esterno.

La consegna Ã¨ spesso at-least-once, mentre l'effetto commerciale desiderato si verifica effettivamente una volta. Una macchina a stati utile distingue mai tentato, in elaborazione, fallito o ripetibile, Ã¨ riuscito o consumato. Una chiamata di destinazione fallita non Ã¨ automaticamente un attacco di replay. ERC-5164, per esempio, impone al massimo un'esecuzione riuscita Ã¨ permette un altro tentativo dopo il fallimento. Restano applicabili le regole specifiche su retry, gas Ã¨ valore.

Il flag di replay o processing guard va impostato prima di una chiamata esterna non fidata, controllando la reentrancy. Se l'intera transazione fa revert, di norma anche quel cambiamento di stato viene annullato Ã¨ resta un percorso definito di retry; se il protocollo intercetta intenzionalmente un errore downstream, deve registrare uno stato failed distinto senza trattenere per errore valore o effetti parziali. Il destinatario dovrebbe essere idempotente anche quando sistemi downstream sono raggiungibili per un'altra via.

Lo scope del nonce conta. Un nonce sequenziale impone l'ordine, ma una voce mancante puÃ² bloccare i messaggi successivi. Un nonce non ordinato o bitmap permette consegne indipendenti, ma richiede un calcolo esatto di word Ã¨ bit. I batch devono stabilire se tutto il lotto Ã¨ atomico o se ogni leaf ha proof Ã¨ stato processed propri. Consumare soltanto la root dopo un'esecuzione parziale puÃ² duplicare leaf riuscite o bloccare quelle fallite.

La policy di riorganizzazione della sorgente fa parte della sicurezza. Un'osservazione firmata prima di sufficiente finalitÃ  puÃ² restare crittograficamente valida anche se l'evento sorgente non Ã¨ piÃ¹ canonico. Gli upgrade sono un altro confine: layout dello storage del proxy, mapping processed, domini di versione, vecchi entry point, rotazione dei peer Ã¨ fork o riuso del chain ID devono preservare o invalidare deliberatamente le identitÃ  pregresse senza riaprire messaggi consumati.

Usare questo flusso:

1. Fissare protocollo, versione distribuita, domini, messenger o emitter fidato, mittente, destinatario, valore, payload, nonce o identitÃ  dell'evento Ã¨ semantica della scadenza.
2. Riprodurre encoding canonico Ã¨ test vector di `messageId`; rifiutare concatenazioni ambigue, campi omessi Ã¨ assunzioni importate da un altro bridge.
3. Verificare inclusione Ã¨ policy richiesta di finalitÃ  o conferme, quindi root, quorum di firme, set di validatori o guardian Ã¨ versione corretti.
4. Verificare separatamente destinazione, destinatario, mittente cross-domain, valore, payload Ã¨ scadenza; trattare il relayer come trasporto, non autorita.
5. Leggere lo stato persistente ed entrare in processing o consumed prima di chiamate esterne non fidate, testando esplicitamente reentrancy Ã¨ revert dell'intera transazione.
6. Definire transizioni successful, failed Ã¨ retryable, nonce ordinato o bitmap, atomicitÃ  del batch Ã¨ contabilitÃ  del valore; provare che una consegna ripetuta non ripete una leaf riuscita.
7. Testare upgrade, migrazione dello storage, entry point legacy disabilitati, rotazione dei peer, fork Ã¨ recupero; riconciliare receipt, eventi, stato processed Ã¨ saldi di destinazione.

<a id="example"></a>

## Esempi

- **Vincolo al dominio di destinazione.** Due istruzioni hanno nonce `42` Ã¨ valore `1,000`, ma una mira alla chain `10` Ã¨ l'altra alla chain `8453`. Un identificatore che omette la destinazione tratta `2 messages` come candidate alla collisione; l'encoding canonico che la vincola genera `2 distinct IDs`. Hash Ã¨ rappresentazione del dominio dipendono dal protocollo.
- **Bitmap non ordinato.** Per nonce `513`, `word = floor(513 / 256) = 2`, `bit = 513 mod 256 = 1` Ã¨ `mask = 1 << 1 = 2`. Il primo successo cambia la word `2` da `0` a `2`. Un duplicato trova `2 & 2 = 2` Ã¨ viene rifiutato; nonce `512` usa indipendentemente il bit `0`.
- **Il retry non Ã¨ un secondo effetto.** Lo stesso messaggio viene consegnato `3` volte. Chiamate con `110,000` Ã¨ `125,000` gas falliscono Ã¨ fanno revert; la terza usa `140,000` gas Ã¨ riesce una volta. Il gas totale Ã¨ `110,000 + 125,000 + 140,000 = 375,000`; a `20 gwei` equivale a `0.0075 ETH`. Le consegne sono `3`, gli effetti commerciali riusciti `1`.
- **Contabilita di batch parziale.** Quattro leaf eseguibili separatamente contengono `25 + 40 + 15 + 20 = 100` unitÃ . Le leaf `0`, `1` Ã¨ `3` eseguono `25 + 40 + 20 = 85`; la leaf `2` fallisce Ã¨ lascia `15` in sospeso. Consumare solo la root blocca le `15`; ripetere tutto senza stato per leaf puÃ² duplicare le `85`. Occorre rollback atomico o stato processed per leaf.

<a id="risks"></a>

## Rischi

- L'identificatore omette chain o dominio di destinazione.
- L'identificatore omette messenger o emitter sorgente.
- La versione del protocollo o messaggio manca dal dominio.
- Un namespace di nonce collide tra mittenti o deployment.
- Un encoding packed ambiguo crea collisioni tra campi diversi.
- Un fork o chain ID riutilizzato rende valido un vecchio dominio.
- Un evento Ã¨ accettato prima di sufficiente finalitÃ  Ã¨ viene riorganizzato.
- Viene accettato root, set di validatori o guardian errato.
- Un vecchio dominio di firma resta valido dopo un upgrade.
- Corruzione dello storage del proxy azzera o sovrappone lo stato processed.
- La migrazione omette consumati o lascia attivo un entry point legacy.
- Lo stato viene marcato dopo la chiamata esterna, consentendo reentrancy.
- Una chiamata fallita Ã¨ marcata riuscita Ã¨ non puÃ² essere ripetuta.
- Una chiamata riuscita non persiste Ã¨ ripete l'effetto economico.
- Un nonce ordinato mancante blocca tutti i messaggi successivi.
- L'aritmetica di word, bit o invalidazione del bitmap Ã¨ errata.
- Lo stato della batch root contrasta con l'esecuzione parziale delle leaf.
- Un retry ripete leaf giÃ  riuscite.
- Le unitÃ  di deadline, expiry o clock destinazione sono interpretate male.
- L'allowlist dei relayer viene scambiata per autorizzazione del messaggio.

<a id="misconceptions"></a>

## Errori comuni

- **Un nonce da solo Ã¨ globalmente unico.** Mittente, protocollo, deployment Ã¨ domini ne definiscono il namespace.
- **Solo un relayer autorizzato impedisce il replay.** Il relayer consegna; verifica a destinazione Ã¨ stato consumed persistente applicano autorizzazione Ã¨ controllo.
- **Ogni consegna ripetuta Ã¨ un attacco.** Una rete at-least-once puÃ² ripetere un fallimento; l'invariante Ã¨ non piÃ¹ di un effetto riuscito.
- **Una prova o firma valida dimostra finalitÃ  Ã¨ intento.** Puo omettere il target, vincolare la versione errata o attestare uno stato poi riorganizzato.
- **Una transazione bridge riuscita prova exactly-once.** Verificare receipt, storage processed, eventi del destinatario Ã¨ saldi reali, inclusa ogni leaf.

<a id="related"></a>

## Argomenti correlati

- [Bridge cross-chain](/it/crypto/cross-chain-bridge/)
- [Bridge canonico](/it/crypto/canonical-bridge/)
- [Guasto di un relayer cross-chain](/it/crypto/bridge-relayer-liveness-risk/)

<a id="sources"></a>

## Fonti

- [ERC-5164: Cross-Chain Execution](https://eips.ethereum.org/EIPS/eip-5164) - Ethereum Improvement Proposals (consultato: 2026-08-13)
- [EIP-712: Typed structured data hashing and signing](https://eips.ethereum.org/EIPS/eip-712) - Ethereum Improvement Proposals (consultato: 2026-08-13)
- [CCTP Technical Guide](https://developers.circle.com/cctp/references/technical-guide) - Circle Developers (consultato: 2026-08-13)
- [Interop message passing overview](https://docs.optimism.io/app-developers/guides/interoperability/message-passing) - Optimism Documentation (consultato: 2026-08-13)
- [VAAs](https://docs.wormhole.com/protocol/infrastructure/vaas/) - Wormhole Docs (consultato: 2026-08-13)
- [Security Considerations](https://docs.soliditylang.org/en/latest/security-considerations.html) - Solidity Documentation (consultato: 2026-08-13)
- [Proof-of-stake (PoS)](https://ethereum.org/developers/docs/consensus-mechanisms/pos/) - ethereum.org (consultato: 2026-08-13)
- [Upgrading smart contracts](https://docs.openzeppelin.com/contracts/5.x/learn/upgrading-smart-contracts) - OpenZeppelin Docs (consultato: 2026-08-13)

Source: https://wiki.fcontext.com/it/crypto/bridge-message-replay-protection/index.mdx
