﻿---
title: "ProtecciÃ³n contra la repeticiÃ³n de mensajes entre cadenas"
description: "La protecciÃ³n contra replay vincula un mensaje de origen autenticado a una versiÃ³n del protocolo y a un dominio de destino, y permite reintentos sin generar mÃ¡s de un efecto econÃ³mico correcto."
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.

# ProtecciÃ³n contra la repeticiÃ³n de mensajes entre cadenas

> Solo con fines educativos; no constituye asesoramiento de inversión. Invertir puede ocasionar pérdidas.

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

## Respuesta directa

La protecciÃ³n contra la repeticiÃ³n de mensajes entre cadenas garantiza que un mensaje de origen autenticado no produzca mÃ¡s de un efecto econÃ³mico correcto en el dominio de destino previsto. Un relayer puede entregar la misma prueba varias veces y un intento fallido puede admitir reintento, pero un mensaje ya completado no debe volver a emitir, desbloquear ni invocar al receptor.

Autenticidad, finalidad y protecciÃ³n contra replay son comprobaciones distintas. Una firma, atestaciÃ³n de validadores o prueba de almacenamiento vÃ¡lida puede autenticar datos sin demostrar que el evento de origen sea final, que destino y receptor esten vinculados o que el destino no lo haya procesado ya. Del mismo modo, un relayer autorizado es solo una via de entrega; su identidad no sustituye la autenticaciÃ³n del mensaje.

No existe un `messageId` universal. La especificaciÃ³n concreta determina la serializaciÃ³n y la identidad. Un sobre robusto suele vincular protocolo y versiÃ³n, dominio y messenger o emisor de origen, remitente original, nonce o identidad de transacciÃ³n/log de origen, dominio y receptor de destino, valor, payload y vencimiento. Wormhole, CCTP, Optimism y ERC-5164 usan campos y maquinas de estado distintos; sus identificadores no son intercambiables.

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

## Como funciona

Una acciÃ³n de origen emite o almacena un mensaje. Tras la polÃ­tica exigida de confirmaciÃ³n o finalidad, validadores, guardianes o un sistema de pruebas lo autentican. En destino, el verificador comprueba la raiz o conjunto de firmas pertinente, versiÃ³n, remoto de confianza, destino, receptor, payload y limites temporales. El receptor deriva la identidad definida por el protocolo y consulta el estado processed persistente antes de producir un efecto externo.

La entrega suele ser al menos una vez, mientras que el efecto comercial buscado ocurre efectivamente una vez. Una mÃ¡quina de estados util distingue nunca intentado, en proceso, fallido o reintentable, y correcto o consumido. Una llamada de destino fallida no es automaticamente un ataque de replay. ERC-5164, por ejemplo, exige que un mensaje se ejecute correctamente como maximo una vez y permite otro intento tras un fallo. Siguen rigiendo las reglas propias del producto sobre reintentos, gas y valor.

El indicador de replay o guard de procesamiento debe fijarse antes de una llamada externa no fiable, controlando la reentrada. Si revierte toda la transacciÃ³n, normalmente revierte tambiÃ©n ese cambio y queda una ruta definida de reintento; si el protocolo captura intencionadamente un fallo downstream, debe registrar un estado fallido distinto sin retener por error valor ni efectos parciales. El receptor tambiÃ©n debe ser idempotente cuando sistemas downstream sean accesibles por otra via.

El alcance del nonce importa. Un nonce secuencial impone orden, pero un mensaje ausente puede bloquear los siguientes. Un nonce no ordenado o bitmap permite entregas independientes, pero exige calcular exactamente word y bit. En lotes debe definirse si todo el lote es atÃ³mico o si cada hoja tiene prueba y estado processed propios. Marcar solo la raiz del lote tras una ejecuciÃ³n parcial puede duplicar hojas correctas o dejar varadas las fallidas.

La polÃ­tica de reorganizaciÃ³n del origen forma parte de la seguridad. Una observaciÃ³n firmada antes de suficiente finalidad puede seguir siendo criptogrÃ¡ficamente vÃ¡lida aunque el evento deje de ser canonico. Las actualizaciones son otro limite: layout de almacenamiento del proxy, mappings processed, dominios de versiÃ³n, entry points antiguos, rotaciÃ³n de peers y fork o reutilizacion de chain ID deben conservar o invalidar deliberadamente identidades anteriores sin reabrir mensajes consumidos.

Use este flujo:

1. Fije protocolo, versiÃ³n desplegada, dominios, messenger o emisor de confianza, remitente, receptor, valor, payload, nonce o identidad del evento y semÃ¡ntica de vencimiento.
2. Reproduzca la codificaciÃ³n canonica y el vector de prueba de `messageId`; rechace concatenaciones ambiguas, campos omitidos y supuestos tomados de otro puente.
3. Verifique inclusiÃ³n y polÃ­tica de finalidad o confirmaciones; despuÃ©s, raiz, quorum de firmas, conjunto de validadores o guardianes y versiÃ³n correctos.
4. Verifique por separado destino, receptor, remitente cross-domain, valor, payload y vencimiento; trate al relayer como transporte, no como autoridad.
5. Lea el estado persistente y entre en estado processing o consumed antes de toda llamada externa no fiable, probando explicitamente reentrada y comportamiento de revert.
6. Defina transiciones correctas, fallidas y reintentables, nonce ordenado o bitmap, atomicidad del lote y contabilidad de valor; demuestre que una entrega repetida no repite una hoja correcta.
7. Pruebe actualizaciones, migraciÃ³n de storage, entry points legacy deshabilitados, rotaciÃ³n de peers, forks y recuperaciÃ³n; concilie receipts, eventos, estado processed y saldos de destino.

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

## Ejemplos

- **Vinculacion del dominio de destino.** Dos instrucciones tienen nonce `42` y valor `1,000`, pero una apunta a la cadena `10` y otra a la cadena `8453`. Un identificador que omite el destino trata `2 messages` como candidatos a colisiÃ³n; una codificaciÃ³n canonica que lo vincula produce `2 distinct IDs`. El hash y la representaciÃ³n del dominio proceden del protocolo.
- **Bitmap no ordenado.** Para el nonce `513`, `word = floor(513 / 256) = 2`, `bit = 513 mod 256 = 1` y `mask = 1 << 1 = 2`. El primer Ã©xito cambia la word `2` de `0` a `2`. Un duplicado obtiene `2 & 2 = 2` y se rechaza; el nonce `512` usa independientemente el bit `0`.
- **Reintentar no crea un segundo efecto.** El mismo mensaje se entrega `3` veces. Las llamadas con `110,000` y `125,000` gas fallan y revierten; la tercera usa `140,000` gas y tiene Ã©xito una vez. El gas total es `110,000 + 125,000 + 140,000 = 375,000`; a `20 gwei`, equivale a `0.0075 ETH`. Hay `3` entregas y `1` efecto comercial correcto.
- **Contabilidad de lote parcial.** Cuatro hojas ejecutables por separado contienen `25 + 40 + 15 + 20 = 100` unidades. Las hojas `0`, `1` y `3` ejecutan `25 + 40 + 20 = 85`; la hoja `2` falla y deja `15` pendientes. Consumir solo la raiz deja varadas las `15`; reintentar todo sin estado por hoja puede repetir las `85`. Se requiere rollback atÃ³mico o estado processed por hoja.

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

## Riesgos

- El identificador omite la cadena o dominio de destino.
- El identificador omite el messenger o emisor de origen.
- Falta la versiÃ³n del protocolo o mensaje en el dominio.
- Un namespace de nonce colisiona entre remitentes o despliegues.
- Una codificaciÃ³n packed ambigua crea colisiones entre campos distintos.
- Un fork o chain ID reutilizado vuelve valido un dominio antiguo.
- Se acepta un evento antes de suficiente finalidad y desaparece por reorganizaciÃ³n.
- Se acepta una raiz, conjunto de validadores o guardianes incorrecto.
- Un dominio de firma antiguo sigue valido tras una actualizacion.
- La corrupcion del storage del proxy reinicia o solapa el estado processed.
- La migraciÃ³n omite consumidos o mantiene activo un entry point legacy.
- El estado se marca despuÃ©s de la llamada externa y permite reentrada.
- Una llamada fallida queda marcada como correcta y no admite reintento.
- Una llamada correcta no persiste y repite su efecto econÃ³mico.
- Un nonce ordenado ausente bloquea todos los posteriores.
- La aritmÃ©tica de word, bit o invalidacion del bitmap es incorrecta.
- El estado de raiz del lote contradice una ejecuciÃ³n parcial por hojas.
- Un reintento repite hojas ya ejecutadas correctamente.
- Se interpretan mal las unidades del deadline, expiry o reloj destino.
- La allowlist de relayers se confunde con autorizaciÃ³n del mensaje.

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

## Errores comunes

- **Un nonce es globalmente Ãºnico por si solo.** Su namespace depende del remitente, protocolo, despliegue y dominios de origen y destino.
- **Solo un relayer autorizado evita replay.** El relayer entrega; la verificaciÃ³n en destino y el estado consumed persistente imponen autoridad y control.
- **Toda entrega repetida es un ataque.** Una red at-least-once puede reintentar un fallo; la invariante es no mÃ¡s de un efecto correcto.
- **Una prueba o firma vÃ¡lida demuestra finalidad e intenciÃ³n.** Puede omitir el target, vincular otra versiÃ³n o atestar un estado que luego se reorganiza.
- **Una transacciÃ³n del puente correcta demuestra exactly-once.** Verifique receipt, storage processed, eventos del receptor y saldos reales, hoja por hoja.

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

## Temas relacionados

- [Puente entre cadenas](/es/crypto/cross-chain-bridge/)
- [Puente canonico](/es/crypto/canonical-bridge/)
- [Fallo de un relayer entre cadenas](/es/crypto/bridge-relayer-liveness-risk/)

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

## Fuentes

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

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