String
Tipo de dato string que viene dentro de la libreria soroban
Los strings pueden pasarse a contratos y almacenes utilizando el tipo Bytes.
Tenga en cuenta que los bytes contenidos en los strings no se ajustan necesariamente a ninguna codificación de texto estándar, como ASCII o Unicode UTF-8. Son bytes sin interpretar. Se trata de bytes sin interpretar, y los usuarios que esperen una codificación determinada deberán aplicarla manualmente.
Nos vamos a una ruta donde queramos crear nuestro proyecto y ponemos el siguiente comando:
stellar contract init strings --name stringsBorramos el contrato generado en lib.rs y ponemos el siguiente código
#![no_std]
use soroban_sdk::{contract, contractimpl, vec, Env, String, Vec};
#[contract]
pub struct Strings;
#[contractimpl]
impl Strings {
// Crear un nuevo string
pub fn create_string(env: Env, text: String) -> String {
text
}
// Obtener la longitud de un string
pub fn get_length(env: Env, text: String) -> u32 {
text.len()
}
// Comparar dos strings
pub fn compare_strings(env: Env, text1: String, text2: String) -> bool {
text1 == text2
}
// detecta si un strig está vacio
pub fn is_empty(env: Env, text1: String) -> bool {
text1.is_empty()
}
/*está pendiente en las funcioalidades de soroban_sdk::String la funcionalidad directa
de apend o una cobre carga del operador +, por lo tanto usaremos un vector */
pub fn concatenate(env: Env, text1: String, text2: String) -> Vec<String> {
vec![&env, text1, text2]
}
}📌 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
Strings.Implementa funciones para crear, obtener la longitud, comparar, verificar si está vacío y concatenar strings.
Como Soroban no admite concatenación directa de strings (
+), se usa unVec<String>para concatenación.
🛠 Explicación de las funciones
Todas las funciones reciben env: Env, que es necesario para la ejecución en Soroban.
1️⃣ create_string(env: Env, text: String) -> String
create_string(env: Env, text: String) -> String✅ Crea un string y lo devuelve.
📌 Paso a paso:
Recibe un string como entrada.
Simplemente lo retorna.
📌 Ejemplo:
Si llamamos create_string("Hola"), devuelve "Hola".
2️⃣ get_length(env: Env, text: String) -> u32
get_length(env: Env, text: String) -> u32✅ Obtiene la cantidad de caracteres en un string.
📌 Paso a paso:
Recibe un string como entrada.
Usa
.len()para obtener su longitud.Retorna la cantidad de caracteres.
📌 Ejemplo:
Si llamamos get_length("Hola"), devuelve 4.
3️⃣ compare_strings(env: Env, text1: String, text2: String) -> bool
compare_strings(env: Env, text1: String, text2: String) -> bool✅ Compara si dos strings son iguales.
📌 Paso a paso:
Recibe dos strings como entrada.
Compara ambos usando
==.Retorna
truesi son iguales,falsesi no.
📌 Ejemplo:
Si llamamos compare_strings("Hola", "Hola"), devuelve true.
Si llamamos compare_strings("Hola", "Mundo"), devuelve false.
4️⃣ is_empty(env: Env, text1: String) -> bool
is_empty(env: Env, text1: String) -> bool✅ Verifica si un string está vacío.
📌 Paso a paso:
Recibe un string como entrada.
Usa
.is_empty()para verificar si tiene contenido.Retorna
truesi el string está vacío,falsesi tiene caracteres.
📌 Ejemplo:
Si llamamos is_empty(""), devuelve true.
Si llamamos is_empty("Hola"), devuelve false.
5️⃣ concatenate(env: Env, text1: String, text2: String) -> Vec<String>
concatenate(env: Env, text1: String, text2: String) -> Vec<String>✅ Une dos strings en un vector.
📌 Paso a paso:
Recibe dos strings como entrada.
Crea un
Vec<String>con ambos valores.Retorna el vector.
📌 Ejemplo:
Si llamamos concatenate("Hola", "Mundo"), devuelve ["Hola", "Mundo"].
🔹 Nota:
Soroban aún no soporta concatenación directa con +, por lo que se usa un vector para unir los valores.
📌 Resumen
Este contrato proporciona funciones útiles para manipular strings en Soroban:
create_string(): Retorna el string recibido.get_length(): Retorna la longitud del string.compare_strings(): Compara si dos strings son iguales.is_empty(): Verifica si un string está vacío.concatenate(): Une dos strings en un vector (ya que la concatenación directa no está disponible en Soroban).
Este contrato permite manejar textos dentro de la blockchain de manera eficiente. 🚀
Compilación del contrato
Ejecutamos lo siguiente:
Stellar contract buildDespliegue 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/strings.wasm *
--source developer *
--network testnet *
--alias strings
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óncreate_string
stellar contract invoke *
--id <CONTRACT_ID> *
--source <Identity> *
--network testnet *
-- *
create_string *
--text "Hello Soroban"
Función get_length
stellar contract invoke *
--id <CONTRACT_ID> *
--source <Identity> *
--network testnet *
-- *
get_length *
--text "Hello Soroban"
Función compare_strings
stellar contract invoke *
--id <CONTRACT_ID> *
--source <Identity> *
--network testnet *
-- *
compare_strings *
--text1 "Hello Soroban" *
--text2 "Hello Stellar" *
Función is_empty
stellar contract invoke *
--id <CONTRACT_ID> *
--source <Identity> *
--network testnet *
-- *
is_empty *
--text1 "Algún texto" 
Función concatenate
stellar contract invoke *
--id <CONTRACT_ID> *
--source <Identity> *
--network testnet *
-- *
concatenate *
--text1 "Algún texto" *
--text2 "Algún otro texto" 
Last updated
Was this helpful?

