Saltar al contenido principal

Convertir una dirección a otros tipos

El Address es un tipo opaco que podría representar una "cuenta" en la red Stellar (es decir, un keypair) o un "contrato." Desde el punto de vista de Soroban, realmente no importa cuál sea. La variedad "cuenta" de estas direcciones se muestra típicamente como una dirección pública G..., y la variedad "contrato" se muestra típicamente como una dirección C.... Una dirección también puede mostrarse en otros formatos como un array de 32 bytes, una cadena o un tipo ScVal. Los SDK de Soroban proporcionan métodos que convierten fácilmente una dirección a cualquiera de estos tipos.

Dirección a bytesN

Los bytes son una forma más compacta y eficiente de almacenar datos en términos de optimización de almacenamiento y transmisión de datos. En situaciones donde necesitas almacenar o transmitir una dirección en un tamaño fijo, como para operaciones criptográficas o serialización de datos, necesitas convertir la dirección a un formato bytesN

use soroban_sdk::{Address, BytesN, Env, FromVal};

pub fn address_to_bytes32(env: &Env, address: Address) -> BytesN<32> {
let address_to_bytes: BytesN<32> = BytesN::from_val(env, &address.to_val());
address_to_bytes
}

Dirección a String

Al transferir datos entre diferentes sistemas o a través de una red, a menudo se requieren formatos basados en texto como JSON y formatos de cadena XML. Almacenar direcciones como cadenas en bases de datos puede simplificar el diseño de esquemas de bases de datos y consultas. Las cadenas son más fáciles de manipular y son más compatibles con interfaces de usuario y APIs.

use soroban_sdk::{Address, String, Env};

pub fn address_to_string(address: Address) -> String {
address.to_string()
}

Dirección a ScVal

Las direcciones a menudo se pasan como parámetros de función en contratos inteligentes de Soroban. Estas direcciones deben estar en formato ScVal porque la máquina virtual de Soroban procesa datos en este formato. De manera similar, si una función de contrato inteligente devuelve una dirección, se devolverá como un ScVal. Convertir hacia y desde ScVal asegura que puedes manejar adecuadamente estos valores de retorno.

use soroban_sdk::{Address, Val};

pub fn address_to_sc_val(address: Address) -> Val {
address.to_val()
}