Saltar al contenido

Etapa 1 de 6

Firmas la intención

Antes de que exista una transacción, existe una intención: Ana quiere pagarle 25 USDC a Beto. La wallet traduce esa intención a un mensaje que la red entiende y lo firma con la clave privada de Ana. La firma convierte el mensaje en una orden: cualquiera puede verificarla con la clave pública de Ana, pero nadie puede producirla sin la privada.

El ejemplo

Ana abre su wallet, elige USDC, escribe el monto y la dirección de Beto, y pulsa enviar. En las tres redes la pantalla se ve casi igual. Lo que la wallet construye por debajo es muy distinto.

Ethereum

En Ethereum, USDC no es la moneda de la red sino un contrato. Pagar 25 USDC es, técnicamente, llamar a la función transfer de ese contrato con dos datos: la dirección de Beto y el monto. La transacción de Ana va dirigida al contrato de USDC, no a Beto, y lleva esa llamada codificada en su campo de datos.

La wallet completa el resto de los campos. El nonce es un contador que empieza en cero y sube con cada transacción de la cuenta; impide que la misma orden se use dos veces. El identificador de la red (chain ID) evita que la firma sirva en otra cadena. El límite de gas fija cuánto cómputo puede consumir como máximo. Y dos precios por unidad de gas, definidos en EIP-1559: la comisión máxima que Ana acepta pagar y la propina para quien incluya la transacción.

Con todo eso, la wallet calcula un hash del mensaje y lo firma con ECDSA sobre la curva secp256k1. La firma no incluye la dirección de Ana: los nodos la recuperan a partir de la firma misma. Si alguien cambia un solo byte del mensaje, la dirección recuperada cambia y la transacción ya no es de Ana.

Avalanche

La C-Chain de Avalanche ejecuta la misma máquina virtual que Ethereum, así que la transacción de Ana es casi idéntica: una llamada a transfer en el contrato de USDC de la C-Chain, con nonce, límite de gas, comisión máxima y propina, firmada con ECDSA sobre secp256k1. Muchas wallets usan la misma clave y la misma dirección en las dos redes.

La diferencia que importa en esta etapa es el chain ID, 43114 en la C-Chain. Como la firma lo incluye, una transacción firmada para Avalanche no puede reenviarse a Ethereum ni al revés, aunque la dirección de Ana sea la misma en ambas.

Avalanche no es una sola cadena: la C-Chain convive con la P-Chain, que coordina a los validadores, y con las L1 que cada proyecto puede lanzar. Una transacción se firma para una cadena concreta, y la wallet tiene que saber a cuál la envía.

Solana

En Solana, USDC es un token del programa de tokens (SPL). Ana no guarda USDC en su dirección principal sino en una cuenta de token asociada a ella, y Beto tiene la suya. La transacción lleva una instrucción para el programa de tokens: mover 25 USDC de la cuenta de token de Ana a la de Beto. Si Beto todavía no tiene esa cuenta, la wallet añade antes una instrucción para crearla.

La transacción declara de antemano todas las cuentas que va a leer o escribir. Parece burocracia, pero es lo que después permitirá ejecutar transacciones en paralelo. En vez de un nonce, incluye un blockhash reciente, una referencia a un bloque de hace unos segundos: prueba que la transacción es nueva y le pone fecha de vencimiento. Si no entra en un bloque en alrededor de un minuto, deja de ser válida.

Ana firma con Ed25519, otro esquema de firma, y su cuenta figura como pagadora de la comisión. Una misma transacción puede llevar varias firmas, por ejemplo cuando otra cuenta paga la comisión por ella.

En resumen

En las tres redes, firmar es comprometerse con un mensaje exacto. Cambian el tipo de firma y la forma de evitar que una orden se repita: Ethereum y Avalanche cuentan las transacciones de cada cuenta con un nonce, y Solana fecha cada una con un blockhash reciente.

Practica con tu IA

Copia este prompt y pégalo en la IA que uses. Al copiarlo se agrega el enlace a este artículo, por si puede leerlo.

Actúa como mi tutor de blockchain. Estoy aprendiendo cómo se firma una transacción. Usa este ejemplo: Ana le paga 25 USDC a Beto. Muéstrame, campo por campo, cómo quedaría esa transacción en Ethereum (EIP-1559), en la C-Chain de Avalanche y en Solana, sin firmarla de verdad. Después hazme tres preguntas, de a una, y espera mi respuesta antes de seguir: qué campo evita que la orden se repita en cada red, por qué una firma hecha para Avalanche no sirve en Ethereum, y qué pasa si Ana firma en Solana y espera cinco minutos antes de enviarla. Corrígeme con precisión cuando me equivoque.