¿Te interesan los contratos inteligentes? ¿Sabes lo que es un desbordamiento de enteros? El desbordamiento de enteros es un problema del mundo de la programación, pero un contrato inteligente es básicamente un programa, por lo que seguramente te interese conocer de qué se trata.
En pocas palabras, si un entero sin signo se almacena en una única celda de memoria de bytes, solo podrá tomar los valores que van de 0 a 255. Por tanto, si no se especifica lo contrario, 255 + 1 = 0, pero, lo que es más preocupante: 0 – 1 = 255. De esta forma procesan sus datos los procesadores modernos.
En muchos lenguajes de programación modernos, el mismo programa controla si ha habido un desbordamiento durante las operaciones aritméticas. De ser así, es muy probable que no fuera lo que el programador tenía en mente, por lo que es mejor interrumpir el programa y asegurarse de que no cause errores más adelante.
Pero ¿qué relación guardan los contratos inteligentes con todo esto?
Este control no se realiza en los contratos inteligentes de Ethereum cuando se procesa dinero. Es decir, si tienes cero tokens y envías uno a un amigo, recibirás un trillón de tokens. Evidentemente, se debería interrumpir el programa de inmediato y cancelar la transacción incorrecta.
Resulta todo un misterio por qué los desarrolladores de Ethereum implementarían su aritmética de esa forma. Pero para que las reglas universales de las matemáticas humanas se apliquen a los contratos inteligentes, cada programador debe añadir más de 100 líneas de código que contengan funciones habituales para la suma, multiplicación, etc.
No obstante, con un trillón en su cuenta, no hay límites. Un estafador podría acceder a una plataforma de intercambio de criptomonedas y comprar todos los bitcoins o ether que desee y a cualquier precio.
Pero esta situación es más que una teoría, pues ya ha ocurrido varias veces con diferentes tipos de criptomonedas. Como norma general, descubrimos el problema en el código cuando el criminal ya ha realizado el truco y ha desaparecido con los bolsillos llenos. Después, nada se puede hacer: los contratos inteligentes están tallados en piedra, no se pueden modificar ni parchar.
Bitcoin y el desbordamiento
A decir verdad, el problema del desbordamiento de enteros no se limita a Ethereum. Bitcoin ya se enfrentó al problema mucho antes.
El desbordamiento de enteros provocó que dos monederos de Bitcoin acabaran con 148 mil millones de bitcoins el 15 de agosto del 2010. Está de más decir que los fundadores (con Satoshi Nakamoto entre ellos) no recibieron muy bien la noticia; modificaron rápidamente el código, solucionaron el error, restauraron el historial financiero e hicieron como si no hubiera pasado nada.
Pero ¿qué significa esto? Pongamos un ejemplo: si yo hubiera comprado bitcoins por el valor de 10000 dólares ese día en concreto, esta restauración hubiese provocado que mis bitcoins volvieran al vendedor y que yo recuperara mis dólares. Pero si la restauración tuviera lugar ahora y no en el 2010, las consecuencias serían enormes, ya que todos los días se mueven alrededor de 5 mil millones de dólares en transacciones de bitcoin.
El precedente, al igual que otros casos, demuestra que, si todo sale según lo establecido, no podremos cambiar la cadena de bloques. De lo contrario, se pueden alterar tanto el plan como la propia cadena.
Sigamos con los contratos inteligentes
La decisión de los desarrolladores de Ethereum resulta muy extraña: parece como si estuvieran tendiendo una trampa a los programadores de contratos inteligentes. Tienes que ser muy experimentado o estar muy centrado (o ambos) para evitar que tú o tus inversores sufran grandes pérdidas de dinero de la noche a la mañana. Y este es otro de los motivos por los que el código de los contratos inteligentes exige una comprobación exhaustiva. Como parte de Kaspersky Token Offering Security, nuestros expertos analizan el código de los contratos inteligentes en busca de vulnerabilidades y características que no estén registradas. Para saber más sobre este tema, visita nuestra página Token Offering Security.