Aprendiendo Solidity

Solidity — documentación de Solidity - UNKNOWNAunque es poco conocido en general, sí es muy conocido dentro de los programadores de la blockchain de criptomonedas, del mundo de Ehterum en concreto. Es el lenguaje de programación Solidity.

Y precisamente como todo el tema de blockchain está muy de moda, maneja mucho dinero y este lenguaje de programación es relativamente nuevo y poco conocido, si estudias solidity dicen las malas lenguas que encuentras trabajo seguro con sueldos muy por encima de la media de lo que cobra un programador.

Así que me puse a investigar y juguetear. No es que quiera cambiar de trabajo, pero en este mundillo de la programación, nunca está de más actualizarse y aprender cosas nuevas. El lenguaje en sí no es complejo, en vez de clases tiene contract o contratos. Estos contract tienen constructores, variables y funciones (métodos). Hay herencia, etc, etc. Poca cosa que a un programador extrañe.

Sin embargo, sí hay conceptos, no de la sintaxis en sí, que llaman la atención y que hacen que programar correctamente pueda ser más complejo que en otros lenguajes.

El primero es que el contrato, una vez hecho, se sube a la blockchain. Esto cuesta dinero. Y la blockchain es inmutable, es decir, una vez subido nuestro código a la blockchain, si detectamos un bug, no podemos editarlo para corregirlo ni borrarlo para reemplazarlo por otro nuevo. No queda más remedio que corregirlo en nuestro fuente original, volver a subirlo pagando y tratar de eliminar todas las referencias al contrato antiguo en las aplicaciones públicas que tengamos. El código con errores sigue subido y «vivo» en la blockchain, público y accesible. Así que el proceso de depuración de nuestro código cobra especial importancia.

Sí, es cierto que otras aplicaciones como las de bancos o en las que haya vida de personas en juego también requieren una depuración y testeo muy exhaustivo del código antes de ponerlo en producción. Pero en estos casos, si el código está en producción y detectas un bug, puedes retirarlo y reemplazarlo por código nuevo con el bug corregido. En la blockchain no es posible. Tu código erróneo sigue vivo y accesible para que alguien malintencionado pueda explotar ese bug.

Y el segundo punto llamativo. Nuestros contratos trabajan con la blockchain y guardan datos en la misma. Acceder a esos datos es gratis, pero modificarlos a añadirlos cuesta dinero, las tasas de las transacciones. Y si nuestro código se lía a hacer transacciones, la llamada a una función o método puede ser cara. Y el lenguaje no te deja claro, al menos para un novato que empieza, qué variables están en la blockchain por lo que cambiar su valor implica coste.

Y pongo un ejemplo tonto, un array declarado en el contrato se guarda en la blockchain. Si eliminamos un elemento del array y desplazamos los siguientes una posición antes por aquello de no dejarlos huecos, cada escritura en el array cuesta dinero. Así que la forma correcta es copiar el array en un array en memoria, modificarlo totalmente en memoria y luego, de una sola transacción, meterlo en la blockchain.

Así que en eso ando entretenido estos días, aprendiendo algo de solidity. El curso que estoy siguiendo es de zombies y gatitos 🙂

Esta entrada ha sido publicada en varios y etiquetada como , , , . Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.