Una de las principales preocupaciones de cualquier desarrollador de criptomonedas es el problema del doble gasto. Esto se refiere a la incidencia de que un individuo gaste un saldo de esa criptomoneda más de una vez, creando efectivamente una disparidad entre el registro de gastos y la cantidad de esa criptomoneda disponible, así como la forma en que se distribuye.
El tema del doble gasto es un problema que el efectivo no tiene; Si paga un sándwich con un billete de $ 10 y entrega ese billete al fabricante del sándwich, no puede darse la vuelta y gastar esos mismos $ 10 en otra parte. Sin embargo, una transacción que utiliza una moneda digital como bitcoin se produce de forma totalmente digital. Esto significa que es posible copiar los detalles de la transacción y retransmitirlos de modo que un solo propietario pueda gastar el mismo BTC varias veces. A continuación, examinaremos cómo los desarrolladores de criptomonedas se han asegurado de que no se produzca el doble gasto.
CONSEJOS CLAVE
- Un problema técnico que surge con la noción de moneda digital es la capacidad de alguien para duplicar el dinero digital y gastarlo simultáneamente en dos o más lugares.
- Este problema de ‘doble gasto’ se evita en las criptomonedas basadas en blockchain como Bitcoin mediante el uso de un mecanismo de consenso conocido como prueba de trabajo (PoW).
- Este PoW lo lleva a cabo una red descentralizada de ‘mineros’ que no solo aseguran la fidelidad de las transacciones pasadas en el libro mayor de blockchain, sino que también detectan y previenen el doble gasto.
Entendiendo la Blockchain
La cadena de bloques que sustenta una moneda digital como bitcoin no puede evitar el doble gasto por sí sola. Más bien, todas las diferentes transacciones que involucran la criptomoneda relevante se publican en la cadena de bloques, donde se verifican y protegen por separado mediante un proceso de confirmación. En el caso de bitcoin y muchas otras criptomonedas, las transacciones que se han confirmado de esta manera se vuelven irreversibles; se publican públicamente y se mantienen a perpetuidad.
Bitcoin fue la primera moneda digital importante en resolver el problema del doble gasto. Lo hizo implementando este mecanismo de confirmación y manteniendo un sistema de contabilidad universal común. De esta manera, la cadena de bloques de bitcoin conserva registros de transacciones con sello de tiempo que se remontan a la fundación de la criptomoneda en 2009.
En términos de Bitcoin, un “bloque” es un archivo de datos registrados de forma permanente. Todas las transacciones recientes se escriben en bloques, al igual que un libro mayor de transacciones de acciones en una bolsa. La información de los bloques se agrega al libro mayor cada pocos minutos; todos los nodos de la red mantienen una copia del libro mayor de blockchain. Los usuarios pueden navegar por la cadena de bloques para bitcoin y revisar las transacciones solo en términos de cantidad. Los detalles sobre las identidades del comprador y el vendedor en cualquier transacción están protegidos por un cifrado de alto nivel, que también protege el libro mayor de la manipulación de fuentes externas. Cuando se actualiza el libro mayor de blockchain, también lo son todas las carteras de bitcoin.
Lidiar con el doble gasto
Imagina que tienes 1 BTC e intentas gastarlo dos veces en dos transacciones separadas. Puede intentar hacer esto enviando el mismo BTC a dos direcciones de billetera bitcoin separadas. Ambas transacciones luego pasarán al grupo de transacciones no confirmadas. La primera transacción se aprobaría mediante el mecanismo de confirmación y luego se verificaría en el bloque siguiente. Sin embargo, la segunda transacción sería reconocida como inválida por el proceso de confirmación y no sería verificada. Si ambas transacciones se extraen del grupo para su confirmación simultáneamente, la transacción con el mayor número de confirmaciones se incluirá en la cadena de bloques, mientras que la otra se descartará.
Si bien esto aborda de manera efectiva el problema del doble gasto, no está exento de problemas. Por ejemplo, el destinatario previsto de la segunda transacción (fallida) no participaría en la falla de la transacción y, sin embargo, esa persona no recibiría el bitcoin que había anticipado. Muchos comerciantes esperan al menos 6 confirmaciones de una transacción (lo que significa que se agregaron seis bloques posteriores de transacciones a la cadena de bloques después de la transacción en cuestión). En este punto, el comerciante puede asumir con seguridad que la transacción es válida.
Quedan otras vulnerabilidades en este sistema que podrían permitir que se produzcan ataques de doble gasto. Por ejemplo, si un atacante de alguna manera puede controlar al menos el 51% del poder de la red, puede cometer el doble de gastos. Si un atacante pudiera de alguna manera obtener el control de tanta potencia computacional, podría revertir las transacciones y crear una cadena de bloques privada separada. Sin embargo, el rápido crecimiento de bitcoin prácticamente ha asegurado que este tipo de ataque sea imposible.
Prueba de trabajo y ‘minería’ explicada
Ahora, pongámonos un poco más técnicos. La forma en que los usuarios detectan la manipulación, como un intento de gastar dos veces en la práctica, es a través de hashes, largas cadenas de números que sirven como prueba de trabajo (PoW). Ponga un conjunto de datos dado a través de una función hash (bitcoin usa SHA-256), y solo generará un hash. Sin embargo, debido al “efecto de avalancha”, incluso un pequeño cambio en cualquier parte de los datos originales resultará en un hash totalmente irreconocible. Cualquiera que sea el tamaño del conjunto de datos original, el hash generado por una función determinada tendrá la misma longitud. El hash es una función unidireccional: no se puede utilizar para obtener los datos originales, solo para verificar que los datos que generaron el hash coincidan con los datos originales.
Generar cualquier hash para un conjunto de transacciones bitcoin sería trivial para una computadora moderna, por lo que para convertir el proceso en “trabajo”, la red bitcoin establece un cierto nivel de “dificultad”. Esta configuración se ajusta para que se “extraiga” un nuevo bloque, que se agrega a la cadena de bloques mediante la generación de un hash válido, aproximadamente cada 10 minutos. El ajuste de la dificultad se logra estableciendo un “objetivo” para el hash: cuanto menor sea el objetivo, menor será el conjunto de hashes válidos y más difícil será generar uno. En la práctica, esto significa un hash que comienza con una cadena larga de ceros: el hash para el bloque # 429818, por ejemplo, es 000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d. Ese bloque contiene 2,012 transacciones que involucran poco más de 1,000 bitcoins, así como el encabezado del bloque anterior. Si un usuario cambia el monto de una transacción por 0.0001 bitcoins, el hash resultante sería irreconocible y la red rechazaría el fraude.
Dado que un determinado conjunto de datos solo puede generar un hash, ¿cómo se aseguran los mineros de generar un hash por debajo del objetivo? Alteran la entrada agregando un número entero, llamado nonce (“número usado una vez”). Una vez que se encuentra un hash válido, se transmite a la red y el bloque se agrega a la cadena de bloques.
La minería es un proceso competitivo, pero es más una lotería que una carrera. En promedio, alguien generará una prueba aceptable de trabajo cada diez minutos, pero quién será es una incógnita. Los mineros se agrupan para aumentar sus posibilidades de minar bloques, lo que genera tarifas de transacción y, por un tiempo limitado, una recompensa de bitcoins recién creados.
La prueba de trabajo hace que sea extremadamente difícil alterar cualquier aspecto de la cadena de bloques, ya que tal alteración requeriría volver a extraer todos los bloques posteriores. También dificulta que un usuario o grupo de usuarios monopolice la potencia informática de la red, ya que la maquinaria y la potencia necesarias para completar las funciones hash son caras.