Doble gasto significa que un usuario puede gastar dos veces el mismo dinero, como si alguien pudiera usar el mismo billete para hacer dos compras diferentes.
Cuando hablamos de efectivo queda claro que esto no es posible ya que una vez que alguien compra con un billete y se lo entrega al vendedor, ya no puede volver a usarlo para otra compra. Pero si hablamos de dinero electrónico, uno podría “copiar” el dinero que gasta para usarlo en otra compra.
El problema del doble gasto en el uso de monedas digitales “no bancarizadas” fue la piedra en el zapato de esta tecnología hasta que Satoshi Nakamoto pudo encontrar una solución definitiva a través de lo que se llama consenso descentralizado.
Todos los nodos que integran la red Bitcoin tienen en su poder una copia actualizada de la base de datos de transacciones que se remonta hasta sus inicios el 3 de Enero de 2009. Cada una de las transacciones que se hicieron, desde la primera hasta la última, son conocidas por toda la red.
El consenso descentralizado busca que todos los nodos verifiquen y validen de manera individual cada una de las transacciones que tienen en su base de datos o cadena de bloques, una vez más, desde la primera hasta la última. Y como todos los nodos tienen la misma copia de esta base de datos, cuando un nuevo bloque de transacciones es creado, es necesario que la mayoría de los nodos estén de acuerdo con las nuevas transacciones que se suman a la cadena de bloques, si este acuerdo no se concreta, el bloque completo es descartado y el proceso vuelve a comenzar.
En rigor, el rollo que hubo la semana pasada y que hizo circular rumores de un error en el sistema es un escenario que está previsto desde el diseño, para el cual existe una solución que se produce de manera automática y que se llama reorganización de bloques.
Todas las transacciones que se hacen deben ser validadas por TODA la red, la validación se realiza en lotes o grupos de transacciones, y cada lote se valida en promedio cada 10 minutos.
Este proceso se llama “minería” y está programado de manera premeditada cada 10 minutos con el fin de que los mineros tengan que incurrir en un gasto de electricidad considerable para que se comporten de forma honesta, un minero intenta hacer validar un lote de transacciones en su propio beneficio modificando las transacciones reales, el resto de la red detectaría estas modificaciones y descartaría el lote completo, de esta forma el minero pierde ese costo eléctrico sin conseguir un beneficio económico.
La necesidad de que toda la red tenga que acordar que un lote de transacciones es válido constituye uno de los pilares dentro de la seguridad de bitcoin.
Debido a que los lotes de transacciones se validan cada 10 minutos es necesario contar con un espacio de memoria donde se puedan guardar todas las transacciones realizadas pero que aún no se validaron, ese lugar se llama mempool o dicho en criollo, la pileta de transacciones.
La red Bitcoin está compuesta por nodos o computadoras que se ocupan de verificar y validar las transacciones que se hacen, y es muy importante entender la diferencia entre verificar y validar ya que son dos procesos diferentes. Existen dos tipos de participantes en la red y que realizan este trabajo, los mineros y los nodos validadores.
Los mineros: son aquellos equipos que toman grupos de transacciones de esta pileta o mempool, las verifican de manera individual, las agrupan en un lote, y crean lo que se llama un “bloque de transacciones”, para este momento el bloque de transacciones todavía no está validado por la red y por lo tanto no son transacciones ejecutadas y finalizadas, es por eso que este bloque es llamado “bloque candidato”. Un bloque candidato es un bloque propuesto por un minero, el cual contiene un grupo de transacciones que ya fueron verificadas de manera individual y un puñado de datos adicionales que son necesarios para presentar a los nodos validadores pero que todavía no fue sumado a la cadena de bloques.
Cuando un minero crea un bloque candidato válido, debe convencer a todos los nodos validadores en la red de que su bloque es correcto, que cumple con todos los requerimientos necesarios y que puede ser sumado a la cadena de bloques existente.
Debido a que existen miles de equipos mineros, todos compiten al mismo tiempo por la posibilidad de sumar un nuevo bloque a la cadena. El minero que logre convencer a todos los nodos validadores y sumar su bloque candidato a la cadena de bloques, será recompensado por su trabajo con un pago en bitcoin, y permitirá la confirmación y finalización de todas las transacciones contenidas en su bloque.
La cadena de bloques es una base de datos compuesta por una pila de bloques de transacciones que los nodos validadores fueron agregando, uno a uno, cada 10 minutos y de manera constante e ininterrumpida desde el 3 de Enero de 2009. Al momento de escribir esta publicación la cadena de bloques está compuesta por 667.618 bloques.
Nodos validadores: son aquellos equipos que mantienen una copia completa de la cadena de bloques y se ocupan de validar los bloques creados por los mineros antes de sumarlos a la cadena de bloques. Cada 10 minutos en promedio se suma un nuevo bloque con nuevas transacciones, y cada nodo validador usa su copia de la cadena de bloques como referencia para verificar si el nuevo bloque que el minero propone agregar es válido o debe ser descartado por algún motivo.
Debido a que Bitcoin es una red de alcance mundial, hay miles de nodos validadores en todo el globo, el modo de hablar que tienen los equipos entre sí es algo como de “alcance vecinal”, cuando un minero genera un bloque candidato, envía este bloque a sus nodos validadores vecinos, los vecinos son aquellos nodos que se encuentran geográficamente más cerca al minero, estos vecinos reciben entonces el bloque candidato, verifican sus transacciones, y lo validan de manera individual, si cumple con los todos los requisitos, es enviado a sus vecinos más cercanos, los cuales hacen también realizan una verificación individual y el ciclo continúa hasta alcanzar toda la red a través de un proceso de propagación llamado flooding o “inundación”. La dinámica de este proceso permite descartar al instante cualquier bloque inválido sin tener la necesidad de propagarlo por toda la red, evitando tráfico innecesario y haciendo el sistema más eficiente y seguro.
La reorganización de bloques es la solución a un escenario que se denomina “bifurcación de consenso”, la cual se produce cuando la mitad de la red se sincronizó sumando a la cadena el bloque propuesto por el minero A, mientras que la otra mitad lo hizo sumando a su cadena el bloque propuesto por el minero B.
Recordemos que esto se da debido a que los nuevos bloques no se propagan a la red de una sola vez, sino que van sincronizándose entre sus vecinos, entonces puede darse la situación que un minero en Argentina esté sincronizando su bloque candidato con sus vecinos en la región occidental, mientras que en la otra punta del mundo, otro minero en China esté sincronizando otro bloque candidato pero con sus propios vecinos en la región oriental.
Para el momento en que el flooding concluye, la mitad de la red cree que se debe sumar el bloque A, mientras que la otra mitad cree que se debe sumar el bloque B como último bloque válido en la cadena, entonces tenemos en ese momento dos posibles cadenas completas y válidas.
La solución a este escenario se da de manera orgánica y con el tiempo, para el momento en que un minero proponga un nuevo bloque válido para ser sumado a la cadena de bloques 10 minutos más tarde y el proceso de flooding vuelva a iniciarse, eventualmente será un solo bloque el que llegue primero a replicarse en toda la red. Si el nuevo bloque se replica más rápido sobre la cadena que contiene en la parte superior el bloque A, entonces la otra cadena será descartada y las transacciones que contenían el bloque B volverán a la pileta de transacciones o mempool a la espera de volver a ser recogidas por otro minero y sumarlas a un nuevo bloque candidato, si por el contrario esto sucede con la cadena cuyo bloque superior es el bloque B, entonces la cadena con el bloque A será la descartada, y las transacciones contenidas en el bloque A vuelven al mempool a la espera de ser confirmadas.
Debido a que los nodos validadores tienen la misma copia de la cadena de bloques, cuando se produce una bifurcación de consenso que luego se resuelve, lo único que se descarta es el último bloque que se estaba proponiendo para sumar a la cadena, el resto de los bloques y las transacciones anteriores permanecen intactas e inmutables.
El algoritmo de consenso de bitcoin determina que siempre debe tomarse como válida la cadena de bloques con mayor cantidad de prueba de trabajo efectiva, esto significa que cuando exista una bifurcación de consenso, ésta se resolverá en términos de probabilidad durante el minado del siguiente bloque 10 minutos más tarde, en ese momento los nodos validadores elegirán como válida la cadena de bloques más larga, que es justamente la que se replicó por toda la red más rápidamente con el nuevo bloque minado.
Las posibilidades de que exista una bifurcación de consenso son muy bajas y disminuyen exponencialmente con el tiempo. El último evento registrado antes del que ocurrió la semana pasada fue hace unos 3 meses.
La probabilidad de que exista una bifurcación de 3 bloques es de una vez cada varios años, aunque hasta el día de hoy nunca ocurrió.
La probabilidad de que exista una bifurcación de 4 bloques es de una vez cada varias décadas.
La probabilidad de que exista una bifurcación de 5 bloques es de una vez cada cientos de años.
La probabilidad de que exista una bifurcación de 6 bloques es de una vez cada miles de años
+20 años en infraestructura IT, consultoría y tecnologías disruptivas.
Diplomado en Cripto economías, Blockchains, Criptomonedas y Contratos inteligentes – Instituto Tecnológico de Buenos Aires.
+10 años de experiencia en trading de acciones, futuros financieros y criptoactivos.