¿Cómo minar Bitcoin usando Python? (Parte – I)

Contenidos

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Introducción

Antes de saltar al mundo de las criptomonedas, necesitamos entender qué es Bitcoin y cómo minar con Python. Si su sistema es antiguo o Python corre más lento que otros idiomas en su máquina local, entonces puede leer esta lista sobre “5 consejos y trucos para acelerar sus programas Python” y luego continuar con este artículo.

¿Qué es un Bitcoin?

77781what20is20a20bitcoin-1937291

Un bitcoin es una forma de moneda en línea que fue creada en enero de 2009 por un hombre misterioso que usa el seudónimo. “Satoshi Nakamoto”. El documento técnico se puede encontrar aquí. La identidad de la persona es un misterio hasta la fecha y Bitcoin en realidad ofrece una tarifa de transacción más baja que un sistema de pago tradicional incluso por una gran cantidad de dinero y todo lo que necesita para enviar dinero a alguien es la dirección de su billetera.

No hay monedas físicas con el nombre bitcoin en ellas, pero todo es virtual y se mantiene en un libro público al que todos tienen el mismo acceso. Todas las transacciones se verifican con una gran cantidad de poder de cómputo y no son emitidas por ningún banco. Son realmente descentralizados y seguros al mismo tiempo. Bitcoin también se conoce comúnmente como «BTC».

Los puntos clave para recordar son:

  • Bitcoin se lanzó en 2009 y es la criptomoneda más grande del mundo por volumen de capitalización de mercado.
  • Bitcoin se comercializa, crea, distribuye y almacena mediante la tecnología blockchain.
  • Se sabe que los precios de Bitcoin son muy volátiles con un crecimiento masivo y caídas.
  • Fue la primera criptomoneda en alcanzar tal popularidad y luego inspiró una lista de otras criptomonedas o también conocidas como «Altcoins».

Analizando Bitcoin

95236analysing20bitcoin-2042363

El ecosistema de Bitcoin está formado por nodos o mineros que ejecutan el código de bitcoin y lo almacenan en la cadena de bloques. Cada blockchain contiene transacciones en ellos y todos tienen todo el blockchain, por lo que pueden acceder y ver los nuevos bloques que se agregan al sistema y es a prueba de manipulaciones.

Cualquiera puede ver las transacciones que ocurren en este momento y hay más de 12000 nodos a partir de enero de 2021 y este número sigue creciendo todos los días. Los bitcoins se almacenan en billeteras con su propia dirección y se administran utilizando la clave pública y la clave privada que usa encriptación para generar cadenas de larga duración. La clave pública se puede considerar como un número de cuenta bancaria o un ID de UPI. Es público y contárselo a los demás no le hará daño. Por otro lado, su clave privada es como su pin de cajero automático o el pin de identificación UPI. Nunca debe revelarlo a nadie más y mantenerlo en privado en todo momento.

¿Qué es la tecnología Peer to Peer?

      ¿Qué es la tecnología Peer to Peer?

Bitcoin fue quizás la primera moneda digital en utilizar tecnología peer-to-peer para crear un sistema de pago instantáneo. Cualquier individuo con suficiente poder de cómputo puede convertirse en minero y procesar transacciones en los bloques. Están motivados por las recompensas que son el lanzamiento de un nuevo bitcoin y las tarifas de transacción que se pagan en bitcoin.

Los mineros juntos forman la autoridad descentralizada que defiende la credibilidad de toda la red bitcoin. También ayuda a vencer la inflación, ya que nunca habrá más de 21 millones de bitcoins y, para fines de enero de 2021, ya se han extraído 18.614.806 bitcoins. Los sistemas de banca central pueden imprimir más moneda cuando lo deseen para que puedan igualar la tasa de crecimiento de los bienes, pero los bitcoins funcionan de acuerdo con el algoritmo y establece la fecha de lanzamiento antes de tiempo para hacer frente de manera efectiva a la inflación.

¿Qué es Bitcoin Mining?

65258bitcoin20mining-4272332

La minería es el proceso mediante el cual los bitcoins se liberan gradualmente para convertirse en parte de la circulación. La minería generalmente se refiere a resolver un enigma matemático computacionalmente difícil. Bitcoin Mining es el proceso de agregar transacciones verificadas a la cadena y la recompensa se reduce a la mitad cada 210,000 bloques que se extraen. En 2009, la recompensa fue de 50 bitcoins por bloque y después de la tercera reducción a la mitad el 11 de mayo de 2020, la recompensa ahora se ha reducido a 6.25 bitcoins.

Se puede usar cualquier especificación de hardware para la minería, pero algunas son más eficientes que otras, como ASIC de circuitos integrados específicos de aplicación o incluso GPU, que superan a la CPU y extraen más rápido que una CPU. Un bitcoin se puede dividir hasta 8 lugares decimales y la unidad más pequeña se conoce como un Satoshi. Si los mineros aceptan el cambio, entonces se puede dividir en más lugares decimales.

¿Qué es Bitcoin Mining?  2

Una transacción de Bitcoin tiene una tarifa de minero adjunta y cada transacción se agrega a una nueva cadena de bloques y luego se crea el siguiente bloque con el hash correcto. Con la clave pública del remitente, el mensaje se puede descifrar y, por lo tanto, nunca comparta su clave privada con nadie.

¿Cómo extraer Bitcoin?

41762bitcoin20mining202-8637603

La minería se logra al encontrar el hash correcto que tiene un número preestablecido de ceros al principio y también significa el nivel de dificultad. Comenzamos con la importación de una biblioteca necesaria.

from bitcoin import *

Si no tiene el paquete, puede instalarlo a través de pip:

pip install bitcoin

Después de eso, necesitamos crear nuestra clave privada y pública, junto con nuestra dirección de billetera. Podemos hacer eso con el siguiente código.

#Generate private key
my_private_key = random_key()
#display private key
print("Private Key: %sn" % my_private_key)
#Generate public key
my_public_key = privtopub(my_private_key)
print("Public Key: %sn" % my_public_key)
#Create a bitcoin address
my_bitcoin_address = pubtoaddr(my_public_key)
print("Bitcoin Address: %sn" % my_bitcoin_address)

Producción :

Private Key: 82bd4291ebaa6508001600da1fea067f4b63998ed85d996aed41df944c3762be
Public Key: 04f85fa7c009dba8d1e6b7229949116f03cb3de0dfaf4d6ef3e6320a278dfc8dd91baf058fcafe0b5fbf94d09d79412c629d19cc9debceb1676d3c6c794630943d
Bitcoin Address: 1FtaFRNgxVqq4s4szhC74EZkJyShmeH5AU

Ahora pasamos a la parte computacional donde usaremos el cifrado SHA256 para encontrar el hash correcto. Importamos la biblioteca y luego hacemos una prueba de lo que realmente significa SHA256.

from hashlib import sha256
sha256("ABC".encode("ascii")).hexdigest()

Producción :

b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78

Cuando ejecuta el mismo código, obtendrá el mismo código hash para una cadena en particular y, por lo tanto, siempre da una salida definida para una entrada definida. La longitud del hash es 64 y cada dígito es hexadecimal, lo que lo hace igual a 4 bits y, por lo tanto, el número entero es en realidad 256 bits y es por eso que también se conoce como SHA256.

Bitcoin sigue un protocolo en el que el primer número ‘n’ de dígitos debe ser cero. Actualmente, el valor de ‘n’ es 20, pero se lo mostraré usando una ‘n’ más pequeña para que el código finalice la ejecución en tiempo lineal. El texto sobre el que aplicaría SHA256 está compuesto por el número de bloque, los detalles de transición, el valor hash anterior y, dado que los 3 valores anteriores son constantes para un bloque y no se pueden cambiar, se introduce un nuevo valor llamado ‘Nonce’. Nuestro objetivo es encontrar el valor de Nonce para que el hash del bloque produzca el número requerido de ceros al principio de acuerdo con el protocolo.

74077mining-5040852

Comenzaremos a codificar tomando una transacción ficticia junto con el último número de bloque y el valor hash anterior. Comenzaremos con 4 ceros al principio y avanzaremos hacia arriba y se dará cuenta de por qué la minería de bitcoins es un trabajo difícil. Comenzamos definiendo un SHA256 y una función mine a la que llamaríamos.

def SHA256(text):
  return sha256(text.encode("ascii")).hexdigest()
MAX_NONCE=10000000        # You can also use a while loop to run infinitely with no upper limit
def mine(block_number,transaction,previous_hash,prefix_zeros):
  prefix_str="0"*prefix_zeros
  for nonce in range(MAX_NONCE):
    text= str(block_number) + transaction + previous_hash + str(nonce)
    hash = SHA256(text)
    # print(hash)
    if hash.startswith(prefix_str):
      print("Bitcoin mined with nonce value :",nonce)
      return hash
  print("Could not find a hash in the given range of upto", MAX_NONCE)

Luego proporcionamos los detalles requeridos y comenzamos a extraer con 4 ceros al comienzo del hash.

transactions=""'
A->B->10
B->c->5
'''
difficulty = 4
import time as t
begin=t.time()
new_hash = mine(684260,transactions,"000000000000000000006bd3d6ef94d8a01de84e171d3553534783b128f06aad",difficulty)
print("Hash value : ",new_hash)
time_taken=t.time()- begin
print("The mining process took ",time_taken,"seconds")

Producción :

Bitcoin mined with nonce value: 36674
Hash value :  000086ae35230f32b08e9da254bd7ba1b351f11d40bde27a7ebd5e7ec9568f8d
The mining process took  0.08681821823120117 seconds

Si cambiamos el valor de dificultad incluso en 1, por lo tanto, será 5, la salida será.

Producción :

Bitcoin mined with nonce value : 2387325
Hash value :  00000f5254db00fa0dde976d53bb39c11f9350292949493943a90610d62c1a5e
The mining process took  4.895745515823364 seconds

Por lo tanto, se puede ver el cambio drástico en el tiempo que toma el mismo código cuando la dificultad aumenta de 4 a 5 y solo sigue aumentando exponencialmente. Por lo tanto, esa es la razón principal por la que extraer un bitcoin requiere tanta energía y poder computacional. Si eso no fuera suficiente, debes ser el primero en encontrar el hash o no serás recompensado. Entonces, también está compitiendo con todos los demás mineros y todo este sistema funciona en el concepto de ‘PoW’ o ‘Prueba de trabajo’.

Notas finales

Discutiremos más sobre cómo conectar los resultados de la minería a una billetera y cómo extraer otras monedas de los mismos o diferentes conceptos en la siguiente parte y si desea un adelanto, puede consultar esto. cuaderno de google collab. Si le gusta mi artículo y desea leer más, puede encontrar todos mis artículos enumerados aquí. Siéntete libre de contactarme en LinkedIn para cualquier consulta o duda.

Gracias por leer hasta el final y Manténgase seguro para todos <3.

Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.