Tipos Incorporados
Los tipos incorporados están disponibles para todos los contratos para su uso como entradas y salidas de funciones del contrato, y están definidos por el entorno y el Rust SDK.
Los tipos personalizados como estructuras, enumeraciones y uniones también están admitidos. Ve [Tipos Personalizados]. [Tipos Personalizados]: custom-types.mdx
Tipos Primitivos
Los siguientes tipos primitivos están admitidos:
Entero sin signo de 32 bits (u32
)
Entero con signo de 32 bits (i32
)
Entero sin signo de 64 bits (u64
)
Entero con signo de 64 bits (i64
)
Entero sin signo de 128 bits (u128
)
Entero con signo de 128 bits (i128
)
Bool (bool
)
Símbolo (Symbol
)
Los símbolos son cadenas pequeñas y eficientes de hasta 32 caracteres de longitud, limitadas a a-z
A-Z
0-9
_
que se codifican en enteros de 64 bits.
Los símbolos se utilizan principalmente para nombres de funciones y otros identificadores que se exportan en la API pública de un contrato. También se pueden usar donde sea que se necesiten cadenas cortas para mantener bajos los costos de recursos.
Bytes, Cadenas (Bytes
, BytesN
, String
)
Los arreglos de bytes y las cadenas se pueden pasar a contratos y almacenes usando el tipo Bytes
.
Para los arreglos de bytes de longitud fija, se puede usar BytesN
. Por ejemplo, las ID de contrato son arreglos de bytes de 32 bytes fijos y se representan como BytesN<32>
.
Ten en cuenta que los bytes contenidos en String
s no necesariamente se ajustan a ninguna codificación de texto estándar como ASCII o Unicode UTF-8. Son bytes sin interpretar y los usuarios que esperan una codificación particular deben imponer esa codificación manualmente.
Vec (Vec
)
Vec es un tipo de colección secuencial, indexable y de tamaño variable.
Los valores se almacenan en el entorno y están disponibles para el contrato a través de las funciones definidas en Vec. Los valores almacenados en el Vec se transmiten al entorno como RawVals, y cuando se recuperan del Vec se transmiten de vuelta y se convierten de RawVal de nuevo a su tipo original.
Los valores en un Vec no garantizan ser de ningún tipo específico y la conversión fallará si no son del tipo esperado. La mayoría de las funciones en Vec devuelven un Result debido a esto.
Mapa (Map
)
Mapa es un diccionario de clave-valor ordenado.
El mapa está ordenado por sus claves. Iterar un mapa es estable y siempre devuelve las claves y valores en el orden de las claves.
El mapa se almacena en el Host y está disponible para el Guest a través de las funciones definidas en Map. Los valores almacenados en el Map se transmiten al Host como RawVals, y cuando se recuperan del Map se transmiten de vuelta y se convierten de RawVal de nuevo a su tipo original.
Las claves y valores en un Map no garantizan ser del tipo K/V y la conversión fallará si no lo son. La mayoría de las funciones en Map devuelven un Result debido a esto.
Los mapas tienen como máximo una entrada por clave. Establecer un valor para una clave en el mapa que ya tiene un valor para esa clave reemplaza el valor.
Dirección (Address
)
La dirección es un identificador opaco universal para usar en contratos. Puede representar una cuenta Stellar 'clásica', una cuenta personalizada implementada en Soroban o simplemente un contrato arbitrario.
La dirección se puede usar como un argumento de entrada de la función del contrato (por ejemplo, para identificar al destinatario del pago), como una clave de datos (por ejemplo, para almacenar el saldo), como fuente de autenticación y autorización (por ejemplo, para autorizar una transferencia de token) etc.
Ve la documentación sobre autorización para más detalles sobre cómo usar el tipo Address
.