Convertir una dirección a otros tipos
La Address es un tipo opaco que representa ya sea una cuenta externa "default" en la red Stellar, o un contrato (que también puede proporcionar lógica para cuentas externas personalizadas, consulta la documentación de autorización para más detalles). Para los contratos inteligentes normalmente no importa qué tipo de Address se utilice. Sin embargo, en algunos contextos es útil convertir Address a/de diferentes tipos de datos, como cadena o XDR. Las conversiones tienen propósitos claramente diferentes dependiendo de si ocurren en el propio contrato inteligente o en el código cliente.
Conversiones de cadena
El formato de cadena por defecto para Address es el llamado 'string key' (o 'strkey'), definido completamente en SEP-23. Para las cuentas externas por defecto, strkey siempre empieza con G y para todos los contratos empieza con C.
Conversiones de cadenas en los SDKs de cliente
Fuera de los contratos inteligentes, es conveniente representar Address como cadena la mayor parte del tiempo. Puede almacenarse en formatos de serialización de cadena como JSON y 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. Por lo tanto
- JavaScript
- Python
const StellarSdk = require("@stellar/stellar-sdk");
// Example Stellar address
const stellarAddress =
"GCM5WPR4DDR24FSAX5LIEM4J7AI3KOWJYANSXEPKYXCSZOTAYXE75AFN";
// Create an Address object from string
const address = new StellarSdk.Address(stellarAddress);
// Convert the address back to string
const addressToString = address.toString();
from stellar_sdk import Address
# Example Stellar address
stellar_address = "GCM5WPR4DDR24FSAX5LIEM4J7AI3KOWJYANSXEPKYXCSZOTAYXE75AFN"
# Create an Address object from string
address = Address(stellar_address)
# Convert the address back to string
address_to_string = address.address
Conversiones de cadenas en contratos inteligentes
Por lo general, se prefiere que los contratos operen directamente sobre el tipo Address. Las conversiones de cadenas pueden ser útiles para casos de uso especializados, como pasar los Address de Stellar hacia y desde otras cadenas.
use soroban_sdk::{Address, String, Env};
pub fn address_to_string(address: Address) -> String {
address.to_string()
}
pub fn address_from_string(strkey: String) -> Address {
Address::from_string(&strkey)
}
Address también puede crearse a partir de un literal de cadena, lo que puede ser útil para pruebas.
let test_address = Address::from_str(
&env,
"GCM5WPR4DDR24FSAX5LIEM4J7AI3KOWJYANSXEPKYXCSZOTAYXE75AFN",
);
Conversiones XDR
XDR es un formato de serialización binaria basado en esquema utilizado por la red Stellar. Se utiliza para todas las interacciones con la blockchain Stellar, como crear las transacciones, almacenar datos en el ledger, comunicar los resultados de las transacciones, etc. Los SDK Stellar proporcionan envoltorios tipados para todos los tipos de datos XDR de Stellar. Address se representa como tipo ScAddress, que puede envolverse dentro de ScVal, un tipo que representa cualquier tipo de contrato admitido por los contratos Stellar.
Conversiones XDR en los SDKs de cliente
En el lado cliente, las conversiones XDR son útiles para crear las transacciones y procesar los resultados de las transacciones.
- JavaScript
- Python
// Example Stellar address
const stellarAddress =
"GCM5WPR4DDR24FSAX5LIEM4J7AI3KOWJYANSXEPKYXCSZOTAYXE75AFN";
// Create an Address object from string
const address = new StellarSdk.Address(stellarAddress);
// Convert the Address to xdr.ScVal
const scVal = address.toScVal();
// Convert scVal structure to the binary format
const scValBuffer = scVal.toXDR("raw");
// Convert the Address to xdr.ScAddress
const scAddress = address.toScAddress();
from stellar_sdk import Address
# Example Stellar address
stellar_address = 'GBJCHUKZMTFSLOMNC7P4TS4VJJBTCYL3XKSOLXAUJSD56C4LHND5TWUC'
# Create an Address object
address = Address(stellar_address)
# Convert the Address object to an ScAddress
sc_address_xdr = address.to_xdr_sc_address()
Conversiones XDR en contratos inteligentes
Los contratos inteligentes no necesitan interactuar explícitamente con los tipos XDR, ya que todos los tipos de datos de contratos inteligentes se convierten automáticamente a XDR por el entorno de ejecución del contrato. Cada tipo de contrato, incluyendo Address, puede serializarse a bytes XDR. Esta conversión es útil, por ejemplo, para realizar hashing en los contratos inteligentes. También es posible convertir los bytes XDR serializados de nuevo a tipos de contrato, lo que puede ser útil en casos de uso específicos, como esquemas de autenticación personalizados.
Nota, que las conversiones XDR son una función avanzada y no son necesarias para la mayoría de los contratos inteligentes de Stellar.
use soroban_sdk::{
xdr::{FromXdr, ToXdr},
Address, Bytes, Env,
};
pub fn address_to_xdr_bytes(env: Env, address: Address) -> Bytes {
address.to_xdr(&env)
}
pub fn address_from_xdr_bytes(env: Env, bytes: Bytes) -> Address {
Address::from_xdr(&env, &bytes).unwrap()
}
Guías en esta categoría:
📄️ Convertir una dirección a otros tipos
Convertir una dirección a otros tipos
📄️ Convertir de bytes a otros tipos
Convertir de bytes a otros tipos
📄️ Convertir un ScVal a otro tipo
Convertir un ScVal a otro tipo
📄️ Convertir una cadena a otros tipos
Convertir una cadena a otros tipos