Sección 2 · Lección 2.7
Transacciones internas y contratos inteligentes
Un analista principiante abre una dirección en un explorador, ve una lista corta de tres transferencias y concluye "la cartera está casi vacía, nada interesante". En realidad, por esta dirección pasaron millones de dólares; simplemente se movieron como transacciones internas, que no están en la pestaña corriente. Este es uno de los puntos ciegos más habituales para los novatos. En esta lección veremos qué son las transacciones internas (internal txns), por qué no se ven, cómo mueven fondos los contratos inteligentes (DEX, puentes) y dónde mirar todo esto como es debido.
Dos tipos de transacciones en Ethereum
Para entender las transacciones internas, hay que distinguir quién inicia la transferencia:
- Una transacción externa (external / normal). La crea y la firma una persona con su clave privada desde una cartera corriente (una EOA, externally owned account, cuenta de propiedad externa). Solo esas transacciones se escriben en la blockchain como registros separados con su propio hash. Es exactamente lo que muestra la pestaña "Transactions".
- Una transacción interna (internal). La inicia un contrato inteligente en el transcurso de la ejecución de un código disparado por una transacción externa. No tiene hash propio ni firma propia: es un efecto secundario del funcionamiento del contrato.
La idea clave: una "transacción interna" no es un registro separado en la blockchain, sino un evento dentro de una ejecución. Por eso no puedes verla con solo desplazarte por la lista corriente de transferencias.
Por qué no se ven en la lista corriente
La blockchain almacena solo las transacciones externas, las firmadas por los usuarios. Los movimientos de ETH que hace un contrato durante su funcionamiento no se registran en ninguna parte como líneas autónomas. Entonces, ¿cómo muestran los exploradores como Etherscan una pestaña "Internal Transactions"? La respuesta importa para entender todo el mecanismo.
Las transacciones internas son una reconstrucción. Los exploradores no las "leen" directamente de la blockchain. Vuelven a ejecutar (tracing) cada transacción en su propia copia de la EVM y registran todas las llamadas internas en las que se transfiere ETH. Por lo tanto: (1) las transferencias internas existen solo para la moneda nativa (ETH); no las confundas con los tokens ERC-20, que se mueven mediante eventos Transfer; (2) si un servicio no hace tracing, no ve estos movimientos en absoluto.
Una analogía. Una transacción externa es como la orden "pon en marcha la máquina expendedora". Dentro de sí misma, la máquina dispensa una lata, cuenta el cambio, enciende las luces: esas son acciones internas. En el registro solo queda escrita tu orden, y todo lo que la máquina hizo internamente hay que reconstruirlo "reproduciendo" su funcionamiento.
Cómo mueven fondos los contratos: DEX
Veamos el caso más habitual: un swap en un exchange descentralizado (DEX), por ejemplo Uniswap. Un usuario cambia ETH por el token USDC. ¿Qué ocurre en realidad?
- La transacción externa. El usuario envía ETH a la dirección del contrato del router de Uniswap y llama a la función de swap. Este es el único registro visible en su lista corriente. "Envió ETH a 0xUniswap..." y eso es todo.
- Las transferencias internas. Dentro de la ejecución, el contrato del router llama al contrato del pool de liquidez, el pool envía USDC al usuario y parte del ETH se distribuye por el camino. Todos estos movimientos son internos. No se ven en la pestaña normal.
- La devolución del cambio. Si el usuario envió un poco más de ETH de la cuenta, el contrato le devuelve el remanente mediante una transacción interna a su dirección. También es invisible en la lista corriente.
Para el AML esto es crítico. Imagina: un analista ve que una dirección sospechosa envió 10 ETH a Uniswap y "el rastro termina ahí". En realidad, el contrato devolvió USDC a esa misma dirección mediante una transacción interna, y el dinero sigue viviendo en un token distinto. Sin ver las transacciones internas y las transferencias de tokens, el "hilo" se pierde, y el blanqueo a través de un DEX parece un callejón sin salida.
Cómo mueven fondos los contratos: puentes
Con los puentes entre cadenas es aún más complicado. Un puente acepta un activo en una red y emite el equivalente en otra. Esta es una herramienta clásica para romper el rastro: un analista que trabaja con una sola blockchain "pierde" el dinero a la entrada del puente.
La mecánica de un puente a ojos de un analista
- El depósito. El usuario envía ETH al contrato del puente en la red Ethereum. La transacción externa es visible. En Ethereum el dinero queda entonces "congelado" en el contrato.
- El evento. El contrato del puente emite un evento de log con la dirección del destinatario en la red de destino (por ejemplo, Arbitrum). Esto no es una transferencia, sino un registro en los logs: hay que saber leerlo.
- La emisión en la otra red. El validador/relayer del puente en la red Arbitrum envía los fondos equivalentes a la dirección del destinatario. Esto ya es una transacción completamente distinta en una blockchain distinta. El vínculo entre el "antes" y el "después" existe solo a través de la lógica del puente.
Para no perder el rastro a través de un puente, el analista debe: (1) reconocer la dirección del contrato como un puente conocido; (2) leer el evento con la dirección del destinatario; (3) cambiar a la red de destino y continuar el rastreo allí. Precisamente por esto un motor AML serio es multicadena y conoce las direcciones de los puentes populares.
Dónde y cómo mirar esto
Ahora la práctica: cómo encuentra un analista, de verdad, los movimientos ocultos.
- La pestaña "Internal Transactions" en Etherscan. Una pestaña aparte, junto a las transacciones corrientes. Aquí ves todas las transferencias de ETH iniciadas por contratos: devoluciones de DEX, pagos, distribuciones.
- La pestaña "Token Transfers" (ERC-20 / ERC-721). Los movimientos de tokens no se reflejan ni en las normales ni en las internas: tienen su propia pestaña, construida a partir de los eventos Transfer. Saltársela es no ver que una dirección tiene millones en USDT.
- Herramientas de trace / "State" y de depuración. Para el desglose profundo de una transacción compleja (muchas llamadas anidadas), los analistas usan tracers: la pestaña "State", Tenderly, Phalcon. Muestran el árbol completo de llamadas contrato → contrato.
- Logs y eventos (Logs / Events). Aquí es exactamente donde se leen los datos de los puentes, los swaps y los depósitos: cosas que no son transferencias directas pero que llevan información clave sobre las direcciones.
La lista de comprobación práctica del analista. Al abrir cualquier dirección EVM, comprueba siempre al menos cuatro pestañas: Normal, Internal, Token Transfers (ERC-20), NFT Transfers. Juzgar una cartera como "vacía" solo por la pestaña Normal es un error grave que hace que se pasen por alto capas enteras de blanqueo.
Un ejemplo de extremo a extremo: blanqueo a través de un DEX y un puente
Un esquema fácil de pasar por alto.
Hackeo → el ladrón obtiene 100 ETH → tx externa a Uniswap (solo esta transferencia es visible) → interna: el contrato emite 250.000 USDC a la dirección del ladrón (invisible en Normal) → transferencia de token: los USDC van al contrato del puente → evento del puente: el destinatario en la red Polygon → el blanqueo continúa en otra red.
Un analista que mire solo la pestaña Normal en Ethereum verá únicamente "envió 100 ETH a Uniswap" y decidirá que el rastro terminó. En realidad, el dinero sigue viviendo, solo que en un token distinto y una red distinta.
Desglosemos qué salva al analista en cada paso: la pestaña Internal muestra la devolución de USDC; la pestaña Token Transfers, el movimiento de la stablecoin hacia el puente; la lectura del evento del puente, la dirección del destinatario; el enfoque multicadena, la continuación en Polygon. Quita cualquiera de estas herramientas y el esquema parece un callejón sin salida, y el dinero sucio "se esfuma".
Resumen de la lección. Las transacciones externas las crea una persona, y solo ellas quedan registradas en la blockchain; las internas son transferencias de ETH que los contratos realizan durante la ejecución, reconstruidas mediante tracing. Los DEX devuelven fondos en otros tokens a través de transacciones internas; los puentes transportan valor entre redes a través de eventos. Para que el análisis AML sea honesto, el motor debe leer las transacciones internas, las transferencias de tokens y los logs de eventos, y trabajar en varias redes. Cuando AMLConsensus no "pierde" el dinero a la entrada de Uniswap o de un puente, es precisamente el mecanismo que acabas de estudiar en esta lección en acción.
Este material tiene fines educativos.