Bitcoin

¿Cómo Se Validan Las Transacciones De Bitcoin?

Cómo Se Validan Las Transacciones De Bitcoin

La red de Bitcoin utiliza ingeniosamente un mecanismo para resolver el problema de doble gasto, que básicamente permite crear un sistema monetario que no requiere de un tercero para verificar las transacciones (como lo sería un banco).

Se dice que el sistema es sin confianza, y para poder conseguirlo necesita de los mineros.

Viéndolo de forma muy resumida, un minero es un ordenador dedicado a la tarea exclusiva de validar transacciones dentro de la red, prohibiendo así que los malos actores participen.

Las transacciones sabemos que son aseguradas criptográficamente, y son enviadas a la red para ser comunicadas a los mineros. Estos luego toman algunas de ellas y las integran en un bloque de Bitcoin.

A partir de allí realizan un proceso matemático que les permite verificar el bloque y así poder agregar la cadena de otros bloques que integran la blockchain.

Por esto, los mineros son recompensados con nuevos BTC creados en ese bloque, además de las comisiones que reciben de las transacciones, y todo por aportar recursos computacionales a la red, haciéndola más segura.

Esto sería un breve resumen de como son validadas, pero es interesante profundizar en otros temas, como ese problema matemático que deben resolver, para entender como las transacciones se validan.

El bloque y el hash

Los dos grandes componentes de un bloque son la lista de transacciones y la cabecera.

La cabecera está compuesta de:

Bitcoin utiliza un algoritmo de hashing llamado SHA-256, que transforma la información que ingresamos en esta función en un número de 256 bits.

Esto significa que podemos ingresar cualquier tipo de información en el algoritmo y recibiremos un número de 256 bits único que identifica a esa información.

Por ejemplo, si ingresamos el nombre de esta web (criptotario) obtenemos:

fcb0f8294feb79131321d3bb38934e97315c808c1b5d19e3c07b13d0b9b5baa3

Sin embargo, si cambiamos cualquier carácter del nombre o agregamos simplemente uno nuevo, incluso si capitalizamos la primera letra, obtendremos algo completamente diferente (Criptotario):

64c107e7d001846a0823c402e553cb1bd43c16fdf2ae67cc98baf129329eb19b

Como ven, los dos hashes (que están representando a su vez en formato hexadecimal, por eso las letras) no tienen ninguna relación entre sí.

Esto implica que no podemos utilizar la función de hash SHA-256 para conseguir la entrada a partir del resultado. Pero si podemos volver a ingresar la misma información y comprobar si obtenemos el mismo resultado.

Este es un concepto muy importante detrás de la tecnología blockchain.

Supongamos que tenemos dos bloques, el A y el B. Primero el A es agregado a la red. Los mineros reúnen una serie de transacciones y las integran al bloque A, luego se genera el hash de A, que es el número que lo identifica inequívocamente.

Luego otro minero crea el bloque B que es construido encima del bloque A. Para eso elige las transacciones que desea integrar al bloque y también agrega el hash de A al bloque B.

Ahora el minero genera el hash de B que tienen el conjunto de transacciones más el hash de A.

Esquema de bloques de Bitcoin

Ahora, si una persona quisiera hacer algo incorrecto, como modificar algún pequeño detalle de una transacción de A, entonces el hash de A cambiaría completamente, que también haría que el hash de B lo hiciera. Esto se debe a que la información para crear el hash de B cambio.

Por tanto, como requiere mucho poder computacional crear un bloque y agregarlo a la red (lo veremos más adelante), requerirá una enorme cantidad de poder de cálculo para no solo minar el bloque A, sino también el B.

Todo esto el atacante lo debe hacer antes de que otro minero descubra el bloque C, si no la complejidad se va apilando.

Problema matemático

No es que el minero agrega cualquier hash al bloque y con eso ya basta para que sea agregado a la red. En función de que el minero pueda encontrar el próximo bloque es necesario que gane una competencia en la cual debe encontrar el hash correcto.

Uno que se obtiene a partir de resolver un difícil problema matemático.

Debido a que no se puede comenzar con un hash objetivo y trabajar hacia atrás para encontrar que información es necesario modificar para obtener el resultado, el protocolo de Bitcoin utiliza esta característica para crear el problema a resolver.

El problema estipula que el primer minero en producir el hash con una cierta cantidad de 0 por delante es el ganador del próximo bloque y es capaz de agregarlo a la red.

Sabemos que un hash es simplemente una cadena de números de 256 bits, que usualmente es representada en formato hexadecimal.

Por tanto, este número puede comenzar con cualquier número de 0 a 9 o letras de A a F.

Las combinaciones posibles para encontrar de forma aleatoria un número que tenga una serie de 0 al principio aumenta exponencialmente a medida que la dificultad requiere que sean más los 0 necesarios.

Por ejemplo, si creamos un hash y este tiene un 0 adelante, pero la dificultad nos indica que deben ser 3, entonces debemos seguir probando.

Ejemplo de hash de Bitcoin

El problema es que a partir de ese hash no podemos continuar y encontrar los otros dos, debemos seguir creando otros hash hasta que finalmente encontremos uno con tres 0 por delante.

El nonce

Pero ahora te preguntarás como hace un minero para obtener un hash diferente si siempre ingresa la misma información. Es decir, las transacciones no cambian y otra información como el hash del bloque anterior tampoco.

Para eso es necesario un valor que no tengan más uso que simplemente hacer que el hash cambien cada vez. Es lo que se conoce como nonce o número usado una sola vez.

El nonce es un número agregado a cada bloque como una variable que el minero puede modificar para obtener distintos hashes y así poder resolver el problema matemático que vimos antes.

De esta forma podemos ir probando distintos nonces hasta que finalmente lleguemos al objetivo necesario.

Este nonce es enviado dentro del bloque, así puede ser utilizado con el resto de la información para que cualquiera utilice una función de hash y compruebe que el resultado es el correcto.

Dificultad de minería

Debido a que esta es una competencia muy lucrativa, más cuando el precio de Bitcoin sube, es normal que más persona intente participar.

Esto significa que habrá más recursos computacionales trabajando en la red para resolver este problema, el de encontrar el nonce.

Por otra parte, si se quiere obtener una ventaja sobre el resto, se utilizaran equipos más eficientes y con mayor capacidad (medida en hashes por segundos o poder de hash) para encontrar más rápido la solución.

A medida que aumenta el poder de hash total de la red, el problema cada vez se resuelve más rápido. Por eso es necesario tener un mecanismo para poder aumentar la dificultad (también para disminuirla).

El protocolo de Bitcoin tiene el objetivo de que los bloque se agregue a un ritmo de uno cada 10 minutos o 6 por hora.

En función de mantener este flujo de nuevos bloques el protocolo tiene un parámetro llamado dificultad que se ajusta hacia arriba o hacia abajo dependiendo de que tan rápido o lento se agregan nuevos bloques.

Este cálculo se efectúa cada 2.016 bloques (aproximadamente 2 semanas), entonces se revisa estos últimos bloques y se mide que tanto les costó resolver el problema. A partir de allí ajusta la dificultad para conseguir acercarse al valor ideal.

Si quieres saber más sobre la dificultad de la minería lee este artículo.

La recompensa de bloque y las comisiones

Los incentivos por utilizar equipos de minería y consumir grandes cantidades de energía para verificar las transacciones de los bloques son las recompensas de bloques y las comisiones de las transacciones.

Por cada bloque que un minero mina de forma correcta este recibe una recompensa en forma de criptomonedas. Al principio la misma era de 50 BTC por bloque, pero cada 4 años esta se reduce a la mitad en un evento llamado halving.

La idea es que esta recompensa disminuya lo suficiente como para que en el futuro no se generen nuevos bitcoins y así la base monetaria sea constante.

Actualmente la recompensa es de 6,25 BTC tras el último halving realizado en 2020.

La segunda forma de incentivo es con las comisiones que las personas pagan para que sus transacciones sean enviadas.

El protocolo de Bitcoin establece en su código que el tamaño máximo del bloque sea de 1 MB (aunque en la realidad es un poco más gracias a algunos cambios que se han hecho).

Si el tamaño es fijo, pero la demanda de transacciones aumentan, entonces es necesario una forma de priorizar las transacciones que se incluyen en cada bloque.

Aquí es donde las comisiones cobran importante. Cuanto más altas son las comisiones que pagamos, más interés tendrán los mineros e integrarlas a sus bloques.

Minería en solitario vs. grupo

A medida que la red ha evolucionado, y la popularidad demanda de minar ha crecido con el tiempo, se ha vuelto casi imposible para una persona en solitario descubrir un bloque nuevo y obtener la recompensa.

La única forma de competir a día de hoy como un minero solitario es comprando una gran cantidad de poder de hashing, lo cual es bastante costoso.

Sin embargo, para aquellos que no están dispuestos a desembolsar tanto dinero, existe una solución más atractiva si quieren formar parte de la red y ganar algo. Esta es unirse a un grupo de minería.

Estos, también llamados pools de minería son básicamente eso, un grupo de mineros que trabajan juntos para conseguir de forma colectiva el próximo bloque.

Haciendo esto, conseguirán de forma más frecuente bloques, dividiendo las recompensas entre los participantes. Esto permite que alguien que no se plantea esto como un proyecto serio y lo hace más como hobby, pueda participar y ganar algo.

Cada miembro del grupo realizará sus tareas de forma individual, buscar el nonce que haga correcto al hash. Sin embargo, existe una forma de seguimiento que controla la contribución que hace cada minero a este pool. Con esto, cuando se descubra el bloque, se puede calcular la contribución que cada minero hizo para pagarle en forma proporcional.

Supongamos que la dificultad es de 17 ceros. Entonces, el grupo tendrá una mini versión de esta competencia entre los miembros, donde la dificultad será mucho menor, como por ejemplo 3 ceros.

Así, cada vez que un miembro encuentra un nonce que se encuentra entre los 3 y 17 ceros, este recibirá una participación.

Esta participación es la prueba de que el miembro está intentando resolver el problema real.

Una vez que un miembro ha encontrado la solución, el grupo mira cuantas participaciones tiene cada uno y distribuye las recompensas y comisiones de forma proporcional.

Criptotario

Me llamo Martin, soy ingeniero y apasionado de las inversiones y la tecnología. Me gusta mucho leer libros y todo aquello que me haga mejorar día a día.

Agrega un Comentario

Haz clic aquí para añadir un comentario