Una cuenta de Ethereum es una entidad con un saldo de ether (ETH) que puede enviar transacciones en Ethereum. Las cuentas pueden ser controladas por el usuario o implementadas como contratos inteligentes.
PRERREQUISITOS
Las cuentas son un tema muy amigable para los principiantes. Pero para ayudarlo a comprender mejor esta página, le recomendamos que primero lea nuestra introducción a Ethereum.
TIPOS DE CUENTA
Ethereum tiene dos tipos de cuenta:
• De propiedad externa: controlado por cualquiera que tenga las claves privadas
• Contrato: un contrato inteligente implementado en la red, controlado por código. Más información sobre contratos inteligentes
Ambos tipos de cuenta tienen la capacidad de:
• Recibir, retener 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/token
Contrato
• La creación de un contrato tiene un costo porque está utilizando almacenamiento en red
• Solo puede enviar transacciones en respuesta a la recepción de una transacción
• Las transacciones de una cuenta externa a una cuenta de contrato pueden activar un código que puede ejecutar muchas acciones diferentes, como transferir tokens o incluso crear un nuevo contrato.
UNA CUENTA EXAMINADA
Las cuentas de Ethereum tienen cuatro campos:
• nonce: un contador que indica el número de transacciones enviadas desde la cuenta. Esto asegura que las transacciones solo se procesen una vez. En una cuenta de contrato, este número representa el número de contratos creados por la cuenta.
• saldo: el número 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 Ethereum (EVM). Las cuentas de contrato tienen fragmentos de código programados que pueden realizar diferentes operaciones. Este código 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 estatal bajo sus hashes correspondientes para su posterior recuperación. Este valor hash se conoce como codeHash. Para 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 del hash de Keccak de 256 bits del 256 Claves enteras de -bit a los valores enteros de 256 bits codificados en RLP. Este trie codifica el hash del contenido de almacenamiento de esta cuenta y está vacío de forma predeterminada.
CUENTAS DE PROPIEDAD EXTERNA Y PARES DE CLAVE
Una cuenta se compone de un par de claves criptográficas: pública y privada. Ayudan a probar que el remitente realmente firmó una transacción y evitan las falsificaciones. Su clave privada es lo que usa para firmar transacciones, por lo que le otorga la custodia de los fondos asociados con su cuenta. Realmente nunca tienes criptomonedas, tienes claves privadas: los fondos siempre están en el libro mayor de Ethereum.
Esto evita que los actores maliciosos transmitan transacciones falsas porque siempre puede verificar el remitente de una transacción.
Si Alice quiere enviar ether desde su propia cuenta a la cuenta de Bob, debe 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 probar que originalmente inició la solicitud de transacción. Sin mecanismos criptográficos, un adversario malicioso, Eve, podría simplemente transmitir públicamente una solicitud que se parece 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 CUENTA
Cuando desee crear una cuenta, la mayoría de las bibliotecas le generarán una clave privada aleatoria.
Una clave privada se compone de 64 caracteres hexadecimales y se puede cifrar con una contraseña.
Ejemplo:
fffffffffffffffffffffffffffffffffebaaedce6af48a03b bfd25e8cd036415f
La clave pública se genera a partir de la clave privada mediante el algoritmo de firma digital de curva elíptica. 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.
Aquí hay un ejemplo de cómo crear una cuenta en la consola usando personal_newAccount de GETH
1> personal.nuevaCuenta()
2 Frase de contraseña:
3Repita la frase de contraseña:
4"0x5e97870f263700f46aa00d967821199b9bc5a120"
5
6> personal.nuevaCuenta("h4ck3r")
7"0x3d80b31a78c30fc628f20b2c89d7ddbf6e53cedc"
8
Documentación GETH
Es posible derivar nuevas claves públicas de su clave privada, pero no puede derivar una clave privada de claves públicas. Esto significa que es vital mantener una clave privada segura y, como sugiere el nombre, PRIVADA.
Necesita una clave privada para firmar mensajes y transacciones que generen una firma. Luego, otros pueden tomar la firma para derivar su clave pública, lo que demuestra el autor del mensaje. En su aplicación, puede usar 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 Ethereum Blockchain. La dirección proviene de la dirección del creador y la cantidad de transacciones enviadas desde esa dirección (el "nonce").
UNA NOTA SOBRE CARTERAS
Una cuenta no es una billetera. Una cuenta es el par de claves para una cuenta de Ethereum propiedad del usuario. Una billetera es una interfaz o aplicación que le permite interactuar con su cuenta Ethereum.