Programación de Contratos Inteligentes con Solidity
Clase 9 de 27 • Curso de Prework para Desarrollo de Aplicaciones Blockchain
Resumen
Blockchain trajo consigo un nuevo paradigma de programación. Desarrollar en blockchain, es muy diferente al desarrollo de software tradicional. Debemos conocer muy bien algunas particularidades que lo hacen diferente para comprender qué tipo de proyectos podemos construir y cómo.
Bases del desarrollo blockchain
El desarrollo en blockchain posee tres características que lo hacen único:
- Inmutabilidad: toda la información que se guarda en blockchain es inmodificable por defecto. Salvo que el smart contract que guarda dicha información permita su modificación.
- Dinero programable: blockchain otorga la posibilidad de programar dinero. Determinar el flujo de montos económicos mediante código fuente.
- Código público: en blockchain todo es público, tanto el código fuente de los proyectos como la información de las transacciones que viajan hacia la red. Es importante tener en cuenta esto último a la hora de programar los contratos inteligentes, dado que todo es accesible por todos.
El contexto de desarrollo de software en web3 es muy distinto al web2. Esto requiere de un lenguaje de programación especial para este propósito.
Conceptos básicos de Solitity
Solidity es el lenguaje de programación por excelencia para desarrollar contratos inteligentes en blockchains como Ethereum. El mismo es orientado a objetos y de alto nivel, lo que lo convierte en un lenguaje bastante sencillo de aprender.
Descubre más en el Curso de Introducción a Solidity.
Que el mismo sea orientado a objetos permite que, de conocer previamente ese paradigma de programación, todo sea más intuitivo. Conceptos como propiedades, funciones, herencia, todo forma parte de Solidity.
Se lo considera de "alto nivel" debido a que es una capa de abstracción para programar en un lenguaje binario, mucho más complicado de entender para el ser humano, y que los programas sean ejecutados por la Ethereum Virtual Machine.
Todo programa desarrollado en blockchain se lo conoce con el nombre de smart contract, o contrato inteligente. Piezas de código capaces de resolver, casi, cualquier problema computacional.
La única limitación en el desarrollo de contratos que debes considerar, y que explorarás poco a poco en tu carrera, es el determinismo que blockchain demanda. Todo lo que ocurre en un contrato es determinista, no pueden ocurrir resultados distintos para un mismo input. Esto provoca que en blockchain no exista la aleatoriedad ni la comunicación con el exterior. Para esto se requiere de concepto más avanzado como lo son los oráculos; pero es algo más avanzado y no debes preocuparte de momento.
Blockchain es una gran base de datos. En todo momento, la misma posee un estado único y compartido por todos los nodos de la red. Solidity es capaz de acceder a ese estado y modificarlo o interactuar con este, dependiendo la lógica que haya sido programada en el contrato.
Estructura básica de un contrato inteligente con Solidity
La sintaxis de un contrato desarrollado con Solidity es una combinación de Javascript y C++. Observemos un contrato básico que permite guardar un número dentro del mismo:
``` // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.8.1 <0.8.19;
contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } } ```
Todo contrato en Solidity comienza con un comentario indicando la licencia del mismo, seguido por la versión del compilador de Solidity utilizando la palabra reservada, "pragma". Otra palabra reservada, "contract", podemos asociarla a "class" en la POO. Dentro del contrato, o la clase, encontrarás seguramente que es muy intuitivo comprender la lógica del programa y cómo estamos logrando persistir, obtener y modificar información de la blockchain.
Conclusión
Solidity es un lenguaje bastante ameno y que podrás aprender poco a poco para desarrollar tus primeros contratos. Por supuesto que la experiencia previa en cualquier otro lenguaje o paradigma de programación hará la tarea más fácil.
Y tú: ¿Ya tienes experiencia en Solidity?
Contribución creada por: Kevin Fiorentino (Platzi Contributor).