Tipos de datos primitivos
Tipos de datos que no necesitan ninguna importación, se manejan primitivamente en el contrato
Nos vamos a una ruta donde queramos crear nuestro proyecto y ponemos el siguiente comando:
stellar contract init primitivedata --name primitivedata
Borramos el contrato generado en lib.rs y ponemos el siguiente código
#![no_std]
use soroban_sdk::{contract, contractimpl, Env};
#[contract]
pub struct DataTypesContract;
#[contractimpl]
impl DataTypesContract {
// Suma dos números de 32 bits sin signo (u32).
pub fn add_u32(_env: Env, a: u32, b: u32) -> u32 {
a + b
}
// Suma dos números de 32 bits con signo (i32).
pub fn add_i32(_env: Env, a: i32, b: i32) -> i32 {
a + b
}
// Suma dos números de 64 bits sin signo (u64).
pub fn add_u64(_env: Env, a: u64, b: u64) -> u64 {
a + b
}
// Suma dos números de 64 bits sin signo (u64).
pub fn add_i64(_env: Env, a: u64, b: u64) -> u64 {
a + b
}
// Suma dos números de 128 bits sin signo (u128).
pub fn add_u128(_env: Env, a: u128, b: u128) -> u128 {
a + b
}
// Suma dos números de 128 bits con signo (i128).
pub fn add_i128(_env: Env, a: i128, b: i128) -> i128 {
a + b
}
// Invierte un valor booleano.
pub fn negate_bool(_env: Env, flag: bool) -> bool {
!flag
}
}
📌 Explicación general
Usa #![no_std], lo que indica que no usa la biblioteca estándar de Rust.
Importa módulos de soroban_sdk, necesarios para ejecutar el contrato en Soroban.
Define un contrato llamado
DataTypesContract
.Implementa varias funciones que realizan suma de números con diferentes tipos (
u32
,i32
,u64
,i64
,u128
,i128
).Incluye una función para negar un booleano.
🛠 Explicación de las funciones
Todas las funciones reciben _env: Env
, aunque no lo utilizan directamente. Es un requisito en Soroban para la ejecución de contratos.
1️⃣ Funciones de suma
Cada una de estas funciones suma dos números del mismo tipo y retorna el resultado.
Función
Tipo de datos
Rango de valores
add_u32
u32
(sin signo, 32 bits)
0 a 4,294,967,295
add_i32
i32
(con signo, 32 bits)
-2,147,483,648 a 2,147,483,647
add_u64
u64
(sin signo, 64 bits)
0 a 18,446,744,073,709,551,615
add_i64
i64
(con signo, 64 bits)
-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807
add_u128
u128
(sin signo, 128 bits)
0 a 340,282,366,920,938,463,463,374,607,431,768,211,455
add_i128
i128
(con signo, 128 bits)
-170,141,183,460,469,231,731,687,303,715,884,105,728 a 170,141,183,460,469,231,731,687,303,715,884,105,727
📌 Ejemplo de uso:
Si llamamos a add_u32(5, 10)
, devuelve 15
.
Si llamamos a add_i64(-20, 50)
, devuelve 30
.
2️⃣ negate_bool(_env: Env, flag: bool) -> bool
negate_bool(_env: Env, flag: bool) -> bool
✅ Invierte un valor booleano (true
↔ false
).
📌 Paso a paso:
Recibe un valor booleano (
flag
).Usa el operador lógico
!
para invertirlo.Retorna el valor opuesto.
📌 Ejemplo de uso:
Si llamamos negate_bool(true)
, devuelve false
.
Si llamamos negate_bool(false)
, devuelve true
.
📌 Resumen
Este contrato define funciones matemáticas y lógicas en Soroban:
Funciones de suma (
add_u32
,add_i32
,add_u64
,add_i64
,add_u128
,add_i128
): Permiten sumar números de diferentes tamaños y signos.Función booleana (
negate_bool
): Invierte el valor de un booleano.
Compilación del contrato
Ejecutamos lo siguiente:
Stellar contract build
Despliegue del contrato
Para Mac y Linux el salto de línea es con el carácter " \" y en Windows con el carácter " ´ "
Reemplaze el simbolo * por el respectivo carácter de salto de linea a su sistema operativo.
stellar contract deploy *
--wasm target/wasm32-unknown-unknown/release/primitivedata.wasm *
--source <Identity> *
--network testnet *
--alias primitivedata

Pruebas del contrato
Para Linux y Mac el salto de línea de la instrucción es con el carácter " \ " para Windows con el carácter " ` "
Función add_u32
stellar contract invoke *
--id <CONTRACT_ID> *
--source <Identity> *
--network testnet *
-- *
add_u32 *
--a 123 *
--b 123

Función negate_bool
stellar contract invoke *
--id <CONTRACT_ID> *
--source <identity> *
--network testnet *
-- *
negate_bool *
--flag true

Last updated
Was this helpful?