Saltar al contenido principal
Change page

Cuentas de Ethereum

Una cuenta de Ethereum es una entidad con un saldo de ether (ETH) que puede enviar mensajes en Ethereum. Las cuentas pueden ser controladas por usuarios o implementadas como contratos inteligentes.

Requisitos previos

Para ayudarle a comprender mejor esta página, le recomendamos que primero lea nuestra introducción a Ethereum.

Tipos de cuentas

Ethereum tiene dos tipos de cuentas:

  • Cuenta de propiedad externa (EOA): controlada por cualquier persona que tenga las claves privadas
  • Cuenta de contrato: un contrato inteligente implementado en la red, controlado por código. Más información sobre los contratos inteligentes

Ambos tipos de cuentas tienen la capacidad de:

  • Recibir, mantener y enviar ETH y tokens
  • Interactuar con contratos inteligentes implementados

Diferencias clave

De propiedad externa

  • Crear una cuenta no cuesta nada
  • Puede iniciar transacciones
  • Las transacciones entre cuentas de propiedad externa solo pueden ser transferencias de ETH o tokens
  • Compuesta por un par de claves criptográficas: claves públicas y privadas que controlan las actividades de la cuenta

De contrato

  • Crear un contrato tiene un costo porque se utiliza el almacenamiento de la red
  • Solo puede enviar mensajes en respuesta a la recepción de una transacción
  • Las transacciones de una cuenta externa a una cuenta de contrato pueden activar código que puede ejecutar muchas acciones diferentes, como transferir tokens o incluso crear un nuevo contrato
  • Las cuentas de contrato no tienen claves privadas. En su lugar, están controladas por la lógica del código del contrato inteligente

Análisis de una cuenta

Las cuentas de Ethereum tienen cuatro campos:

  • nonce: un contador que indica el número de transacciones enviadas desde una cuenta de propiedad externa o el número de contratos creados por una cuenta de contrato. Solo se puede ejecutar una transacción con un nonce determinado para cada cuenta, lo que protege contra ataques de repetición en los que las transacciones firmadas se transmiten y vuelven a ejecutar repetidamente.
  • balance: la cantidad de Wei que posee esta dirección. Wei es una denominación de ETH y hay 1e+18 Wei por ETH.
  • codeHash: este hash se refiere al código de una cuenta en la Máquina Virtual de Ethereum (EVM). Las cuentas de contrato tienen fragmentos de código programados que pueden realizar diferentes operaciones. Este código de la EVM se ejecuta si la cuenta recibe una llamada de mensaje. No se puede cambiar, a diferencia de los otros campos de la cuenta. Todos estos fragmentos de código están contenidos en la base de datos de estado bajo sus hashes correspondientes para su posterior recuperación. Este valor hash se conoce como codeHash. Para las cuentas de propiedad externa, el campo codeHash es el hash de una cadena vacía.
  • storageRoot: a veces conocido como hash de almacenamiento. Un hash de 256 bits del nodo raíz de un trie de Merkle Patricia que codifica el contenido de almacenamiento de la cuenta (un mapeo entre valores enteros de 256 bits), codificado en el trie como un mapeo desde el hash Keccak-256 de las claves enteras de 256 bits a los valores enteros de 256 bits codificados en Prefijo de longitud recursiva (RLP). Este trie codifica el hash del contenido de almacenamiento de esta cuenta y está vacío de forma predeterminada.

A diagram showing the make up of an account Diagrama adaptado de Ethereum EVM illustrated (se abre en una pestaña nueva)

Cuentas de propiedad externa y pares de claves

Una cuenta está compuesta por un par de claves criptográficas: pública y privada. Ayudan a demostrar que una transacción fue realmente firmada por el remitente y evitan falsificaciones. Su clave privada es lo que utiliza para firmar transacciones, por lo que le otorga la custodia de los fondos asociados con su cuenta. En realidad, nunca posee criptomonedas, posee claves privadas: los fondos siempre están en el libro mayor de Ethereum.

Esto evita que actores malintencionados transmitan transacciones falsas porque siempre se puede verificar al remitente de una transacción.

Si Alice quiere enviar ether desde su propia cuenta a la cuenta de Bob, Alice necesita crear una solicitud de transacción y enviarla a la red para su verificación. El uso de criptografía de clave pública por parte de Ethereum garantiza que Alice pueda demostrar que ella inició originalmente la solicitud de transacción. Sin mecanismos criptográficos, un adversario malintencionado, Eve, podría simplemente transmitir públicamente una solicitud que se parezca a «enviar 5 ETH de la cuenta de Alice a la cuenta de Eve», y nadie podría verificar que no provino de Alice.

Creación de cuentas

Cuando desea crear una cuenta, la mayoría de las bibliotecas le generarán una clave privada aleatoria.

Una clave privada está compuesta por 64 caracteres hexadecimales y se puede cifrar con una contraseña.

Ejemplo:

fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f

La clave pública se genera a partir de la clave privada utilizando el Algoritmo de firma digital de curva elíptica (se abre en una pestaña nueva). Obtiene una dirección pública para su cuenta tomando los últimos 20 bytes del hash Keccak-256 de la clave pública y agregando 0x al principio.

Esto significa que una cuenta de propiedad externa (EOA) tiene una dirección de 42 caracteres (un segmento de 20 bytes que son 40 caracteres hexadecimales más el prefijo 0x).

Ejemplo:

0x5e97870f263700f46aa00d967821199b9bc5a120

El siguiente ejemplo muestra cómo utilizar una herramienta de firma llamada Clef (se abre en una pestaña nueva) para generar una nueva cuenta. Clef es una herramienta de gestión de cuentas y firma que viene incluida con el cliente de Ethereum, Go Ethereum (Geth) (se abre en una pestaña nueva). El comando clef newaccount crea un nuevo par de claves y las guarda en un almacén de claves cifrado.

Documentación de Geth (se abre en una pestaña nueva)

Es posible derivar nuevas claves públicas a partir de su clave privada, pero no puede derivar una clave privada a partir de claves públicas. Es vital mantener sus claves privadas seguras y, como su nombre indica, PRIVADAS.

Necesita una clave privada para firmar mensajes y transacciones que generan una firma. Otros pueden tomar la firma para derivar su clave pública, demostrando así la autoría del mensaje. En su aplicación, puede utilizar una biblioteca de JavaScript para enviar transacciones a la red.

Cuentas de contrato

Las cuentas de contrato también tienen una dirección hexadecimal de 42 caracteres:

Ejemplo:

0x06012c8cf97bead5deae237070f9587f8e7a266d

La dirección del contrato generalmente se proporciona cuando se implementa un contrato en la cadena de bloques de Ethereum. La dirección proviene de la dirección del creador y del número de transacciones enviadas desde esa dirección (el «nonce»). Así es como la operación CREATE deriva una dirección.

Los contratos también se pueden implementar con CREATE2 (se abre en una pestaña nueva), que deriva la dirección a partir de la dirección del creador, un valor que el creador elige (la «sal» o «salt») y un hash del código de creación del contrato. No hay ningún nonce involucrado, por lo que la dirección se puede calcular antes de que exista el contrato y se mantiene igual sin importar cuántas otras transacciones envíe el creador mientras tanto. Esto hace posible hacer referencia a un contrato que aún no se ha implementado.

Claves de validador

También hay otro tipo de clave en Ethereum, introducida cuando Ethereum cambió del consenso basado en prueba de trabajo (PoW) a prueba de participación (PoS). Estas son las claves «BLS» y se utilizan para identificar a los validadores. Estas claves se pueden agregar de manera eficiente para reducir el ancho de banda requerido para que la red llegue a un consenso. Sin esta agregación de claves, la participación mínima para un validador sería mucho mayor.

Más sobre las claves de validador.

Una nota sobre las billeteras

Una cuenta no es una billetera. Una billetera es una interfaz o aplicación que le permite interactuar con su cuenta de Ethereum, ya sea una cuenta de propiedad externa o una cuenta de contrato.

Una demostración visual

Vea a Austin guiarle a través de las funciones hash y los pares de claves.

Hash function — ETH.BUILD

A demonstration of cryptographic hash functions using the ETH.BUILD educational tool.

Ver con transcripción 

Key pair — ETH.BUILD

A demonstration of public-private key pairs using the ETH.BUILD educational tool.

Ver con transcripción 

Lecturas adicionales

¿Conoce algún recurso de la comunidad que le haya ayudado? ¡Edite esta página y agréguelo!


Pon a prueba tus conocimientos sobre Ethereum