Desarrollo de Smart Contracts en Solidity
Introducción
Solidity es un lenguaje de programación de alto nivel utilizado para implementar contratos inteligentes en la blockchain de Ethereum. Fue influenciado por C++, Python y JavaScript y está diseñado para ser fácil de leer y entender. Los contratos inteligentes son programas que se ejecutan de manera autónoma en la blockchain y pueden controlar la transferencia de activos digitales.
Este documento proporciona una visión general de los conceptos clave y las características del lenguaje Solidity, incluyendo variables, constantes, ámbito, tipos, operaciones aritméticas, operaciones lógicas, operadores bit a bit, operaciones de comparación, sentencias condicionales, sentencias de repetición y funciones.
Variables
En Solidity, las variables son contenedores para almacenar datos. Se pueden declarar dentro de contratos, funciones o en cualquier ámbito de bloque.
Tipos de Variables
- State Variables: Declaradas fuera de cualquier función, son almacenadas en la blockchain.
- Local Variables: Declaradas dentro de funciones y solo existen mientras la función está siendo ejecutada.
- Global Variables: Variables especiales proporcionadas por la blockchain.
Constantes
Las constantes son variables cuyos valores no pueden ser cambiados después de su inicialización.
[crayon-6a617b48aae36855580220/]
Ámbito
El ámbito de una variable define la región del código en la que la variable es accesible. En Solidity, el ámbito puede ser:
- Público: Accesible dentro y fuera del contrato.
- Privado: Accesible solo dentro del contrato en el que está declarado.
- Interno: Accesible dentro del contrato y los contratos derivados.
- Externo: Accesible solo desde fuera del contrato.
Tipos
Tipos Simples
- Boolean: Representa valores
trueofalse. - Integer: Enteros con y sin signo (
int,uint). - Address: Representa direcciones de Ethereum.
Tipos Complejos
- Arrays: Colecciones de elementos del mismo tipo.
- Structs: Colecciones de elementos de diferentes tipos.
- Mappings: Asociaciones de clave-valor.
Variables de Entorno
Solidity proporciona variables globales que contienen información sobre la blockchain y las transacciones, como msg.sender, msg.value, block.number, etc.
Operaciones Aritméticas
Sumar
[crayon-6a617b48aae3b257296369/]
Restar
[crayon-6a617b48aae3e520718508/]
Multiplicar
uint product = a * b;
Dividir
uint quotient = a / b;
Resto
uint remainder = a % b;
Conversiones entre Sistemas Numéricos
Solidity permite conversiones entre diferentes tipos de datos numéricos:
int8 smallInt = int8(bigInt); uint8 smallUint = uint8(bigUint);
Operaciones Lógicas
And
bool a = true; bool b = false; bool result = a && b;
Or
bool result = a || b;
Not
bool result = !a;
Operadores Bit a Bit
- AND:
& - OR:
| - XOR:
^ - NOT:
~ - Shift Left:
<< - Shift Right:
>>
uint a = 4; // 0100 in binary uint b = 2; // 0010 in binary uint andResult = a & b; // 0000 uint orResult = a | b; // 0110 uint xorResult = a ^ b; // 0110 uint notResult = ~a; // 1011 uint shiftLeft = a << 1; // 1000 uint shiftRight = a >> 1; // 0010
Operaciones de Comparación
eq (Equal to – Igual a)
bool result = (a == b);
lt (Less than – Menos que)
bool result = (a < b);
gt (Greater than – Más que)
bool result = (a > b);
ge (Greater than or Equal to – Mayor o igual a)
bool result = (a >= b);
le (Less than or Equal to – Menor o igual a)
bool result = (a <= b);
ne (Not equal to – No es igual a)
bool result = (a != b);
Sentencias Condicionales
If
if (a > b) {
// Código
}
Else
if (a > b) {
// Código
} else {
// Código
}
ElseIf
if (a > b) {
// Código
} else if (a == b) {
// Código
} else {
// Código
}
Switch (No disponible en Solidity)
Solidity no soporta sentencias switch. En su lugar, se deben usar sentencias if-else.
Sentencias de Repetición
Bucle While
uint i = 0;
while (i < 10) {
i++;
}
Bucle Do-While
uint i = 0;
do {
i++;
} while (i < 10);
Bucle For
for (uint i = 0; i < 10; i++) {
// Código
}
Bucle Foreach (No disponible en Solidity)
Solidity no soporta bucles foreach. Se deben usar bucles for o while.
Funciones
Las funciones en Solidity son bloques de código reutilizables que pueden ser llamados desde otras partes del contrato.
function add(uint a, uint b) public pure returns (uint) {
return a + b;
}
Funciones Modificadoras
- Pure: Indica que la función no accede ni modifica el estado del contrato.
- View: Indica que la función no modifica el estado del contrato pero puede leerlo.
- Payable: Indica que la función puede recibir Ether.
Ejemplo integrador
[crayon-6a617b48aae40971147101/]
