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.
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.
> clef newaccount --keystore <path>
Please enter a password for the new account to be created:
> <password>
------------
INFO [10-28|16:19:09.156] Your new key was generated address=0x5e97870f263700f46aa00d967821199b9bc5a120
WARN [10-28|16:19:09.306] Please backup your key file path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120
WARN [10-28|16:19:09.306] Please remember your password!
Generated account 0x5e97870f263700f46aa00d967821199b9bc5a120
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.
Lecturas adicionales
¿Conoce algún recurso de la comunidad que le haya ayudado? ¡Edite esta página y agréguelo!