﻿---
title: "Protection contre le replay des messages inter-chaÃ®nes"
description: "La protection contre le replay lie un message source authentifiÃ© a une version du protocole et a un domaine de destination, tout en autorisant les nouvelles tentatives sans produire plus d'un effet Ã©conomique rÃ©ussi."
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.

# Protection contre le replay des messages inter-chaÃ®nes

> À des fins éducatives uniquement ; ne constitue ni un conseil en investissement ni une recommandation d’investissement. Les investissements peuvent entraîner des pertes.

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

## Reponse directe

La protection contre le replay des messages inter-chaÃ®nes garantit qu'un message source authentifiÃ© ne produit pas plus d'un effet Ã©conomique rÃ©ussi dans le domaine de destination prÃ©vu. Un relayer peut livrer plusieurs fois la meme preuve et une tentative Ã©chouÃ©e peut etre relancÃ©e, mais un message terminÃ© ne doit plus Ã©mettre, dÃ©verrouiller ni rappeler le destinataire.

AuthenticitÃ©, finalitÃ© et protection contre le replay sont des controles distincts. Une signature, une attestation de validateurs ou une preuve de stockage valide peut authentifier des donnÃ©es sans prouver que l'Ã©vÃ©nement source est final, que la destination et le destinataire sont lies ou que la destination ne l'a pas dÃ©jÃ  traite. Un relayer autorisÃ© n'est qu'une voie de livraison ; son identite ne remplace pas l'authentification du message.

Il n'existe pas de `messageId` inter-chaÃ®nes universel. La spÃ©cification du protocole dÃ©finit la sÃ©rialisation et l'identite. Une enveloppe robuste lie gÃ©nÃ©ralement protocole et version, domaine et messenger ou emitter source, expÃ©diteur source, nonce ou identite de transaction/log source, domaine et destinataire cible, valeur, payload et Ã©ventuelle expiration. Wormhole, CCTP, Optimism et ERC-5164 utilisent des champs et machines a Ã©tats diffÃ©rents ; leurs identifiants ne sont pas interchangeables.

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

## Fonctionnement

Une action source Ã©met ou stocke un message. AprÃ¨s la politique requise de confirmation ou finalitÃ©, des validateurs, guardians ou un systeme de preuve l'authentifient. A destination, le vÃ©rificateur contrÃ´le la root ou l'ensemble de signatures pertinent, la version, le remote de confiance, la destination, le destinataire, le payload et les limites temporelles. Le destinataire dÃ©rive l'identite definie par le protocole et consultÃ© l'Ã©tat processed persistant avant de produire un effet externe.

La livraison est souvent at-least-once, tandis que l'effet metier recherche se produit effectivement une fois. Une machine a Ã©tats utile distingue jamais tentÃ©, en cours, Ã©chouÃ© ou relancable, et rÃ©ussi ou consomme. L'echec d'un appel cible n'est pas automatiquement une attaque par replay. ERC-5164 exige par exemple au plus une exÃ©cution rÃ©ussie tout en autorisant une nouvelle tentative aprÃ¨s echec. Les regles propres au produit sur retry, gas et valeur continuent de s'appliquer.

Le flag de replay ou processing guard doit etre Ã©tabli avant tout appel externe non fiable, avec contrÃ´le de la reentrancy. Si toute la transaction revert, cette modification d'Ã©tat revert normalement aussi et laisse un chemin de retry dÃ©fini ; si le protocole intercepte volontairement un echec downstream, il doit enregistrer un Ã©tat failed distinct sans conserver par erreur de valeur ou d'effets partiels. Le destinataire doit aussi etre idempotent si les systemes downstream sont accessibles par une autre voie.

La portee du nonce compte. Un nonce sÃ©quentiel impose l'ordre, mais un message manquant peut bloquer les suivants. Un nonce non ordonne ou bitmap autorisÃ© des livraisons independantes, mais exige un calcul exact de word et bit. Un batch doit prÃ©ciser si l'ensemble est atomique ou si chaque leaf possÃ¨de sa preuve et son Ã©tat processed. Ne consommer que la batch root aprÃ¨s exÃ©cution partielle peut dupliquer les leaf rÃ©ussies ou bloquer celles qui ont Ã©chouÃ©.

La politique de rÃ©organisation de la source participe a la sÃ©curitÃ©. Une observation signÃ©e avant une finalitÃ© suffisante peut rester valide cryptographiquement alors que l'Ã©vÃ©nement source n'est plus canonique. Les upgrades constituent une autre frontiÃ¨re : layout du storage du proxy, mappings processed, domaines de version, anciens entry points, rotation des peers et fork ou rÃ©utilisation du chain ID doivent conserver ou invalider dÃ©libÃ©rÃ©ment les anciennes identites sans rouvrir les messages consommes.

Suivre ce processus :

1. Fixer protocole, version dÃ©ployÃ©e, domaines, messenger ou emitter fiable, expÃ©diteur, destinataire, valeur, payload, nonce ou identite d'Ã©vÃ©nement et sÃ©mantique d'expiration.
2. Reproduire l'encodage canonique et le vecteur de test de `messageId` ; rejeter concatenation ambiguÃ«, champs omis et hypotheses empruntees a un autre bridge.
3. VÃ©rifier l'inclusion source et la politique requise de finalitÃ© ou confirmations, puis la root, le quorum, l'ensemble de validateurs ou guardians et la version corrects.
4. VÃ©rifier sÃ©parÃ©ment destination, destinataire, expÃ©diteur cross-domain, valeur, payload et expiration ; traiter le relayer comme transport, non comme autorite.
5. Lire l'Ã©tat persistant et passer en processing ou consumed avant tout appel externe non fiable, en testant explicitement reentrancy et revert de la transaction entiere.
6. DÃ©finir les transitions successful, failed et retryable, le nonce ordonne ou bitmap, l'atomicite du batch et la comptabilite de valeur ; prouver qu'une livraison rÃ©pÃ©tÃ©e ne rÃ©pÃ¨te aucune leaf rÃ©ussie.
7. Tester upgrades, migration du storage, anciens entry points dÃ©sactivÃ©s, rotation des peers, forks et reprise d'urgence ; rapprocher receipts, Ã©vÃ©nements, Ã©tat processed et soldes cibles.

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

## Exemples

- **Liaison au domaine de destination.** Deux instructions portent le nonce `42` et la valeur `1,000`, mais l'une cible la chain `10` et l'autre la chain `8453`. Un identifiant sans destination traite `2 messages` comme candidats a une collision ; l'encodage canonique qui la lie produit `2 distinct IDs`. La fonction de hachage et la reprÃ©sentation du domaine relevent du protocole.
- **Bitmap non ordonne.** Pour le nonce `513`, `word = floor(513 / 256) = 2`, `bit = 513 mod 256 = 1` et `mask = 1 << 1 = 2`. Le premier succes fait passer la word `2` de `0` a `2`. Un doublon trouve `2 & 2 = 2` et est rejetÃ© ; le nonce `512` utilise indÃ©pendamment le bit `0`.
- **Un retry n'est pas un second effet.** Le meme message est livre `3` fois. Les appels avec `110,000` et `125,000` gas Ã©chouent et revert ; le troisieme utilise `140,000` gas et rÃ©ussit une fois. Le total est `110,000 + 125,000 + 140,000 = 375,000` gas ; a `20 gwei`, il vaut `0.0075 ETH`. Il y a `3` livraisons, mais `1` effet metier rÃ©ussi.
- **ComptabilitÃ© d'un batch partiel.** Quatre leaf exÃ©cutables sÃ©parÃ©ment portent `25 + 40 + 15 + 20 = 100` unites. Les leaf `0`, `1` et `3` exÃ©cutent `25 + 40 + 20 = 85` ; la leaf `2` Ã©chouÃ© et laisse `15` en attente. Ne consommer que la root bloque les `15` ; relancer tout le batch sans Ã©tat par leaf peut repeter les `85`. Il faut un rollback atomique ou un Ã©tat processed par leaf.

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

## Risques

- L'identifiant omet la chain ou le domaine de destination.
- L'identifiant omet le messenger ou l'emitter source.
- La version du protocole ou du message manque dans le domaine.
- Un namespace de nonce entre en collision entre expediteurs ou deployments.
- Un encodage packed ambigu crÃ©e des collisions entre champs diffÃ©rents.
- Un fork ou chain ID reutilise rend un ancien domaine de nouveau valide.
- Un Ã©vÃ©nement est accepte avant une finalitÃ© suffisante puis rÃ©organisÃ©.
- Une mauvaise root ou un mauvais ensemble de validateurs ou guardians est accepte.
- Un ancien domaine de signature reste valide aprÃ¨s un upgrade.
- Une corruption du storage du proxy rÃ©initialise ou superpose l'Ã©tat processed.
- La migration omet des messages consommes ou laisse un entry point legacy actif.
- L'Ã©tat n'est marque qu'aprÃ¨s l'appel externe, ce qui permet la reentrancy.
- Un appel Ã©chouÃ© est marque rÃ©ussi et ne peut plus etre relance.
- Un appel rÃ©ussi n'est pas persiste et rÃ©pÃ¨te son effet Ã©conomique.
- Un nonce ordonne manquant bloque tous les messages suivants.
- L'arithmetique de word, bit ou invalidation du bitmap est erronÃ©e.
- L'Ã©tat de la batch root contredit l'exÃ©cution partielle des leaf.
- Un retry rÃ©pÃ¨te des leaf dÃ©jÃ  rÃ©ussies.
- Les unites de deadline, expiry ou horloge cible sont mal interprÃ©tÃ©es.
- L'allowlist des relayers est confondue avec l'autorisation du message.

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

## IdÃ©es reÃ§ues

- **Un nonce seul est globalement unique.** Expediteur, protocole, deployment et domaines dÃ©finissent son namespace.
- **Seul un relayer autorisÃ© empÃªche le replay.** Le relayer livre ; verification cible et Ã©tat consumed persistant imposent autorite et contrÃ´le.
- **Toute livraison rÃ©pÃ©tÃ©e est une attaque.** Un reseau at-least-once peut relancer un echec ; l'invariant est au plus un effet rÃ©ussi.
- **Une preuve ou signature valide dÃ©montre finalitÃ© et intention.** Elle peut omettre le target, lier la mauvaise version ou attester un Ã©tat ensuite rÃ©organisÃ©.
- **Une transaction bridge rÃ©ussie prouve exactly-once.** VÃ©rifier receipt, storage processed, Ã©vÃ©nements du destinataire et soldes rÃ©els, pour chaque leaf.

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

## Sujets connexes

- [Bridge inter-chaÃ®nes](/fr/crypto/cross-chain-bridge/)
- [Bridge canonique](/fr/crypto/canonical-bridge/)
- [DÃ©faillance d'un relayer inter-chaÃ®nes](/fr/crypto/bridge-relayer-liveness-risk/)

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

## Sources

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

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