Comenzando a programar en Solidity con CryptoZombies


Vamos a comenzar a programar en Solidity, que es el lenguaje para escribir los contratos de Ethereum. Para ello existe un juego para aprender que se llama CryptoZombies que esta muy bien y es bastante entretenido.

 

1.- Todo contrato comienza con:

El codigo en Solidity va encansulado en contratos. Un contrato es el bloque fundamental de las aplicaciones de Ehtereum y tienen una version.

Todo codigo en solidty tiene para comenzar una “version pragma” que es la declaracion de la version del compilador. Esto hace que a futuro no se roma el codigo.

 

2.-  Variables de Estado y enteros.

Las variables de estado ( state variables) se almacenan en el contrato, esto significa que estan escritas en la cadena de bloques de Ethereum, podriamos pensar en ellas como escribiendo en base de datos.

  • unit – es un tipo de datos entero sin signo, esto significa que no puede ser negativo, debe ser siempre positivo.  unit es actualmente un aligas uint256 , podemos declarar otros como unit8, unit16, unit32,…
  • int – es un tipo de datos entero con signo.

Ejemplo:

 

3.- Operaciones matematicas en Solidity.

La operaciones mas comunes son sumas , restas , multiplicacion, division, resto, exponente.

  • Suma: x + y
  • Resta: x – y
  • Multiplicacione x*y
  • Division x/y
  • Resto:  x % y . => 13 % 5  = 3
  • Exponencial  x = y ** z  => 5 elevado a 2  = 25

 

 

4.- Estructuras

A veces nos hace falta trabajar con una estructura que tenga varias propiedades, para ello Solidity provee  ‘struct’ que nos va a permitir tener estructuras un poco mas complejas

[/crayon]
 

5.- Arrays

Para trabajar con colecciones podemos usar un array. Tenemos dos tipos de arrays fijos y dinamicos. Lo que se conoce como fixed arrays y dynamic arrays.

 

Tambien podemos crear un array de structs. En el caso anterior

 

Las variables se almacenan permanentemente en la blockchain. El crearlas dinamicamente nos permite almacenarlas como en una base de datos.
Podemos crear arrays como publicos y Solidity nos creara automaticamente un metodo getter para el.

Esto va a permitir que otros contratos puedan leer ( pero no escribir) en este array.

6.- Funciones basicas en Solidity

Declarar una funcionen Solidity es igual que en otros lenguajes.

Esta funcion llamada crearVehiculos se le pasa dos parametros . Por convencion se usa el escribir los parametros con underscore “_” para diferenciar de  constantes globales.

 

7.- Trabajando con estructuras y arrays

Dada la estructura anterior vamos a crear y añadir nuevos elementos

Tambien podemos

 

 

8 Funciones publicas y privadas

Las funciones en Solidity son publicas (public) por defecto. Esto significa que cualquiera ( o cualquier otro contrato) puede llamarla y ejecutar el su codigo.
Para evitar esto podemos usar funciones como privadas ( private) y en ese caso tendremos que añadir el underscore por convencion “_” al nombre de la funcion.

 

Ejemplo de funcion que devuelve un string

 

Sino cambia el estado lo normal es que la marquemos como view , si lo modifica entonces usaremos pure. La funcion de arriba podria quedar como

 

En el caso de tener una funcion en la que pasamos unos parametros y hacemos unos calculos y no leemos datos de la aplicacion se suele usar la funcion como pure

 

 

9 Eventos

Los eventos son la forma en la que nuestro contrato comunica que algo sucedió en la cadena de bloques a la interfaz de usuario, el cual puede estar ‘escuchando’ ciertos eventos y hacer algo cuando suceden.

Los eventos se declaran con la palabra event y el nombre del evento con los parametros

 

 

Ejemplo completo del juego de CRYPTOZOMBIES

 

Una vez que ya tenemos nuestro contrato completo necesitamos escribir una aplicacion de usuario en javascript para interacturar con el.

La libreria que tiene Ethereum es Web3.js

 

En vez de continuar os invito a que os conecteis al juego gratuito y que vayais leccion por leccion aprendiendo. Este es solo un nivel de los que tiene.

https://cryptozombies.io

 

Aqui os dejo mi crytozombie

https://share.cryptozombies.io/es/lesson/1/share/Daniel_Casta%C3%B1era_Garrido?id=Z29vZ2xlLW9hdXRoMnwxMTIyODU1NDg1MzkyNjUxODk2NTI%3D