SOLIDITY ¿Qué es y cómo funciona Solidity para EVM?

Construye tu DApp en Aurora

NEAR_ES
4 min readSep 28, 2022

Autor: Juan Peña. Publicado 28/ Sep /2022

Hola, si estás aquí es porque te interesa saber cómo funcionan los Smart Contract en una blockchain EVM — compatible, comencemos con la base:

¿Qué es una blockchain EVM — compatible?

Una red compatible con la Ethereum Virtual Machine (Máquina Virtual de Ethereum).

¿Por qué la red de Ethereum usa una Máquina Virtual?

Los Smart Contract son una clase de “programas” que deben ser ejecutados, y se encuentran “almacenados” en muchas máquinas diferentes, imagínate almacenar y ejecutar un programa que tú no creaste directamente en tu computadora y que resulte ser algo malicioso y que le suceda algo a tu información personal, eliminamos ese riesgo al crear una máquina virtual completamente separada del sistema.

Por otro lado, como mencioné, no todas las máquinas son iguales, correr una máquina virtual nos asegura que el sistema que corra dichos programas sea completamente igual.

Entonces, así como necesitamos conocer diferentes lenguajes de programación para desarrollar en Windows, MacOS, Linux, y cualquier otro sistema operativo, igualmente necesitamos un lenguaje para escribir las “aplicaciones descentralizadas” en una blockchain EVM — compatible, dicho lenguaje es:

Solidity.

Solidity es un lenguaje de Programación Orientado a Objetos, tiene similitudes con C++, Python y JavaScript, aunque es un lenguaje tipado estático, lo cual puede parecer intimidante, si vienes de un lenguaje de tipado dinámico, como JavaScript.

Tipos de Datos:

1.- Básicos

Booleanos o valores lógicos:

  • true y false
  • Operadores Lógicos como: “!” (negación), “&&” (y), “||” (o), “==” (igualdad), “!=” (no igualdad), “<” (menor qué), “<=” (menor o igual qué), “>=” (mayor o igual qué), “>” (menor qué).

Números enteros:

  • int y uint (Con signo positivo o negativo y sin signo respectivamente).
  • int8 — int256 (Declarar una variable como int es igual a declararla int256)
  • uint8 — uint256 (Declarar una variable como uint es igual a declararla uint256)

Números de punto flotante:

  • Son números que pueden llevar decimales, pueden ser con signo o sin signo, pero generalmente no son usados para Smart Contracts en Solidity, pues no tienen soporte, siempre usaremos int o uint.

Direcciones:

  • Es un tipo de datos que puede almacenar una dirección de Ethereum, hasta 20B o 160 bits.

Arreglo de bytes de tamaño fijo.

2.- Complejos

Arreglos:

  • Conjunto de datos, generalmente del mismo tipo almacenados en una misma variable.

Mapas:

  • Mapas de tipo clave — valor.

Estructuras:

  • Los Structs son un tipo de datos especial, similar (Pero no igual) a lo que sería una Clase en otros lenguajes. Es el usuario el que añade los parámetros que lleva una Estructura.

Para desplegar un contrato, necesitamos un punto de acceso a -alguna- red de Aurora:

Recordemos que son 3:

  • Mainnet
  • Testnet
  • Localnet

Y los endpoints son:

NOTA: Puedes ver el estado de las redes aquí:

Entornos de desarrollo:

  • Hardhat
  • Truffle
  • Remix

Hardhat es un entorno de desarrollo para código EVM — compatible, nos permite hacer debug de código de Solidity, además de utilidades extra, tales como la consola interactiva JavaScript y tareas que se pueden personalizar.

Truffle es otro entorno de desarrollo ampliamente utilizado, generalmente es más simple que Hardhat y la instalación es muy sencilla.

Remix es un editor de código online, se conecta a nuestro Metamask, puede desplegar contratos e igual incluye una consola JavaScript que nos permite llamar funciones.

El constructor de un Smart Contract es una función opcional, que solo se va a ejecutar una vez, y eso será cuando el contrato se despliegue.

El mínimo código para crear un Smart Contract es:

Solidity tiene unas palabras reservadas para las variables, para indicarle un comportamiento especial:

  • memory
  • calldata
  • storage

memory debe ser usado al momento de declarar una variable que queramos almacenar en memoria temporalmente.

calldata es similar, aunque un poco más parecido a memory, los datos no se alteran ni se copian de manera innecesaria, pero los datos también pueden ser retornados de una función.

storage tiene una diferencia, y esa es que los datos se almacenan de manera persistente en la blockchain.

Tenemos ejemplos de utilidades que podemos incluir en nuestros contratos, e incluso de contratos que podemos extender para crear los nuestros en OpenZeppelin.

En futuros post podemos hablar de como evitar ciertas vulnerabilidades conocidas, tales como:

  • Desbordamiento de números enteros
  • Ataques de reentrada

Aprende a crear tu primer Smart Contract con el paso a paso en nuestra serie sobre Solidity.

Sobre el Autor.

Juan Enrique (jeph) es desarrollador de Blockchain y de Apps Móvil.

Síguelo en:

Medium: Juan Enrique (jeph)

Sigue los canales más importantes para estar informado sobre Aurora:

Twitter oficial de Aurora: @auroraisnear

Twitter Aurora Venezuela: @venezuelaaurora

Telegram Aurora Venezuela: @venezuelaaurora

--

--

NEAR_ES
NEAR_ES

Written by NEAR_ES

Espacio informativo y educativo sobre NEAR Protocol, Aurora, web3 y blockchain en Español para toda la comunidad

No responses yet

Write a response