Tu primer Smart Contract
Tags: solidity, blockchain, tutorial
Published: 2023-03-10 18:44:00

Si has ojeado algo sobre la blockchain seguro has oído sobre los smart contracts, en este tutorial aprenderemos qué son, cuál es su estructura y cómo escribir un contrato al igual que algunos conceptos un poco más avanzados pero solo mencionando los, por ahora centrémonos en que es un contracto inteligente.

Un contrato lo conocemos como un documento donde dos partes o más acuerdan voluntariamente un pacto para obtener un beneficio mutuo  donde ambas partes  deben cumplir con su responsabilidad en este caso siempre existe un tercero el cual interviene con el incumplimiento de dichos acuerdos. Ahora la finalidad de un contrato inteligente es eliminar este tercero, aunque el término smart nos llame mucho la atención un contrato no es inteligente simplemente es código que ejecuta solamente lo que ahí se programó. 

Las Características de un contrato inteligente son 

- No necesitan un intermediario

- Se pueden ver y utilizarlos 

- Se puede decir que son funciones puras dado que para la misma entrada tendrán la misma salida.

- Siguiendo el principio de Open Close estos contratos pueden ser utilizados para crear nuevos contratos extendiendo una clase pero sin poder modificar el comportamiento de esta.
 
Ahora veremos las estructuras de un Contrato en Solidity, Solidity no es el único lenguaje para programar Smart Contracts pero sí el más usado 

- **La licencia**: Define qué permisos tendrá el usuario sobre el contrato, pues al ser código abierto, estará a la vista del público. Existen diversas licencias y dependiendo de la misma puede utilizar el contrato libremente.

- **Pragma**: Definen la versión del compilador que se usará. Puede ser una versión fija o un rango específico.( como buena práctica siempre se recomienda dar un rango de aproximadamente dos versiones )
- **Contract**: Esta keyword reservada se usa para indicar el cuerpo del contrato, por lo que todo el contenido debe ir dentro del bloque “contract”.

```ts
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract MyFirstContract {
    // ...
}
```

como en la programación orientada a objetos tenemos una función opcional constructor que se ejecutará una única vez cuando se cree el contrato 

```ts
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.0 <0.9.0;

contract MyFirstContract {
    string public helloWorld = "Hello World!";
    constructor(){}
}

```

Para este ejemplo utilizaremos [Remix](https://remix.ethereum.org/) un IDE para que viene con todo listo para empezar a crear tu primeros contratos 

Compilamos nuestro contrato 

![compile smart contract on Remix IDE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y37cqrdnx87y9kht6shg.png)

Ahora hacemos el deploy de nuestro contracto recuerda poner la variable publica para que puedas acceder a ella desde la interfaz

![Deploy smart contract on Remix IDE](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t77ouovpomzn6n6fulvp.png)

Hasta aquí llegó el tutorial ya sabemos la estructura básica de un contrato y como crear uno, en siguiente tutorial hablaremos un poco más a fondo, tipos de datos en Solidity, eventos entre otras cosas, Hasta pronto