Cómo funciona una pirámide en Ethereum

Emilio S.
jesucrypto
Published in
9 min readApr 9, 2020

En mi artículo ¿Es Bitcoin una pirámide? explico que, a pesar de que Bitcoin no es una pirámide, puede usarse para crear pirámides. Pues bien, lo mismo sucede con Ethereum. Ethereum es una blockchain parecida a Bitcoin, excepto que permite crear contratos inteligentes, los cuales pueden almacenar dinero y distribuirlo según unas reglas predefinidas. Esto es muy útil, entre otras cosas, para eliminar intermediarios.

¿Qué pasa entonces si creamos una pirámide sin intermediarios? Hoy me topé con una página web, miprimermillon.co, que promociona una pirámide, llamada CryptoHands, basada en un contrato inteligente de Ethereum. La página está llena de videos que promocionan las bondades de esta pirámide. El principal argumento de sus proponentes es que las pirámides fallan porque en cierto punto el dueño de la pirámide cambia las reglas del juego y se lleva toda la plata. Esto no es posible, arguyen, si se utiliza un contrato inteligente, puesto que estos contratos son inmutables.

En realidad, las pirámides son esquemas insostenibles en el tiempo. Va a llegar un momento en que la pirámide es demasiado grande y va a colapsar simplemente porque las últimas personas en entrar en la pirámide no van a poder conseguir a más personas que entren. Sin embargo, esta pirámide es especial porque, dado que los contratos inteligentes son públicos, podemos revisar cómo funciona esta pirámide por dentro: ¡qué emoción! Es como espiar a los delincuentes mientras se reparten el botín.

Como explica este video promocional, el contrato inteligente se encuentra fácilmente escribiendo su nombre en un explorador de bloques de Ethereum. El video insta a las personas con conocimientos de programación a revisar el contrato. Pues bien, eso fue lo que hice. Lo que sigue a continuación es bastante técnico; si prefieres puedes saltar a la conclusión.

La función por defecto

La función por defecto de un contrato de Ethereum (fallback function) es la función que se ejecuta cuando simplemente se envía dinero al contrato.

La primera parte de la función por defecto

Vamos por partes. Lo primero que hace esta función es determinar a qué nivel de precios corresponde el ether enviado; si no corresponde a ningún nivel de precios, falla con un error. Nótese de pasada el error de ortografía en el mensaje de error: ya aquí tenemos una mala señal.

Los niveles de precios

Aquí vemos los niveles de precios disponibles. Las personas deben empezar por el nivel 1, e ir progresando hasta el nivel 8, que es una salvajada. Pero sigamos.

la segunda parte de la función por defecto

En la segunda parte de la función por defecto pasan cosas interesantes que nos permiten entender a nivel general cómo funciona este contrato inteligente. Si el usuario está registrado, puede comprar el nivel correspondiente al dinero que envió; en caso contrario, obtenemos el identificador del referrer (es decir, de la persona que lo refirió) y registramos al usuario. Esto, por cierto, sólo se puede hacer si el usuario está comprando el nivel 1.

Esto permite dilucidar el esquema piramidal. Cada persona nueva que se inscribe tiene que decir quién la refirió, y esta información se almacena en el contrato inteligente para luego premiar al referrer.

La función de registrar usuarios nuevos

La función de registrar usuarios nuevos no tiene mucho de interesante porque simplemente crea un nuevo registro para el usuario que se está inscribiendo. Sin embargo, tiene una parte que vale la pena mencionar.

Los niveles tienen fecha de vencimiento

Cuando un usuario se registra, entra al nivel 1; sin embargo, esto no es para siempre porque los niveles tienen fecha de vencimiento. ¿Cuánto dura?

Tienes un año para ganar plata en cada nivel

Dura un año. Después de un año… hay que volver a pagar.

La función de comprar un nivel

Aquí ya estamos entrando a la carne del contrato. Esta función es llamada cuando un usuario registrado le envía dinero al contrato. La función verifica si el usuario existe, si ya compró todos los niveles antertiores… cosas así de poca monta. Y luego procede a fijar la fecha de vencimiento del nivel correspondiente:

¿puede uno ser tan miserable?

Si el usuario no había comprado este nivel antes, el vencimiento es en un año; sin embargo, si ya había comprado este nivel antes, la nueva fecha de vencimiento es un año después de la fecha en que se venció el nivel. En otras palabras, si se venció hace seis meses, comprar un nivel sólo da seis meses más. ¿Puede uno ser tan miserable en la vida?

Finalmente, después de actualizar la fecha de vencimiento, pasamos al meollo del asunto:

la función de pagarle al referrer

La función de pagarle al referrer

Apenas una persona compra un nuevo nivel, el dinero enviado le llega a al referrer. O bueno, a alguien. En esta función está la lógica que determina a quién se le paga.

El referrer del referrer del referrer del…

En esta primera parte, se determina qué tan arriba en el árbol de referrers va la plata. Si el usuario está comprando el nivel 1, va al referrer; si está comprando el nivel 2, va al referrer del referrer, también conocido como el referrer a la 2; nivel 3, referrer del referrer del referrer, o referrer a la 3; nivel 4, referrer a la 4; y aquí vuelve a empezar: nivel 5, referrer a la 1; 6, referrer a la 2; 7, referrer a la 3; y 8, referrer a la 4.

el patrón

Si no existe un referrer arriba en la pirámide, es porque ya llegamos al primero de todos: el patrón.

Espero que no hayas dejado vencer tu nivel

Si el referrer dejó vencer su nivel, o nunca lo compró, no va a recibir nada.

rinse and repeat

En lugar de eso, volvemos a repetir el proceso con los referrers del referrer. Es decir que si, por ejemplo yo estoy pagando el nivel 3, y mi referrer a la 3 no compró el nivel 3 o lo tiene vencido, vamos a verificar mi referrer a la 6; si éste tampoco, entonces mi referrer a la 9; y así hasta… hasta llegar al patrón.

send()? really?

Cuando por fin lleguemos a un referrer que haya comprado el nivel y no lo tenga vencido, le vamos a enviar la plata. Nótese, por favor, que se está usando la función send(), lo cual muestra un total desdén por las buenas prácticas de programación. Desde mayo de 2017 se recomienda usar transfer(), y desde diciembre de 2019 se recomienda usar call.value()(). send() no revierte la transacción si falla, y además utiliza una cantidad de gas fija, lo que significa que el envío podría fallar, y el dinero se quedaría atrapado en el contrato para siempre. Nótese que, a pesar de utilizar un booleano para almacenar si el envío fue exitoso o no, no se hace nada con eso.

El constructor

Una vez analizadas las funciones más importantes del contrato, enfoquémonos en el constructor, que es la función que se ejecuta cuando el contrato se despliega en la blockchain.

¿quién es ownerWallet?

En el constructor se crea el usuario inicial, es decir, el patrón. A diferencia de todos los demás usuarios que deben comprar niveles, el patrón ya los tiene todos; a diferencia de los demás usuarios, cuyos niveles se vencen al año, o incluso antes, los niveles del patrón se vencen en el timestamp 77777777777, es decir, en el año 4434. ¿Quién es este afortunado señor?

Lo que uno se esperaría es que el patrón sea la persona que haya desplegado el contrato. En ese caso, haríamos uso de msg.sender. Sin embargo, en lugar de eso, tenemos una variable llamada ownerWallet. ¿Quién es ownerWallet? Su definición no aparece por ningún lado en este contrato. Sin embargo,

Cryptohands hereda de Ownable

Cryptohands hereda de Ownable. La convención es que Ownable es un contrato que define unos modificadores genéricos que permiten que ciertas funciones sólo se ejecuten por parte de la persona que desplegó el contrato o quien ésta asigne. Sin embargo, estos modificadores no aparecen por ningún lado en el contrato Cryptohands. Esto está medio sospechoso.

Ownable es una fachada para esconder la variable ownerWallet

Ownable es una fachada para esconder la variable ownerWallet, la cual define una dirección de Ethereum que siempre va a ser el primer usuario de la pirámide independientemente de quién despliegue el contrato. ¿Por qué este procedimiento tan mañoso? No estoy seguro, la verdad. De pronto es una forma de poder desplegar el contrato de Cryptohands con una cuenta de Ethereum que no tenga casi fondos, y así ocultar cuánta plata gana el patrón.

¿Cuánta plata gana el patrón?

Ya vimos que el contrato está amañado a favor del patrón. Ahora es justo hacerse la pregunta de cuánta plata gana la cuenta de Ethereum 0xd5E9…8839, para ver si nuestras sospechas son o no infundadas.

Utilizando la API de Etherscan, obtuve una lista de todas las transacciones internas que ha recibido esta cuenta. Las transacciones internas son las que provienen de contratos inteligentes. Sumé todos los valores entrantes, y el resultado es 566.78 ETH, es decir, a los precios actuales, 376 millones de pesos colombianos.

Conclusión

Las pirámides son estructuras insostenibles en el largo plazo que no generan ningún valor para la sociedad. El dinero que recibes es el dinero que les quitas a las personas que están abajo tuyo en la pirámide; esas personas pusieron ese dinero porque tú las convenciste de que lo hicieran; y ahora les toca convencer a alguien más de que ponga dinero; el problema es que con cada iteración hay menos probabilidades de recuperarlo.

Además de todo esto, como vimos al analizar el contrato inteligente de Cryptohands, éste está diseñado para favorecer desmesuradamente al usuario número 1:

  • Si un usuario que está abajo tuyo compra un nivel que tú no has comprado, no recibes nada.
  • Si un usuario que está abajo tuyo compra un nivel que a ti se te venció, no recibes nada.
  • Si intentas renovar un nivel que se te venció hace seis meses, sólo te va a durar otros seis meses; si se te venció hace 11 meses, sólo te va a durar un mes; si se te venció hace más de un año, vas a tener que comprarlo dos veces.
  • Cuando compras un nivel, el dinero no siempre va a la persona que está inmediatamente arriba tuyo, sino que puede ir dos, tres, cuatro y hasta más escalones más arriba; fácilmente puede llegar al usuario número 1.
  • El usuario número 1 no necesita comprar niveles ni renovarlos; él sólo recibe plata sin haber puesto un peso.
  • El usuario número 1 siempre es el mismo independientemente de quién instale el contrato inteligente.

En conclusión, no participes de esta pirámide a menos que tú seas el usuario número 1.

Afortunadamente, hay una manera mucho más sencilla de ganar plata: compra ether, o bitcoin, guárdalo, espera a que se valorice, y véndelo en un par de años. Puede que tengas que esperar un buen tiempo, pero tarde o temprano, creo yo, estas monedas se van a valorizar mucho. Precisamente el hecho de que los esquemas fraudulentos se puedan auditar es lo que hace que la tecnología blockchain sea tan valiosa.

--

--

Emilio S.
jesucrypto

“Don’t ask the chicken about the chicken soup” L. von Trier