Ethereum: de historia a labs

Artículo 48 de 48

100%

completado al llegar aquí

Sistemas distribuidosNota de laboratorio11 min de lectura

De la serie a los labs: cómo practicar sin quemar ETH real

Cómo practicar Ethereum sin fondos reales: cadena local con Anvil, reorgs forzadas, fork de mainnet y testnets, y el paso a la ruta práctica de custodia.

Ruta Ethereum: 0/48

Quieres comprobar que tu indexador sobrevive a una reorg, como pide el capítulo de indexadores. En mainnet no puedes provocar una. En una testnet tendrías que esperar a que ocurra por azar. En una cadena local la provocas con una sola llamada RPC, la repites cien veces y la borras al terminar. ¿Dónde conviene practicar cada cosa, entonces?

Este capítulo cierra la serie con esa pregunta. Define tres entornos de práctica y su frontera, propone una secuencia de laboratorios que recorre la serie, muestra un laboratorio completo (la reorg forzada) y termina donde empieza el trabajo real del equipo: la ruta práctica de custodia, llaves y cumplimiento.

De local a operación

Secuencia de laboratorios sugerida

Cada laboratorio aísla una propiedad y deja una evidencia que se puede comprobar.
  1. Anvil

    Cadena local y wallet

    Levantar Anvil, firmar una transferencia y leer su recibo. Evidencia: status 1 y saldos antes y después.

  2. Cast

    RPC y depuración

    Consultar bloques, logs y estado por JSON-RPC. Evidencia: el mismo dato leído por dos métodos.

  3. Forge

    Token ERC-20 con pruebas

    Escribir un token y un test de fuzzing que preserve el suministro total. Evidencia: la propiedad pasa.

  4. Forge

    Storage y reentrancy

    Leer slots y reproducir un ataque de reentrancy. Evidencia: el slot exacto y el test que falla antes del arreglo.

  5. Anvil

    Oráculo y liquidación

    Mover un precio a mano y liquidar una posición. Evidencia: health factor antes y después.

  6. Anvil

    Indexador y observabilidad

    Forzar una reorg y medir atrasos. Evidencia: el índice vuelve a cuadrar con la cadena.

Brújula de lectura

Actor, evidencia y estado

Antes de avanzar, ubica quién actúa, qué prueba queda y qué parte del sistema cambia.

Actor

Quien practica

Una persona del equipo con Foundry instalado y ninguna clave con fondos reales en la máquina.

Evidencia

Artefacto observable

Recibo, slot, test, hash de bloque o métrica: algo que otro puede comprobar sin creerte.

Estado

Cadena desechable

Una cadena local que se crea, se altera y se borra; nada de lo que pase ahí cuesta dinero.

Preguntas guía

Usa estas preguntas para decidir dónde practicar algo concreto de tu equipo:

  • ¿Qué propiedad quieres comprobar, y qué artefacto la demuestra?
  • ¿Necesitas estado real de mainnet, o te basta una cadena vacía?
  • ¿Necesitas un consenso real, con validadores y finalidad de verdad?
  • ¿Cómo compruebas, antes de firmar, que no estás conectado a mainnet?
  • ¿Qué tienes que borrar al terminar?

Conexiones dentro de la serie

Prerequisitos internos recomendados:

Riesgo operativo: la frontera entre local, testnet y mainnet

Hay tres entornos de práctica, y cada uno es real en algo distinto. Anvil, el nodo local de Foundry, crea una cadena en tu máquina. Por defecto escucha en el puerto 8545, usa el chain id 31337 y genera 10 cuentas con 10 000 ETH de prueba cada una, derivadas de una frase semilla pública. Esas claves son conocidas por todo el mundo: nunca deben recibir fondos reales.

El segundo entorno es un fork de mainnet: Anvil arranca con --fork-url y lee el estado real de la red en un bloque, pero las transacciones que envías solo existen en tu máquina. Sirve para probar contra contratos y saldos reales sin tocar la red. El tercero son las testnets públicas. Según ethereum.org, Sepolia es la testnet recomendada por defecto para desarrollo de aplicaciones, y Hoodi está pensada para probar validación, staking y actualizaciones de red.

La diferencia que más importa para esta serie es el consenso. Anvil no tiene validadores ni finalidad real: responde a safe y finalized con una aproximación, la cabeza menos 32 y menos 64 bloques por defecto. Para practicar la lógica de etiquetas basta. Para observar cuánto tarda la finalidad de verdad, o qué pasa si se detiene, necesitas una testnet.

Figura 1

Tres entornos de práctica y qué es real en cada uno

Fuentes:

[1][2]
Tres entornos de práctica y qué es real en cada uno
Cómo leer esta figura

Cuatro columnas de izquierda a derecha: Anvil local, fork de mainnet, testnet Sepolia o Hoodi, y mainnet. Tres filas indican si es real el estado, el consenso con finalidad y el valor del ETH. Anvil: estado simulado, consenso simulado con safe y finalized aproximados, ETH sin valor; permite forzar reorgs. Fork: estado real leído en un bloque, consenso simulado, ETH sin valor. Testnet: estado propio de la testnet, consenso y finalidad reales, ETH sin valor. Mainnet: todo real. Una barrera vertical separa mainnet con la leyenda: fuera de los labs, solo vía la ruta práctica de custodia.

Visual original de TrautsLab. Anvil local es todo simulado y desechable; un fork de mainnet usa estado real pero transacciones locales; una testnet tiene consenso y finalidad reales con ETH sin valor. Mainnet queda fuera de la práctica y se alcanza solo a través de la operación con custodia.

La regla operativa que sale de aquí es simple y conviene automatizarla: antes de firmar, comprueba el chain id. Si un script de laboratorio recibe un chain id 1 (mainnet), debe detenerse. Y ninguna clave con fondos reales vive en la máquina donde practicas.

Traza de ejecución de un laboratorio: reorg forzada en Anvil

Este laboratorio pone a prueba el cursor con hash del capítulo de indexadores. Anvil expone un método RPC propio, anvil_reorg, que reemplaza los últimos bloques por otros nuevos a partir de un ancestro común. Recibe la profundidad y, opcionalmente, una lista de transacciones para los bloques nuevos; la implementación se asegura de que los bloques de reemplazo tengan hashes distintos aunque contengan lo mismo.

Los comandos usan cast rpc, que interpreta cada parámetro como JSON y, si no lo es, lo pasa como texto. Los métodos anvil_* son propios de Anvil y pueden cambiar entre versiones de Foundry; revisa la tuya antes de automatizar.

Bash
# Terminal 1: cadena local desechable
anvil
 
# Terminal 2
export ETH_RPC_URL=http://127.0.0.1:8545
test "$(cast chain-id)" = "31337" || { echo "No es Anvil: me detengo"; exit 1; }
 
cast rpc anvil_mine 0x50                                    # mina 80 bloques vacíos
cast rpc eth_getBlockByNumber latest false | jq -r '.number, .hash'
cast rpc eth_getBlockByNumber finalized false | jq -r '.number'   # aproximación de Anvil
 
cast rpc anvil_reorg 3 '[]'                                 # reemplaza los últimos 3 bloques
cast rpc eth_getBlockByNumber latest false | jq -r '.number, .hash'   # misma altura, otro hash

La aceptación del laboratorio no es "el comando terminó". Es esta lista, comprobable por otra persona:

  1. Antes de la reorg, el indexador tiene su cursor en la cabeza, con altura y hash.
  2. Después de la reorg, la altura de latest es la misma y el hash cambió.
  3. El indexador detecta que el parentHash no coincide, retrocede tres bloques y vuelve a avanzar.
  4. Una conciliación contra balanceOf en el bloque finalized aproximado cuadra.

Para la variante con depósitos, envía transferencias de un token de prueba antes de la reorg y no las incluyas en los bloques nuevos. Los depósitos atados a esos bloques deben pasar a "descartado", como describe el capítulo de arquitectura.

Invariante de un laboratorio: evidencia, frontera y limpieza

Un laboratorio útil aísla una propiedad. Si mezcla cinco conceptos, quien lo hace termina copiando comandos sin saber cuál de ellos falló. Por eso cada laboratorio de la secuencia declara lo mismo, en el mismo orden:

  • Objetivo: la propiedad que se comprueba, en una frase.
  • Frontera: en qué entorno corre, y qué no debe tocar nunca (mainnet, claves reales, servicios pagos).
  • Evidencia: el artefacto que demuestra el resultado, comparable antes y después.
  • Limpieza: qué procesos, archivos y variables se eliminan al terminar, y cómo se comprueba.

Con Anvil, la limpieza es casi gratis: al cerrar el proceso, la cadena desaparece. Lo que suele quedar son variables de entorno con URLs de RPC o claves, y archivos de configuración que alguien reutiliza después contra otra red. Ahí está el riesgo real de un laboratorio.

Elegir entorno

¿Dónde practico esto?

Reglas de decisión rápida

  • ¿La propiedad es de un contrato aislado?

    lógica, storage, eventos, permisos

    → Anvil local con tests de Forge.

  • ¿Necesitas contratos o saldos reales?

    integración con un protocolo desplegado

    → Fork de mainnet con Anvil, fijando el número de bloque.

  • ¿Necesitas reorgs a demanda?

    indexador, depósitos, conciliación

    → Anvil con anvil_reorg; repetir con varias profundidades.

  • ¿Necesitas finalidad y tiempos reales?

    políticas de confirmación, alertas de finalidad

    → Testnet pública (Sepolia para aplicaciones).

  • ¿Implica mover valor real?

    claves, custodio, retiros

    → No es un laboratorio: pasa por la ruta práctica y las políticas de custodia.

Elige el entorno más barato que todavía pueda mostrar la propiedad que buscas.

Historia de la ruta: de esta serie a la línea práctica

La serie recorrió Ethereum desde su historia hasta la producción: cuentas y transacciones, la EVM, contratos y sus fallos, consenso y finalidad, rollups, DeFi y operación. Los laboratorios convierten cada tramo en algo comprobable en tu máquina. Pero el trabajo del equipo no termina en un laboratorio: termina moviendo activos reales con llaves que alguien custodia.

Ese es el objeto de la ruta práctica. Sus módulos van del mínimo común que cualquier persona del equipo debe entender antes de mover un activo, a la gestión de llaves, la elección entre multifirma y MPC, la separación entre wallets hot, warm y cold, la decisión de custodiar o delegar, el cumplimiento AML y KYT, y una arquitectura de referencia con los proveedores contratados. Cada módulo termina en una decisión del equipo y un entregable revisable.

La conexión con esta serie es directa. Las etiquetas safe y finalized, la idempotencia por nonce y la conciliación contra la cadena son las piezas sobre las que esa ruta construye políticas de custodia. Si alguna se siente borrosa, vuelve al capítulo correspondiente antes de seguir.

El siguiente paso: la ruta práctica

Quédate con una frase: se practica en el entorno más barato que todavía muestre la propiedad, con una evidencia que otro pueda comprobar, y lo que mueve valor real no es un laboratorio. El siguiente paso está en la ruta práctica.

Referencias

Bibliografía académica

Formato IEEENumerado para ingeniería, sistemas y protocolos.
  1. [1]

    Foundry contributors, "anvil: command-line options and configuration," foundry-rs/foundry, GitHub repository.

    source codeID: FOUNDRY-ANVIL-SOURCEAbrir fuente (abre en otra pestaña)

    Puerto 8545, chain id 31337, 10 cuentas con 10 000 ETH, frase semilla por defecto y slots por epoch.

  2. [2]

    ethereum.org, "Networks."

    official docsID: ETH-NETWORKS-DOCSAbrir fuente (abre en otra pestaña)

    Sepolia para aplicaciones y Hoodi para validadores y actualizaciones.

  3. [3]

    Foundry contributors, "anvil_reorg," in crates/anvil/src/eth/api.rs, foundry-rs/foundry, GitHub repository.

    source codeID: FOUNDRY-ANVIL-REORGAbrir fuente (abre en otra pestaña)

    Implementación de anvil_reorg: ancestro común y bloques de reemplazo con hashes distintos.

Fuentes primarias, papers seminales y especificaciones técnicas citadas en esta investigación.

Rutas vecinas

Si este tema te abrió hambre, sigue por aquí.

Series y labs que comparten área o dependen de esta ruta. Pocas opciones, para no convertir la curiosidad en menú infinito.

Sigue leyendo

Ideas conectadas con este artículo

Una ruta corta para continuar sin abrir veinte pestañas y perder el hilo.

Los comentarios se cargan al final de la lectura para no meter peso antes de tiempo.