Hola a todos!

En esta oportunidad aprenderemos a crear nuestras Llaves Públicas y Privadas mediante el lenguaje de programación Javascript y la librería Ethers.JS, para dejar un poco el Metamask y el famoso Web3.JS 😉

Llaves públicas y privadas

Explicación breve:

  • Llave Pública: Es la cuenta Ethereum que le entregas a la persona que te va a depositar el ETHER. Cualquiera puede verla, pues con ella solo podrán enviarnos dinero. (La mía es 0x5437Aed318fe45F8fdDAD871C35b39413D2Fb829)
  • Llave Privada: Esta llave es de carácter privado, pues con ella se autorizan las transacciones salientes de cuenta. Si posees esta llave podrás firmar mensajes para validar tu identidad o importar tu Llave Pública en cualquier cliente Ethereum que permita importar Llaves Privadas.

Cuando abrimos cuenta en una casa de cambio como CryptoMarket se nos provee de una cuenta Ethereum, o sea, una Llave Pública, sin embargo no es posible solicitar nuestra Llave Privada y exportar nuestra cuenta Ethereum a otra casa de cambio o un cliente de escritorio.  Ahora de seguro alguno podría pensar:

¿Para que quiero ver la Llave Privada?

Cuando manejas tu Llave Privada puedes realizar acciones un poco más personalizadas sobre la red de Ethereum, pues puedes entre otras cosas:

  1. Enviar tu mismo las transacciones a la red con las cantidades de GAS que tu estimes conveniente. O sea, podrías pagar un poco más y tener una transacción más rápida o simplemente poner menos GAS porque eres tacaño y no tienes apuro en que tu transacción sea validada
  2. Firmar mensajes para validar la posesión de una cuenta Ethereum.

Lo interesante de las Llaves Públicas y Privadas es que solo existe una Llave Privada para cada Llave Pública y viceversa, por lo que nunca habrán dos Llaves Públicas que apunten a la misma Llave Privada ni dos Llaves Privadas que apunten a la misma Llave Pública, lo que las vuelve un elemento con seguridad considerable. A primera vista parece trabalenguas, pero cuando lo comprendes suena bastante bien, ¿Cierto? Pues está por ponerse aún mejor!

Crear cuenta Ethereum con o sin Internet.

Para los efectos de este tutorial utilizaré el lenguaje de programación Javascript junto con una librería llamada Ethers.JS, la cuál hará de este proceso algo muy sencillo 😉 . Para utilizar esta librería tenemos dos opciones:

  1. Descargar Ethers.JS desde su GitHub oficial.
  2. Invocarla desde algún CDN como éste.

En este caso la invocaré desde el CDN, por lo que abriremos nuestro IDE Favorito y crearemos un archivo llamado index.html con el siguiente contenido:

Con esto ya estamos invocando al Ethers.JS, así que manos a la obra!

Podemos conectarnos a alguna API JSON-RPC pública como las de Etherscan e Infura o simplemente correr nuestra propia Blockchain Privada con Ganache, que no requiere conexión a Internet:

¡Con esta sencilla línea ya nos hemos conectado mediante Javascript a nuestro nodo local!

Si no tienes tu nodo propio, entonces te puedes conectar a un nodo Infura o Etherscan mediante

Nuestro siguiente paso es invocar a la función createRandom(), que nos retornará un Objeto que tendrá como atributos los datos de nuestra cuenta Ethereum:

Por lo que ahora la variable cuenta es un Objeto con métodos y atributos, aunque lo que rescataremos son solo los atributos:

  • address: Tu Llave Pública.
  • mnemonic: Combinación de 12 palabras que actúan como llave privada para acceder a tu cuenta.
  • privatekey: Tu Llave Privada. Permite firmar transacciones salientes de tu Llave Pública.

Nuestro index.html final:

Si importamos bien la librería, llamamos bien a nuestro nodo y creamos nuestra variable cuenta, entonces deberíamos ser capaces de ver una salida como ésta (sin censurar, claramente):

Teniendo ya esta información, es de vital importancia que jamás pierdas ni tu Llave Privada ni tu Mnemonic, ya que son los únicos datos mediante los cuales puedes recuperar tu cuenta Ethereum.

¿No entendiste nada? Visita el ejemplo online que preparamos dando clic aquí

Si te quedan dudas o tienes alguna sugerencia respecto al contenido expuesto, por favor escríbenos en los comentarios 😀

Saludos 😀 !