Smart Contract

Smart Contract

Un SC no es otra cosa que un trozo de código almacenado en la blockchain con el cual podemos interactuar como si estuviese en nuestro PC local.

El contrato tiene una cuenta asociada, la cual está compuesta por 3 campos:

1. Saldo: Cantidad de ether que esa cuenta posee, esto es importante ya que con esa cuenta se harán los despliegues de contratos que cuestan ether, por lo que será esencial que la cuenta del contrato tenga saldo para poder realizar movimientos.
2. Almacenamiento: simplemente los datos almacenados para este contrato, cualquier dato que sea esencial para la interacción o funcionamiento del SC.
3. Código: este código esta compilado, por lo que reía imposible para nosotros poder leerlo, pero en cambio para el ordenador con el que interactuamos es su lenguaje natural.

Para poder crear los contratos existen lenguajes como por ejemplo solidity. Solidity es un lenguaje de programación muchas veces comparado con JavaScript por algunas de sus características, aun que tiene diferencias muy importantes.
Cuando escribimos código en solidity, tendremos que compilarlo y después de la compilación el código tendrá dos resultados, el primero será el Byte code que no es más que el código compilado a muy bajo nivel, para que se puede desplegar en la blockchain.
La otra parte que tendremos como resultado el el ABI de la aplicación, que el encargado de hacer la compilación de nuestro fronted.

Partes de un SC:

PRAGMA

Pragma una línea de código por la cual indicamos al SC que versión de solidity tiene que utilizar, esto es importante ya que, por ejemplo, de la 0.4.0 a la 0.5.0 puede haber cambios que afecten al contrato dejándolo inutilizable. La sintaxis es primero se pone "pragma" luego solidy y por ultimo la versión, esto se puede mejorar poniendo el carácter que se ve en la imagen, que lo que hace es indicar que obtenga la mejor versión de la tanda 0.8.0.

CONTRACT

Contract es la línia que inicializa el contrato, encapsulándolo entre corchetes, y así limitarlo.

STRING

String es la variable de tipo texto muy común en programación orientada a objetos, esta variable solo puede almacenar caracteres de texto (números no). La sintaxis de sting es primero el tipo de variables (string), luego la visibilidad, el nombre del string y por ultimo podrías darle algún valor de texto si es que lo quisieras (... = 'texto de ejemplo').

UINTS

Uints son las variables que almacenan números, hay varios tipos, los mas comunes son los uint, unit256, unit8, uint16... Su sintaxis es primero el tipo de unit que vas a utilizar, luego la visibilidad, a continuación el nombre de la variable y por ultimo podrías igualarla a algún valor numerito si es que lo quieres (... = 1234;).

ADDRESS

Address es una variables que puede contener en su interior una lista alfanumérica de 20 bytes, es un tipo de variables que no hay en otros lenguajes, esto es porque solidity esta diseñado paro ejecutar SC y es imprescindible las address si queremos enviar o recibir ETH.

STRUCT

Struct sirve para crear nuestras propias variables complejas, esto lo que quiere decir es que la variable struct a su vez la componen varias variables (address, string, uint...). su sintaxis es la siguiente "struct nombre_struct { tipo1 nombre; tipo2 nombre2...}."

MAPPING

El tipo mapping se representa con ¨mapping(_KeyType => _KeyValue)¨. Mapping es un tipo de variable que asocia una tipo de variable con otro y se utilizan con frecuencia para asociar direcciones de Ethereum únicas (address) con tipos de valores asociados.

MODIFIER

Un modificador no es otra cosa que un condicional que se aplica a las funciones, su sintaxis es algo más compleja que las variables anteriormente vistas ¨modifier nombre_modifier () { require (condicion); _; }¨. Al final del modifier siempre hay que poner "_;" ya que la barra se sustituirá por la función a la que se lo pongamos.

FUNTION

Una función, como en otros lenguajes, es un trabajo concreto que queremos ejecutar. Una función esta compuesta por 1 o mas líneas de código que se ejecutaran cuando se llame a dicha función. Su sintaxis es ¨function nombre_function (entrada de datos) visibilidad modificadores otras opciones{ contenido de la función})¨.