Descripción general
Para realizar cualquier tipo de transacción en la cadena de bloques de Bitcoin, necesitará una clave pública o una dirección de Bitcoin. En esta guía, cubriremos cómo generar una nueva dirección de Bitcoin en JavaScript usando CyrptoCoinJS.
¿Qué es una dirección de Bitcoin?
Puede pensar en una dirección de Bitcoin como un número de cuenta para su cuenta bancaria. La principal diferencia es que se usa para dirigir bitcoin durante una transacción en lugar de almacenarlo. Una dirección de Bitcoin es una cadena que combina letras y dígitos que representan un destino en la red de Bitcoin. Cada vez que alguien quiera recibir Bitcoin, idealmente generará una nueva dirección única de un solo uso para cada transacción utilizando una aplicación o código de billetera. Hay tres tipos de direcciones de Bitcoin:

1. Legacy (P2PKH): Legacy es la dirección de bitcoin original; todos comienzan con uno. Es el más compatible y soportado por monederos. Ejemplo: 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2

2. Nested SegWit (P2PSH): Nested SegWit es una mejora en Legacy; tienen una tarifa de transacción un 40 % menor que las direcciones heredadas y tienen varias firmas. Comienza con 3.
Ejemplo: 3EktnHQD7RiAE6uzMj2ZifT9YgRrkSgzQX

3. Native SegWit (Bech32): SegWit, abreviatura de Segregated Witness, tiene tamaños de transacción más pequeños; pueden ahorrar el 80% de las tarifas de transacción en comparación con Legacy. Comienzan con bc1.
Ejemplo: bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
¿Cómo se genera una dirección Bitcoin?
• Primero se genera una cadena aleatoria de clave privada que consta de 64 caracteres (hexadecimales) (256 bits / 32 bytes), puede ser cualquier número entre 0 y ≤ n-1, donde n es una constante (n = 1.1578*1077) .
Una cadena de números de 256 bits que es menor que n se envía al algoritmo hash SHA256 que luego genera un nuevo número de 256 bits. Esta es nuestra clave privada.
Por ejemplo:


Nombre:  Capturar 1.PNG
Visitas: 143
Tamaño: 6.5 KB


• Una clave pública de 128 caracteres (hexadecimales) (64 bytes) se deriva luego de la clave privada generada utilizando, Tiene '04' como prefijo. La clave pública se genera a partir de la clave privada utilizando secp256k1, que es una curva de ECDSA (algoritmo de firma digital de curva elíptica). Entonces, una clave pública se genera usando una fórmula P = p*G, donde p es la clave privada y G es el punto generador. El punto generador G es un punto definido en la curva secp256k1.
Por ejemplo:


Nombre:  Capturar 2.PNG
Visitas: 59
Tamaño: 7.1 KB


Nombre:  Capturar 3.PNG
Visitas: 144
Tamaño: 79.5 KB


• Se genera una dirección de 34 caracteres aplicando el algoritmo hash SHA256 en la clave pública y luego calculando el hash RIPEMD160 del resultado. A = RIPEMD160(SHA256(P)), donde P es la clave pública y A es la dirección de Bitcoin. Las direcciones de Bitcoin siempre se codifican como Base58Check, que utiliza 58 caracteres (sistema numérico Base58) y una suma de verificación para evitar ambigüedades, errores en la transcripción de direcciones y ayudar en la legibilidad humana.
Por ejemplo:


Nombre:  Capturar 4.PNG
Visitas: 142
Tamaño: 6.4 KB


Nota: Se puede generar una clave privada para la clave pública, pero la clave pública no se puede volver a convertir en clave privada ya que el algoritmo es una función unidireccional.
¿Qué es CryptoCoinJS?
CryptoCoinJS es una biblioteca de JavaScript que lo ayuda a interactuar con diferentes criptomonedas como Bitcoin, Litecoin y Dogecoin.
Generando una dirección Bitcoin en JavaScript
Primero, necesitaremos instalar la biblioteca CryptoCoinJs. Usaremos npm (Node Package Manager) que viene con node.js, para instalar la biblioteca.

Verifiquemos si tenemos instalado node.js en nuestro sistema escribiendo lo siguiente en nuestro terminal/cmd:

Nombre:  Capturar 5.PNG
Visitas: 140
Tamaño: 3.5 KB

Esto debería devolver la versión instalada de node.js en su sistema. Si falla, descargue e instale la versión LTS de node.js desde su sitio web oficial.

Ahora, creemos un nuevo directorio de proyecto y conviértalo en nuestro directorio de trabajo


1 mkdir Bitcoin

2 cd bitcoin


Para instalar la biblioteca, escriba lo siguiente en su terminal/cmd:


1
npm yo moneda

El problema más común en este paso es una falla interna con `node-gyp`. Puede seguir las instrucciones de instalación de node-gyp aquí.

Nota: Deberá hacer que su versión de python coincida con una de las versiones compatibles enumeradas en las instrucciones anteriores si encuentra el problema de node-gyp.

Otro problema común es un caché obsoleto; borre su caché npm simplemente escribiendo lo siguiente en su terminal:


1
limpieza de caché npm

Si todo va bien, CryptoCoinJS se instalará en su sistema.

Ahora abra un editor de texto de su elección y cree un nuevo archivo javascript address.js, y copie y pegue lo siguiente en él:


1 var CoinKey = require('moneda');

2
3 var monedero = nueva CoinKey.createRandom();

4
5 console.log("GUARDE PERO NO COMPARTA ESTO:", wallet.privateKey.toString('hex'));

6 console.log("Dirección:", wallet.publicAddress);


Explicación del código anterior.

Línea 1: Importación de la biblioteca CryptoCoinJS.

Línea 2: Creando una dirección aleatoria con claves usando el método Coinkey.createRandom y almacenándolo en la variable de la billetera.

Line3: Impresión de la clave privada en la consola junto con una advertencia.

Line4: Imprime la dirección a la consola junto con una cadena.

Guarde el archivo de script y ejecútelo con el siguiente comando.


1
dirección de nodo

Dará una salida similar a esta.


Conclusión
¡Felicitaciones por crear su propia dirección de Bitcoin que puede usar para recibir fondos! Hay muchos algoritmos y funciones que se utilizan en conjunto para crear la funcionalidad en el software de su billetera favorita. ¡Ahora conoce una pequeña parte de él y ha echado un vistazo detrás de la cortina para ver el funcionamiento interno usted mismo!

Suscríbase a nuestro boletín para obtener más artículos y guías sobre Ethereum. Si tiene algún comentario, no dude en comunicarse con nosotros a través de Twitter. Siempre puedes chatear con nosotros en nuestro servidor de la comunidad Discord, con algunos de los mejores desarrolladores que jamás hayas conocido